123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869 |
- import { _decorator, 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.hp = this.enemyTotalHp;
- this._initLifeBar();
- }
- //初始化血条
- private _initLifeBar() {
- this._lifeBar._curHp = this.hp;
- this._lifeBar._totalHp = this.hp;
- }
- 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();
- }
- 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;
- }
- }
|