1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
|
{
"uid": "BAE2E179KA229A4B14S98B3EE2F49426AC0A",
"isLoaded": true,
"lastModificationTime": 0,
"items": {
"name": "Component_CharacterBehavior",
"type": "game_script",
"order": 16,
"content": "# ===================================================================\n#\n# Script: Component_CharacterBehavior\n#\n# $$COPYRIGHT$$\n#\n# ===================================================================\nclass Component_CharacterBehavior extends gs.Component\n ###*\n * Called if this object instance is restored from a data-bundle. It can be used\n * re-assign event-handler, anonymous functions, etc.\n * \n * @method onDataBundleRestore.\n * @param Object data - The data-bundle\n * @param gs.ObjectCodecContext context - The codec-context.\n ###\n onDataBundleRestore: (data, context) ->\n @setupEventHandlers()\n \n ###*\n * A behavior-component which handles the character-specific behavior like\n * talking and idle.\n *\n * @module vn\n * @class Component_CharacterBehavior\n * @extends gs.Component\n * @memberof vn\n * @constructor\n ###\n constructor: () ->\n super\n\n ###*\n * @property imageIndex\n * @type number\n * @private\n ###\n @imageIndex = 0\n \n ###*\n * @property imageDuration\n * @type number\n * @private\n ###\n @imageDuration = 30\n \n ###*\n * @property idleTime\n * @type number\n * @private\n ###\n \n @idleTime = 120 + 120 * Math.random()\n ###*\n * Indicates if the character is currently talking.\n * @property talking\n * @type boolean\n ###\n @talking = no\n \n ###*\n * @property initialized\n * @type boolean\n * @private\n ###\n @initialized = no\n \n ###*\n * Temporary game settings used by this character.\n * @property imageIndex\n * @type number\n ###\n @tempSettings = GameManager.tempSettings\n \n ###*\n * Adds event-handlers\n *\n * @method setupEventHandlers\n ### \n setupEventHandlers: ->\n gs.GlobalEventManager.on \"talkingStarted\", (e) => \n if e.character?.index == @object.rid\n @object.talking = yes\n @imageIndex = 0\n gs.GlobalEventManager.on \"talkingEnded\", (e) => \n if e.character?.index == @object.rid\n @object.talking = no\n @imageIndex = 0\n \n ###*\n * Initializes the component. Adds event-handlers.\n *\n * @method setup\n ###\n setup: ->\n @initialized = yes\n @setupEventHandlers()\n @update()\n \n ###*\n * Changes the characters expression using blending. If the duration is set\n * to 0 the expression change is executed immediately without animation.\n *\n * @method changeExpression\n * @param {vn.CharacterExpression} expression - The character expression database-record.\n * @param {number} duration - The animation-duration in frames. Pass 0 to skip animation.\n * @param {function} [callback] An optional callback-function called when the change is finished. \n ###\n changeExpression: (expression, animation, easing, duration, callback) ->\n prevExpression = @object.expression\n @object.expression = expression\n \n if prevExpression?.idle?.length > 0 and @object.expression? and prevExpression != @object.expression\n @imageIndex = 0\n\n picture = new gs.Object_Picture()\n picture.imageFolder = \"Graphics/Characters\"\n picture.image = prevExpression.idle[0].resource.name\n picture.update()\n picture.dstRect.x = @object.dstRect.x + Math.round((@object.dstRect.width - picture.dstRect.width) / 2)\n picture.dstRect.y = @object.dstRect.y + Math.round((@object.dstRect.height - picture.dstRect.height) / 2)\n picture.zIndex = @object.zIndex - 1\n picture.zoom.x = @object.zoom.x\n picture.zoom.y = @object.zoom.y\n picture.update()\n \n \n @object.parent.addObject(picture)\n \n switch animation.fading\n when 0 # Overlay\n @object.animator.appear(@object.dstRect.x, @object.dstRect.y, animation, easing, duration, () ->\n picture.dispose()\n callback?()\n )\n @object.update()\n when 1 # Cross Fade\n picture.animator.disappear(animation, easing, duration, (object) -> \n object.dispose())\n picture.update()\n \n @object.animator.appear(@object.dstRect.x, @object.dstRect.y, animation, easing, duration, (object) -> \n callback?())\n @object.update()\n else\n callback?()\n \n \n ###*\n * Lets the character start talking.\n *\n * @method startTalking\n ### \n startTalking: -> @object.talking = yes\n \n ###*\n * Lets the character stop with talking.\n *\n * @method stopTalking\n ###\n stopTalking: -> @object.talking = no\n \n ###*\n * Updates character's talking-animation.\n *\n * @method updateTalking\n * @protected\n ###\n updateTalking: ->\n if @tempSettings.skip and @object.expression.talking?.length > 0\n @object.talking = no\n @imageIndex = 0\n @object.image = @object.expression.talking[@imageIndex].resource.name\n else if @object.expression?\n if @object.expression.talking?.length > 0\n @imageDuration--\n if @imageDuration <= 0\n imageIndex = @imageIndex\n while imageIndex == @imageIndex and @object.expression.talking.length > 1\n @imageIndex = Math.round(Math.random() * (@object.expression.talking.length-1))\n speed = @object.expression.talkingSpeed / 100 * 5\n @imageDuration = speed + Math.round(speed * Math.random())\n @object.image = @object.expression.talking[@imageIndex].resource.name\n else\n @updateIdle()\n \n ###*\n * Updates character's idle-animation.\n *\n * @method updateIdle\n * @protected\n ### \n updateIdle: ->\n if @object.expression? and @object.expression.idle?.length > 0\n if @imageDuration <= 0\n @idleTime--\n if @idleTime <= 0\n @idleTime = @object.expression.idleTime.start + (@object.expression.idleTime.end - @object.expression.idleTime.start) * Math.random()\n @imageDuration = @object.expression.idleSpeed / 100 * 5\n \n if @imageDuration > 0\n @imageDuration--\n if @imageDuration <= 0\n @imageIndex++\n if @imageIndex >= @object.expression.idle.length\n @imageIndex = 0\n @imageDuration = 0\n else\n @imageDuration = @object.expression.idleSpeed / 100 * 5\n @object.image = @object.expression.idle[@imageIndex].resource.name\n \n ###*\n * Updates character logic & animation-handling.\n *\n * @method update\n ### \n update: ->\n super\n if not @initialized then @setup()\n \n if @object.talking\n @updateTalking()\n else\n @updateIdle()\n \n \n \nvn.Component_CharacterBehavior = Component_CharacterBehavior",
"parentId": "D3325122KACDEA4515SB731E37A42B9D779F",
"folder": false,
"compiledContent": "var Component_CharacterBehavior,\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_CharacterBehavior = (function(superClass) {\n extend(Component_CharacterBehavior, superClass);\n\n\n /**\n * Called if this object instance is restored from a data-bundle. It can be used\n * re-assign event-handler, anonymous functions, etc.\n * \n * @method onDataBundleRestore.\n * @param Object data - The data-bundle\n * @param gs.ObjectCodecContext context - The codec-context.\n */\n\n Component_CharacterBehavior.prototype.onDataBundleRestore = function(data, context) {\n return this.setupEventHandlers();\n };\n\n\n /**\n * A behavior-component which handles the character-specific behavior like\n * talking and idle.\n *\n * @module vn\n * @class Component_CharacterBehavior\n * @extends gs.Component\n * @memberof vn\n * @constructor\n */\n\n function Component_CharacterBehavior() {\n Component_CharacterBehavior.__super__.constructor.apply(this, arguments);\n\n /**\n * @property imageIndex\n * @type number\n * @private\n */\n this.imageIndex = 0;\n\n /**\n * @property imageDuration\n * @type number\n * @private\n */\n this.imageDuration = 30;\n\n /**\n * @property idleTime\n * @type number\n * @private\n */\n this.idleTime = 120 + 120 * Math.random();\n\n /**\n * Indicates if the character is currently talking.\n * @property talking\n * @type boolean\n */\n this.talking = false;\n\n /**\n * @property initialized\n * @type boolean\n * @private\n */\n this.initialized = false;\n\n /**\n * Temporary game settings used by this character.\n * @property imageIndex\n * @type number\n */\n this.tempSettings = GameManager.tempSettings;\n }\n\n\n /**\n * Adds event-handlers\n *\n * @method setupEventHandlers\n */\n\n Component_CharacterBehavior.prototype.setupEventHandlers = function() {\n gs.GlobalEventManager.on(\"talkingStarted\", (function(_this) {\n return function(e) {\n var ref;\n if (((ref = e.character) != null ? ref.index : void 0) === _this.object.rid) {\n _this.object.talking = true;\n return _this.imageIndex = 0;\n }\n };\n })(this));\n return gs.GlobalEventManager.on(\"talkingEnded\", (function(_this) {\n return function(e) {\n var ref;\n if (((ref = e.character) != null ? ref.index : void 0) === _this.object.rid) {\n _this.object.talking = false;\n return _this.imageIndex = 0;\n }\n };\n })(this));\n };\n\n\n /**\n * Initializes the component. Adds event-handlers.\n *\n * @method setup\n */\n\n Component_CharacterBehavior.prototype.setup = function() {\n this.initialized = true;\n this.setupEventHandlers();\n return this.update();\n };\n\n\n /**\n * Changes the characters expression using blending. If the duration is set\n * to 0 the expression change is executed immediately without animation.\n *\n * @method changeExpression\n * @param {vn.CharacterExpression} expression - The character expression database-record.\n * @param {number} duration - The animation-duration in frames. Pass 0 to skip animation.\n * @param {function} [callback] An optional callback-function called when the change is finished.\n */\n\n Component_CharacterBehavior.prototype.changeExpression = function(expression, animation, easing, duration, callback) {\n var picture, prevExpression, ref;\n prevExpression = this.object.expression;\n this.object.expression = expression;\n if ((prevExpression != null ? (ref = prevExpression.idle) != null ? ref.length : void 0 : void 0) > 0 && (this.object.expression != null) && prevExpression !== this.object.expression) {\n this.imageIndex = 0;\n picture = new gs.Object_Picture();\n picture.imageFolder = \"Graphics/Characters\";\n picture.image = prevExpression.idle[0].resource.name;\n picture.update();\n picture.dstRect.x = this.object.dstRect.x + Math.round((this.object.dstRect.width - picture.dstRect.width) / 2);\n picture.dstRect.y = this.object.dstRect.y + Math.round((this.object.dstRect.height - picture.dstRect.height) / 2);\n picture.zIndex = this.object.zIndex - 1;\n picture.zoom.x = this.object.zoom.x;\n picture.zoom.y = this.object.zoom.y;\n picture.update();\n this.object.parent.addObject(picture);\n switch (animation.fading) {\n case 0:\n this.object.animator.appear(this.object.dstRect.x, this.object.dstRect.y, animation, easing, duration, function() {\n picture.dispose();\n return typeof callback === \"function\" ? callback() : void 0;\n });\n return this.object.update();\n case 1:\n picture.animator.disappear(animation, easing, duration, function(object) {\n return object.dispose();\n });\n picture.update();\n this.object.animator.appear(this.object.dstRect.x, this.object.dstRect.y, animation, easing, duration, function(object) {\n return typeof callback === \"function\" ? callback() : void 0;\n });\n return this.object.update();\n }\n } else {\n return typeof callback === \"function\" ? callback() : void 0;\n }\n };\n\n\n /**\n * Lets the character start talking.\n *\n * @method startTalking\n */\n\n Component_CharacterBehavior.prototype.startTalking = function() {\n return this.object.talking = true;\n };\n\n\n /**\n * Lets the character stop with talking.\n *\n * @method stopTalking\n */\n\n Component_CharacterBehavior.prototype.stopTalking = function() {\n return this.object.talking = false;\n };\n\n\n /**\n * Updates character's talking-animation.\n *\n * @method updateTalking\n * @protected\n */\n\n Component_CharacterBehavior.prototype.updateTalking = function() {\n var imageIndex, ref, ref1, speed;\n if (this.tempSettings.skip && ((ref = this.object.expression.talking) != null ? ref.length : void 0) > 0) {\n this.object.talking = false;\n this.imageIndex = 0;\n return this.object.image = this.object.expression.talking[this.imageIndex].resource.name;\n } else if (this.object.expression != null) {\n if (((ref1 = this.object.expression.talking) != null ? ref1.length : void 0) > 0) {\n this.imageDuration--;\n if (this.imageDuration <= 0) {\n imageIndex = this.imageIndex;\n while (imageIndex === this.imageIndex && this.object.expression.talking.length > 1) {\n this.imageIndex = Math.round(Math.random() * (this.object.expression.talking.length - 1));\n }\n speed = this.object.expression.talkingSpeed / 100 * 5;\n this.imageDuration = speed + Math.round(speed * Math.random());\n }\n return this.object.image = this.object.expression.talking[this.imageIndex].resource.name;\n } else {\n return this.updateIdle();\n }\n }\n };\n\n\n /**\n * Updates character's idle-animation.\n *\n * @method updateIdle\n * @protected\n */\n\n Component_CharacterBehavior.prototype.updateIdle = function() {\n var ref;\n if ((this.object.expression != null) && ((ref = this.object.expression.idle) != null ? ref.length : void 0) > 0) {\n if (this.imageDuration <= 0) {\n this.idleTime--;\n if (this.idleTime <= 0) {\n this.idleTime = this.object.expression.idleTime.start + (this.object.expression.idleTime.end - this.object.expression.idleTime.start) * Math.random();\n this.imageDuration = this.object.expression.idleSpeed / 100 * 5;\n }\n }\n if (this.imageDuration > 0) {\n this.imageDuration--;\n if (this.imageDuration <= 0) {\n this.imageIndex++;\n if (this.imageIndex >= this.object.expression.idle.length) {\n this.imageIndex = 0;\n this.imageDuration = 0;\n } else {\n this.imageDuration = this.object.expression.idleSpeed / 100 * 5;\n }\n }\n }\n return this.object.image = this.object.expression.idle[this.imageIndex].resource.name;\n }\n };\n\n\n /**\n * Updates character logic & animation-handling.\n *\n * @method update\n */\n\n Component_CharacterBehavior.prototype.update = function() {\n Component_CharacterBehavior.__super__.update.apply(this, arguments);\n if (!this.initialized) {\n this.setup();\n }\n if (this.object.talking) {\n return this.updateTalking();\n } else {\n return this.updateIdle();\n }\n };\n\n return Component_CharacterBehavior;\n\n})(gs.Component);\n\nvn.Component_CharacterBehavior = Component_CharacterBehavior;\n\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQU9BLElBQUEsMkJBQUE7RUFBQTs7O0FBQU07Ozs7QUFDRjs7Ozs7Ozs7O3dDQVFBLG1CQUFBLEdBQXFCLFNBQUMsSUFBRCxFQUFPLE9BQVA7V0FDakIsSUFBQyxDQUFBLGtCQUFELENBQUE7RUFEaUI7OztBQUdyQjs7Ozs7Ozs7Ozs7RUFVYSxxQ0FBQTtJQUNULDhEQUFBLFNBQUE7O0FBRUE7Ozs7O0lBS0EsSUFBQyxDQUFBLFVBQUQsR0FBYzs7QUFFZDs7Ozs7SUFLQSxJQUFDLENBQUEsYUFBRCxHQUFpQjs7QUFFakI7Ozs7O0lBTUEsSUFBQyxDQUFBLFFBQUQsR0FBWSxHQUFBLEdBQU0sR0FBQSxHQUFNLElBQUksQ0FBQyxNQUFMLENBQUE7O0FBQ3hCOzs7OztJQUtBLElBQUMsQ0FBQSxPQUFELEdBQVc7O0FBRVg7Ozs7O0lBS0EsSUFBQyxDQUFBLFdBQUQsR0FBZTs7QUFFZjs7Ozs7SUFLQSxJQUFDLENBQUEsWUFBRCxHQUFnQixXQUFXLENBQUM7RUEzQ25COzs7QUE2Q2I7Ozs7Ozt3Q0FLQSxrQkFBQSxHQUFvQixTQUFBO0lBQ2hCLEVBQUUsQ0FBQyxrQkFBa0IsQ0FBQyxFQUF0QixDQUF5QixnQkFBekIsRUFBMkMsQ0FBQSxTQUFBLEtBQUE7YUFBQSxTQUFDLENBQUQ7QUFDdkMsWUFBQTtRQUFBLHNDQUFjLENBQUUsZUFBYixLQUFzQixLQUFDLENBQUEsTUFBTSxDQUFDLEdBQWpDO1VBQ0ksS0FBQyxDQUFBLE1BQU0sQ0FBQyxPQUFSLEdBQWtCO2lCQUNsQixLQUFDLENBQUEsVUFBRCxHQUFjLEVBRmxCOztNQUR1QztJQUFBLENBQUEsQ0FBQSxDQUFBLElBQUEsQ0FBM0M7V0FJQSxFQUFFLENBQUMsa0JBQWtCLENBQUMsRUFBdEIsQ0FBeUIsY0FBekIsRUFBeUMsQ0FBQSxTQUFBLEtBQUE7YUFBQSxTQUFDLENBQUQ7QUFDckMsWUFBQTtRQUFBLHNDQUFj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MkJBQUgsR0FBaUMiLCJzb3VyY2VzQ29udGVudCI6WyIjID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbiNcbiMgICBTY3JpcHQ6IENvbXBvbmVudF9DaGFyYWN0ZXJCZWhhdmlvclxuI1xuIyAgICQkQ09QWVJJR0hUJCRcbiNcbiMgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuY2xhc3MgQ29tcG9uZW50X0NoYXJhY3RlckJlaGF2aW9yIGV4dGVuZHMgZ3MuQ29tcG9uZW50XG4gICAgIyMjKlxuICAgICogQ2FsbGVkIGlmIHRoaXMgb2JqZWN0IGluc3RhbmNlIGlzIHJlc3RvcmVkIGZyb20gYSBkYXRhLWJ1bmRsZS4gSXQgY2FuIGJlIHVzZWRcbiAgICAqIHJlLWFzc2lnbiBldmVudC1oYW5kbGVyLCBhbm9ueW1vdXMgZnVuY3Rpb25zLCBldGMuXG4gICAgKiBcbiAgICAqIEBtZXRob2Qgb25EYXRhQnVuZGxlUmVzdG9yZS5cbiAgICAqIEBwYXJhbSBPYmplY3QgZGF0YSAtIFRoZSBkYXRhLWJ1bmRsZVxuICAgICogQHBhcmFtIGdzLk9iamVjdENvZGVjQ29udGV4dCBjb250ZXh0IC0gVGhlIGNvZGVjLWNvbnRleHQuXG4gICAgIyMjXG4gICAgb25EYXRhQnVuZGxlUmVzdG9yZTogKGRhdGEsIGNvbnRleHQpIC0+XG4gICAgICAgIEBzZXR1cEV2ZW50SGFuZGxlcnMoKVxuICAgICAgICBcbiAgICAjIyMqXG4gICAgKiBBIGJlaGF2aW9yLWNvbXBvbmVudCB3aGljaCBoYW5kbGVzIHRoZSBjaGFyYWN0ZXItc3BlY2lmaWMgYmVoYXZpb3IgbGlrZVxuICAgICogdGFsa2luZyBhbmQgaWRsZS5cbiAgICAqXG4gICAgKiBAbW9kdWxlIHZuXG4gICAgKiBAY2xhc3MgQ29tcG9uZW50X0NoYXJhY3RlckJlaGF2aW9yXG4gICAgKiBAZXh0ZW5kcyBncy5Db21wb25lbnRcbiAgICAqIEBtZW1iZXJvZiB2blxuICAgICogQGNvbnN0cnVjdG9yXG4gICAgIyMjXG4gICAgY29uc3RydWN0b3I6ICgpIC0+XG4gICAgICAgIHN1cGVyXG5cbiAgICAgICAgIyMjKlxuICAgICAgICAqIEBwcm9wZXJ0eSBpbWFnZUluZGV4XG4gICAgICAgICogQHR5cGUgbnVtYmVyXG4gICAgICAgICogQHByaXZhdGVcbiAgICAgICAgIyMjXG4gICAgICAgIEBpbWFnZUluZGV4ID0gMFxuICAgICAgICBcbiAgICAgICAgIyMjKlxuICAgICAgICAqIEBwcm9wZXJ0eSBpbWFnZUR1cmF0aW9uXG4gICAgICAgICogQHR5cGUgbnVtYmVyXG4gICAgICAgICogQHByaXZhdGVcbiAgICAgICAgIyMjXG4gICAgICAgIEBpbWFnZUR1cmF0aW9uID0gMzBcbiAgICAgICAgXG4gICAgICAgICMjIypcbiAgICAgICAgKiBAcHJvcGVydHkgaWRsZVRpbWVcbiAgICAgICAgKiBAdHlwZSBudW1iZXJcbiAgICAgICAgKiBAcHJpdmF0ZVxuICAgICAgICAjIyNcbiAgICAgICAgXG4gICAgICAgIEBpZGxlVGltZSA9IDEyMCArIDEyMCAqIE1hdGgucmFuZG9tKClcbiAgICAgICAgIyMjKlxuICAgICAgICAqIEluZGljYXRlcyBpZiB0aGUgY2hhcmFjdGVyIGlzIGN1cnJlbnRseSB0YWxraW5nLlxuICAgICAgICAqIEBwcm9wZXJ0eSB0YWxraW5nXG4gICAgICAgICogQHR5cGUgYm9vbGVhblxuICAgICAgICAjIyNcbiAgICAgICAgQHRhbGtpbmcgPSBub1xuICAgICAgXG4gICAgICAgICMjIypcbiAgICAgICAgKiBAcHJvcGVydHkgaW5pdGlhbGl6ZWRcbiAgICAgICAgKiBAdHlwZSBib29sZWFuXG4gICAgICAgICogQHByaXZhdGVcbiAgICAgICAgIyMjXG4gICAgICAgIEBpbml0aWFsaXplZCA9IG5vXG4gICAgICAgIFxuICAgICAgICAjIyMqXG4gICAgICAgICogVGVtcG9yYXJ5IGdhbWUgc2V0dGluZ3MgdXNlZCBieSB0aGlzIGNoYXJhY3Rlci5cbiAgICAgICAgKiBAcHJvcGVydHkgaW1hZ2VJbmRleFxuICAgICAgICAqIEB0eXBlIG51bWJlclxuICAgICAgICAjIyNcbiAgICAgICAgQHRlbXBTZXR0aW5ncyA9IEdhbWVNYW5hZ2VyLnRlbXBTZXR0aW5nc1xuICAgICAgICBcbiAgICAjIyMqXG4gICAgKiBBZGRzIGV2ZW50LWhhbmRsZXJzXG4gICAgKlxuICAgICogQG1ldGhvZCBzZXR1cEV2ZW50SGFuZGxlcnNcbiAgICAjIyMgXG4gICAgc2V0dXBFdmVudEhhbmRsZXJzOiAtPlxuICAgICAgICBncy5HbG9iYWxFdmVudE1hbmFnZXIub24gXCJ0YWxraW5nU3RhcnRlZFwiLCAoZSkgPT4gXG4gICAgICAgICAgICBpZiBlLmNoYXJhY3Rlcj8uaW5kZXggPT0gQG9iamVjdC5yaWRcbiAgICAgICAgICAgICAgICBAb2JqZWN0LnRhbGtpbmcgPSB5ZXNcbiAgICAgICAgICAgICAgICBAaW1hZ2VJbmRleCA9IDBcbiAgICAgICAgZ3MuR2xvYmFsRXZlbnRNYW5hZ2VyLm9uIFwidGFsa2luZ0VuZGVkXCIsIChlKSA9PiBcbiAgICAgICAgICAgIGlmIGUuY2hhcmFjdGVyPy5pbmRleCA9PSBAb2JqZWN0LnJpZFxuICAgICAgICAgICAgICAgIEBvYmplY3QudGFsa2luZyA9IG5vXG4gICAgICAgICAgICAgICAgQGltYWdlSW5kZXggPSAwXG4gICAgICAgICAgICAgICAgXG4gICAgIyMjKlxuICAgICogSW5pdGlhbGl6ZXMgdGhlIGNvbXBvbmVudC4gQWRkcyBldmVudC1oYW5kbGVycy5cbiAgICAqXG4gICAgKiBAbWV0aG9kIHNldHVwXG4gICAgIyMjXG4gICAgc2V0dXA6IC0+XG4gICAgICAgIEBpbml0aWFsaXplZCA9IHllc1xuICAgICAgICBAc2V0dXBFdmVudEhhbmRsZXJzKClcbiAgICAgICAgQHVwZGF0ZSgpXG4gICAgXG4gICAgIyMjKlxuICAgICogQ2hhbmdlcyB0aGUgY2hhcmFjdGVycyBleHByZXNzaW9uIHVzaW5nIGJsZW5kaW5nLiBJZiB0aGUgZHVyYXRpb24gaXMgc2V0XG4gICAgKiB0byAwIHRoZSBleHByZXNzaW9uIGNoYW5nZSBpcyBleGVjdXRlZCBpbW1lZGlhdGVseSB3aXRob3V0IGFuaW1hdGlvbi5cbiAgICAqXG4gICAgKiBAbWV0aG9kIGNoYW5nZUV4cHJlc3Npb25cbiAgICAqIEBwYXJhbSB7dm4uQ2hhcmFjdGVyRXhwcmVzc2lvbn0gZXhwcmVzc2lvbiAtIFRoZSBjaGFyYWN0ZXIgZXhwcmVzc2lvbiBkYXRhYmFzZS1yZWNvcmQuXG4gICAgKiBAcGFyYW0ge251bWJlcn0gZHVyYXRpb24gLSBUaGUgYW5pbWF0aW9uLWR1cmF0aW9uIGluIGZyYW1lcy4gUGFzcyAwIHRvIHNraXAgYW5pbWF0aW9uLlxuICAgICogQHBhcmFtIHtmdW5jdGlvbn0gW2NhbGxiYWNrXSBBbiBvcHRpb25hbCBjYWxsYmFjay1mdW5jdGlvbiBjYWxsZWQgd2hlbiB0aGUgY2hhbmdlIGlzIGZpbmlzaGVkLiBcbiAgICAjIyNcbiAgICBjaGFuZ2VFeHByZXNzaW9uOiAoZXhwcmVzc2lvbiwgYW5pbWF0aW9uLCBlYXNpbmcsIGR1cmF0aW9uLCBjYWxsYmFjaykgLT5cbiAgICAgICAgcHJldkV4cHJlc3Npb24gPSBAb2JqZWN0LmV4cHJlc3Npb25cbiAgICAgICAgQG9iamVjdC5leHByZXNzaW9uID0gZXhwcmVzc2lvblxuICAgICAgICBcbiAgICAgICAgaWYgcHJldkV4cHJlc3Npb24/LmlkbGU/Lmxlbmd0aCA+IDAgYW5kIEBvYmplY3QuZXhwcmVzc2lvbj8gYW5kIHByZXZFeHByZXNzaW9uICE9IEBvYmplY3QuZXhwcmVzc2lvblxuICAgICAgICAgICAgQGltYWdlSW5kZXggPSAwXG5cbiAgICAgICAgICAgIHBpY3R1cmUgPSBuZXcgZ3MuT2JqZWN0X1BpY3R1cmUoKVxuICAgICAgICAgICAgcGljdHVyZS5pbWFnZUZvbGRlciA9IFwiR3JhcGhpY3MvQ2hhcmFjdGVyc1wiXG4gICAgICAgICAgICBwaWN0dXJlLmltYWdlID0gcHJldkV4cHJlc3Npb24uaWRsZVswXS5yZXNvdXJjZS5uYW1lXG4gICAgICAgICAgICBwaWN0dXJlLnVwZGF0ZSgpXG4gICAgICAgICAgICBwaWN0dXJlLmRzdFJlY3QueCA9IEBvYmplY3QuZHN0UmVjdC54ICsgTWF0aC5yb3VuZCgoQG9iamVjdC5kc3RSZWN0LndpZHRoIC0gcGljdHVyZS5kc3RSZWN0LndpZHRoKSAvIDIpXG4gICAgICAgICAgICBwaWN0dXJlLmRzdFJlY3QueSA9IEBvYmplY3QuZHN0UmVjdC55ICsgTWF0aC5yb3VuZCgoQG9iamVjdC5kc3RSZWN0LmhlaWdodCAtIHBpY3R1cmUuZHN0UmVjdC5oZWlnaHQpIC8gMilcbiAgICAgICAgICAgIHBpY3R1cmUuekluZGV4ID0gQG9iamVjdC56SW5kZXggLSAxXG4gICAgICAgICAgICBwaWN0dXJlLnpvb20ueCA9IEBvYmplY3Quem9vbS54XG4gICAgICAgICAgICBwaWN0dXJlLnpvb20ueSA9IEBvYmplY3Quem9vbS55XG4gICAgICAgICAgICBwaWN0dXJlLnVwZGF0ZSgpXG4gICAgICAgICAgICBcbiAgICAgICAgICAgIFxuICAgICAgICAgICAgQG9iamVjdC5wYXJlbnQuYWRkT2JqZWN0KHBpY3R1cmUpXG4gICAgICAgICAgICBcbiAgICAgICAgICAgIHN3aXRjaCBhbmltYXRpb24uZmFkaW5nXG4gICAgICAgICAgICAgICAgd2hlbiAwICMgT3ZlcmxheVxuICAgICAgICAgICAgICAgICAgICBAb2JqZWN0LmFuaW1hdG9yLmFwcGVhcihAb2JqZWN0LmRzdFJlY3QueCwgQG9iamVjdC5kc3RSZWN0LnksIGFuaW1hdGlvbiwgZWFzaW5nLCBkdXJhdGlvbiwgKCkgLT5cbiAgICAgICAgICAgICAgICAgICAgICAgIHBpY3R1cmUuZGlzcG9zZSgpXG4gICAgICAgICAgICAgICAgICAgICAgICBjYWxsYmFjaz8oKVxuICAgICAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgICAgICAgIEBvYmplY3QudXBkYXRlKClcbiAgICAgICAgICAgICAgICB3aGVuIDEgIyBDcm9zcyBGYWRlXG4gICAgICAgICAgICAgICAgICAgIHBpY3R1cmUuYW5pbWF0b3IuZGlzYXBwZWFyKGFuaW1hdGlvbiwgZWFzaW5nLCBkdXJhdGlvbiwgKG9iamVjdCkgLT4gXG4gICAgICAgICAgICAgICAgICAgICAgICBvYmplY3QuZGlzcG9zZSgpKVxuICAgICAgICAgICAgICAgICAgICBwaWN0dXJlLnVwZGF0ZSgpXG4gICAgICAgICAgICAgICAgICAgIFxuICAgICAgICAgICAgICAgICAgICBAb2JqZWN0LmFuaW1hdG9yLmFwcGVhcihAb2JqZWN0LmRzdFJlY3QueCwgQG9iamVjdC5kc3RSZWN0LnksIGFuaW1hdGlvbiwgZWFzaW5nLCBkdXJhdGlvbiwgKG9iamVjdCkgLT4gXG4gICAgICAgICAgICAgICAgICAgICAgICBjYWxsYmFjaz8oKSlcbiAgICAgICAgICAgICAgICAgICAgQG9iamVjdC51cGRhdGUoKVxuICAgICAgICBlbHNlXG4gICAgICAgICAgICBjYWxsYmFjaz8oKVxuICAgICAgICAgICAgXG4gICAgIFxuICAgICMjIypcbiAgICAqIExldHMgdGhlIGNoYXJhY3RlciBzdGFydCB0YWxraW5nLlxuICAgICpcbiAgICAqIEBtZXRob2Qgc3RhcnRUYWxraW5nXG4gICAgIyMjICAgICAgIFxuICAgIHN0YXJ0VGFsa2luZzogLT4gQG9iamVjdC50YWxraW5nID0geWVzXG4gICAgXG4gICAgIyMjKlxuICAgICogTGV0cyB0aGUgY2hhcmFjdGVyIHN0b3Agd2l0aCB0YWxraW5nLlxuICAgICpcbiAgICAqIEBtZXRob2Qgc3RvcFRhbGtpbmdcbiAgICAjIyNcbiAgICBzdG9wVGFsa2luZzogLT4gQG9iamVjdC50YWxraW5nID0gbm9cbiAgICBcbiAgICAjIyMqXG4gICAgKiBVcGRhdGVzIGNoYXJhY3RlcidzIHRhbGtpbmctYW5pbWF0aW9uLlxuICAgICpcbiAgICAqIEBtZXRob2QgdXBkYXRlVGFsa2luZ1xuICAgICogQHByb3RlY3RlZFxuICAgICMjI1xuICAgIHVwZGF0ZVRhbGtpbmc6IC0+XG4gICAgICAgIGlmIEB0ZW1wU2V0dGluZ3Muc2tpcCBhbmQgQG9iamVjdC5leHByZXNzaW9uLnRhbGtpbmc/Lmxlbmd0aCA+IDBcbiAgICAgICAgICAgIEBvYmplY3QudGFsa2luZyA9IG5vXG4gICAgICAgICAgICBAaW1hZ2VJbmRleCA9IDBcbiAgICAgICAgICAgIEBvYmplY3QuaW1hZ2UgPSBAb2JqZWN0LmV4cHJlc3Npb24udGFsa2luZ1tAaW1hZ2VJbmRleF0ucmVzb3VyY2UubmFtZVxuICAgICAgICBlbHNlIGlmIEBvYmplY3QuZXhwcmVzc2lvbj9cbiAgICAgICAgICAgIGlmIEBvYmplY3QuZXhwcmVzc2lvbi50YWxraW5nPy5sZW5ndGggPiAwXG4gICAgICAgICAgICAgICAgQGltYWdlRHVyYXRpb24tLVxuICAgICAgICAgICAgICAgIGlmIEBpbWFnZUR1cmF0aW9uIDw9IDBcbiAgICAgICAgICAgICAgICAgICAgaW1hZ2VJbmRleCA9IEBpbWFnZUluZGV4XG4gICAgICAgICAgICAgICAgICAgIHdoaWxlIGltYWdlSW5kZXggPT0gQGltYWdlSW5kZXggYW5kIEBvYmplY3QuZXhwcmVzc2lvbi50YWxraW5nLmxlbmd0aCA+IDFcbiAgICAgICAgICAgICAgICAgICAgICAgIEBpbWFnZUluZGV4ID0gTWF0aC5yb3VuZChNYXRoLnJhbmRvbSgpICogKEBvYmplY3QuZXhwcmVzc2lvbi50YWxraW5nLmxlbmd0aC0xKSlcbiAgICAgICAgICAgICAgICAgICAgc3BlZWQgPSBAb2JqZWN0LmV4cHJlc3Npb24udGFsa2luZ1NwZWVkIC8gMTAwICogNVxuICAgICAgICAgICAgICAgICAgICBAaW1hZ2VEdXJhdGlvbiA9IHNwZWVkICsgTWF0aC5yb3VuZChzcGVlZCAqIE1hdGgucmFuZG9tKCkpXG4gICAgICAgICAgICAgICAgQG9iamVjdC5pbWFnZSA9IEBvYmplY3QuZXhwcmVzc2lvbi50YWxraW5nW0BpbWFnZUluZGV4XS5yZXNvdXJjZS5uYW1lXG4gICAgICAgICAgICBlbHNlXG4gICAgICAgICAgICAgICAgQHVwZGF0ZUlkbGUoKVxuICAgICBcbiAgICAjIyMqXG4gICAgKiBVcGRhdGVzIGNoYXJhY3RlcidzIGlkbGUtYW5pbWF0aW9uLlxuICAgICpcbiAgICAqIEBtZXRob2QgdXBkYXRlSWRsZVxuICAgICogQHByb3RlY3RlZFxuICAgICMjIyAgICAgICBcbiAgICB1cGRhdGVJZGxlOiAtPlxuICAgICAgICBpZiBAb2JqZWN0LmV4cHJlc3Npb24/IGFuZCBAb2JqZWN0LmV4cHJlc3Npb24uaWRsZT8ubGVuZ3RoID4gMFxuICAgICAgICAgICAgaWYgQGltYWdlRHVyYXRpb24gPD0gMFxuICAgICAgICAgICAgICAgIEBpZGxlVGltZS0tXG4gICAgICAgICAgICAgICAgaWYgQGlkbGVUaW1lIDw9IDBcbiAgICAgICAgICAgICAgICAgICAgQGlkbGVUaW1lID0gQG9iamVjdC5leHByZXNzaW9uLmlkbGVUaW1lLnN0YXJ0ICsgKEBvYmplY3QuZXhwcmVzc2lvbi5pZGxlVGltZS5lbmQgLSBAb2JqZWN0LmV4cHJlc3Npb24uaWRsZVRpbWUuc3RhcnQpICogTWF0aC5yYW5kb20oKVxuICAgICAgICAgICAgICAgICAgICBAaW1hZ2VEdXJhdGlvbiA9IEBvYmplY3QuZXhwcmVzc2lvbi5pZGxlU3BlZWQgLyAxMDAgKiA1XG4gICAgICAgICAgICBcbiAgICAgICAgICAgIGlmIEBpbWFnZUR1cmF0aW9uID4gMFxuICAgICAgICAgICAgICAgIEBpbWFnZUR1cmF0aW9uLS1cbiAgICAgICAgICAgICAgICBpZiBAaW1hZ2VEdXJhdGlvbiA8PSAwXG4gICAgICAgICAgICAgICAgICAgIEBpbWFnZUluZGV4KytcbiAgICAgICAgICAgICAgICAgICAgaWYgQGltYWdlSW5kZXggPj0gQG9iamVjdC5leHByZXNzaW9uLmlkbGUubGVuZ3RoXG4gICAgICAgICAgICAgICAgICAgICAgICBAaW1hZ2VJbmRleCA9IDBcbiAgICAgICAgICAgICAgICAgICAgICAgIEBpbWFnZUR1cmF0aW9uID0gMFxuICAgICAgICAgICAgICAgICAgICBlbHNlXG4gICAgICAgICAgICAgICAgICAgICAgICBAaW1hZ2VEdXJhdGlvbiA9IEBvYmplY3QuZXhwcmVzc2lvbi5pZGxlU3BlZWQgLyAxMDAgKiA1XG4gICAgICAgICAgICBAb2JqZWN0LmltYWdlID0gQG9iamVjdC5leHByZXNzaW9uLmlkbGVbQGltYWdlSW5kZXhdLnJlc291cmNlLm5hbWVcbiAgICBcbiAgICAjIyMqXG4gICAgKiBVcGRhdGVzIGNoYXJhY3RlciBsb2dpYyAmIGFuaW1hdGlvbi1oYW5kbGluZy5cbiAgICAqXG4gICAgKiBAbWV0aG9kIHVwZGF0ZVxuICAgICMjIyAgICAgICAgICAgICAgICAgICBcbiAgICB1cGRhdGU6IC0+XG4gICAgICAgIHN1cGVyXG4gICAgICAgIGlmIG5vdCBAaW5pdGlhbGl6ZWQgdGhlbiBAc2V0dXAoKVxuICAgICAgICBcbiAgICAgICAgaWYgQG9iamVjdC50YWxraW5nXG4gICAgICAgICAgICBAdXBkYXRlVGFsa2luZygpXG4gICAgICAgIGVsc2VcbiAgICAgICAgICAgIEB1cGRhdGVJZGxlKClcbiAgICAgICAgXG4gICAgICAgIFxuICAgICAgICBcbnZuLkNvbXBvbmVudF9DaGFyYWN0ZXJCZWhhdmlvciA9IENvbXBvbmVudF9DaGFyYWN0ZXJCZWhhdmlvciJdfQ==\n//# sourceURL=Component_CharacterBehavior_157.js"
},
"summary": [
"name",
"type",
"order"
]
}
|