| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778 | import { _decorator, instantiate, Node, PhysicsGroup, tween, Vec3 } from 'cc';import { Role, RoleState } from '../Role';import { RoleData } from '../../../DataItem/ItemData';import { LifeBar } from './LifeBar';import { MyRole } from './MyRole';import { MyTower } from './MyTower';import { resMgr } from '../../../Frames/ResourcesMgr';import { messageMgr } from '../../../Frames/MessageMgr';import { GameInfo } from '../../../GameInfo';const { ccclass, property } = _decorator;@ccclass('Enemy')export class Enemy extends Role {    private _lifeBar: LifeBar = null;    private _isDie: boolean = false;    private _orePos: Vec3 = new Vec3(200, 100, 0);    protected onLoad(): void {            }    init(name: string, pos: Vec3, data: RoleData[], dir?: number) {        super.init(name, pos, data, dir);        this._lifeBar = this.node.getComponent(LifeBar);        this._isDie = false;        this._initLifeBar();    }    //初始化血条    private _initLifeBar() {        this._lifeBar._curHp = this.hp;        this._lifeBar._totalHp = this.hp;    }    update(deltaTime: number) {        super.update(deltaTime);        this.stop();        if (this._lifeBar._curHp <= 0) {            super.playAnimation(RoleState.Die);            if (this._isDie) return;            this.createOre();            this._isDie = true;        }    }    createOre() {        GameInfo.Instance.setKillCount(GameInfo.Instance.getKillCount() + 1);        //触发消息        messageMgr.dispatch("addOreCount");        const ore: Node = instantiate(resMgr.getPrefab("Ore"));        ore.parent = this.bulletLayer;        ore.position = this.node.position;        tween(ore)            .delay(0.3)            .to(2, { position: this._orePos })            .delay(0.3)            .call(() => { ore.destroy() })            .start();    }    stop(): void {        if (this.node.getWorldPosition().x <= 100) {            this.isStop = true;            super.playAnimation(RoleState.Idle);            //this.playAnimation(RoleState.Attack);            this.moveSpeed = 0;        }    }    //必须实现抽象方法    protected _getCollisionGroup(): number {        return PhysicsGroup.Enemy; //实际分组值根据项目设置    }    protected _isValidTarget(target: Role): boolean {        //通过组件类型判断是否为敌人        return target instanceof MyRole || target instanceof MyTower;    }}
 |