import { _decorator, resources, Sprite, SpriteAtlas ,Node, ProgressBar, tween, v3, Label} 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 { GameEvent } from "../common/config/GameEvent"; import { SkillSet } from "../common/config/SkillSet"; import { smc } from "../common/SingletonModuleComp"; import { oops } from "db://oops-framework/core/Oops"; import { MissionEvent } from "../common/config/MissionEvent"; import { HeroInfo } from "../common/config/heroSet"; const { ccclass, property } = _decorator; /** 视图层对象 */ @ccclass('EquipSkillComp') @ecs.register('EquipSkill', false) export class EquipSkillComp extends CCComp { skill1:any=null skill2:any=null boxs:Node=null skill1_cd_bar_progress:any=null skill2_cd_bar_progress:any=null skill3_cd_bar_progress:any=null /** 视图层逻辑代码分离演示 */ onLoad() { this.on(GameEvent.UseSkillCard, this.get_skill, this); this.on(GameEvent.FightReady,this.fight_ready,this) this.on(GameEvent.MasterCalled,this.master_called,this) this.boxs=this.node.getChildByName("boxs") this.skill1_cd_bar_progress=this.boxs.getChildByName("skill1").getChildByName("icon").getChildByName("cd").getComponent(ProgressBar) this.skill2_cd_bar_progress=this.boxs.getChildByName("skill2").getChildByName("icon").getChildByName("cd").getComponent(ProgressBar) } start(){ this.fight_ready() } private master_called(e:any,data:any){ console.log("[EquipSkillComp]: master_called",data) let hero=HeroInfo[data.uuid] if(hero.skills.length>0){ this.get_skill(null,{slot:"skill1",uuid:hero.skills[1]}) this.get_skill(null,{slot:"skill2",uuid:hero.skills[2]}) } } fight_ready(){ this.boxs=this.node.getChildByName("boxs") console.log("[EquipSkillComp]: fight_ready",this.node) this.boxs.getChildByName("skill1").getChildByName("icon").active=false this.boxs.getChildByName("skill2").getChildByName("icon").active=false this.boxs.getChildByName("skill3").getChildByName("icon").active=false this.hide_skill_get(null,"skill1") this.hide_skill_get(null,"skill2") this.hide_skill_get(null,"skill3") this.hide_skill_change(null,"skill1") this.hide_skill_change(null,"skill2") this.hide_skill_change(null,"skill3") this.skill1={ uuid:0, name:"skill1", type:0, //1 被动 0 主动 level:0, quality:0, cd:0, cd_time:0, active:false, } this.skill2={ uuid:0, name:"skill2", type:0,// level:0, quality:0, cd:0, cd_time:0, active:false, } } update(dt: number): void { if(!smc.mission.play||smc.mission.pause) return if(this.skill1.uuid!=0){ let cd=this.skill1.cd*(100-smc.vmdata.hero.skill_cd_buff)/100 if(this.skill1.cd_time < cd){ this.skill1.cd_time+=dt }else{ if(this.skill1.type==1){ this.do_skill1() } } this.skill1_cd_bar_progress.progress=(1-this.skill1.cd_time/cd) } if(this.skill2.uuid!=0&&smc.vmdata.hero.power>=smc.vmdata.hero.power_max){ this.do_skill2() smc.vmdata.hero.power=0 } } do_skill1(){ console.log("do_skill1") this.skill1.cd_time=0 tween(this.boxs.getChildByName("skill1")).to(0.1, {scale:v3(1.2,1.2,1)},{onComplete:()=>{ tween(this.boxs.getChildByName("skill1")).to(0.2, {scale:v3(1,1,1)}).start() }}).start() this.do_skill(this.skill1.uuid) } do_skill2(){ console.log("do_skill2") tween(this.boxs.getChildByName("skill2")).to(0.1, {scale:v3(1.2,1.2,1)},{onComplete:()=>{ tween(this.boxs.getChildByName("skill2")).to(0.2, {scale:v3(1,1,1)}).start() }}).start() this.do_skill(this.skill2.uuid) } do_skill(uuid:number){ console.log("出发技能:",uuid) oops.message.dispatchEvent(GameEvent.CastHeroSkill,uuid) } get_skill(e:GameEvent,data:any){ console.log("get_skill",data) switch(data.slot){ case "skill1": this.skill1.uuid=data.uuid this.skill1.skill_name=SkillSet[data.uuid].name this.skill1.type=1 this.skill1.cd=SkillSet[data.uuid].cd this.skill1.cd_time=SkillSet[data.uuid].cd let icon1 = this.boxs.getChildByName("skill1").getChildByName("icon") icon1.active=true var icon_path = "game/heros/cards" resources.load(icon_path, SpriteAtlas, (err: any, atlas) => { const sprite = icon1.getChildByName("skill").getComponent(Sprite); sprite.spriteFrame = atlas.getSpriteFrame(SkillSet[data.uuid].path); }); break case "skill2": this.skill2.uuid=data.uuid this.skill2.skill_name=SkillSet[data.uuid].name this.skill2.type=1 this.skill2.cd=SkillSet[data.uuid].cd this.skill2.cd_time=SkillSet[data.uuid].cd let icon2 = this.boxs.getChildByName("skill2").getChildByName("icon") icon2.active=true var icon_path = "game/heros/cards" resources.load(icon_path, SpriteAtlas, (err: any, atlas) => { const sprite = icon2.getChildByName("skill").getComponent(Sprite); sprite.spriteFrame = atlas.getSpriteFrame(SkillSet[data.uuid].path); }); break } } call_skill_card(e:any,data:any){ oops.message.dispatchEvent(GameEvent.HeroSkillSelect,{slot:data}) } private show_skill_get(e:string){ if(this.skill1.uuid==0){ this.boxs.getChildByName("skill1").getChildByName("get").active =true this.boxs.getChildByName("skill1").getChildByName("light").active=true this.boxs.getChildByName("skill1").getChildByName("tip").active =true this.boxs.getChildByName("skill1").getChildByName("tip").getComponent(Label).string="学习" } if(this.skill2.uuid==0&&this.skill1.uuid!=0){ this.boxs.getChildByName("skill2").getChildByName("get").active =true this.boxs.getChildByName("skill2").getChildByName("light").active=true this.boxs.getChildByName("skill2").getChildByName("tip").active =true this.boxs.getChildByName("skill2").getChildByName("tip").getComponent(Label).string="学习" } } show_info(e:any,data:any){ switch(data){ case "skill1": console.log("[EquipSkillComp]: show_info",this.skill1) break case "skill2": console.log("[EquipSkillComp]: show_info",this.skill2) break } } private hide_skill_get(e:any,data:string){ this.boxs.getChildByName("skill1").getChildByName("get").active =false this.boxs.getChildByName("skill1").getChildByName("tip").active =false this.boxs.getChildByName("skill1").getChildByName("light").active=false this.boxs.getChildByName("skill2").getChildByName("get").active =false this.boxs.getChildByName("skill2").getChildByName("tip").active =false this.boxs.getChildByName("skill2").getChildByName("light").active=false this.boxs.getChildByName("skill3").getChildByName("get").active =false this.boxs.getChildByName("skill3").getChildByName("tip").active =false this.boxs.getChildByName("skill3").getChildByName("light").active=false } private show_skill_change(e:string){ if(this.skill1.uuid!=0){ this.boxs.getChildByName("skill1").getChildByName("change").active =true } if(this.skill2.uuid!=0){ this.boxs.getChildByName("skill2").getChildByName("change").active =true } } private hide_skill_change(e:any,data:any){ this.boxs.getChildByName("skill1").getChildByName("change").active =false this.boxs.getChildByName("skill2").getChildByName("change").active =false this.boxs.getChildByName("skill3").getChildByName("change").active =false } /** 视图对象通过 ecs.Entity.remove(ModuleViewComp) 删除组件是触发组件处理自定义释放逻辑 */ reset() { this.node.destroy(); } }