/** * @summary アニメーション設定の標準インタフェース * * @classdesc * <p>オブジェクトのアニメーション可能パラメータにアニメーションを設定 (バインド) + するための標準的なインタフェースを提供する。<p> * * <p>具体的には内部で各パラメータに適した {@link mapray.animation.Binder Binder} * インスタンスの生成し、ユーザーが簡単にアニメーションを設定できるようにする。<p> * * <p>一般的に、アニメーション可能パラメータを持つオブジェクトの <em>animation</em> * プロパティから、このインタフェースを得ることができる。<p> * * <p>注意: アニメーションを設定しているパラメータは * {@link mapray.animation.Updater Updater} のメソッドを通してのみ更新することができる。 * それ以外の手段でパラメータを更新した場合はパラメータ値に矛盾が生じる可能性がある。<p> * * @see {@link mapray.animation.Binder} * @see {@link mapray.animation.Updater} * * @memberof mapray.animation * @abstract */ class BindingBlock { /** * @protected */ constructor() { } /** * @summary アニメーション可能パラメータの情報を取得 * * @desc * <p>アニメーションに対応したパラメータの情報を配列として取得する。</p> * <p>返される配列は 0 個またはそれ以上の要素を含み、要素間のパラメータ ID は重複しない。</p> * <p>this の生存期間中、(順序以外) 常に同じ内容を返す。</p> * * @return {mapray.animation.BindingBlock.Parameter[]} * * @abstract */ enumSupportedParameters() { this._override_error( "enumSupportedParameters" ); } /** * @summary パラメータは結合中か? * * @desc * <p>id が示すパラメータが結合されているとき true, 結合されていないとき false を返す。</p> * <p>ただし id が示すパラメータがアニメーションに対応していないときは false を返す。</p> * * @param {string} id パラメータ ID * * @return {boolean} * * @abstract */ isBound( id ) { this._override_error( "isBound" ); } /** * @summary パラメータに結合されている Updater インスタンスを取得 * * @desc * <p>id が示すパラメータが結合されている Updater インスタンスを返す。</p> * <p>ただし this.isBound( id ) == false のときは null を返す。</p> * * @param {string} id パラメータ ID * * @return {?mapray.animation.Updater} * * @abstract */ getBoundUpdater( id ) { this._override_error( "getBoundUpdater" ); } /** * @summary パラメータに結合されている Curve インスタンスを取得 * * @desc * <p>id が示すパラメータが結合されている Curve インスタンスを返す。</p> * <p>ただし this.isBound( id ) == false のときは null を返す。</p> * * @param {string} id パラメータ ID * * @return {?mapray.animation.Curve} * * @abstract */ getBoundCurve( id ) { this._override_error( "getBoundCurve" ); } /** * @summary パラメータにアニメーションを結合 * * @desc * <p>id が示すパラメータと updater と curve を結びつける。ただし、すでに id * が示すパラメータに結合があれば、先にその結合を解除してから行う。</p> * * <p>パラメータが結合されている間、updater によりそのパラメータを更新することができる。</p> * * @param {string} id パラメータ ID * @param {mapray.animation.Updater} updater アニメーションパラメータ更新管理 * @param {mapray.animation.Curve} curve アニメーション関数 * * @throws {@link mapray.animation.AnimationError} * id が示すパラメータはアニメーションに対応していない * * @throws {@link mapray.animation.TypeMismatchError} * id が示すパラメータの型と curve の型に互換性がないとき * * @see {@link mapray.animation.Binder} * * @abstract */ bind( id, updater, curve ) { this._override_error( "bind" ); } /** * @summary パラメータの結合を解除 * * @desc * <p>id が示すパラメータの結合を解除する。</p> * <p>ただし this.isBound( id ) == false のときは何もしない。</p> * * @param {string} id パラメータ ID * * @abstract */ unbind( id ) { this._override_error( "unbind" ); } /** * @summary すべてのパラメータの結合を解除 * * @desc * <p>現在結合されているすべてのパラメータの結合を解除する。</p> * * @abstract */ unbindAll() { this._override_error( "unbindAll" ); } /** * @summary すべてのパラメータの結合を解除 (子孫含む) * * @desc * <p>現在結合されているすべてのパラメータの結合を解除する。</p> * <p>もしパラメータを持つオブジェクトの子オブジェクトも BindingBlock * インタフェースを持っていれば、子孫も含めて結合を解除する。</p> * * @abstract */ unbindAllRecursively() { this._override_error( "unbindAllRecursively" ); } /** * @summary メソッドがオーバーライドされていない * * arguments.callee と Error#stack は互換性が低いので、関数名の取得に使わなかった * * @param {string} func_name * * @private */ _override_error( func_name ) { throw new Error( "BindingBlock#" + func_name + "() method has not been overridden in " + this.constructor.name ); } } /** * @summary アニメーション可能パラメータの情報 * * @see {@link mapray.animation.BindingBlock#enumSupportedParameters} * @memberof mapray.animation.BindingBlock */ class Parameter { /** * @param {string} id パラメータ ID * @param {mapray.animation.Type[]} types サポートする型のリスト */ constructor( id, types ) { this._id = id; this._types = types.concat(); // 複製 } /** * @summary パラメータ ID * * @type {string} * * @readonly */ get id() { return this._id; } /** * @summary サポートする型のリスト * * @desc * <p>パラメータに結合可能なアニメーション関数の型の配列である。</p> * <p>配列は 1 またはそれ以上の型を含む。</p> * * @type {mapray.animation.Type[]} * * @see {@link mapray.animation.Curve#isTypeSupported} * * @readonly */ get types() { return this._types; } } BindingBlock.Parameter = Parameter; export default BindingBlock;