123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475 |
- 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';
- 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 {
- this._lifeBar = this.node.getComponent(LifeBar);
- this._isDie = false;
- }
- init(name: string, pos: Vec3, data: RoleData[], dir?: number) {
- super.init(name, pos, data, dir);
- 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() {
- //激活消息
- 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 <= 200) {
- 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;
- }
- }
|