Files
heros/assets/script/game/map/MissionHeroComp.ts
2025-04-24 10:44:21 +08:00

85 lines
3.0 KiB
TypeScript

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 { BoxSet } from "../common/config/BoxSet";
import { HeroInfo, HeroList, HeroPos, HeroSet } from "../common/config/heroSet";
import { Hero } from "../hero/Hero";
import { smc } from "../common/SingletonModuleComp";
import { Timer } from "db://oops-framework/core/common/timer/Timer";
import { RandomManager } from "db://oops-framework/core/common/random/RandomManager";
import { GameEvent } from "../common/config/GameEvent";
import { HeroModelComp } from "../hero/HeroModelComp";
import { HeroViewComp } from "../hero/HeroViewComp";
const { ccclass, property } = _decorator;
/** 视图层对象 */
@ccclass('MissionHeroCompComp')
@ecs.register('MissionHeroComp', false)
export class MissionHeroCompComp extends CCComp {
timer:Timer=new Timer(2)
start_pos:any={
0:{pos:v3(-140,135,0),has:false},
1:{pos:v3(-270,205,0),has:false},
2:{pos:v3(-270,65,0),has:false},
}
onLoad(){
this.on(GameEvent.UserHeroCard,this.call_hero,this)
}
start() {
// this.test_call()
}
protected update(dt: number): void {
if(smc.mission.status != 1) return
}
init(){
this.start_pos[0].has=false
this.start_pos[1].has=false
this.start_pos[2].has=false
}
test_call(){
this.addHero(5010)
}
call_hero(event: string, args: any){
this.timer.reset()
let hero_list =HeroList
let x=RandomManager.instance.getRandomInt(0,hero_list.length,1)
let uuid=args.uuid
console.log("call_hero",uuid)
this.addHero(uuid)
}
/** 添加玩家 */
private addHero(uuid:number=1001) {
let heros=ecs.query(ecs.allOf(HeroModelComp))
console.log("call_hero addHero",uuid)
let info:any={ap:0,hp:0}
if(this.start_pos[HeroInfo[uuid].type].has){
info=this.remove_hero(HeroInfo[uuid].type)
}
let hero = ecs.getEntity<Hero>(Hero);
let scale = 1
let pos:Vec3 = this.start_pos[HeroInfo[uuid].type].pos;
console.log("hero load0",pos,this.start_pos)
hero.load(pos,scale,uuid,info);
this.start_pos[HeroInfo[uuid].type].has=true
}
remove_hero(i:number){
let info:any={ap:0,hp:0}
let heros=ecs.query(ecs.allOf(HeroModelComp))
for(let hero of heros){
if(hero.get(HeroViewComp).node.position.x==HeroPos[i].pos.x){
info.ap=hero.get(HeroViewComp).ap*(100+hero.get(HeroViewComp).r_up)/100
info.hp=hero.get(HeroViewComp).hp*(100+hero.get(HeroViewComp).r_up)/100
hero.destroy()
return info
}
}
return info
}
/** 视图对象通过 ecs.Entity.remove(ModuleViewComp) 删除组件是触发组件处理自定义释放逻辑 */
reset() {
this.node.destroy();
}
}