Subversion Repository Public Repository

Nextrek

Diff Revisions 1084 vs 1086 for /s2s/data/BF1FEA5EK5664A49F7S92A5E94D58BE44A4A.json

Diff revisions: vs.
  @@ -1 +1,18 @@
1 - {"uid":"BF1FEA5EK5664A49F7S92A5E94D58BE44A4A","isLoaded":true,"lastModificationTime":1427731012686,"items":{"name":"Component_FrameAnimation","type":"game_script","order":8,"content":"# ===================================================================\n#\n# Script: Component_FrameAnimation\n#\n# $$COPYRIGHT$$\n#\n# ===================================================================\n# FIXME: This class still follows deprecated rules, should be fixed.\nclass Component_FrameAnimation extends gs.Component_Animation\n ###*\n * Executes a classic image-frame animation defined in Database. The image in regular\n * contains multiple sub-images (frames) which are then animated\n * by modifying the <b>srcRect</b> property of the game object.\n *\n * @module gs\n * @class Component_FrameAnimation\n * @extends gs.Component_Animation\n * @memberof gs\n * @constructor\n * @param {Object} record - The animation database-record.\n ###\n constructor: (record) ->\n super\n \n ###*\n * The database record.\n * @property record\n * @type Object\n ###\n @record = null\n \n ###*\n * The name of the animation defined in Database.\n * @property name\n * @type string\n ###\n @name = null\n \n ###*\n * The amount of frames on x-axis.\n * @property framesX\n * @type number\n ###\n @framesX = 1\n \n ###*\n * The amount of frames on y-axis.\n * @property framesY\n * @type number\n ###\n @framesY = 1\n \n ###*\n * The frame-range to animation like only Frame 4 - 6 for example.\n * @property frameRange\n * @type gs.Range\n ###\n @frameRange = { start: 0, end: 0 }\n \n ###*\n * The frame-range used if the animation gets repeated.\n * @property repetitionFrameRange\n * @type gs.Range\n ###\n @repetitionFrameRange = @frameRange\n \n ###*\n * The amount of frames to animate.\n * @property frameCount\n * @type number\n * @protected\n ###\n @frameCount = 1\n \n ###*\n * The graphic used as image for the animation.\n * @property graphic\n * @type Object\n ###\n @graphic = null\n \n ###*\n * Indicates if the animation repeats.\n * @property repeat\n * @type boolean\n ###\n @repeat = no\n \n ###*\n * The position of the animation on the target-object.\n * @property framesY\n * @type gs.AnimationPosition\n ###\n @position = 0\n\n ###*\n * The duration of a single frame.\n * @property frameDuration\n * @type number\n * @protected\n ###\n @frameDuration = 10\n \n ###*\n * A frame-counter needed for animation-process.\n * @property frameDuration\n * @type number\n * @protected\n ###\n @frameCounter = 0\n \n ###*\n * The duration of the animation.\n * @property frameDuration\n * @type number\n ###\n @duration = 10\n \n ###*\n * Indicates if the animation is currently running.\n * @property isRunning\n * @type boolean\n ###\n @isRunning = no\n \n ###*\n * Stores frame/pattern-offset.\n * @property patternOffset\n * @type number\n * @protected\n ###\n @patternOffset = @frameRange.start\n \n ###*\n * Stores current frame/pattern\n * @property patternOffset\n * @type number\n * @protected\n ###\n @pattern = @patternOffset\n \n ###*\n * Indicates if its still the first run of the animation.\n * @property firstRun\n * @type boolean\n * @protected\n ###\n @firstRun = yes\n \n if record?\n @refresh(record)\n @start()\n \n ###*\n * Serializes the frame-animation into a data-bundle.\n *\n * @method toDataBundle\n ### \n toDataBundle: ->\n name: @name,\n framesX: @framesX,\n framesY: @framesY,\n frameRange: @frameRange,\n repetitionFrameRange: @repetitionFrameRange,\n frameCount: @frameCount,\n graphic: @graphic,\n repeat: @repeat,\n position: @position,\n frameDuration: @frameDuration,\n frameCounter: @frameCounter,\n duration: @duration,\n isRunning: @isRunning,\n patternOffset: @patternOffset,\n pattern: @pattern,\n firstRun: @firstRun\n \n ###*\n * Refreshes the animation from the specified database-record.\n *\n * @method refresh\n * @param {Object} record - The animation database-record.\n ### \n # FIXME: Is that method still in use?\n refresh: (record) ->\n ###*\n * The images to animate through.\n * @property images\n * @type string[]\n ###\n @name = record.name\n @framesX = record.framesX || 1\n @framesY = record.framesY || 1\n @frameRange = { start: Math.min(record.frameRange.start, record.frameRange.end), end: Math.max(record.frameRange.start, record.frameRange.end) }\n @repetitionFrameRange = if record.useRepetitionFrameRange and record.repetitionFrameRange? then record.repetitionFrameRange else @frameRange\n @frameCount = (@frameRange.end - @frameRange.start) + 1\n @graphic = record.graphic\n @repeat = record.repeat || no\n @position = record.position\n\n @frameDuration = if record.duration? then Math.round(record.duration / @frameCount) else 10\n @frameCounter = 0\n @duration = record.duration || 10\n @isRunning = no\n @patternOffset = @frameRange.start\n @pattern = @patternOffset\n @firstRun = yes\n \n ###*\n * Starts the frame-animation.\n *\n * @method start\n ### \n start: (callback) ->\n @callback = callback\n @isRunning = yes\n @firstRun = yes\n @frameCounter = 0\n @frameCount = (@frameRange.end - @frameRange.start) + 1\n @frameDuration = Math.round(@duration / @frameCount)\n @patternOffset = @frameRange.start\n \n ###*\n * Updates the frame-animation.\n *\n * @method update\n ###\n update: ->\n super\n if not @isRunning then return\n \n if @frameCounter >= @duration\n if @repeat\n @firstRun = no\n @frameCounter = 0\n @frameCount = (@repetitionFrameRange.end - @repetitionFrameRange.start) + 1\n @frameDuration = Math.ceil(@duration / @frameCount)\n @patternOffset = @repetitionFrameRange.start\n else\n @isRunning = no\n @onFinish?(this)\n @callback?(@object, this)\n return\n\n @pattern = @patternOffset + Math.floor(@frameCounter / @frameDuration) \n @frameCounter++\n \n if @object?\n bitmap = @object.bitmap || ResourceManager.getBitmap(\"#{@object.imageFolder||\"Graphics/Pictures\"}/#{@object.image}\")\n \n if bitmap?\n frameWidth = Math.floor(bitmap.width / @framesX)\n frameHeight = Math.floor(bitmap.height / @framesY)\n column = @pattern % @framesX\n row = Math.floor(@pattern / @framesX)\n @object.srcRect.set(column * frameWidth, row * frameHeight, frameWidth, frameHeight)\n @object.dstRect.width = @object.srcRect.width\n @object.dstRect.height = @object.srcRect.height\n \n\nwindow.Component_FrameAnimation = Component_FrameAnimation\ngs.Component_FrameAnimation = Component_FrameAnimation","compiledContent":"var Component_FrameAnimation,\n extend = function(child, parent) { for (var key in parent) { if (hasProp.call(parent, key)) child[key] = parent[key]; } function ctor() { this.constructor = child; } ctor.prototype = parent.prototype; child.prototype = new ctor(); child.__super__ = parent.prototype; return child; },\n hasProp = {}.hasOwnProperty;\n\nComponent_FrameAnimation = (function(superClass) {\n extend(Component_FrameAnimation, superClass);\n\n\n /**\n * Executes a classic image-frame animation defined in Database. The image in regular\n * contains multiple sub-images (frames) which are then animated\n * by modifying the <b>srcRect</b> property of the game object.\n *\n * @module gs\n * @class Component_FrameAnimation\n * @extends gs.Component_Animation\n * @memberof gs\n * @constructor\n * @param {Object} record - The animation database-record.\n */\n\n function Component_FrameAnimation(record) {\n Component_FrameAnimation.__super__.constructor.apply(this, arguments);\n\n /**\n * The database record.\n * @property record\n * @type Object\n */\n this.record = null;\n\n /**\n * The name of the animation defined in Database.\n * @property name\n * @type string\n */\n this.name = null;\n\n /**\n * The amount of frames on x-axis.\n * @property framesX\n * @type number\n */\n this.framesX = 1;\n\n /**\n * The amount of frames on y-axis.\n * @property framesY\n * @type number\n */\n this.framesY = 1;\n\n /**\n * The frame-range to animation like only Frame 4 - 6 for example.\n * @property frameRange\n * @type gs.Range\n */\n this.frameRange = {\n start: 0,\n end: 0\n };\n\n /**\n * The frame-range used if the animation gets repeated.\n * @property repetitionFrameRange\n * @type gs.Range\n */\n this.repetitionFrameRange = this.frameRange;\n\n /**\n * The amount of frames to animate.\n * @property frameCount\n * @type number\n * @protected\n */\n this.frameCount = 1;\n\n /**\n * The graphic used as image for the animation.\n * @property graphic\n * @type Object\n */\n this.graphic = null;\n\n /**\n * Indicates if the animation repeats.\n * @property repeat\n * @type boolean\n */\n this.repeat = false;\n\n /**\n * The position of the animation on the target-object.\n * @property framesY\n * @type gs.AnimationPosition\n */\n this.position = 0;\n\n /**\n * The duration of a single frame.\n * @property frameDuration\n * @type number\n * @protected\n */\n this.frameDuration = 10;\n\n /**\n * A frame-counter needed for animation-process.\n * @property frameDuration\n * @type number\n * @protected\n */\n this.frameCounter = 0;\n\n /**\n * The duration of the animation.\n * @property frameDuration\n * @type number\n */\n this.duration = 10;\n\n /**\n * Indicates if the animation is currently running.\n * @property isRunning\n * @type boolean\n */\n this.isRunning = false;\n\n /**\n * Stores frame/pattern-offset.\n * @property patternOffset\n * @type number\n * @protected\n */\n this.patternOffset = this.frameRange.start;\n\n /**\n * Stores current frame/pattern\n * @property patternOffset\n * @type number\n * @protected\n */\n this.pattern = this.patternOffset;\n\n /**\n * Indicates if its still the first run of the animation.\n * @property firstRun\n * @type boolean\n * @protected\n */\n this.firstRun = true;\n if (record != null) {\n this.refresh(record);\n this.start();\n }\n }\n\n\n /**\n * Serializes the frame-animation into a data-bundle.\n *\n * @method toDataBundle\n */\n\n Component_FrameAnimation.prototype.toDataBundle = function() {\n return {\n name: this.name,\n framesX: this.framesX,\n framesY: this.framesY,\n frameRange: this.frameRange,\n repetitionFrameRange: this.repetitionFrameRange,\n frameCount: this.frameCount,\n graphic: this.graphic,\n repeat: this.repeat,\n position: this.position,\n frameDuration: this.frameDuration,\n frameCounter: this.frameCounter,\n duration: this.duration,\n isRunning: this.isRunning,\n patternOffset: this.patternOffset,\n pattern: this.pattern,\n firstRun: this.firstRun\n };\n };\n\n\n /**\n * Refreshes the animation from the specified database-record.\n *\n * @method refresh\n * @param {Object} record - The animation database-record.\n */\n\n Component_FrameAnimation.prototype.refresh = function(record) {\n\n /**\n * The images to animate through.\n * @property images\n * @type string[]\n */\n this.name = record.name;\n this.framesX = record.framesX || 1;\n this.framesY = record.framesY || 1;\n this.frameRange = {\n start: Math.min(record.frameRange.start, record.frameRange.end),\n end: Math.max(record.frameRange.start, record.frameRange.end)\n };\n this.repetitionFrameRange = record.useRepetitionFrameRange && (record.repetitionFrameRange != null) ? record.repetitionFrameRange : this.frameRange;\n this.frameCount = (this.frameRange.end - this.frameRange.start) + 1;\n this.graphic = record.graphic;\n this.repeat = record.repeat || false;\n this.position = record.position;\n this.frameDuration = record.duration != null ? Math.round(record.duration / this.frameCount) : 10;\n this.frameCounter = 0;\n this.duration = record.duration || 10;\n this.isRunning = false;\n this.patternOffset = this.frameRange.start;\n this.pattern = this.patternOffset;\n return this.firstRun = true;\n };\n\n\n /**\n * Starts the frame-animation.\n *\n * @method start\n */\n\n Component_FrameAnimation.prototype.start = function(callback) {\n this.callback = callback;\n this.isRunning = true;\n this.firstRun = true;\n this.frameCounter = 0;\n this.frameCount = (this.frameRange.end - this.frameRange.start) + 1;\n this.frameDuration = Math.round(this.duration / this.frameCount);\n return this.patternOffset = this.frameRange.start;\n };\n\n\n /**\n * Updates the frame-animation.\n *\n * @method update\n */\n\n Component_FrameAnimation.prototype.update = function() {\n var bitmap, column, frameHeight, frameWidth, row;\n Component_FrameAnimation.__super__.update.apply(this, arguments);\n if (!this.isRunning) {\n return;\n }\n if (this.frameCounter >= this.duration) {\n if (this.repeat) {\n this.firstRun = false;\n this.frameCounter = 0;\n this.frameCount = (this.repetitionFrameRange.end - this.repetitionFrameRange.start) + 1;\n this.frameDuration = Math.ceil(this.duration / this.frameCount);\n this.patternOffset = this.repetitionFrameRange.start;\n } else {\n this.isRunning = false;\n if (typeof this.onFinish === \"function\") {\n this.onFinish(this);\n }\n if (typeof this.callback === \"function\") {\n this.callback(this.object, this);\n }\n return;\n }\n }\n this.pattern = this.patternOffset + Math.floor(this.frameCounter / this.frameDuration);\n this.frameCounter++;\n if (this.object != null) {\n bitmap = this.object.bitmap || ResourceManager.getBitmap((this.object.imageFolder || \"Graphics/Pictures\") + \"/\" + this.object.image);\n if (bitmap != null) {\n frameWidth = Math.floor(bitmap.width / this.framesX);\n frameHeight = Math.floor(bitmap.height / this.framesY);\n column = this.pattern % this.framesX;\n row = Math.floor(this.pattern / this.framesX);\n this.object.srcRect.set(column * frameWidth, row * frameHeight, frameWidth, frameHeight);\n this.object.dstRect.width = this.object.srcRect.width;\n return this.object.dstRect.height = this.object.srcRect.height;\n }\n }\n };\n\n return Component_FrameAnimation;\n\n})(gs.Component_Animation);\n\nwindow.Component_FrameAnimation = Component_FrameAnimation;\n\ngs.Component_FrameAnimation = Component_FrameAnimation;\n\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQVFBLElBQUEsd0JBQUE7RUFBQTs7O0FBQU07Ozs7QUFDRjs7Ozs7Ozs7Ozs7OztFQVlhLGtDQUFDLE1BQUQ7SUFDVCwyREFBQSxTQUFBOztBQUVBOzs7OztJQUtBLElBQUMsQ0FBQSxNQUFELEdBQVU7O0FBRVY7Ozs7O0lBS0EsSUFBQyxDQUFBLElBQUQsR0FBUTs7QUFFUjs7Ozs7SUFLQSxJQUFDLENBQUEsT0FBRCxHQUFXOztBQUVYOzs7OztJQUtBLElBQUMsQ0FBQSxPQUFELEdBQVc7O0FBRVg7Ozs7O0lBS0EsSUFBQyxDQUFBLFVBQUQsR0FBYztNQUFFLEtBQUEsRUFBTyxDQUFUO01BQVksR0FBQSxFQUFLLENBQWpCOzs7QUFFZDs7Ozs7SUFLQSxJQUFDLENBQUEsb0JBQUQsR0FBd0IsSUFBQyxDQUFBOztBQUV6Qjs7Ozs7O0lBTUEsSUFBQyxDQUFBLFVBQUQsR0FBYzs7QUFFZDs7Ozs7SUFLQSxJQUFDLENBQUEsT0FBRCxHQUFXOztBQUVYOzs7OztJQUtBLElBQUMsQ0FBQSxNQUFELEdBQVU7O0FBRVY7Ozs7O0lBS0EsSUFBQyxDQUFBLFFBQUQsR0FBWTs7QUFFWjs7Ozs7O0lBTUEsSUFBQyxDQUFBLGFBQUQsR0FBaUI7O0FBRWpCOzs7Ozs7SUFNQSxJQUFDLENBQUEsWUFBRCxHQUFnQjs7QUFFaEI7Ozs7O0lBS0EsSUFBQyxDQUFBLFFBQUQsR0FBWTs7QUFFWjs7Ozs7SUFLQSxJQUFDLENBQUEsU0FBRCxHQUFhOztBQUViOzs7Ozs7SUFNQSxJQUFDLENBQUEsYUFBRCxHQUFpQixJQUFDLENBQUEsVUFBVSxDQUFDOztBQUU3Qjs7Ozs7O0lBTUEsSUFBQyxDQUFBLE9BQUQsR0FBVyxJQUFDLENBQUE7O0FBRVo7Ozs7OztJQU1BLElBQUMsQ0FBQSxRQUFELEdBQVk7SUFFWixJQUFHLGNBQUg7TUFDSSxJQUFDLENBQUEsT0FBRCxDQUFTLE1BQVQ7TUFDQSxJ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QSxHQUFTLElBQUMsQ0FBQSxNQUFNLENBQUMsTUFBUixJQUFrQixlQUFlLENBQUMsU0FBaEIsQ0FBNEIsQ0FBQyxJQUFDLENBQUEsTUFBTSxDQUFDLFdBQVIsSUFBcUIsbUJBQXRCLENBQUEsR0FBMEMsR0FBMUMsR0FBNkMsSUFBQyxDQUFBLE1BQU0sQ0FBQyxLQUFqRjtNQUUzQixJQUFHLGNBQUg7UUFDSSxVQUFBLEdBQWEsSUFBSSxDQUFDLEtBQUwsQ0FBVyxNQUFNLENBQUMsS0FBUCxHQUFlLElBQUMsQ0FBQSxPQUEzQjtRQUNiLFdBQUEsR0FBYyxJQUFJLENBQUMsS0FBTCxDQUFXLE1BQU0sQ0FBQyxNQUFQLEdBQWdCLElBQUMsQ0FBQSxPQUE1QjtRQUNkLE1BQUEsR0FBUyxJQUFDLENBQUEsT0FBRCxHQUFXLElBQUMsQ0FBQTtRQUNyQixHQUFBLEdBQU0sSUFBSSxDQUFDLEtBQUwsQ0FBVyxJQUFDLENBQUEsT0FBRCxHQUFXLElBQUMsQ0FBQSxPQUF2QjtRQUNOLElBQUMsQ0FBQSxNQUFNLENBQUMsT0FBTyxDQUFDLEdBQWhCLENBQW9CLE1BQUEsR0FBUyxVQUE3QixFQUF5QyxHQUFBLEdBQU0sV0FBL0MsRUFBNEQsVUFBNUQsRUFBd0UsV0FBeEU7UUFDQSxJQUFDLENBQUEsTUFBTSxDQUFDLE9BQU8sQ0FBQyxLQUFoQixHQUF3QixJQUFDLENBQUEsTUFBTSxDQUFDLE9BQU8sQ0FBQztlQUN4QyxJQUFDLENBQUEsTUFBTSxDQUFDLE9BQU8sQ0FBQyxNQUFoQixHQUF5QixJQUFDLENBQUEsTUFBTSxDQUFDLE9BQU8sQ0FBQyxPQVA3QztPQUhKOztFQXBCSTs7OztHQTFOMkIsRUFBRSxDQUFDOztBQTJQMUMsTUFBTSxDQUFDLHdCQUFQLEdBQWtDOztBQUNsQyxFQUFFLENBQUMsd0JBQUgsR0FBOEIiLCJzb3VyY2VzQ29udGVudCI6WyIjID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbiNcbiMgICBTY3JpcHQ6IENvbXBvbmVudF9GcmFtZUFuaW1hdGlvblxuI1xuIyAgICQkQ09QWVJJR0hUJCRcbiNcbiMgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuIyBGSVhNRTogVGhpcyBjbGFzcyBzdGlsbCBmb2xsb3dzIGRlcHJlY2F0ZWQgcnVsZXMsIHNob3VsZCBiZSBmaXhlZC5cbmNsYXNzIENvbXBvbmVudF9GcmFtZUFuaW1hdGlvbiBleHRlbmRzIGdzLkNvbXBvbmVudF9BbmltYXRpb25cbiAgICAjIyMqXG4gICAgKiBFeGVjdXRlcyBhIGNsYXNzaWMgaW1hZ2UtZnJhbWUgYW5pbWF0aW9uIGRlZmluZWQgaW4gRGF0YWJhc2UuIFRoZSBpbWFnZSBpbiByZWd1bGFyXG4gICAgKiBjb250YWlucyBtdWx0aXBsZSBzdWItaW1hZ2VzIChmcmFtZXMpIHdoaWNoIGFyZSB0aGVuIGFuaW1hdGVkXG4gICAgKiBieSBtb2RpZnlpbmcgdGhlIDxiPnNyY1JlY3Q8L2I+IHByb3BlcnR5IG9mIHRoZSBnYW1lIG9iamVjdC5cbiAgICAqXG4gICAgKiBAbW9kdWxlIGdzXG4gICAgKiBAY2xhc3MgQ29tcG9uZW50X0ZyYW1lQW5pbWF0aW9uXG4gICAgKiBAZXh0ZW5kcyBncy5Db21wb25lbnRfQW5pbWF0aW9uXG4gICAgKiBAbWVtYmVyb2YgZ3NcbiAgICAqIEBjb25zdHJ1Y3RvclxuICAgICogQHBhcmFtIHtPYmplY3R9IHJlY29yZCAtIFRoZSBhbmltYXRpb24gZGF0YWJhc2UtcmVjb3JkLlxuICAgICMjI1xuICAgIGNvbnN0cnVjdG9yOiAocmVjb3JkKSAtPlxuICAgICAgICBzdXBlclxuICAgICAgICBcbiAgICAgICAgIyMjKlxuICAgICAgICAqIFRoZSBkYXRhYmFzZSByZWNvcmQuXG4gICAgICAgICogQHByb3BlcnR5IHJlY29yZFxuICAgICAgICAqIEB0eXBlIE9iamVjdFxuICAgICAgICAjIyNcbiAgICAgICAgQHJlY29yZCA9IG51bGxcbiAgICAgICAgXG4gICAgICAgICMjIypcbiAgICAgICAgKiBUaGUgbmFtZSBvZiB0aGUgYW5pbWF0aW9uIGRlZmluZWQgaW4gRGF0YWJhc2UuXG4gICAgICAgICogQHByb3BlcnR5IG5hbWVcbiAgICAgICAgKiBAdHlwZSBzdHJpbmdcbiAgICAgICAgIyMjXG4gICAgICAgIEBuYW1lID0gbnVsbFxuICAgICAgICBcbiAgICAgICAgIyMjKlxuICAgICAgICAqIFRoZSBhbW91bnQgb2YgZnJhbWVzIG9uIHgtYXhpcy5cbiAgICAgICAgKiBAcHJvcGVydHkgZnJhbWVzWFxuICAgICAgICAqIEB0eXBlIG51bWJlclxuICAgICAgICAjIyNcbiAgICAgICAgQGZyYW1lc1ggPSAxXG4gICAgICAgIFxuICAgICAgICAjIyMqXG4gICAgICAgICogVGhlIGFtb3VudCBvZiBmcmFtZXMgb24geS1heGlzLlxuICAgICAgICAqIEBwcm9wZXJ0eSBmcmFtZXNZXG4gICAgICAgICogQHR5cGUgbnVtYmVyXG4gICAgICAgICMjI1xuICAgICAgICBAZnJhbWVzWSA9IDFcbiAgICAgICAgXG4gICAgICAgICMjIypcbiAgICAgICAgKiBUaGUgZnJhbWUtcmFuZ2UgdG8gYW5pbWF0aW9uIGxpa2Ugb25seSBGcmFtZSA0IC0gNiBmb3IgZXhhbXBsZS5cbiAgICAgICAgKiBAcHJvcGVydHkgZnJhbWVSYW5nZVxuICAgICAgICAqIEB0eXBlIGdzLlJhbmdlXG4gICAgICAgICMjI1xuICAgICAgICBAZnJhbWVSYW5nZSA9IHsgc3RhcnQ6IDAsIGVuZDogMCB9XG4gICAgICAgIFxuICAgICAgICAjIyMqXG4gICAgICAgICogVGhlIGZyYW1lLXJhbmdlIHVzZWQgaWYgdGhlIGFuaW1hdGlvbiBnZXRzIHJlcGVhdGVkLlxuICAgICAgICAqIEBwcm9wZXJ0eSByZXBldGl0aW9uRnJhbWVSYW5nZVxuICAgICAgICAqIEB0eXBlIGdzLlJhbmdlXG4gICAgICAgICMjI1xuICAgICAgICBAcmVwZXRpdGlvbkZyYW1lUmFuZ2UgPSBAZnJhbWVSYW5nZVxuICAgICAgICBcbiAgICAgICAgIyMjKlxuICAgICAgICAqIFRoZSBhbW91bnQgb2YgZnJhbWVzIHRvIGFuaW1hdGUuXG4gICAgICAgICogQHByb3BlcnR5IGZyYW1lQ291bnRcbiAgICAgICAgKiBAdHlwZSBudW1iZXJcbiAgICAgICAgKiBAcHJvdGVjdGVkXG4gICAgICAgICMjI1xuICAgICAgICBAZnJhbWVDb3VudCA9IDFcbiAgICAgICAgXG4gICAgICAgICMjIypcbiAgICAgICAgKiBUaGUgZ3JhcGhpYyB1c2VkIGFzIGltYWdlIGZvciB0aGUgYW5pbWF0aW9uLlxuICAgICAgICAqIEBwcm9wZXJ0eSBncmFwaGljXG4gICAgICAgICogQHR5cGUgT2JqZWN0XG4gICAgICAgICMjI1xuICAgICAgICBAZ3JhcGhpYyA9IG51bGxcbiAgICAgICAgXG4gICAgICAgICMjIypcbiAgICAgICAgKiBJbmRpY2F0ZXMgaWYgdGhlIGFuaW1hdGlvbiByZXBlYXRzLlxuICAgICAgICAqIEBwcm9wZXJ0eSByZXBlYXRcbiAgICAgICAgKiBAdHlwZSBib29sZWFuXG4gICAgICAgICMjI1xuICAgICAgICBAcmVwZWF0ID0gbm9cbiAgICAgICAgXG4gICAgICAgICMjIypcbiAgICAgICAgKiBUaGUgcG9zaXRpb24gb2YgdGhlIGFuaW1hdGlvbiBvbiB0aGUgdGFyZ2V0LW9iamVjdC5cbiAgICAgICAgKiBAcHJvcGVydHkgZnJhbWVzWVxuICAgICAgICAqIEB0eXBlIGdzLkFuaW1hdGlvblBvc2l0aW9uXG4gICAgICAgICMjI1xuICAgICAgICBAcG9zaXRpb24gPSAwXG5cbiAgICAgICAgIyMjKlxuICAgICAgICAqIFRoZSBkdXJhdGlvbiBvZiBhIHNpbmdsZSBmcmFtZS5cbiAgICAgICAgKiBAcHJvcGVydHkgZnJhbWVEdXJhdGlvblxuICAgICAgICAqIEB0eXBlIG51bWJlclxuICAgICAgICAqIEBwcm90ZWN0ZWRcbiAgICAgICAgIyMjXG4gICAgICAgIEBmcmFtZUR1cmF0aW9uID0gMTBcbiAgICAgICAgXG4gICAgICAgICMjIypcbiAgICAgICAgKiBBIGZyYW1lLWNvdW50ZXIgbmVlZGVkIGZvciBhbmltYXRpb24tcHJvY2Vzcy5cbiAgICAgICAgKiBAcHJvcGVydHkgZnJhbWVEdXJhdGlvblxuICAgICAgICAqIEB0eXBlIG51bWJlclxuICAgICAgICAqIEBwcm90ZWN0ZWRcbiAgICAgICAgIyMjXG4gICAgICAgIEBmcmFtZUNvdW50ZXIgPSAwXG4gICAgICAgIFxuICAgICAgICAjIyMqXG4gICAgICAgICogVGhlIGR1cmF0aW9uIG9mIHRoZSBhbmltYXRpb24uXG4gICAgICAgICogQHByb3BlcnR5IGZyYW1lRHVyYXRpb25cbiAgICAgICAgKiBAdHlwZSBudW1iZXJcbiAgICAgICAgIyMjXG4gICAgICAgIEBkdXJhdGlvbiA9IDEwXG4gICAgICAgIFxuICAgICAgICAjIyMqXG4gICAgICAgICogSW5kaWNhdGVzIGlmIHRoZSBhbmltYXRpb24gaXMgY3VycmVudGx5IHJ1bm5pbmcuXG4gICAgICAgICogQHByb3BlcnR5IGlzUnVubmluZ1xuICAgICAgICAqIEB0eXBlIGJvb2xlYW5cbiAgICAgICAgIyMjXG4gICAgICAgIEBpc1J1bm5pbmcgPSBub1xuICAgICAgICBcbiAgICAgICAgIyMjKlxuICAgICAgICAqIFN0b3JlcyBmcmFtZS9wYXR0ZXJuLW9mZnNldC5cbiAgICAgICAgKiBAcHJvcGVydHkgcGF0dGVybk9mZnNldFxuICAgICAgICAqIEB0eXBlIG51bWJlclxuICAgICAgICAqIEBwcm90ZWN0ZWRcbiAgICAgICAgIyMjXG4gICAgICAgIEBwYXR0ZXJuT2Zmc2V0ID0gQGZyYW1lUmFuZ2Uuc3RhcnRcbiAgICAgICAgXG4gICAgICAgICMjIypcbiAgICAgICAgKiBTdG9yZXMgY3VycmVudCBmcmFtZS9wYXR0ZXJuXG4gICAgICAgICogQHByb3BlcnR5IHBhdHRlcm5PZmZzZXRcbiAgICAgICAgKiBAdHlwZSBudW1iZXJcbiAgICAgICAgKiBAcHJvdGVjdGVkXG4gICAgICAgICMjI1xuICAgICAgICBAcGF0dGVybiA9IEBwYXR0ZXJuT2Zmc2V0XG4gICAgICAgIFxuICAgICAgICAjIyMqXG4gICAgICAgICogSW5kaWNhdGVzIGlmIGl0cyBzdGlsbCB0aGUgZmlyc3QgcnVuIG9mIHRoZSBhbmltYXRpb24uXG4gICAgICAgICogQHByb3BlcnR5IGZpcnN0UnVuXG4gICAgICAgICogQHR5cGUgYm9vbGVhblxuICAgICAgICAqIEBwcm90ZWN0ZWRcbiAgICAgICAgIyMjXG4gICAgICAgIEBmaXJzdFJ1biA9IHllc1xuICAgICAgICBcbiAgICAgICAgaWYgcmVjb3JkP1xuICAgICAgICAgICAgQHJlZnJlc2gocmVjb3JkKVxuICAgICAgICAgICAgQHN0YXJ0KClcbiAgICAgXG4gICAgIyMjKlxuICAgICogU2VyaWFsaXplcyB0aGUgZnJhbWUtYW5pbWF0aW9uIGludG8gYSBkYXRhLWJ1bmRsZS5cbiAgICAqXG4gICAgKiBAbWV0aG9kIHRvRGF0YUJ1bmRsZVxuICAgICMjIyAgIFxuICAgIHRvRGF0YUJ1bmRsZTogLT5cbiAgICAgICAgbmFtZTogQG5hbWUsXG4gICAgICAgIGZyYW1lc1g6IEBmcmFtZXNYLFxuICAgICAgICBmcmFtZXNZOiBAZnJhbWVzWSxcbiAgICAgICAgZnJhbWVSYW5nZTogQGZyYW1lUmFuZ2UsXG4gICAgICAgIHJlcGV0aXRpb25GcmFtZVJhbmdlOiBAcmVwZXRpdGlvbkZyYW1lUmFuZ2UsXG4gICAgICAgIGZyYW1lQ291bnQ6IEBmcmFtZUNvdW50LFxuICAgICAgICBncmFwaGljOiBAZ3JhcGhpYyxcbiAgICAgICAgcmVwZWF0OiBAcmVwZWF0LFxuICAgICAgICBwb3NpdGlvbjogQHBvc2l0aW9uLFxuICAgICAgICBmcmFtZUR1cmF0aW9uOiBAZnJhbWVEdXJhdGlvbixcbiAgICAgICAgZnJhbWVDb3VudGVyOiBAZnJhbWVDb3VudGVyLFxuICAgICAgICBkdXJhdGlvbjogQGR1cmF0aW9uLFxuICAgICAgICBpc1J1bm5pbmc6IEBpc1J1bm5pbmcsXG4gICAgICAgIHBhdHRlcm5PZmZzZXQ6IEBwYXR0ZXJuT2Zmc2V0LFxuICAgICAgICBwYXR0ZXJuOiBAcGF0dGVybixcbiAgICAgICAgZmlyc3RSdW46IEBmaXJzdFJ1blxuICAgICBcbiAgICAjIyMqXG4gICAgKiBSZWZyZXNoZXMgdGhlIGFuaW1hdGlvbiBmcm9tIHRoZSBzcGVjaWZpZWQgZGF0YWJhc2UtcmVjb3JkLlxuICAgICpcbiAgICAqIEBtZXRob2QgcmVmcmVzaFxuICAgICogQHBhcmFtIHtPYmplY3R9IHJlY29yZCAtIFRoZSBhbmltYXRpb24gZGF0YWJhc2UtcmVjb3JkLlxuICAgICMjIyAgXG4gICAgIyBGSVhNRTogSXMgdGhhdCBtZXRob2Qgc3RpbGwgaW4gdXNlP1xuICAgIHJlZnJlc2g6IChyZWNvcmQpIC0+XG4gICAgICAgICMjIypcbiAgICAgICAgKiBUaGUgaW1hZ2VzIHRvIGFuaW1hdGUgdGhyb3VnaC5cbiAgICAgICAgKiBAcHJvcGVydHkgaW1hZ2VzXG4gICAgICAgICogQHR5cGUgc3RyaW5nW11cbiAgICAgICAgIyMjXG4gICAgICAgIEBuYW1lID0gcmVjb3JkLm5hbWVcbiAgICAgICAgQGZyYW1lc1ggPSByZWNvcmQuZnJhbWVzWCB8fCAxXG4gICAgICAgIEBmcmFtZXNZID0gcmVjb3JkLmZyYW1lc1kgfHwgMVxuICAgICAgICBAZnJhbWVSYW5nZSA9IHsgc3RhcnQ6IE1hdGgubWluKHJlY29yZC5mcmFtZVJhbmdlLnN0YXJ0LCByZWNvcmQuZnJhbWVSYW5nZS5lbmQpLCBlbmQ6IE1hdGgubWF4KHJlY29yZC5mcmFtZVJhbmdlLnN0YXJ0LCByZWNvcmQuZnJhbWVSYW5nZS5lbmQpIH1cbiAgICAgICAgQHJlcGV0aXRpb25GcmFtZVJhbmdlID0gaWYgcmVjb3JkLnVzZVJlcGV0aXRpb25GcmFtZVJhbmdlIGFuZCByZWNvcmQucmVwZXRpdGlvbkZyYW1lUmFuZ2U/IHRoZW4gcmVjb3JkLnJlcGV0aXRpb25GcmFtZVJhbmdlIGVsc2UgQGZyYW1lUmFuZ2VcbiAgICAgICAgQGZyYW1lQ291bnQgPSAoQGZyYW1lUmFuZ2UuZW5kIC0gQGZyYW1lUmFuZ2Uuc3RhcnQpICsgMVxuICAgICAgICBAZ3JhcGhpYyA9IHJlY29yZC5ncmFwaGljXG4gICAgICAgIEByZXBlYXQgPSByZWNvcmQucmVwZWF0IHx8IG5vXG4gICAgICAgIEBwb3NpdGlvbiA9IHJlY29yZC5wb3NpdGlvblxuXG4gICAgICAgIEBmcmFtZUR1cmF0aW9uID0gaWYgcmVjb3JkLmR1cmF0aW9uPyB0aGVuIE1hdGgucm91bmQocmVjb3JkLmR1cmF0aW9uIC8gQGZyYW1lQ291bnQpIGVsc2UgMTBcbiAgICAgICAgQGZyYW1lQ291bnRlciA9IDBcbiAgICAgICAgQGR1cmF0aW9uID0gcmVjb3JkLmR1cmF0aW9uIHx8IDEwXG4gICAgICAgIEBpc1J1bm5pbmcgPSBub1xuICAgICAgICBAcGF0dGVybk9mZnNldCA9IEBmcmFtZVJhbmdlLnN0YXJ0XG4gICAgICAgIEBwYXR0ZXJuID0gQHBhdHRlcm5PZmZzZXRcbiAgICAgICAgQGZpcnN0UnVuID0geWVzXG4gICAgICAgIFxuICAgICMjIypcbiAgICAqIFN0YXJ0cyB0aGUgZnJhbWUtYW5pbWF0aW9uLlxuICAgICpcbiAgICAqIEBtZXRob2Qgc3RhcnRcbiAgICAjIyMgICBcbiAgICBzdGFydDogKGNhbGxiYWNrKSAtPlxuICAgICAgICBAY2FsbGJhY2sgPSBjYWxsYmFja1xuICAgICAgICBAaXNSdW5uaW5nID0geWVzXG4gICAgICAgIEBmaXJzdFJ1biA9IHllc1xuICAgICAgICBAZnJhbWVDb3VudGVyID0gMFxuICAgICAgICBAZnJhbWVDb3VudCA9IChAZnJhbWVSYW5nZS5lbmQgLSBAZnJhbWVSYW5nZS5zdGFydCkgKyAxXG4gICAgICAgIEBmcmFtZUR1cmF0aW9uID0gTWF0aC5yb3VuZChAZHVyYXRpb24gLyBAZnJhbWVDb3VudClcbiAgICAgICAgQHBhdHRlcm5PZmZzZXQgPSBAZnJhbWVSYW5nZS5zdGFydFxuICAgICAgICBcbiAgICAjIyMqXG4gICAgKiBVcGRhdGVzIHRoZSBmcmFtZS1hbmltYXRpb24uXG4gICAgKlxuICAgICogQG1ldGhvZCB1cGRhdGVcbiAgICAjIyNcbiAgICB1cGRhdGU6IC0+XG4gICAgICAgIHN1cGVyXG4gICAgICAgIGlmIG5vdCBAaXNSdW5uaW5nIHRoZW4gcmV0dXJuXG4gICAgICAgIFxuICAgICAgICBpZiBAZnJhbWVDb3VudGVyID49IEBkdXJhdGlvblxuICAgICAgICAgICAgaWYgQHJlcGVhdFxuICAgICAgICAgICAgICAgIEBmaXJzdFJ1biA9IG5vXG4gICAgICAgICAgICAgICAgQGZyYW1lQ291bnRlciA9IDBcbiAgICAgICAgICAgICAgICBAZnJhbWVDb3VudCA9IChAcmVwZXRpdGlvbkZyYW1lUmFuZ2UuZW5kIC0gQHJlcGV0aXRpb25GcmFtZVJhbmdlLnN0YXJ0KSArIDFcbiAgICAgICAgICAgICAgICBAZnJhbWVEdXJhdGlvbiA9IE1hdGguY2VpbChAZHVyYXRpb24gLyBAZnJhbWVDb3VudClcbiAgICAgICAgICAgICAgICBAcGF0dGVybk9mZnNldCA9IEByZXBldGl0aW9uRnJhbWVSYW5nZS5zdGFydFxuICAgICAgICAgICAgZWxzZVxuICAgICAgICAgICAgICAgIEBpc1J1bm5pbmcgPSBub1xuICAgICAgICAgICAgICAgIEBvbkZpbmlzaD8odGhpcylcbiAgICAgICAgICAgICAgICBAY2FsbGJhY2s/KEBvYmplY3QsIHRoaXMpXG4gICAgICAgICAgICAgICAgcmV0dXJuXG5cbiAgICAgICAgQHBhdHRlcm4gPSBAcGF0dGVybk9mZnNldCArIE1hdGguZmxvb3IoQGZyYW1lQ291bnRlciAvIEBmcmFtZUR1cmF0aW9uKSBcbiAgICAgICAgQGZyYW1lQ291bnRlcisrXG4gICAgICAgIFxuICAgICAgICBpZiBAb2JqZWN0P1xuICAgICAgICAgICAgYml0bWFwID0gQG9iamVjdC5iaXRtYXAgfHwgUmVzb3VyY2VNYW5hZ2VyLmdldEJpdG1hcChcIiN7QG9iamVjdC5pbWFnZUZvbGRlcnx8XCJHcmFwaGljcy9QaWN0dXJlc1wifS8je0BvYmplY3QuaW1hZ2V9XCIpXG4gICAgICAgICAgICBcbiAgICAgICAgICAgIGlmIGJpdG1hcD9cbiAgICAgICAgICAgICAgICBmcmFtZVdpZHRoID0gTWF0aC5mbG9vcihiaXRtYXAud2lkdGggLyBAZnJhbWVzWClcbiAgICAgICAgICAgICAgICBmcmFtZUhlaWdodCA9IE1hdGguZmxvb3IoYml0bWFwLmhlaWdodCAvIEBmcmFtZXNZKVxuICAgICAgICAgICAgICAgIGNvbHVtbiA9IEBwYXR0ZXJuICUgQGZyYW1lc1hcbiAgICAgICAgICAgICAgICByb3cgPSBNYXRoLmZsb29yKEBwYXR0ZXJuIC8gQGZyYW1lc1gpXG4gICAgICAgICAgICAgICAgQG9iamVjdC5zcmNSZWN0LnNldChjb2x1bW4gKiBmcmFtZVdpZHRoLCByb3cgKiBmcmFtZUhlaWdodCwgZnJhbWVXaWR0aCwgZnJhbWVIZWlnaHQpXG4gICAgICAgICAgICAgICAgQG9iamVjdC5kc3RSZWN0LndpZHRoID0gQG9iamVjdC5zcmNSZWN0LndpZHRoXG4gICAgICAgICAgICAgICAgQG9iamVjdC5kc3RSZWN0LmhlaWdodCA9IEBvYmplY3Quc3JjUmVjdC5oZWlnaHRcbiAgICAgICAgICAgICAgICBcblxud2luZG93LkNvbXBvbmVudF9GcmFtZUFuaW1hdGlvbiA9IENvbXBvbmVudF9GcmFtZUFuaW1hdGlvblxuZ3MuQ29tcG9uZW50X0ZyYW1lQW5pbWF0aW9uID0gQ29tcG9uZW50X0ZyYW1lQW5pbWF0aW9uIl19\n//# sourceURL=Component_FrameAnimation_103.js","parentId":"A8E9945CKEE5CA4855SAC81E480CB8098E0E"},"summary":["name","type","order"]}
1 + {
2 + "uid": "BF1FEA5EK5664A49F7S92A5E94D58BE44A4A",
3 + "isLoaded": true,
4 + "lastModificationTime": 1427731012686,
5 + "items": {
6 + "name": "Component_FrameAnimation",
7 + "type": "game_script",
8 + "order": 8,
9 + "content": "# ===================================================================\n#\n# Script: Component_FrameAnimation\n#\n# $$COPYRIGHT$$\n#\n# ===================================================================\n# FIXME: This class still follows deprecated rules, should be fixed.\nclass Component_FrameAnimation extends gs.Component_Animation\n ###*\n * Executes a classic image-frame animation defined in Database. The image in regular\n * contains multiple sub-images (frames) which are then animated\n * by modifying the <b>srcRect</b> property of the game object.\n *\n * @module gs\n * @class Component_FrameAnimation\n * @extends gs.Component_Animation\n * @memberof gs\n * @constructor\n * @param {Object} record - The animation database-record.\n ###\n constructor: (record) ->\n super\n \n ###*\n * The database record.\n * @property record\n * @type Object\n ###\n @record = null\n \n ###*\n * The name of the animation defined in Database.\n * @property name\n * @type string\n ###\n @name = null\n \n ###*\n * The amount of frames on x-axis.\n * @property framesX\n * @type number\n ###\n @framesX = 1\n \n ###*\n * The amount of frames on y-axis.\n * @property framesY\n * @type number\n ###\n @framesY = 1\n \n ###*\n * The frame-range to animation like only Frame 4 - 6 for example.\n * @property frameRange\n * @type gs.Range\n ###\n @frameRange = { start: 0, end: 0 }\n \n ###*\n * The frame-range used if the animation gets repeated.\n * @property repetitionFrameRange\n * @type gs.Range\n ###\n @repetitionFrameRange = @frameRange\n \n ###*\n * The amount of frames to animate.\n * @property frameCount\n * @type number\n * @protected\n ###\n @frameCount = 1\n \n ###*\n * The graphic used as image for the animation.\n * @property graphic\n * @type Object\n ###\n @graphic = null\n \n ###*\n * Indicates if the animation repeats.\n * @property repeat\n * @type boolean\n ###\n @repeat = no\n \n ###*\n * The position of the animation on the target-object.\n * @property framesY\n * @type gs.AnimationPosition\n ###\n @position = 0\n\n ###*\n * The duration of a single frame.\n * @property frameDuration\n * @type number\n * @protected\n ###\n @frameDuration = 10\n \n ###*\n * A frame-counter needed for animation-process.\n * @property frameDuration\n * @type number\n * @protected\n ###\n @frameCounter = 0\n \n ###*\n * The duration of the animation.\n * @property frameDuration\n * @type number\n ###\n @duration = 10\n \n ###*\n * Indicates if the animation is currently running.\n * @property isRunning\n * @type boolean\n ###\n @isRunning = no\n \n ###*\n * Stores frame/pattern-offset.\n * @property patternOffset\n * @type number\n * @protected\n ###\n @patternOffset = @frameRange.start\n \n ###*\n * Stores current frame/pattern\n * @property patternOffset\n * @type number\n * @protected\n ###\n @pattern = @patternOffset\n \n ###*\n * Indicates if its still the first run of the animation.\n * @property firstRun\n * @type boolean\n * @protected\n ###\n @firstRun = yes\n \n if record?\n @refresh(record)\n @start()\n \n ###*\n * Serializes the frame-animation into a data-bundle.\n *\n * @method toDataBundle\n ### \n toDataBundle: ->\n name: @name,\n framesX: @framesX,\n framesY: @framesY,\n frameRange: @frameRange,\n repetitionFrameRange: @repetitionFrameRange,\n frameCount: @frameCount,\n graphic: @graphic,\n repeat: @repeat,\n position: @position,\n frameDuration: @frameDuration,\n frameCounter: @frameCounter,\n duration: @duration,\n isRunning: @isRunning,\n patternOffset: @patternOffset,\n pattern: @pattern,\n firstRun: @firstRun\n \n ###*\n * Refreshes the animation from the specified database-record.\n *\n * @method refresh\n * @param {Object} record - The animation database-record.\n ### \n # FIXME: Is that method still in use?\n refresh: (record) ->\n ###*\n * The images to animate through.\n * @property images\n * @type string[]\n ###\n @name = record.name\n @framesX = record.framesX || 1\n @framesY = record.framesY || 1\n @frameRange = { start: Math.min(record.frameRange.start, record.frameRange.end), end: Math.max(record.frameRange.start, record.frameRange.end) }\n @repetitionFrameRange = if record.useRepetitionFrameRange and record.repetitionFrameRange? then record.repetitionFrameRange else @frameRange\n @frameCount = (@frameRange.end - @frameRange.start) + 1\n @graphic = record.graphic\n @repeat = record.repeat || no\n @position = record.position\n\n @frameDuration = if record.duration? then Math.round(record.duration / @frameCount) else 10\n @frameCounter = 0\n @duration = record.duration || 10\n @isRunning = no\n @patternOffset = @frameRange.start\n @pattern = @patternOffset\n @firstRun = yes\n \n ###*\n * Starts the frame-animation.\n *\n * @method start\n ### \n start: (callback) ->\n @callback = callback\n @isRunning = yes\n @firstRun = yes\n @frameCounter = 0\n @frameCount = (@frameRange.end - @frameRange.start) + 1\n @frameDuration = Math.round(@duration / @frameCount)\n @patternOffset = @frameRange.start\n \n ###*\n * Updates the frame-animation.\n *\n * @method update\n ###\n update: ->\n super\n if not @isRunning then return\n \n if @frameCounter >= @duration\n if @repeat\n @firstRun = no\n @frameCounter = 0\n @frameCount = (@repetitionFrameRange.end - @repetitionFrameRange.start) + 1\n @frameDuration = Math.ceil(@duration / @frameCount)\n @patternOffset = @repetitionFrameRange.start\n else\n @isRunning = no\n @onFinish?(this)\n @callback?(@object, this)\n return\n\n @pattern = @patternOffset + Math.floor(@frameCounter / @frameDuration) \n @frameCounter++\n \n if @object?\n bitmap = @object.bitmap || ResourceManager.getBitmap(\"#{@object.imageFolder||\"Graphics/Pictures\"}/#{@object.image}\")\n \n if bitmap?\n frameWidth = Math.floor(bitmap.width / @framesX)\n frameHeight = Math.floor(bitmap.height / @framesY)\n column = @pattern % @framesX\n row = Math.floor(@pattern / @framesX)\n @object.srcRect.set(column * frameWidth, row * frameHeight, frameWidth, frameHeight)\n @object.dstRect.width = @object.srcRect.width\n @object.dstRect.height = @object.srcRect.height\n \n\nwindow.Component_FrameAnimation = Component_FrameAnimation\ngs.Component_FrameAnimation = Component_FrameAnimation",
10 + "compiledContent": "var Component_FrameAnimation,\n extend = function(child, parent) { for (var key in parent) { if (hasProp.call(parent, key)) child[key] = parent[key]; } function ctor() { this.constructor = child; } ctor.prototype = parent.prototype; child.prototype = new ctor(); child.__super__ = parent.prototype; return child; },\n hasProp = {}.hasOwnProperty;\n\nComponent_FrameAnimation = (function(superClass) {\n extend(Component_FrameAnimation, superClass);\n\n\n /**\n * Executes a classic image-frame animation defined in Database. The image in regular\n * contains multiple sub-images (frames) which are then animated\n * by modifying the <b>srcRect</b> property of the game object.\n *\n * @module gs\n * @class Component_FrameAnimation\n * @extends gs.Component_Animation\n * @memberof gs\n * @constructor\n * @param {Object} record - The animation database-record.\n */\n\n function Component_FrameAnimation(record) {\n Component_FrameAnimation.__super__.constructor.apply(this, arguments);\n\n /**\n * The database record.\n * @property record\n * @type Object\n */\n this.record = null;\n\n /**\n * The name of the animation defined in Database.\n * @property name\n * @type string\n */\n this.name = null;\n\n /**\n * The amount of frames on x-axis.\n * @property framesX\n * @type number\n */\n this.framesX = 1;\n\n /**\n * The amount of frames on y-axis.\n * @property framesY\n * @type number\n */\n this.framesY = 1;\n\n /**\n * The frame-range to animation like only Frame 4 - 6 for example.\n * @property frameRange\n * @type gs.Range\n */\n this.frameRange = {\n start: 0,\n end: 0\n };\n\n /**\n * The frame-range used if the animation gets repeated.\n * @property repetitionFrameRange\n * @type gs.Range\n */\n this.repetitionFrameRange = this.frameRange;\n\n /**\n * The amount of frames to animate.\n * @property frameCount\n * @type number\n * @protected\n */\n this.frameCount = 1;\n\n /**\n * The graphic used as image for the animation.\n * @property graphic\n * @type Object\n */\n this.graphic = null;\n\n /**\n * Indicates if the animation repeats.\n * @property repeat\n * @type boolean\n */\n this.repeat = false;\n\n /**\n * The position of the animation on the target-object.\n * @property framesY\n * @type gs.AnimationPosition\n */\n this.position = 0;\n\n /**\n * The duration of a single frame.\n * @property frameDuration\n * @type number\n * @protected\n */\n this.frameDuration = 10;\n\n /**\n * A frame-counter needed for animation-process.\n * @property frameDuration\n * @type number\n * @protected\n */\n this.frameCounter = 0;\n\n /**\n * The duration of the animation.\n * @property frameDuration\n * @type number\n */\n this.duration = 10;\n\n /**\n * Indicates if the animation is currently running.\n * @property isRunning\n * @type boolean\n */\n this.isRunning = false;\n\n /**\n * Stores frame/pattern-offset.\n * @property patternOffset\n * @type number\n * @protected\n */\n this.patternOffset = this.frameRange.start;\n\n /**\n * Stores current frame/pattern\n * @property patternOffset\n * @type number\n * @protected\n */\n this.pattern = this.patternOffset;\n\n /**\n * Indicates if its still the first run of the animation.\n * @property firstRun\n * @type boolean\n * @protected\n */\n this.firstRun = true;\n if (record != null) {\n this.refresh(record);\n this.start();\n }\n }\n\n\n /**\n * Serializes the frame-animation into a data-bundle.\n *\n * @method toDataBundle\n */\n\n Component_FrameAnimation.prototype.toDataBundle = function() {\n return {\n name: this.name,\n framesX: this.framesX,\n framesY: this.framesY,\n frameRange: this.frameRange,\n repetitionFrameRange: this.repetitionFrameRange,\n frameCount: this.frameCount,\n graphic: this.graphic,\n repeat: this.repeat,\n position: this.position,\n frameDuration: this.frameDuration,\n frameCounter: this.frameCounter,\n duration: this.duration,\n isRunning: this.isRunning,\n patternOffset: this.patternOffset,\n pattern: this.pattern,\n firstRun: this.firstRun\n };\n };\n\n\n /**\n * Refreshes the animation from the specified database-record.\n *\n * @method refresh\n * @param {Object} record - The animation database-record.\n */\n\n Component_FrameAnimation.prototype.refresh = function(record) {\n\n /**\n * The images to animate through.\n * @property images\n * @type string[]\n */\n this.name = record.name;\n this.framesX = record.framesX || 1;\n this.framesY = record.framesY || 1;\n this.frameRange = {\n start: Math.min(record.frameRange.start, record.frameRange.end),\n end: Math.max(record.frameRange.start, record.frameRange.end)\n };\n this.repetitionFrameRange = record.useRepetitionFrameRange && (record.repetitionFrameRange != null) ? record.repetitionFrameRange : this.frameRange;\n this.frameCount = (this.frameRange.end - this.frameRange.start) + 1;\n this.graphic = record.graphic;\n this.repeat = record.repeat || false;\n this.position = record.position;\n this.frameDuration = record.duration != null ? Math.round(record.duration / this.frameCount) : 10;\n this.frameCounter = 0;\n this.duration = record.duration || 10;\n this.isRunning = false;\n this.patternOffset = this.frameRange.start;\n this.pattern = this.patternOffset;\n return this.firstRun = true;\n };\n\n\n /**\n * Starts the frame-animation.\n *\n * @method start\n */\n\n Component_FrameAnimation.prototype.start = function(callback) {\n this.callback = callback;\n this.isRunning = true;\n this.firstRun = true;\n this.frameCounter = 0;\n this.frameCount = (this.frameRange.end - this.frameRange.start) + 1;\n this.frameDuration = Math.round(this.duration / this.frameCount);\n return this.patternOffset = this.frameRange.start;\n };\n\n\n /**\n * Updates the frame-animation.\n *\n * @method update\n */\n\n Component_FrameAnimation.prototype.update = function() {\n var bitmap, column, frameHeight, frameWidth, row;\n Component_FrameAnimation.__super__.update.apply(this, arguments);\n if (!this.isRunning) {\n return;\n }\n if (this.frameCounter >= this.duration) {\n if (this.repeat) {\n this.firstRun = false;\n this.frameCounter = 0;\n this.frameCount = (this.repetitionFrameRange.end - this.repetitionFrameRange.start) + 1;\n this.frameDuration = Math.ceil(this.duration / this.frameCount);\n this.patternOffset = this.repetitionFrameRange.start;\n } else {\n this.isRunning = false;\n if (typeof this.onFinish === \"function\") {\n this.onFinish(this);\n }\n if (typeof this.callback === \"function\") {\n this.callback(this.object, this);\n }\n return;\n }\n }\n this.pattern = this.patternOffset + Math.floor(this.frameCounter / this.frameDuration);\n this.frameCounter++;\n if (this.object != null) {\n bitmap = this.object.bitmap || ResourceManager.getBitmap((this.object.imageFolder || \"Graphics/Pictures\") + \"/\" + this.object.image);\n if (bitmap != null) {\n frameWidth = Math.floor(bitmap.width / this.framesX);\n frameHeight = Math.floor(bitmap.height / this.framesY);\n column = this.pattern % this.framesX;\n row = Math.floor(this.pattern / this.framesX);\n this.object.srcRect.set(column * frameWidth, row * frameHeight, frameWidth, frameHeight);\n this.object.dstRect.width = this.object.srcRect.width;\n return this.object.dstRect.height = this.object.srcRect.height;\n }\n }\n };\n\n return Component_FrameAnimation;\n\n})(gs.Component_Animation);\n\nwindow.Component_FrameAnimation = Component_FrameAnimation;\n\ngs.Component_FrameAnimation = Component_FrameAnimation;\n\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQVFBLElBQUEsd0JBQUE7RUFBQTs7O0FBQU07Ozs7QUFDRjs7Ozs7Ozs7Ozs7OztFQVlhLGtDQUFDLE1BQUQ7SUFDVCwyREFBQSxTQUFBOztBQUVBOzs7OztJQUtBLElBQUMsQ0FBQSxNQUFELEdBQVU7O0FBRVY7Ozs7O0lBS0EsSUFBQyxDQUFBLElBQUQsR0FBUTs7QUFFUjs7Ozs7SUFLQSxJQUFDLENBQUEsT0FBRCxHQUFXOztBQUVYOzs7OztJQUtBLElBQUMsQ0FBQSxPQUFELEdBQVc7O0FBRVg7Ozs7O0lBS0EsSUFBQyxDQUFBLFVBQUQsR0FBYztNQUFFLEtBQUEsRUFBTyxDQUFUO01BQVksR0FBQSxFQUFLLENBQWpCOzs7QUFFZDs7Ozs7SUFLQSxJQUFDLENBQUEsb0JBQUQsR0FBd0IsSUFBQyxDQUFBOztBQUV6Qjs7Ozs7O0lBTUEsSUFBQyxDQUFBLFVBQUQsR0FBYzs7QUFFZDs7Ozs7SUFLQSxJQUFDLENBQUEsT0FBRCxHQUFXOztBQUVYOzs7OztJQUtBLElBQUMsQ0FBQSxNQUFELEdBQVU7O0FBRVY7Ozs7O0lBS0EsSUFBQyxDQUFBLFFBQUQsR0FBWTs7QUFFWjs7Ozs7O0lBTUEsSUFBQyxDQUFBLGFBQUQsR0FBaUI7O0FBRWpCOzs7Ozs7SUFNQSxJQUFDLENBQUEsWUFBRCxHQUFnQjs7QUFFaEI7Ozs7O0lBS0EsSUFBQyxDQUFBLFFBQUQsR0FBWTs7QUFFWjs7Ozs7SUFLQSxJQUFDLENBQUEsU0FBRCxHQUFhOztBQUViOzs7Ozs7SUFNQSxJQUFDLENBQUEsYUFBRCxHQUFpQixJQUFDLENBQUEsVUFBVSxDQUFDOztBQUU3Qjs7Ozs7O0lBTUEsSUFBQyxDQUFBLE9BQUQsR0FBVyxJQUFDLENBQUE7O0FBRVo7Ozs7OztJQU1BLElBQUMsQ0FBQSxRQUFELEdBQVk7SUFFWixJQUFHLGNBQUg7TUFDSSxJQUFDLENBQUEsT0FBRCxDQUFTLE1BQVQ7TUFDQSxJ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QSxHQUFTLElBQUMsQ0FBQSxNQUFNLENBQUMsTUFBUixJQUFrQixlQUFlLENBQUMsU0FBaEIsQ0FBNEIsQ0FBQyxJQUFDLENBQUEsTUFBTSxDQUFDLFdBQVIsSUFBcUIsbUJBQXRCLENBQUEsR0FBMEMsR0FBMUMsR0FBNkMsSUFBQyxDQUFBLE1BQU0sQ0FBQyxLQUFqRjtNQUUzQixJQUFHLGNBQUg7UUFDSSxVQUFBLEdBQWEsSUFBSSxDQUFDLEtBQUwsQ0FBVyxNQUFNLENBQUMsS0FBUCxHQUFlLElBQUMsQ0FBQSxPQUEzQjtRQUNiLFdBQUEsR0FBYyxJQUFJLENBQUMsS0FBTCxDQUFXLE1BQU0sQ0FBQyxNQUFQLEdBQWdCLElBQUMsQ0FBQSxPQUE1QjtRQUNkLE1BQUEsR0FBUyxJQUFDLENBQUEsT0FBRCxHQUFXLElBQUMsQ0FBQTtRQUNyQixHQUFBLEdBQU0sSUFBSSxDQUFDLEtBQUwsQ0FBVyxJQUFDLENBQUEsT0FBRCxHQUFXLElBQUMsQ0FBQSxPQUF2QjtRQUNOLElBQUMsQ0FBQSxNQUFNLENBQUMsT0FBTyxDQUFDLEdBQWhCLENBQW9CLE1BQUEsR0FBUyxVQUE3QixFQUF5QyxHQUFBLEdBQU0sV0FBL0MsRUFBNEQsVUFBNUQsRUFBd0UsV0FBeEU7UUFDQSxJQUFDLENBQUEsTUFBTSxDQUFDLE9BQU8sQ0FBQyxLQUFoQixHQUF3QixJQUFDLENBQUEsTUFBTSxDQUFDLE9BQU8sQ0FBQztlQUN4QyxJQUFDLENBQUEsTUFBTSxDQUFDLE9BQU8sQ0FBQyxNQUFoQixHQUF5QixJQUFDLENBQUEsTUFBTSxDQUFDLE9BQU8sQ0FBQyxPQVA3QztPQUhKOztFQXBCSTs7OztHQTFOMkIsRUFBRSxDQUFDOztBQTJQMUMsTUFBTSxDQUFDLHdCQUFQLEdBQWtDOztBQUNsQyxFQUFFLENBQUMsd0JBQUgsR0FBOEIiLCJzb3VyY2VzQ29udGVudCI6WyIjID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbiNcbiMgICBTY3JpcHQ6IENvbXBvbmVudF9GcmFtZUFuaW1hdGlvblxuI1xuIyAgICQkQ09QWVJJR0hUJCRcbiNcbiMgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuIyBGSVhNRTogVGhpcyBjbGFzcyBzdGlsbCBmb2xsb3dzIGRlcHJlY2F0ZWQgcnVsZXMsIHNob3VsZCBiZSBmaXhlZC5cbmNsYXNzIENvbXBvbmVudF9GcmFtZUFuaW1hdGlvbiBleHRlbmRzIGdzLkNvbXBvbmVudF9BbmltYXRpb25cbiAgICAjIyMqXG4gICAgKiBFeGVjdXRlcyBhIGNsYXNzaWMgaW1hZ2UtZnJhbWUgYW5pbWF0aW9uIGRlZmluZWQgaW4gRGF0YWJhc2UuIFRoZSBpbWFnZSBpbiByZWd1bGFyXG4gICAgKiBjb250YWlucyBtdWx0aXBsZSBzdWItaW1hZ2VzIChmcmFtZXMpIHdoaWNoIGFyZSB0aGVuIGFuaW1hdGVkXG4gICAgKiBieSBtb2RpZnlpbmcgdGhlIDxiPnNyY1JlY3Q8L2I+IHByb3BlcnR5IG9mIHRoZSBnYW1lIG9iamVjdC5cbiAgICAqXG4gICAgKiBAbW9kdWxlIGdzXG4gICAgKiBAY2xhc3MgQ29tcG9uZW50X0ZyYW1lQW5pbWF0aW9uXG4gICAgKiBAZXh0ZW5kcyBncy5Db21wb25lbnRfQW5pbWF0aW9uXG4gICAgKiBAbWVtYmVyb2YgZ3NcbiAgICAqIEBjb25zdHJ1Y3RvclxuICAgICogQHBhcmFtIHtPYmplY3R9IHJlY29yZCAtIFRoZSBhbmltYXRpb24gZGF0YWJhc2UtcmVjb3JkLlxuICAgICMjI1xuICAgIGNvbnN0cnVjdG9yOiAocmVjb3JkKSAtPlxuICAgICAgICBzdXBlclxuICAgICAgICBcbiAgICAgICAgIyMjKlxuICAgICAgICAqIFRoZSBkYXRhYmFzZSByZWNvcmQuXG4gICAgICAgICogQHByb3BlcnR5IHJlY29yZFxuICAgICAgICAqIEB0eXBlIE9iamVjdFxuICAgICAgICAjIyNcbiAgICAgICAgQHJlY29yZCA9IG51bGxcbiAgICAgICAgXG4gICAgICAgICMjIypcbiAgICAgICAgKiBUaGUgbmFtZSBvZiB0aGUgYW5pbWF0aW9uIGRlZmluZWQgaW4gRGF0YWJhc2UuXG4gICAgICAgICogQHByb3BlcnR5IG5hbWVcbiAgICAgICAgKiBAdHlwZSBzdHJpbmdcbiAgICAgICAgIyMjXG4gICAgICAgIEBuYW1lID0gbnVsbFxuICAgICAgICBcbiAgICAgICAgIyMjKlxuICAgICAgICAqIFRoZSBhbW91bnQgb2YgZnJhbWVzIG9uIHgtYXhpcy5cbiAgICAgICAgKiBAcHJvcGVydHkgZnJhbWVzWFxuICAgICAgICAqIEB0eXBlIG51bWJlclxuICAgICAgICAjIyNcbiAgICAgICAgQGZyYW1lc1ggPSAxXG4gICAgICAgIFxuICAgICAgICAjIyMqXG4gICAgICAgICogVGhlIGFtb3VudCBvZiBmcmFtZXMgb24geS1heGlzLlxuICAgICAgICAqIEBwcm9wZXJ0eSBmcmFtZXNZXG4gICAgICAgICogQHR5cGUgbnVtYmVyXG4gICAgICAgICMjI1xuICAgICAgICBAZnJhbWVzWSA9IDFcbiAgICAgICAgXG4gICAgICAgICMjIypcbiAgICAgICAgKiBUaGUgZnJhbWUtcmFuZ2UgdG8gYW5pbWF0aW9uIGxpa2Ugb25seSBGcmFtZSA0IC0gNiBmb3IgZXhhbXBsZS5cbiAgICAgICAgKiBAcHJvcGVydHkgZnJhbWVSYW5nZVxuICAgICAgICAqIEB0eXBlIGdzLlJhbmdlXG4gICAgICAgICMjI1xuICAgICAgICBAZnJhbWVSYW5nZSA9IHsgc3RhcnQ6IDAsIGVuZDogMCB9XG4gICAgICAgIFxuICAgICAgICAjIyMqXG4gICAgICAgICogVGhlIGZyYW1lLXJhbmdlIHVzZWQgaWYgdGhlIGFuaW1hdGlvbiBnZXRzIHJlcGVhdGVkLlxuICAgICAgICAqIEBwcm9wZXJ0eSByZXBldGl0aW9uRnJhbWVSYW5nZVxuICAgICAgICAqIEB0eXBlIGdzLlJhbmdlXG4gICAgICAgICMjI1xuICAgICAgICBAcmVwZXRpdGlvbkZyYW1lUmFuZ2UgPSBAZnJhbWVSYW5nZVxuICAgICAgICBcbiAgICAgICAgIyMjKlxuICAgICAgICAqIFRoZSBhbW91bnQgb2YgZnJhbWVzIHRvIGFuaW1hdGUuXG4gICAgICAgICogQHByb3BlcnR5IGZyYW1lQ291bnRcbiAgICAgICAgKiBAdHlwZSBudW1iZXJcbiAgICAgICAgKiBAcHJvdGVjdGVkXG4gICAgICAgICMjI1xuICAgICAgICBAZnJhbWVDb3VudCA9IDFcbiAgICAgICAgXG4gICAgICAgICMjIypcbiAgICAgICAgKiBUaGUgZ3JhcGhpYyB1c2VkIGFzIGltYWdlIGZvciB0aGUgYW5pbWF0aW9uLlxuICAgICAgICAqIEBwcm9wZXJ0eSBncmFwaGljXG4gICAgICAgICogQHR5cGUgT2JqZWN0XG4gICAgICAgICMjI1xuICAgICAgICBAZ3JhcGhpYyA9IG51bGxcbiAgICAgICAgXG4gICAgICAgICMjIypcbiAgICAgICAgKiBJbmRpY2F0ZXMgaWYgdGhlIGFuaW1hdGlvbiByZXBlYXRzLlxuICAgICAgICAqIEBwcm9wZXJ0eSByZXBlYXRcbiAgICAgICAgKiBAdHlwZSBib29sZWFuXG4gICAgICAgICMjI1xuICAgICAgICBAcmVwZWF0ID0gbm9cbiAgICAgICAgXG4gICAgICAgICMjIypcbiAgICAgICAgKiBUaGUgcG9zaXRpb24gb2YgdGhlIGFuaW1hdGlvbiBvbiB0aGUgdGFyZ2V0LW9iamVjdC5cbiAgICAgICAgKiBAcHJvcGVydHkgZnJhbWVzWVxuICAgICAgICAqIEB0eXBlIGdzLkFuaW1hdGlvblBvc2l0aW9uXG4gICAgICAgICMjI1xuICAgICAgICBAcG9zaXRpb24gPSAwXG5cbiAgICAgICAgIyMjKlxuICAgICAgICAqIFRoZSBkdXJhdGlvbiBvZiBhIHNpbmdsZSBmcmFtZS5cbiAgICAgICAgKiBAcHJvcGVydHkgZnJhbWVEdXJhdGlvblxuICAgICAgICAqIEB0eXBlIG51bWJlclxuICAgICAgICAqIEBwcm90ZWN0ZWRcbiAgICAgICAgIyMjXG4gICAgICAgIEBmcmFtZUR1cmF0aW9uID0gMTBcbiAgICAgICAgXG4gICAgICAgICMjIypcbiAgICAgICAgKiBBIGZyYW1lLWNvdW50ZXIgbmVlZGVkIGZvciBhbmltYXRpb24tcHJvY2Vzcy5cbiAgICAgICAgKiBAcHJvcGVydHkgZnJhbWVEdXJhdGlvblxuICAgICAgICAqIEB0eXBlIG51bWJlclxuICAgICAgICAqIEBwcm90ZWN0ZWRcbiAgICAgICAgIyMjXG4gICAgICAgIEBmcmFtZUNvdW50ZXIgPSAwXG4gICAgICAgIFxuICAgICAgICAjIyMqXG4gICAgICAgICogVGhlIGR1cmF0aW9uIG9mIHRoZSBhbmltYXRpb24uXG4gICAgICAgICogQHByb3BlcnR5IGZyYW1lRHVyYXRpb25cbiAgICAgICAgKiBAdHlwZSBudW1iZXJcbiAgICAgICAgIyMjXG4gICAgICAgIEBkdXJhdGlvbiA9IDEwXG4gICAgICAgIFxuICAgICAgICAjIyMqXG4gICAgICAgICogSW5kaWNhdGVzIGlmIHRoZSBhbmltYXRpb24gaXMgY3VycmVudGx5IHJ1bm5pbmcuXG4gICAgICAgICogQHByb3BlcnR5IGlzUnVubmluZ1xuICAgICAgICAqIEB0eXBlIGJvb2xlYW5cbiAgICAgICAgIyMjXG4gICAgICAgIEBpc1J1bm5pbmcgPSBub1xuICAgICAgICBcbiAgICAgICAgIyMjKlxuICAgICAgICAqIFN0b3JlcyBmcmFtZS9wYXR0ZXJuLW9mZnNldC5cbiAgICAgICAgKiBAcHJvcGVydHkgcGF0dGVybk9mZnNldFxuICAgICAgICAqIEB0eXBlIG51bWJlclxuICAgICAgICAqIEBwcm90ZWN0ZWRcbiAgICAgICAgIyMjXG4gICAgICAgIEBwYXR0ZXJuT2Zmc2V0ID0gQGZyYW1lUmFuZ2Uuc3RhcnRcbiAgICAgICAgXG4gICAgICAgICMjIypcbiAgICAgICAgKiBTdG9yZXMgY3VycmVudCBmcmFtZS9wYXR0ZXJuXG4gICAgICAgICogQHByb3BlcnR5IHBhdHRlcm5PZmZzZXRcbiAgICAgICAgKiBAdHlwZSBudW1iZXJcbiAgICAgICAgKiBAcHJvdGVjdGVkXG4gICAgICAgICMjI1xuICAgICAgICBAcGF0dGVybiA9IEBwYXR0ZXJuT2Zmc2V0XG4gICAgICAgIFxuICAgICAgICAjIyMqXG4gICAgICAgICogSW5kaWNhdGVzIGlmIGl0cyBzdGlsbCB0aGUgZmlyc3QgcnVuIG9mIHRoZSBhbmltYXRpb24uXG4gICAgICAgICogQHByb3BlcnR5IGZpcnN0UnVuXG4gICAgICAgICogQHR5cGUgYm9vbGVhblxuICAgICAgICAqIEBwcm90ZWN0ZWRcbiAgICAgICAgIyMjXG4gICAgICAgIEBmaXJzdFJ1biA9IHllc1xuICAgICAgICBcbiAgICAgICAgaWYgcmVjb3JkP1xuICAgICAgICAgICAgQHJlZnJlc2gocmVjb3JkKVxuICAgICAgICAgICAgQHN0YXJ0KClcbiAgICAgXG4gICAgIyMjKlxuICAgICogU2VyaWFsaXplcyB0aGUgZnJhbWUtYW5pbWF0aW9uIGludG8gYSBkYXRhLWJ1bmRsZS5cbiAgICAqXG4gICAgKiBAbWV0aG9kIHRvRGF0YUJ1bmRsZVxuICAgICMjIyAgIFxuICAgIHRvRGF0YUJ1bmRsZTogLT5cbiAgICAgICAgbmFtZTogQG5hbWUsXG4gICAgICAgIGZyYW1lc1g6IEBmcmFtZXNYLFxuICAgICAgICBmcmFtZXNZOiBAZnJhbWVzWSxcbiAgICAgICAgZnJhbWVSYW5nZTogQGZyYW1lUmFuZ2UsXG4gICAgICAgIHJlcGV0aXRpb25GcmFtZVJhbmdlOiBAcmVwZXRpdGlvbkZyYW1lUmFuZ2UsXG4gICAgICAgIGZyYW1lQ291bnQ6IEBmcmFtZUNvdW50LFxuICAgICAgICBncmFwaGljOiBAZ3JhcGhpYyxcbiAgICAgICAgcmVwZWF0OiBAcmVwZWF0LFxuICAgICAgICBwb3NpdGlvbjogQHBvc2l0aW9uLFxuICAgICAgICBmcmFtZUR1cmF0aW9uOiBAZnJhbWVEdXJhdGlvbixcbiAgICAgICAgZnJhbWVDb3VudGVyOiBAZnJhbWVDb3VudGVyLFxuICAgICAgICBkdXJhdGlvbjogQGR1cmF0aW9uLFxuICAgICAgICBpc1J1bm5pbmc6IEBpc1J1bm5pbmcsXG4gICAgICAgIHBhdHRlcm5PZmZzZXQ6IEBwYXR0ZXJuT2Zmc2V0LFxuICAgICAgICBwYXR0ZXJuOiBAcGF0dGVybixcbiAgICAgICAgZmlyc3RSdW46IEBmaXJzdFJ1blxuICAgICBcbiAgICAjIyMqXG4gICAgKiBSZWZyZXNoZXMgdGhlIGFuaW1hdGlvbiBmcm9tIHRoZSBzcGVjaWZpZWQgZGF0YWJhc2UtcmVjb3JkLlxuICAgICpcbiAgICAqIEBtZXRob2QgcmVmcmVzaFxuICAgICogQHBhcmFtIHtPYmplY3R9IHJlY29yZCAtIFRoZSBhbmltYXRpb24gZGF0YWJhc2UtcmVjb3JkLlxuICAgICMjIyAgXG4gICAgIyBGSVhNRTogSXMgdGhhdCBtZXRob2Qgc3RpbGwgaW4gdXNlP1xuICAgIHJlZnJlc2g6IChyZWNvcmQpIC0+XG4gICAgICAgICMjIypcbiAgICAgICAgKiBUaGUgaW1hZ2VzIHRvIGFuaW1hdGUgdGhyb3VnaC5cbiAgICAgICAgKiBAcHJvcGVydHkgaW1hZ2VzXG4gICAgICAgICogQHR5cGUgc3RyaW5nW11cbiAgICAgICAgIyMjXG4gICAgICAgIEBuYW1lID0gcmVjb3JkLm5hbWVcbiAgICAgICAgQGZyYW1lc1ggPSByZWNvcmQuZnJhbWVzWCB8fCAxXG4gICAgICAgIEBmcmFtZXNZID0gcmVjb3JkLmZyYW1lc1kgfHwgMVxuICAgICAgICBAZnJhbWVSYW5nZSA9IHsgc3RhcnQ6IE1hdGgubWluKHJlY29yZC5mcmFtZVJhbmdlLnN0YXJ0LCByZWNvcmQuZnJhbWVSYW5nZS5lbmQpLCBlbmQ6IE1hdGgubWF4KHJlY29yZC5mcmFtZVJhbmdlLnN0YXJ0LCByZWNvcmQuZnJhbWVSYW5nZS5lbmQpIH1cbiAgICAgICAgQHJlcGV0aXRpb25GcmFtZVJhbmdlID0gaWYgcmVjb3JkLnVzZVJlcGV0aXRpb25GcmFtZVJhbmdlIGFuZCByZWNvcmQucmVwZXRpdGlvbkZyYW1lUmFuZ2U/IHRoZW4gcmVjb3JkLnJlcGV0aXRpb25GcmFtZVJhbmdlIGVsc2UgQGZyYW1lUmFuZ2VcbiAgICAgICAgQGZyYW1lQ291bnQgPSAoQGZyYW1lUmFuZ2UuZW5kIC0gQGZyYW1lUmFuZ2Uuc3RhcnQpICsgMVxuICAgICAgICBAZ3JhcGhpYyA9IHJlY29yZC5ncmFwaGljXG4gICAgICAgIEByZXBlYXQgPSByZWNvcmQucmVwZWF0IHx8IG5vXG4gICAgICAgIEBwb3NpdGlvbiA9IHJlY29yZC5wb3NpdGlvblxuXG4gICAgICAgIEBmcmFtZUR1cmF0aW9uID0gaWYgcmVjb3JkLmR1cmF0aW9uPyB0aGVuIE1hdGgucm91bmQocmVjb3JkLmR1cmF0aW9uIC8gQGZyYW1lQ291bnQpIGVsc2UgMTBcbiAgICAgICAgQGZyYW1lQ291bnRlciA9IDBcbiAgICAgICAgQGR1cmF0aW9uID0gcmVjb3JkLmR1cmF0aW9uIHx8IDEwXG4gICAgICAgIEBpc1J1bm5pbmcgPSBub1xuICAgICAgICBAcGF0dGVybk9mZnNldCA9IEBmcmFtZVJhbmdlLnN0YXJ0XG4gICAgICAgIEBwYXR0ZXJuID0gQHBhdHRlcm5PZmZzZXRcbiAgICAgICAgQGZpcnN0UnVuID0geWVzXG4gICAgICAgIFxuICAgICMjIypcbiAgICAqIFN0YXJ0cyB0aGUgZnJhbWUtYW5pbWF0aW9uLlxuICAgICpcbiAgICAqIEBtZXRob2Qgc3RhcnRcbiAgICAjIyMgICBcbiAgICBzdGFydDogKGNhbGxiYWNrKSAtPlxuICAgICAgICBAY2FsbGJhY2sgPSBjYWxsYmFja1xuICAgICAgICBAaXNSdW5uaW5nID0geWVzXG4gICAgICAgIEBmaXJzdFJ1biA9IHllc1xuICAgICAgICBAZnJhbWVDb3VudGVyID0gMFxuICAgICAgICBAZnJhbWVDb3VudCA9IChAZnJhbWVSYW5nZS5lbmQgLSBAZnJhbWVSYW5nZS5zdGFydCkgKyAxXG4gICAgICAgIEBmcmFtZUR1cmF0aW9uID0gTWF0aC5yb3VuZChAZHVyYXRpb24gLyBAZnJhbWVDb3VudClcbiAgICAgICAgQHBhdHRlcm5PZmZzZXQgPSBAZnJhbWVSYW5nZS5zdGFydFxuICAgICAgICBcbiAgICAjIyMqXG4gICAgKiBVcGRhdGVzIHRoZSBmcmFtZS1hbmltYXRpb24uXG4gICAgKlxuICAgICogQG1ldGhvZCB1cGRhdGVcbiAgICAjIyNcbiAgICB1cGRhdGU6IC0+XG4gICAgICAgIHN1cGVyXG4gICAgICAgIGlmIG5vdCBAaXNSdW5uaW5nIHRoZW4gcmV0dXJuXG4gICAgICAgIFxuICAgICAgICBpZiBAZnJhbWVDb3VudGVyID49IEBkdXJhdGlvblxuICAgICAgICAgICAgaWYgQHJlcGVhdFxuICAgICAgICAgICAgICAgIEBmaXJzdFJ1biA9IG5vXG4gICAgICAgICAgICAgICAgQGZyYW1lQ291bnRlciA9IDBcbiAgICAgICAgICAgICAgICBAZnJhbWVDb3VudCA9IChAcmVwZXRpdGlvbkZyYW1lUmFuZ2UuZW5kIC0gQHJlcGV0aXRpb25GcmFtZVJhbmdlLnN0YXJ0KSArIDFcbiAgICAgICAgICAgICAgICBAZnJhbWVEdXJhdGlvbiA9IE1hdGguY2VpbChAZHVyYXRpb24gLyBAZnJhbWVDb3VudClcbiAgICAgICAgICAgICAgICBAcGF0dGVybk9mZnNldCA9IEByZXBldGl0aW9uRnJhbWVSYW5nZS5zdGFydFxuICAgICAgICAgICAgZWxzZVxuICAgICAgICAgICAgICAgIEBpc1J1bm5pbmcgPSBub1xuICAgICAgICAgICAgICAgIEBvbkZpbmlzaD8odGhpcylcbiAgICAgICAgICAgICAgICBAY2FsbGJhY2s/KEBvYmplY3QsIHRoaXMpXG4gICAgICAgICAgICAgICAgcmV0dXJuXG5cbiAgICAgICAgQHBhdHRlcm4gPSBAcGF0dGVybk9mZnNldCArIE1hdGguZmxvb3IoQGZyYW1lQ291bnRlciAvIEBmcmFtZUR1cmF0aW9uKSBcbiAgICAgICAgQGZyYW1lQ291bnRlcisrXG4gICAgICAgIFxuICAgICAgICBpZiBAb2JqZWN0P1xuICAgICAgICAgICAgYml0bWFwID0gQG9iamVjdC5iaXRtYXAgfHwgUmVzb3VyY2VNYW5hZ2VyLmdldEJpdG1hcChcIiN7QG9iamVjdC5pbWFnZUZvbGRlcnx8XCJHcmFwaGljcy9QaWN0dXJlc1wifS8je0BvYmplY3QuaW1hZ2V9XCIpXG4gICAgICAgICAgICBcbiAgICAgICAgICAgIGlmIGJpdG1hcD9cbiAgICAgICAgICAgICAgICBmcmFtZVdpZHRoID0gTWF0aC5mbG9vcihiaXRtYXAud2lkdGggLyBAZnJhbWVzWClcbiAgICAgICAgICAgICAgICBmcmFtZUhlaWdodCA9IE1hdGguZmxvb3IoYml0bWFwLmhlaWdodCAvIEBmcmFtZXNZKVxuICAgICAgICAgICAgICAgIGNvbHVtbiA9IEBwYXR0ZXJuICUgQGZyYW1lc1hcbiAgICAgICAgICAgICAgICByb3cgPSBNYXRoLmZsb29yKEBwYXR0ZXJuIC8gQGZyYW1lc1gpXG4gICAgICAgICAgICAgICAgQG9iamVjdC5zcmNSZWN0LnNldChjb2x1bW4gKiBmcmFtZVdpZHRoLCByb3cgKiBmcmFtZUhlaWdodCwgZnJhbWVXaWR0aCwgZnJhbWVIZWlnaHQpXG4gICAgICAgICAgICAgICAgQG9iamVjdC5kc3RSZWN0LndpZHRoID0gQG9iamVjdC5zcmNSZWN0LndpZHRoXG4gICAgICAgICAgICAgICAgQG9iamVjdC5kc3RSZWN0LmhlaWdodCA9IEBvYmplY3Quc3JjUmVjdC5oZWlnaHRcbiAgICAgICAgICAgICAgICBcblxud2luZG93LkNvbXBvbmVudF9GcmFtZUFuaW1hdGlvbiA9IENvbXBvbmVudF9GcmFtZUFuaW1hdGlvblxuZ3MuQ29tcG9uZW50X0ZyYW1lQW5pbWF0aW9uID0gQ29tcG9uZW50X0ZyYW1lQW5pbWF0aW9uIl19\n//# sourceURL=Component_FrameAnimation_98.js",
11 + "parentId": "A8E9945CKEE5CA4855SAC81E480CB8098E0E"
12 + },
13 + "summary": [
14 + "name",
15 + "type",
16 + "order"
17 + ]
18 + }