import { _decorator,v3,Vec3 } from "cc"; import { ecs } from "../../../../extensions/oops-plugin-framework/assets/libs/ecs/ECS"; import { CCComp } from "../../../../extensions/oops-plugin-framework/assets/module/common/CCComp"; import { Timer } from "../../../../extensions/oops-plugin-framework/assets/core/common/timer/Timer"; import { Skill } from "../skills/Skill"; import { SkillSet } from "../common/config/CardSet"; import { Monster } from "./Monster"; import { MonsterModelComp } from "./MonsterModelComp"; import { MonsterViewComp } from "./MonsterViewComp"; import { BoxSet } from "../common/config/BoxSet"; const { ccclass, property } = _decorator; /** 视图层对象 */ @ccclass('CSkillComp') @ecs.register('CSkill', false) export class CSkillComp extends CCComp { //持续时间 private sd:Timer = new Timer(5) private cd:Timer = new Timer(1) private is_destroy:boolean = false; scale:number = 1; speed:number = 0; dis:number = 0; atk:number = 0; skill_uuid:number = 1001; /** 视图层逻辑代码分离演示 */ start() { // var entity = this.ent as ecs.Entity; // ecs.Entity 可转为当前模块的具体实体对象 this.sd =new Timer(SkillSet[this.skill_uuid].sd) this.cd = new Timer(SkillSet[this.skill_uuid].cd) } protected update(dt: number): void { if (this.sd.update(dt)) { if (this.is_destroy) { return } this.to_destroy() } if (this.cd.update(dt)) { this.shoot() } } shoot() { let skill = ecs.getEntity(Skill); let pos = v3(0,0) let t_pos = v3(0,0) let angle = 0 let m_pos=v3(0,0) let monsters:any = ecs.query(ecs.allOf(MonsterModelComp)); if (monsters.length > 0) { m_pos = monsters[0].MonsterView.get_monster_pos() }else{ m_pos = v3(BoxSet.MONSTER_START,BoxSet.GAME_LINE) } t_pos = v3(m_pos.x-this.node.position.x,m_pos.y-this.node.position.y) // console.log("m_pos",this.node.position,m_pos); let dx=m_pos.x-this.node.position.x let dy=m_pos.y-this.node.position.y let dir=v3(dx,dy,0) let randian=Math.atan2(dir.y,dir.x) angle = randian * (180 / Math.PI); // console.log("angle",angle); let scale = this.scale let dis = SkillSet[this.skill_uuid].dis+this.dis; let atk = SkillSet[this.skill_uuid].atk+this.atk; let speed = SkillSet[this.skill_uuid].speed+this.speed; let sp_name = SkillSet[this.skill_uuid].sp_name skill.load(pos,speed,dis,scale,this.node,sp_name,atk,angle,t_pos); } /** 全局消息逻辑处理 */ // private onHandler(event: string, args: any) { // switch (event) { // case ModuleEvent.Cmd: // break; // } // } to_destroy() { this.is_destroy = true // console.log("CSkillComp toDestroy"); if (this.node.isValid) { // console.log("CSkillComp.node.isValid"); setTimeout(() => { // console.log("CSkillComp.node.destroy",this); this.ent.destroy() }, 10); } } /** 视图对象通过 ecs.Entity.remove(ModuleViewComp) 删除组件是触发组件处理自定义释放逻辑 */ reset() { this.node.destroy(); } }