import { _decorator,Button,EventHandler,EventTouch,Label,NodeEventType,resources,Sprite,SpriteAtlas,tween,UITransform,v3, Vec3,Animation, UI } 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 { smc } from "../common/SingletonModuleComp"; import { oops } from "../../../../extensions/oops-plugin-framework/assets/core/Oops"; import { RandomManager } from "../../../../extensions/oops-plugin-framework/assets/core/common/random/RandomManager"; import { HeroModelComp } from "../hero/HeroModelComp"; import { BoxSet } from "../common/config/BoxSet"; import { Hero } from "../hero/Hero"; import { HeroSet } from "../common/config/heroSet"; import { MonModelComp } from "../hero/MonModelComp"; import { MBSet, Missions,} from "../common/config/MissionSet"; import { Timer } from "../../../../extensions/oops-plugin-framework/assets/core/common/timer/Timer"; import { HCard } from "./HCard"; import { HCardComp } from "./HCardComp"; import { VictoryComp } from "./VictoryComp"; import { ItemComp } from "./ItemComp"; import { MSkillComp } from "./MSkillComp"; import { Monster } from "../hero/Mon"; import { UIID } from "../common/config/GameUIConfig"; import { CardControllerComp } from "./CardController"; import { MissionHomeComp } from "./MissionHomeComp"; import { GameEvent } from "../common/config/GameEvent"; import { BattleManager } from "../battle/BattleManager"; const { ccclass, property } = _decorator; /** 视图层对象 */ @ccclass('MissionComp') @ecs.register('Mission', false) export class MissionComp extends CCComp { VictoryComp:any = null; mon_list:any = [] call_hero_timer: Timer = new Timer(0.3); target_timer: Timer = new Timer(0.1); reward:number = 0; reward_num:number = 0; game_over:boolean = false; fight_start:boolean = false; mission_buff_type:number = 1 // 1 攻击 2 防御 3 HP m_mission_buff_type:number = 1 // 1 攻击 2 防御 3 HP mission_buff_up_exp:number = 99999999 MSComp:MSkillComp=null MMSComp:MSkillComp=null onLoad(){ // this.MSComp=this.node.getChildByName("msk").getComponent(MSkillComp) // this.MMSComp=this.node.getChildByName("mmsk").getComponent(MSkillComp) // this.MSComp.group=BoxSet.HERO // this.MSComp.s_uuid=smc.mission.mskill // this.MMSComp.group=BoxSet.MONSTER // this.MMSComp.s_uuid=smc.mission.mmskill } start() { // this.VictoryComp=this.node.getChildByName("victory").getComponent(VictoryComp) } protected update(dt: number): void { if(!smc.mission.play||smc.mission.pause){ return } if(this.fight_start){ this.check_mon_num() } this.count_hero_pos() this.count_mon_pos() this.check_buff() // if (this.game_timer.update(dt)) { // smc.vmdata.game.g_time += 1; // } // this.shuaxin(dt) } mission_start(missionId: number) { // 初始化关卡数据 this.colose_victory(); this.mission_init(); // 启动战斗(外部控制入口) BattleManager.startBattle(smc.mission.lv); // 生成怪物和英雄 this.mon_refresh(); this.heros_call(); } mission_end() { // 结束战斗(外部控制出口) BattleManager.endBattle(); // 更新游戏状态 oops.message.dispatchEvent(GameEvent.MissionEnd); smc.mission.play = false; // 显示结算界面 this.open_victory(); } open_victory(){ this.node.getChildByName("victory").active=true this.node.getChildByName("victory").getComponent(VictoryComp).open() } colose_victory(){ this.node.getChildByName("victory").active=false } to_mission_home(){ this.colose_victory() let home =this.node.parent.getComponent(CardControllerComp); let mission_home=home.node.getChildByName("mission_home").getComponent(MissionHomeComp) home.bar_change(null,"home") home.node.getChildByName("bar").active=true; mission_home.load_ui_heros() } mission_init(){ //局内数据初始化 this.fight_start=false smc.mission.is_victory=false smc.mission.is_defeat=false smc.vmdata.mission.exp=0 //局内经验 smc.vmdata.mission.mexp=0 //敌方局内经验 smc.vmdata.mission.exp_max= smc.vmdata.mission.mexp_max=MBSet.exp smc.vmdata.mission.ap=0 smc.vmdata.mission.hp=0 smc.vmdata.mission.def=0 smc.vmdata.mission.crit=0 smc.vmdata.mission.dodge=0 smc.vmdata.mission.dead=0 smc.vmdata.mission.map=0 smc.vmdata.mission.mhp=0 smc.vmdata.mission.mdef=0 smc.vmdata.mission.mcrit=0 smc.vmdata.mission.mdead=0 smc.vmdata.mission.mdodge=0 // smc.vmdata.mission.ap_up=0 // smc.vmdata.mission.hp_up=0 // smc.vmdata.mission.def_up=0 // smc.vmdata.mission.crit_up=0 // smc.vmdata.mission.dodge_up=0 // smc.vmdata.mission.map_up=0 // smc.vmdata.mission.mhp_up=0 // smc.vmdata.mission.mdef_up=0 // smc.vmdata.mission.mcrit_up=0 // smc.vmdata.mission.mdodge_up=0 // this.clear_x1() } clear_x1(){ for (let i in smc.items) { smc.items[i].x1=0 } // for (let i in smc.skills) { // smc.skills[i].x1=0 // } for (let i in smc.heros) { smc.heros[i].x1=0 } // console.log("clear_x1",smc.items,smc.heros) } mskill_init(){ this.MSComp.group=BoxSet.HERO this.MMSComp.group=BoxSet.MONSTER this.MSComp.init() this.MMSComp.init() } check_buff(){ if(smc.vmdata.mission.exp >= smc.vmdata.mission.exp_max){ smc.vmdata.mission.exp-=smc.vmdata.mission.exp_max this.do_buff() } // if(smc.mission.mexp >= smc.vmdata.mission.mexp_max){ // smc.vmdata.mission.mexp-=smc.vmdata.mission.mexp_max // this.do_mbuff() // } } do_buff(){ smc.vmdata.mission.ap+=smc.vmdata.mission.ap_up smc.vmdata.mission.hp+=smc.vmdata.mission.hp_up smc.vmdata.mission.def+=smc.vmdata.mission.def_up smc.vmdata.mission.crit+=smc.vmdata.mission.crit_up smc.vmdata.mission.dodge+=smc.vmdata.mission.dodge_up if(smc.vmdata.mission.hp_up > 0 ){ let heros:any =ecs.query(ecs.allOf(HeroModelComp)); for (let i = 0; i < heros.length; i++) { heros[i].HeroView.add_hp2(smc.vmdata.mission.hp_up) } } } // do_mbuff(){ // smc.vmdata.mission.map+=smc.vmdata.mission.map_up // smc.vmdata.mission.mhp+=smc.vmdata.mission.mhp_up // //todo hp 需要特殊处理 // smc.vmdata.mission.mdef+=smc.vmdata.mission.mdef_up // smc.vmdata.mission.mcrit+=smc.vmdata.mission.mcrit_up // smc.vmdata.mission.mdodge+=smc.vmdata.mission.mdodge_up // } check_mon_num(){ let mons:any = this.get_mons() let heros:any= this.get_heros() let h_alive=false let m_alive=false for (let i = 0; i < heros.length; i++) { if ( !heros[i].HeroView.is_dead) { h_alive=true } } for (let i = 0; i < mons.length; i++) { if ( !mons[i].HeroView.is_dead) { m_alive=true } } if (!m_alive||!h_alive) this.mission_end() } get_mons(){ return ecs.query(ecs.allOf(MonModelComp)); } get_heros(){ return ecs.query(ecs.allOf(HeroModelComp)) } count_mon_pos(){ let right_x:number=360 let left_x:number=-360 let monsters:any= this.get_mons() for(let i=0;i 400) continue let mon:any = monsters[i].HeroView.node.position smc.enemy_pos[i]= mon if(monsters[i].HeroView.node.position.x > left_x){ left_x = monsters[i].HeroView.node.position.x } if(monsters[i].HeroView.node.position.x < right_x){ right_x = monsters[i].HeroView.node.position.x } } smc.mon_front_x=right_x smc.mon_back_x=left_x // console.log("count_mon_pos",smc.mon_pos,smc.mon_front_x,smc.mon_back_x) } count_hero_pos(){ let right_x:number=360 let left_x:number=-360 let heros:any= this.get_heros() for(let i=0;i left_x){ left_x = heros[i].HeroView.node.position.x } if(heros[i].HeroView.node.position.x < right_x){ right_x = heros[i].HeroView.node.position.x } } smc.hero_front_x=left_x smc.hero_back_x=right_x // console.log("count_hero_pos",smc.hero_pos,smc.hero_front_x,smc.mon_front_x) } mon_refresh(){ let num =3 let t_num= Missions[0].length let y_num= Missions[1].length let b_num= Missions[2].length let tc=1 let yc=2 let bc=1 for(let i=0;i(HCard) // console.log("hcard:",hcard) hcard.load(heros[i].HeroView.hero_uuid,i,node) } this.fight_start= true } /** 添加玩家 */ private addHero(uuid:number=1001,i:number=0) { let hero = ecs.getEntity(Hero); let scale = 1 let pos:Vec3 = v3(HeroSet.StartPos[1]-i*10,BoxSet.GAME_LINE); hero.load(pos,scale,uuid); } private addMonster(uuid:number=1001,i:number=0,is_boss:boolean=false) { let mon = ecs.getEntity(Monster); let scale = -1 let pos:Vec3 = v3(-1*HeroSet.StartPos[1]+i*10,BoxSet.GAME_LINE); mon.load(pos,scale,uuid,is_boss); } /** 视图层逻辑代码分离演示 */ /** 视图对象通过 ecs.Entity.remove(ModuleViewComp) 删除组件是触发组件处理自定义释放逻辑 */ reset() { this.node.destroy(); } }