53 lines
		
	
	
		
			1.7 KiB
		
	
	
	
		
			TypeScript
		
	
	
	
	
	
		
		
			
		
	
	
			53 lines
		
	
	
		
			1.7 KiB
		
	
	
	
		
			TypeScript
		
	
	
	
	
	
|   | import { _decorator, Animation, AnimationClip } from 'cc' | ||
|  | import State from '../../Base/State' | ||
|  | import StateMachine, { getInitParamsNumber, getInitParamsTrigger } from '../../Base/StateMachine' | ||
|  | import { EntityTypeEnum, TexturePathEnum, EntityStateEnum, ParamsNameEnum } from '../../Enum' | ||
|  | import ObjectPoolManager from '../../Global/ObjectPoolManager' | ||
|  | const { ccclass, property } = _decorator | ||
|  | 
 | ||
|  | @ccclass('ExplosionStateMachine') | ||
|  | export class ExplosionStateMachine extends StateMachine { | ||
|  |   type: EntityTypeEnum | ||
|  |   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.returnPoolObject(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 | ||
|  |     } | ||
|  |   } | ||
|  | } |