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"; const { ccclass, property } = _decorator; /** 视图层对象 */ @ccclass('EquipSkillComp') @ecs.register('EquipSkill', false) export class EquipSkillComp extends CCComp { skill1:any=null skill2:any=null skill3:any=null boxs:Node=null /** 视图层逻辑代码分离演示 */ onLoad() { this.on(GameEvent.UseSkillCard, this.get_skill, this); this.on(GameEvent.FightReady,this.fight_ready,this) this.on(GameEvent.SKILL_STONE_UP,this.skill_stone_up,this) this.boxs=this.node.getChildByName("boxs") } start(){ this.fight_ready() } skill_stone_up(e:GameEvent,data:any){ console.log("[EquipSkillComp]: skill_stone_up",data) smc.vmdata.mission_data.skill_stone+=data if(smc.vmdata.mission_data.skill_stone >= smc.vmdata.mission_data.skill_stone_max){ this.show_skill_get("skill1") this.show_skill_get("skill2") this.show_skill_get("skill3") } } 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, } this.skill2={ uuid:0, name:"skill2", type:0,// level:0, quality:0, cd:0, cd_time:0, } this.skill3={ uuid:0, name:"skill3", type:0,// level:0, quality:0, cd:0, cd_time:0, } } update(dt: number): void { if(!smc.mission.play||smc.mission.pause) return if(this.skill1.uuid!=0){ let cd_bar=this.boxs.getChildByName("skill1").getChildByName("icon").getChildByName("cd") 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() } } cd_bar.getComponent(ProgressBar).progress=(1-this.skill1.cd_time/cd) } if(this.skill2.uuid!=0){ let cd_bar=this.boxs.getChildByName("skill2").getChildByName("icon").getChildByName("cd") let cd=this.skill2.cd*(100-smc.vmdata.hero.skill_cd_buff)/100 if(this.skill2.cd_time < cd){ this.skill2.cd_time+=dt }else{ if(this.skill2.type==1){ this.do_skill2() } } cd_bar.getComponent(ProgressBar).progress=(1-this.skill2.cd_time/cd) } if(this.skill3.uuid!=0){ let cd_bar=this.boxs.getChildByName("skill3").getChildByName("icon").getChildByName("cd") let cd=this.skill3.cd*(100-smc.vmdata.hero.skill_cd_buff)/100 if(this.skill3.cd_time < cd){ this.skill3.cd_time+=dt }else{ if(this.skill3.type==1){ // this.do_skill3() } } cd_bar.getComponent(ProgressBar).progress=(1-this.skill3.cd_time/cd) } } 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") this.skill2.cd_time=0 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_skill3(){ if(this.skill3.uuid==0) return if(this.skill3.cd_time < (this.skill3.cd)) return if(smc.vmdata.mission_data.skill_stone < SkillSet[this.skill3.uuid].cost){ oops.gui.toast("技能石不足", false); return } smc.vmdata.mission_data.skill_stone-=SkillSet[this.skill3.uuid].cost this.skill3.cd_time=0 tween(this.boxs.getChildByName("skill3")).to(0.1, {scale:v3(1.2,1.2,1)},{onComplete:()=>{ tween(this.boxs.getChildByName("skill3")).to(0.2, {scale:v3(1,1,1)}).start() }}).start() oops.message.dispatchEvent(GameEvent.MaxSkill,{uuid:this.skill3.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 case "skill3": this.skill3.uuid=data.uuid this.skill3.skill_name=SkillSet[data.uuid].name this.skill3.type=1 this.skill3.cd=SkillSet[data.uuid].cd this.skill3.cd_time=SkillSet[data.uuid].cd let icon = this.boxs.getChildByName("skill3").getChildByName("icon") icon.active=true var icon_path = "game/heros/cards" resources.load(icon_path, SpriteAtlas, (err: any, atlas) => { const sprite = icon.getChildByName("skill").getComponent(Sprite); sprite.spriteFrame = atlas.getSpriteFrame(SkillSet[data.uuid].path); }); break } } call_skill_card(e:any,data:any){ let mission_data=smc.vmdata.mission_data if(mission_data.skill_stone < mission_data.skill_stone_max){ oops.gui.toast("技能石不足", false); return } oops.message.dispatchEvent(GameEvent.HeroSkillSelect,{slot:data}) mission_data.skill_stone-=mission_data.skill_stone_max mission_data.skill_stone_max=mission_data.skill_stone_max*2 } 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="学习" } if(this.skill3.uuid==0&&this.skill1.uuid!=0&&this.skill2.uuid!=0){ this.boxs.getChildByName("skill3").getChildByName("get").active =true this.boxs.getChildByName("skill3").getChildByName("light").active=true this.boxs.getChildByName("skill3").getChildByName("tip").active =true this.boxs.getChildByName("skill3").getChildByName("tip").getComponent(Label).string="学习" } } 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 } if(this.skill3.uuid!=0){ this.boxs.getChildByName("skill3").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(); } }