56 lines
1.8 KiB
TypeScript
56 lines
1.8 KiB
TypeScript
import AnimatorController from "./AnimatorController";
|
|
import AnimatorTransition from "./AnimatorTransition";
|
|
|
|
/**
|
|
* 状态管理类
|
|
*/
|
|
export default class AnimatorState {
|
|
private _name: string = "";
|
|
private _motion: string = "";
|
|
private _loop: boolean = false;
|
|
private _speed: number = 1;
|
|
private _multi: string = "";
|
|
|
|
private _transitions: AnimatorTransition[] = [];
|
|
private _ac: AnimatorController = null;
|
|
|
|
/** 状态名 */
|
|
public get name() { return this._name; }
|
|
/** 动画名 */
|
|
public get motion() { return this._motion; }
|
|
/** 动画是否循环播放 */
|
|
public get loop() { return this._loop; }
|
|
/** 动画播放速度 */
|
|
public get speed() { return this._speed; }
|
|
/** 动画播放速度的混合参数 */
|
|
public get multi() { return this._multi; }
|
|
|
|
constructor(data: any, ac: AnimatorController) {
|
|
this._name = data.state;
|
|
this._motion = data.motion || '';
|
|
this._loop = data.loop || false;
|
|
this._speed = data.speed || 1;
|
|
this._multi = data.multiplier || '';
|
|
|
|
this._ac = ac;
|
|
|
|
for (let i = 0; i < data.transitions.length; i++) {
|
|
let transition: AnimatorTransition = new AnimatorTransition(data.transitions[i], ac);
|
|
transition.isValid && this._transitions.push(transition);
|
|
}
|
|
}
|
|
|
|
/**
|
|
* 判断各个分支是否满足条件,满足则转换状态
|
|
*/
|
|
public checkAndTrans() {
|
|
for (let i = 0; i < this._transitions.length; i++) {
|
|
let transition: AnimatorTransition = this._transitions[i];
|
|
if (transition && transition.check()) {
|
|
transition.doTrans();
|
|
return;
|
|
}
|
|
}
|
|
}
|
|
}
|