UNPKG

konva

Version:

<p align="center"> <img src="https://raw.githubusercontent.com/konvajs/konvajs.github.io/master/apple-touch-icon-180x180.png" alt="Konva logo" height="180" /> </p>

130 lines (129 loc) 5.05 kB
"use strict"; var __extends = (this && this.__extends) || (function () { var extendStatics = function (d, b) { extendStatics = Object.setPrototypeOf || ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) || function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; }; return extendStatics(d, b); }; return function (d, b) { extendStatics(d, b); function __() { this.constructor = d; } d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __()); }; })(); Object.defineProperty(exports, "__esModule", { value: true }); var Util_1 = require("../Util"); var Factory_1 = require("../Factory"); var Shape_1 = require("../Shape"); var Animation_1 = require("../Animation"); var Validators_1 = require("../Validators"); var Global_1 = require("../Global"); var Sprite = (function (_super) { __extends(Sprite, _super); function Sprite(config) { var _this = _super.call(this, config) || this; _this._updated = true; _this.anim = new Animation_1.Animation(function () { 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(); }); return _this; } Sprite.prototype._sceneFunc = function (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); } } }; Sprite.prototype._hitFunc = function (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); }; Sprite.prototype._useBufferCanvas = function () { return ((this.hasShadow() || this.getAbsoluteOpacity() !== 1) && this.hasStroke()); }; Sprite.prototype._setInterval = function () { var that = this; this.interval = setInterval(function () { that._updateIndex(); }, 1000 / this.frameRate()); }; Sprite.prototype.start = function () { if (this.isRunning()) { return; } var layer = this.getLayer(); this.anim.setLayers(layer); this._setInterval(); this.anim.start(); }; Sprite.prototype.stop = function () { this.anim.stop(); clearInterval(this.interval); }; Sprite.prototype.isRunning = function () { return this.anim.isRunning(); }; Sprite.prototype._updateIndex = function () { 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); } }; return Sprite; }(Shape_1.Shape)); exports.Sprite = Sprite; Sprite.prototype.className = 'Sprite'; 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, Validators_1.getNumberValidator()); Factory_1.Factory.addGetterSetter(Sprite, 'frameRate', 17, Validators_1.getNumberValidator()); Factory_1.Factory.backCompat(Sprite, { index: 'frameIndex', getIndex: 'getFrameIndex', setIndex: 'setFrameIndex' }); Util_1.Collection.mapMethods(Sprite);