| 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374 | import { _decorator, director, find, Label, PhysicsGroup } from 'cc';import { LifeBar } from './LifeBar';import { Role } from '../Role';import { Enemy } from './Enemy';import { MyTower } from './MyTower';import { GameInfo } from '../../../GameInfo';import { GameMgr } from '../../GameFrameWork/GameMgr';import { GameOver } from './GameOver';const { ccclass, property } = _decorator;@ccclass('EnemyTower')export class EnemyTower extends Role {    private _lifeBar: LifeBar = null;    private _strMyHp: Label = null;    //敌人防御塔总血量通过数据表获取    enemyTotalHp: number = null;    protected onLoad(): void {        this._lifeBar = this.node.getComponent(LifeBar);        this._strMyHp = this.node.getChildByPath("ProgressBar/Label").getComponent(Label);    }    start() {        this.initData();    }    initData(){        this.hp = this.enemyTotalHp;        this._initLifeBar();    }    //初始化血条    private _initLifeBar() {        this._lifeBar._curHp = this.hp;        this._lifeBar._totalHp = this.hp;        this._lifeBar.progressBar.progress = 1;    }    update(deltaTime: number) {        if (this._lifeBar._curHp <= 0) {            this._gameOverDtSettlement();        }        this._strMyHp.string = `${this._lifeBar._curHp}/${this.hp}`;    }    //游戏结束数据结算    private _gameOverDtSettlement() {        GameInfo.Instance.setIsGameOver(true);        GameInfo.Instance.setOverWin(true);        const myTower = find("Canvas/GameRoot/MyTower").getComponent(MyTower);        this._lifePercent(myTower.getCurHp(), myTower.getTotalHp())        GameMgr.Instance.getModuler(GameOver).show();        director.pause();    }    private _lifePercent(curHp: number, totalHp: number) {        if (totalHp <= 0) {            return;        }        let lifePercent = Math.floor((curHp / totalHp) * 100);        lifePercent = Math.max(0, Math.min(lifePercent, 100));        GameInfo.Instance.setLifePecent(lifePercent);    }    //必须实现抽象方法    protected _getCollisionGroup(): number {        return PhysicsGroup.Enemy; //实际分组值根据项目设置    }    protected _isValidTarget(target: Role): boolean {        //通过组件类型判断是否为敌人        return target instanceof Enemy;    }}
 |