MoveTowards: RefVec.Cyclic

ASTER::ACTION::MotionControl::MoveTowards:RefVec.Cyclic, The mvt.Target is a Reference Vector.

MoveTowards: RefVec.Cyclic は、シーケンシャルコンテナに格納された XY 座標データを移動目標に利用する動作テンプレートです。

mvt.Pursuer として選択されたオブジェクト・インスタンスは Reference Vector に格納された XY 座標を参照し、目標地点まで移動します。

MoveTowards:RefVec.Cyclic について

MoveTowards:RefVec では、オブジェクトインスタンスを目標座標まで移動させ、目標座標に到達した時点で動作は終了します。RefVec.Cyclic はその発展形であり、目標座標を一定の周期で更新し、常に新しいターゲットを与えながら動作を途切れさせない、MoveTowards を周期的な運動として滑らかに制御できます。

目標座標は Reference Vector に格納されており、Reference Vector は C++ のシーケンスコンテナである std::deque を利用しています。Cyclic はシーケンシャルコンテナに適用されるアルゴリズムの一つで、std::rotate に類似したアルゴリズムでデータを処理します。

MoveTowards:Re.:Cyclic demonstrations

Description of the image
Create a Reference Vector with Align: Hexagonal L2RT2B (Triangle Parameters)
Description of the image
Create a Reference Vector with current XY coordinates of object instances ( Align: circumference )
Description of the image
Create a Reference Vector with current XY coordinates of object instances

Before Use:

Store the target coordinates in the Reference Vector beforehand

Relevant URL

Parameter.1

モーションコントローラへ登録するモーショングループ名を入力します。

異なるオブジェクトから作成されたインスタンスでも同じモーショングループ名でグループ化し、コントローラから管理できます。

すでにコントローラに登録済みのインスタンスを別グループ名から重複登録はできません

マルチバイト文字列 (日本語など) も利用可能ですが、実用上、アルファベット小文字で短い名前を推奨します。

"test"

アクティブオブジェクトに設定された名前をモーショングループ名として登録に利用する場合、空文字列を送信します。

""

Parameter.2

10 parameters are serialized and transmitted.

"30, false, 0,     40, -1, true, 90,     false,    +1, -1"
argument Name type descriptions
60 timebound unsigned int Time until completion of operation, Frame Time
false EvD: Motion Start Boolean Event Detection Flag (rev.1.0.5)
0 motion-type unsigned int Only 0 is implemented (rev.1.0.x)
30 Sleep Time unsigned int Time to pause via sleep, Frame Time
-1 Sleep Repetition int Number of sleep repetitions; -1 is infinite, 0 disables
false Sleep Begin Flag boolean Flag to enable sleep at the start of operation
30 Sleep Interval Value unsigned int Time until next sleep, Frame Time
false EvD: Motion Close Boolean Event Detection Flag (rev.1.0.5)
+1 Rotate Behavior int c++ Algorithm, std::rotate
-1 repetition int Not Yet Implemented :: ASTER rev.1.0.5

Time Bound

unsigned int

移動を完了するのに要する時間、アプリケーションフレームタイム。60 FPS 動作設定のアプリケーションの場合、60 は約一秒に相当する。

距離に応じた時間単位の移動量を割り出すための値、与えられた条件に応じて移動速度は速くなり遅くなります。

目標座標までの距離を測り、設定された制限時間を用いて移動量を算出する仕様なので、制限時間にマイナス値を代入できない

0 を代入した場合、動作をキャンセルする


EvD Flag: about to start moving

boolean

イベント検出フラグ: true の場合、インスタンスが動き出す直前に条件が一度だけ実行されます。


Motion Type

unsigned int

0 を代入してください。等速直線運動を選択。

MoveTowards のサブモーションタイプ設定。ASTER rev.1.0.x には 0 以外実装が無い。将来的なアップデートで対応。


Sleep Time

unsigned int

動作を一時停止する時間を設定、アプリケーションフレームタイム。60 FPS 動作設定のアプリケーションの場合、60 は約一秒に相当する。

マイナス値を代入できない。


Sleep Repetition

int

スリープが終了後、スリープを再開する回数を設定する。スリープを利用しない場合、0 を代入してください。

-1 の場合、無限ループ。


Sleep Begin Flag

boolean

MoveTowards による移動開始時にスリープ・フラグを有効化して開始するか、否かを決定するフラグ。

true の場合、まず一時停止から始まり、スリープが終了後に移動を開始する。

false の場合、移動を開始し、時間が来たら一時停止する。


Sleep Interval

unsigned int

スリープ終了後、再び一時停止するまでの時間を設定する。アプリケーションフレームタイム。

マイナス値を代入できない。


EvD Flag: The moment after stops moving

boolean

イベント検出フラグ: true の場合、インスタンスの移動が停止した直後に条件が一度だけ実行されます。



Rotate Behavior

int

C++ , std::rotate

Value Behavior
-1 Shift elements left (if applied with negative index logic)
0 No rotation (Undefined behavior if misused)
+1 Shift elements right (if applied with positive index logic)

The definition of value 0 is still undefined. ( ASTER rev.1.0.5 )

C++ の std::rotate は要素の並び替えを実行する関数です。本来、回転の方向を数値 (-1, 0, +1) で決めるものではなく、イテレータを使って開始位置を指定し、指定された範囲の要素を回転移動する関数です。

ASTER rev.1.0.5 では実際の std::rotate を利用していませんが、並び替えの原理はほぼ同じものです。-1 と +1 しか動作テストしていませんが、0 やそれ以外の数値の扱いをどうするかなど、まだ仕様に未確定の部分があります。


Repetition Re.:Cyclic

int

Not yet implemented :: ASTER rev.1.0.5


Regarding registration limits and reserved variables »

仕様上の登録可能数

1 つのモーショングループに登録可能なインスタンス数は最大 255 個。 モーショングループは 1 モーション・タイプにつき 255 個までグループ登録できる。

type Max Groups Max Instances (Per Group) Total Instances (Per Motion Type)
Null 255 255 255 x 255 = 65,025
Flp | Wrp 255 255 255 x 255 = 65,025
Flp | Wrp::SineWave 255 255 255 x 255 = 65,025
Orbital 255 255 255 x 255 = 65,025
MoveTowards 255 255 255 x 255 = 65,025

上記は理論値であり CF25 の処理能力を超えているため、常に最大値未満で運用することになります。

実用的には、全登録モーションの全インスタンス数が最大 100 以下での動作を想定しています。


予約変数について

予約変数としてオブジェクト・インスタンスの変数から

  1. Alt Variable[0] = Spread ID

  2. Alt Variable[1] = Motion ID

上記を利用します。

Alt Variable[0]

連番、フレームエディタ上で一番最後に作られたオブジェクトインスタンスが 0 を割り当てられ、以降 +1 ずつ増加した値が順番に各インスタンスへ割り振られます。任意の値で上書き変更しても良い、安全。

Alt Variable[1]

モーションタイプ、0 ~ 4 までの数値、登録時のモーションタイプに応じた値が代入されます。データベース検索を高速化するためのマジックナンバー。変更するとコントローラが正常に検索できなくなります、危険。

rev.0.9.x 以降、Alt Variable[1] を利用しない方法が試行されていて、今は使ってないけれど、ただし元に戻すかもしれないので Alt Variable[1] は予約変数扱いのままでお願いします。