'use strict';
exports.__esModule = true;
var _Mesh2 = require('./Mesh');
var _Mesh3 = _interopRequireDefault(_Mesh2);
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
function _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return call && (typeof call === "object" || typeof call === "function") ? call : self; }
function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function, not " + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; }
/**
* The Plane allows you to draw a texture across several points and them manipulate these points
*
*```js
* for (let i = 0; i < 20; i++) {
* points.push(new PIXI.Point(i * 50, 0));
* };
* let Plane = new PIXI.Plane(PIXI.Texture.fromImage("snake.png"), points);
* ```
*
* @class
* @extends PIXI.mesh.Mesh
* @memberof PIXI.mesh
*
*/
var Plane = function (_Mesh) {
_inherits(Plane, _Mesh);
/**
* @param {PIXI.Texture} texture - The texture to use on the Plane.
* @param {number} verticesX - The number of vertices in the x-axis
* @param {number} verticesY - The number of vertices in the y-axis
*/
function Plane(texture, verticesX, verticesY) {
_classCallCheck(this, Plane);
/**
* Tracker for if the Plane is ready to be drawn. Needed because Mesh ctor can
* call _onTextureUpdated which could call refresh too early.
*
* @member {boolean}
* @private
*/
var _this = _possibleConstructorReturn(this, _Mesh.call(this, texture));
_this._ready = true;
_this.verticesX = verticesX || 10;
_this.verticesY = verticesY || 10;
_this.drawMode = _Mesh3.default.DRAW_MODES.TRIANGLES;
_this.refresh();
return _this;
}
/**
* Refreshes plane coordinates
*
*/
Plane.prototype._refresh = function _refresh() {
var texture = this._texture;
var total = this.verticesX * this.verticesY;
var verts = [];
var colors = [];
var uvs = [];
var indices = [];
var segmentsX = this.verticesX - 1;
var segmentsY = this.verticesY - 1;
var sizeX = texture.width / segmentsX;
var sizeY = texture.height / segmentsY;
for (var i = 0; i < total; i++) {
var x = i % this.verticesX;
var y = i / this.verticesX | 0;
verts.push(x * sizeX, y * sizeY);
uvs.push(x / segmentsX, y / segmentsY);
}
// cons
var totalSub = segmentsX * segmentsY;
for (var _i = 0; _i < totalSub; _i++) {
var xpos = _i % segmentsX;
var ypos = _i / segmentsX | 0;
var value = ypos * this.verticesX + xpos;
var value2 = ypos * this.verticesX + xpos + 1;
var value3 = (ypos + 1) * this.verticesX + xpos;
var value4 = (ypos + 1) * this.verticesX + xpos + 1;
indices.push(value, value2, value3);
indices.push(value2, value4, value3);
}
// console.log(indices)
this.vertices = new Float32Array(verts);
this.uvs = new Float32Array(uvs);
this.colors = new Float32Array(colors);
this.indices = new Uint16Array(indices);
this.indexDirty = true;
this.multiplyUvs();
};
/**
* Clear texture UVs when new texture is set
*
* @private
*/
Plane.prototype._onTextureUpdate = function _onTextureUpdate() {
_Mesh3.default.prototype._onTextureUpdate.call(this);
// wait for the Plane ctor to finish before calling refresh
if (this._ready) {
this.refresh();
}
};
return Plane;
}(_Mesh3.default);
exports.default = Plane;
//# sourceMappingURL=Plane.js.map