mirror of
https://github.com/photonstorm/phaser
synced 2024-12-26 21:13:41 +00:00
127 lines
4.6 KiB
JavaScript
127 lines
4.6 KiB
JavaScript
/**
|
|
* @author Richard Davey <rich@photonstorm.com>
|
|
* @copyright 2020 Photon Storm Ltd.
|
|
* @license {@link https://opensource.org/licenses/MIT|MIT License}
|
|
*/
|
|
|
|
var Defaults = require('../tween/Defaults');
|
|
var GetAdvancedValue = require('../../utils/object/GetAdvancedValue');
|
|
var GetBoolean = require('./GetBoolean');
|
|
var GetEaseFunction = require('./GetEaseFunction');
|
|
var GetNewValue = require('./GetNewValue');
|
|
var GetProps = require('./GetProps');
|
|
var GetTargets = require('./GetTargets');
|
|
var GetValue = require('../../utils/object/GetValue');
|
|
var GetValueOp = require('./GetValueOp');
|
|
var Tween = require('../tween/Tween');
|
|
var TweenData = require('../tween/TweenData');
|
|
|
|
/**
|
|
* Creates a new Tween.
|
|
*
|
|
* @function Phaser.Tweens.Builders.TweenBuilder
|
|
* @since 3.0.0
|
|
*
|
|
* @param {(Phaser.Tweens.TweenManager|Phaser.Tweens.Timeline)} parent - The owner of the new Tween.
|
|
* @param {Phaser.Types.Tweens.TweenBuilderConfig|object} config - Configuration for the new Tween.
|
|
* @param {Phaser.Types.Tweens.TweenConfigDefaults} defaults - Tween configuration defaults.
|
|
*
|
|
* @return {Phaser.Tweens.Tween} The new tween.
|
|
*/
|
|
var TweenBuilder = function (parent, config, defaults)
|
|
{
|
|
if (defaults === undefined)
|
|
{
|
|
defaults = Defaults;
|
|
}
|
|
|
|
// Create arrays of the Targets and the Properties
|
|
var targets = (defaults.targets) ? defaults.targets : GetTargets(config);
|
|
|
|
// var props = (defaults.props) ? defaults.props : GetProps(config);
|
|
var props = GetProps(config);
|
|
|
|
// Default Tween values
|
|
var delay = GetNewValue(config, 'delay', defaults.delay);
|
|
var duration = GetNewValue(config, 'duration', defaults.duration);
|
|
var easeParams = GetValue(config, 'easeParams', defaults.easeParams);
|
|
var ease = GetEaseFunction(GetValue(config, 'ease', defaults.ease), easeParams);
|
|
var hold = GetNewValue(config, 'hold', defaults.hold);
|
|
var repeat = GetNewValue(config, 'repeat', defaults.repeat);
|
|
var repeatDelay = GetNewValue(config, 'repeatDelay', defaults.repeatDelay);
|
|
var yoyo = GetBoolean(config, 'yoyo', defaults.yoyo);
|
|
var flipX = GetBoolean(config, 'flipX', defaults.flipX);
|
|
var flipY = GetBoolean(config, 'flipY', defaults.flipY);
|
|
|
|
var data = [];
|
|
|
|
// Loop through every property defined in the Tween, i.e.: props { x, y, alpha }
|
|
for (var p = 0; p < props.length; p++)
|
|
{
|
|
var key = props[p].key;
|
|
var value = props[p].value;
|
|
|
|
// Create 1 TweenData per target, per property
|
|
for (var t = 0; t < targets.length; t++)
|
|
{
|
|
var ops = GetValueOp(key, value);
|
|
|
|
var tweenData = TweenData(
|
|
targets[t],
|
|
t,
|
|
key,
|
|
ops.getEnd,
|
|
ops.getStart,
|
|
ops.getActive,
|
|
GetEaseFunction(GetValue(value, 'ease', ease), GetValue(value, 'easeParams', easeParams)),
|
|
GetNewValue(value, 'delay', delay),
|
|
GetNewValue(value, 'duration', duration),
|
|
GetBoolean(value, 'yoyo', yoyo),
|
|
GetNewValue(value, 'hold', hold),
|
|
GetNewValue(value, 'repeat', repeat),
|
|
GetNewValue(value, 'repeatDelay', repeatDelay),
|
|
GetBoolean(value, 'flipX', flipX),
|
|
GetBoolean(value, 'flipY', flipY)
|
|
);
|
|
|
|
data.push(tweenData);
|
|
}
|
|
}
|
|
|
|
var tween = new Tween(parent, data, targets);
|
|
|
|
tween.offset = GetAdvancedValue(config, 'offset', null);
|
|
tween.completeDelay = GetAdvancedValue(config, 'completeDelay', 0);
|
|
tween.loop = Math.round(GetAdvancedValue(config, 'loop', 0));
|
|
tween.loopDelay = Math.round(GetAdvancedValue(config, 'loopDelay', 0));
|
|
tween.paused = GetBoolean(config, 'paused', false);
|
|
tween.useFrames = GetBoolean(config, 'useFrames', false);
|
|
|
|
// Set the Callbacks
|
|
var scope = GetValue(config, 'callbackScope', tween);
|
|
|
|
// Callback parameters: 0 = a reference to the Tween itself, 1 = the target/s of the Tween, ... your own params
|
|
var tweenArray = [ tween, null ];
|
|
|
|
var callbacks = Tween.TYPES;
|
|
|
|
for (var i = 0; i < callbacks.length; i++)
|
|
{
|
|
var type = callbacks[i];
|
|
|
|
var callback = GetValue(config, type, false);
|
|
|
|
if (callback)
|
|
{
|
|
var callbackScope = GetValue(config, type + 'Scope', scope);
|
|
var callbackParams = GetValue(config, type + 'Params', []);
|
|
|
|
// The null is reset to be the Tween target
|
|
tween.setCallback(type, callback, tweenArray.concat(callbackParams), callbackScope);
|
|
}
|
|
}
|
|
|
|
return tween;
|
|
};
|
|
|
|
module.exports = TweenBuilder;
|