import { _decorator, Animation } from 'cc' import State from '../../Base/State' import StateMachine, { getInitParamsTrigger } from '../../Base/StateMachine' import { EntityTypeEnum } from '../../Common' import { EntityStateEnum, ParamsNameEnum } from '../../Enum' import ObjectPoolManager from '../../Global/ObjectPoolManager' const { ccclass, property } = _decorator @ccclass('ExplosionStateMachine') export class ExplosionStateMachine extends StateMachine { init(type: EntityTypeEnum) { this.type = type this.animationComponent = this.node.addComponent(Animation) this.initParams() this.initStateMachines() this.initAnimationEvent() } initParams() { this.params.set(ParamsNameEnum.Idle, getInitParamsTrigger()) } initStateMachines() { this.stateMachines.set(ParamsNameEnum.Idle, new State(this, `${this.type}${EntityStateEnum.Idle}`)) } initAnimationEvent() { this.animationComponent.on(Animation.EventType.FINISHED, () => { const whiteList = [EntityStateEnum.Idle] const name = this.animationComponent.defaultClip.name if (whiteList.some(v => name.includes(v))) { ObjectPoolManager.Instance.ret(this.node) } }) } run() { switch (this.currentState) { case this.stateMachines.get(ParamsNameEnum.Idle): if (this.params.get(ParamsNameEnum.Idle).value) { this.currentState = this.stateMachines.get(ParamsNameEnum.Idle) } else { this.currentState = this.currentState } break default: this.currentState = this.stateMachines.get(ParamsNameEnum.Idle) break } } }