113 lines
3.9 KiB
JavaScript
113 lines
3.9 KiB
JavaScript
"use strict";
|
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
exports.Sprite = void 0;
|
|
const Factory_1 = require("../Factory");
|
|
const Shape_1 = require("../Shape");
|
|
const Animation_1 = require("../Animation");
|
|
const Validators_1 = require("../Validators");
|
|
const Global_1 = require("../Global");
|
|
class Sprite extends Shape_1.Shape {
|
|
constructor(config) {
|
|
super(config);
|
|
this._updated = true;
|
|
this.anim = new Animation_1.Animation(() => {
|
|
var updated = this._updated;
|
|
this._updated = false;
|
|
return updated;
|
|
});
|
|
this.on('animationChange.konva', function () {
|
|
this.frameIndex(0);
|
|
});
|
|
this.on('frameIndexChange.konva', function () {
|
|
this._updated = true;
|
|
});
|
|
this.on('frameRateChange.konva', function () {
|
|
if (!this.anim.isRunning()) {
|
|
return;
|
|
}
|
|
clearInterval(this.interval);
|
|
this._setInterval();
|
|
});
|
|
}
|
|
_sceneFunc(context) {
|
|
var anim = this.animation(), index = this.frameIndex(), ix4 = index * 4, set = this.animations()[anim], offsets = this.frameOffsets(), x = set[ix4 + 0], y = set[ix4 + 1], width = set[ix4 + 2], height = set[ix4 + 3], image = this.image();
|
|
if (this.hasFill() || this.hasStroke()) {
|
|
context.beginPath();
|
|
context.rect(0, 0, width, height);
|
|
context.closePath();
|
|
context.fillStrokeShape(this);
|
|
}
|
|
if (image) {
|
|
if (offsets) {
|
|
var offset = offsets[anim], ix2 = index * 2;
|
|
context.drawImage(image, x, y, width, height, offset[ix2 + 0], offset[ix2 + 1], width, height);
|
|
}
|
|
else {
|
|
context.drawImage(image, x, y, width, height, 0, 0, width, height);
|
|
}
|
|
}
|
|
}
|
|
_hitFunc(context) {
|
|
var anim = this.animation(), index = this.frameIndex(), ix4 = index * 4, set = this.animations()[anim], offsets = this.frameOffsets(), width = set[ix4 + 2], height = set[ix4 + 3];
|
|
context.beginPath();
|
|
if (offsets) {
|
|
var offset = offsets[anim];
|
|
var ix2 = index * 2;
|
|
context.rect(offset[ix2 + 0], offset[ix2 + 1], width, height);
|
|
}
|
|
else {
|
|
context.rect(0, 0, width, height);
|
|
}
|
|
context.closePath();
|
|
context.fillShape(this);
|
|
}
|
|
_useBufferCanvas() {
|
|
return super._useBufferCanvas(true);
|
|
}
|
|
_setInterval() {
|
|
var that = this;
|
|
this.interval = setInterval(function () {
|
|
that._updateIndex();
|
|
}, 1000 / this.frameRate());
|
|
}
|
|
start() {
|
|
if (this.isRunning()) {
|
|
return;
|
|
}
|
|
var layer = this.getLayer();
|
|
this.anim.setLayers(layer);
|
|
this._setInterval();
|
|
this.anim.start();
|
|
}
|
|
stop() {
|
|
this.anim.stop();
|
|
clearInterval(this.interval);
|
|
}
|
|
isRunning() {
|
|
return this.anim.isRunning();
|
|
}
|
|
_updateIndex() {
|
|
var index = this.frameIndex(), animation = this.animation(), animations = this.animations(), anim = animations[animation], len = anim.length / 4;
|
|
if (index < len - 1) {
|
|
this.frameIndex(index + 1);
|
|
}
|
|
else {
|
|
this.frameIndex(0);
|
|
}
|
|
}
|
|
}
|
|
exports.Sprite = Sprite;
|
|
Sprite.prototype.className = 'Sprite';
|
|
(0, Global_1._registerNode)(Sprite);
|
|
Factory_1.Factory.addGetterSetter(Sprite, 'animation');
|
|
Factory_1.Factory.addGetterSetter(Sprite, 'animations');
|
|
Factory_1.Factory.addGetterSetter(Sprite, 'frameOffsets');
|
|
Factory_1.Factory.addGetterSetter(Sprite, 'image');
|
|
Factory_1.Factory.addGetterSetter(Sprite, 'frameIndex', 0, (0, Validators_1.getNumberValidator)());
|
|
Factory_1.Factory.addGetterSetter(Sprite, 'frameRate', 17, (0, Validators_1.getNumberValidator)());
|
|
Factory_1.Factory.backCompat(Sprite, {
|
|
index: 'frameIndex',
|
|
getIndex: 'getFrameIndex',
|
|
setIndex: 'setFrameIndex',
|
|
});
|