From 3ad905cd598517ff36308d9330a7d5daa9012d71 Mon Sep 17 00:00:00 2001 From: panfudan Date: Tue, 17 Jun 2025 00:00:56 +0800 Subject: [PATCH] dd --- assets/script/game/hero/FriendModel.ts | 26 ++++++++++ assets/script/game/hero/FriendModel.ts.meta | 9 ++++ assets/script/game/hero/Hero.ts | 2 + assets/script/game/hero/HeroViewComp.ts | 7 ++- assets/script/game/map/MissionHeroComp.ts | 56 +++++++++++++++------ 5 files changed, 83 insertions(+), 17 deletions(-) create mode 100644 assets/script/game/hero/FriendModel.ts create mode 100644 assets/script/game/hero/FriendModel.ts.meta diff --git a/assets/script/game/hero/FriendModel.ts b/assets/script/game/hero/FriendModel.ts new file mode 100644 index 00000000..88b57213 --- /dev/null +++ b/assets/script/game/hero/FriendModel.ts @@ -0,0 +1,26 @@ +import { ecs } from "../../../../extensions/oops-plugin-framework/assets/libs/ecs/ECS"; +import { VM } from "../../../../extensions/oops-plugin-framework/assets/libs/model-view/ViewModel"; + +/** 数据层对象 */ +@ecs.register('FriendModel') +export class FriendModelComp extends ecs.Comp { + /** 提供 MVVM 组件使用的数据 */ + private vm: any = {}; + + /** 显示数据添加到 MVVM 框架中监视 */ + vmAdd() { + VM.add(this.vm, "FriendModel"); + } + + /** 显示数据从 MVVM 框架中移除 */ + vmRemove() { + VM.remove("FriendModel"); + } + + /** 数据层组件移除时,重置所有数据为默认值 */ + reset() { + for (var key in this.vm) { + delete this.vm[key]; + } + } +} \ No newline at end of file diff --git a/assets/script/game/hero/FriendModel.ts.meta b/assets/script/game/hero/FriendModel.ts.meta new file mode 100644 index 00000000..1e4bbe69 --- /dev/null +++ b/assets/script/game/hero/FriendModel.ts.meta @@ -0,0 +1,9 @@ +{ + "ver": "4.0.23", + "importer": "typescript", + "imported": true, + "uuid": "8f0b0fe4-fa69-4f5b-95d1-833eaafa2103", + "files": [], + "subMetas": {}, + "userData": {} +} diff --git a/assets/script/game/hero/Hero.ts b/assets/script/game/hero/Hero.ts index ffc07f4e..1204c22f 100644 --- a/assets/script/game/hero/Hero.ts +++ b/assets/script/game/hero/Hero.ts @@ -8,6 +8,7 @@ import { BoxSet, FacSet } from "../common/config/BoxSet"; import { HeroInfo } from "../common/config/heroSet"; import { BattleMoveComp } from "../common/ecs/position/BattleMoveComp"; import { SkillConComp } from "./SkillConComp"; +import { FriendModelComp } from "./FriendModel"; /** 角色实体 */ @ecs.register(`Hero`) @@ -72,6 +73,7 @@ export class Hero extends ecs.Entity { node.parent = scene.entityLayer!.node! node.setPosition(pos) // console.log("hero load",pos) + this.addComponents(FriendModelComp); var hv = node.getComponent(HeroViewComp)!; let hero= HeroInfo[uuid] // 共用英雄数据 hv.scale = scale; diff --git a/assets/script/game/hero/HeroViewComp.ts b/assets/script/game/hero/HeroViewComp.ts index 4d095eae..d5eb272d 100644 --- a/assets/script/game/hero/HeroViewComp.ts +++ b/assets/script/game/hero/HeroViewComp.ts @@ -11,6 +11,8 @@ import { oops } from "db://oops-framework/core/Oops"; import { GameEvent } from "../common/config/GameEvent"; import { FightConComp } from "../map/FightConComp"; import { EquipSpecialAttr } from "../common/config/Equips"; +import { FightSet } from "../common/config/Mission"; +import { HeroPos } from "../common/config/heroSet"; const { ccclass, property } = _decorator; @@ -308,7 +310,10 @@ export class HeroViewComp extends CCComp { this.to_drop() } - + to_alive(){ + this.is_dead=false + this.node.setPosition(HeroPos[0].pos) + } //掉落物品 to_drop(){ // let Drops = getMonsterDrops(1, MonsterType.Normal, 1.2); diff --git a/assets/script/game/map/MissionHeroComp.ts b/assets/script/game/map/MissionHeroComp.ts index 3cd6d4f2..b7147437 100644 --- a/assets/script/game/map/MissionHeroComp.ts +++ b/assets/script/game/map/MissionHeroComp.ts @@ -10,6 +10,7 @@ import { HeroViewComp } from "../hero/HeroViewComp"; import { oops } from "db://oops-framework/core/Oops"; import { HeroPos } from "../common/config/heroSet"; import { FightSet } from "../common/config/Mission"; +import { FriendModelComp } from "../hero/FriendModel"; const { ccclass, property } = _decorator; /** 视图层对象 */ @@ -21,14 +22,18 @@ export class MissionHeroCompComp extends CCComp { Friend_is_dead:boolean=false current_hero_uuid:number=0 onLoad(){ - this.on(GameEvent.UseHeroCard,this.call_hero,this) + this.on(GameEvent.UseHeroCard,this.call_friend,this) this.on(GameEvent.ChangeATK_FRIEND_LIVE_CD,this.change_friend_alive_cd,this) + this.on(GameEvent.FightReady,this.fight_ready,this) } start() { // this.test_call() this.node.getChildByName("location").active=false } + fight_ready(){ + this.Friend_alive_cd=new Timer(FightSet.FRIEND_LIVE_CD) + } protected update(dt: number): void { if(smc.mission.status != 1) return if(this.Friend_is_dead){ @@ -38,17 +43,34 @@ export class MissionHeroCompComp extends CCComp { } } + change_friend_alive_cd(e:GameEvent,data:any){ console.log("change_friend_alive_cd",data) this.Friend_alive_cd=new Timer(FightSet.FRIEND_LIVE_CD-data) } - init(){ - + private call_friend(event: string, args: any,freind_pos:number=0){ + console.log("call_hero addHero",args.uuid) + let info:any={ap:0,hp:0,lv:0} + let hero = ecs.getEntity(Hero); + let scale = 1 + let pos:Vec3 = HeroPos[freind_pos].pos; + hero.load(pos,scale,args.uuid,info,freind_pos); + oops.message.dispatchEvent(GameEvent.HeroSelectEnd) + console.log("call_friend",hero) } - test_call(){ - this.addHero(5010) + + alive_friend(){ + this.Friend_is_dead=false + let heros = ecs.query(ecs.allOf(FriendModelComp)) + for(let hero of heros){ + let hv = hero.get(HeroViewComp) + if(hv.is_dead){ + hv.to_alive() + } + } } + // show_heros_pos(event: string, args: any){ // console.log("show_heros_pos",args) // this.current_hero_uuid=args.uuid @@ -88,17 +110,19 @@ export class MissionHeroCompComp extends CCComp { // } // } - call_hero(event: string, args: any){ - // this.node.getChildByName("location").active=false - // console.log("call_hero",args) - // let fight_pos=args - // 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(args.uuid) - } + + + // call_hero(event: string, args: any){ + // // this.node.getChildByName("location").active=false + // // console.log("call_hero",args) + // // let fight_pos=args + // // 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(args.uuid) + // } /** 添加英雄 */ private addHero(uuid:number=1001,freind_pos:number=0) {