123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107 |
- import { _decorator, Component, Node, AnimationComponent } from 'cc';
- import CCSAnimationUtils from '../../../../engines/utils/CCSAnimationUtils';
- const { ccclass, property } = _decorator;
- @ccclass('FenceBase')
- export class FenceBase extends Component {
- hp:number;
- maxHp:number;
- private animation:AnimationComponent;
- /**
- * 状态 0 站立 1 受伤 2 死亡
- */
- private state:number=0;
- start () {
- // Your initialization goes here.
- this.animation=this.getComponent(AnimationComponent);
- CCSAnimationUtils.SetAnimationSpeed(this.animation,this.config.idleAnimation,this.config.idleAnimationSpeed);
- CCSAnimationUtils.SetAnimationSpeed(this.animation,this.config.damageAnimation,this.config.damageAnimationSpeed);
- CCSAnimationUtils.SetAnimationSpeed(this.animation,this.config.dieAnimation,this.config.dieAnimationSpeed);
- }
- set config(value:any){
- this.__config=value;
- this.hp=this.maxHp=this.config.hp;
- }
-
- private __config:any;
- get config():any{
- return this.__config;
- }
- /**
- * 闲置
- */
- Stance():void{
- if(this.state==0){
- return;
- }
- this.state=0;
- this.animation.play(this.config.idleAnimation);
- }
- /**
- * 受伤
- * @param value
- */
- Damage(value:number):void{
- if(this.IsDie){
- throw new Error("栅栏已经死了但是还受到了攻击!");
- }
- this.hp-=value;
- if(this.hp<=0){
- this.hp=0;
- this.Die();
- }else{
- this.state=1;
- this.removeAllAnimationCallBack();
- this.animation.on(AnimationComponent.EventType.FINISHED,this.DamageComplete,this,true);
- this.animation.play(this.config.damageAnimation);
- }
- }
- private DamageComplete():void{
- if(this.state==2){
- return;
- }
- this.Stance();
- }
- /**
- * 死亡
- */
- Die():void{
- if(this.state==2){
- return;
- }
- this.state=2;
- this.removeAllAnimationCallBack();
- this.animation.on(AnimationComponent.EventType.FINISHED,this.DieComplete,this,true);
- this.animation.play(this.config.dieAnimation);
- }
- private DieComplete():void{
- this.node.destroy();
- }
- get IsDie():boolean{
- if(this.hp<=0){
- return true;
- }
- return false;
- }
- private removeAllAnimationCallBack():void{
- if(this.animation.hasEventListener(AnimationComponent.EventType.FINISHED,this.DamageComplete,this)){
- this.animation.off(AnimationComponent.EventType.FINISHED,this.DamageComplete,this);
- }
- }
-
- // update (deltaTime: number) {
- // }
- }
|