import { _decorator, Component, Node, resources, Sprite, SpriteAtlas } from 'cc'; import { oops } from 'db://oops-framework/core/Oops'; import { GameEvent } from '../common/config/GameEvent'; import { smc } from '../common/SingletonModuleComp'; import { EquipInfo, EquipType, EquipAttrTarget} from '../common/config/Equips'; import { BuffAttr, getBuffNum } from '../common/config/SkillSet'; const { ccclass, property } = _decorator; @ccclass('EquipsComp') export class EquipsComp extends Component { weapon:any=null armor:any=null accessory:any=null skill1:any=null skill2:any=null skill3:any=null boxs:Node=null attrs:any={ hero:getBuffNum(), ally:getBuffNum(), enemy:getBuffNum(), friend:getBuffNum(), } /** 视图层逻辑代码分离演示 */ onLoad() { oops.message.on(GameEvent.FightReady,this.fight_ready,this) oops.message.on(GameEvent.EquipAdd,this.equip_add,this) oops.message.on(GameEvent.EquipRemove,this.equip_remove,this) this.boxs=this.node.getChildByName("boxs") } start(){ this.fight_ready() } fight_ready(){ this.boxs.getChildByName("weapon").getChildByName("icon").active=false this.boxs.getChildByName("armor").getChildByName("icon").active=false this.boxs.getChildByName("accessory").getChildByName("icon").active=false this.weapon={ uuid:0, name:"weapon", type:"weapon", level:0, } this.armor={ uuid:0, name:"armor", type:"armor", level:0, } this.accessory={ uuid:0, name:"accessory", type:"accessory", level:0, } this.count_attrs() } equip_add(e:GameEvent,data:any){ console.log("equip_add",data) if(data.type==EquipType.WEAPON){ this.weapon.uuid=data.uuid this.weapon.name=data.name this.weapon.type=data.type this.weapon.level=data.level this.show_weapon(data.uuid) } if(data.type==EquipType.ARMOR){ this.armor.uuid=data.uuid this.armor.name=data.name this.armor.type=data.type this.armor.level=data.level this.show_armor(data.uuid) } if(data.type==EquipType.ACCESSORY){ this.accessory.uuid=data.uuid this.accessory.name=data.name this.accessory.type=data.type this.accessory.level=data.level this.show_accessory(data.uuid) } this.count_attrs() } show_weapon(uuid:number){ let icon = this.node.getChildByName("boxs").getChildByName("weapon").getChildByName("icon") icon.active=true var icon_path = "game/heros/equips" resources.load(icon_path, SpriteAtlas, (err: any, atlas) => { const sprite = icon.getChildByName("icon").getComponent(Sprite); sprite.spriteFrame = atlas.getSpriteFrame(uuid.toString()); }); } show_armor(uuid:number){ let icon = this.node.getChildByName("boxs").getChildByName("armor").getChildByName("icon") icon.active=true var icon_path = "game/heros/equips" resources.load(icon_path, SpriteAtlas, (err: any, atlas) => { const sprite = icon.getChildByName("icon").getComponent(Sprite); sprite.spriteFrame = atlas.getSpriteFrame(uuid.toString()); }); } show_accessory(uuid:number){ let icon = this.node.getChildByName("boxs").getChildByName("accessory").getChildByName("icon") icon.active=true var icon_path = "game/heros/equips" resources.load(icon_path, SpriteAtlas, (err: any, atlas) => { const sprite = icon.getChildByName("icon").getComponent(Sprite); sprite.spriteFrame = atlas.getSpriteFrame(uuid.toString()); }); } count_attrs(){ // 重置所有属性 this.reset_attrs(); console.log("重置后的属性", this.attrs); // 获取所有装备的属性 let weapon_attrs = this.weapon.uuid ? EquipInfo[this.weapon.uuid]?.attributes || [] : []; let armor_attrs = this.armor.uuid ? EquipInfo[this.armor.uuid]?.attributes || [] : []; let accessory_attrs = this.accessory.uuid ? EquipInfo[this.accessory.uuid]?.attributes || [] : []; console.log("武器属性", weapon_attrs); console.log("防具属性", armor_attrs); console.log("饰品属性", accessory_attrs); // 合并所有装备属性 const allAttrs = [...weapon_attrs, ...armor_attrs, ...accessory_attrs]; console.log("合并后的所有属性", allAttrs); // 计算每个目标的属性加成 allAttrs.forEach(attr => { const target = attr.target || EquipAttrTarget.ALL; let targetKey = null; // 根据目标类型获取对应的key switch (target) { case EquipAttrTarget.ALL: targetKey = 'ally'; break; case EquipAttrTarget.HERO: targetKey = 'hero'; break; case EquipAttrTarget.FRIEND: targetKey = 'friend'; break; case EquipAttrTarget.ENEMY: targetKey = 'enemy'; break; } console.log("处理属性加成", { target: target, targetKey: targetKey, attr: attr, beforeValue: targetKey ? this.attrs[targetKey][BuffAttr[attr.type]] : null }); if (targetKey) { switch (attr.type) { case BuffAttr.ATK: this.attrs[targetKey].ATK += attr.value; break; case BuffAttr.ATK_COUNT: this.attrs[targetKey].ATK_COUNT += attr.value; break; case BuffAttr.ATK_CD: this.attrs[targetKey].ATK_CD += attr.value; break; case BuffAttr.HP: this.attrs[targetKey].HP += attr.value; break; case BuffAttr.DEF: this.attrs[targetKey].DEF += attr.value; break; case BuffAttr.SKILL_DMG: this.attrs[targetKey].SKILL_DMG += attr.value; break; case BuffAttr.SKILL_CD: this.attrs[targetKey].SKILL_CD += attr.value; break; case BuffAttr.CARD_EFFECT: this.attrs[targetKey].CARD_EFFECT += attr.value; break; case BuffAttr.CARD_COUNT: this.attrs[targetKey].CARD_COUNT += attr.value; break; } console.log("属性加成后", { targetKey: targetKey, attrType: BuffAttr[attr.type], afterValue: this.attrs[targetKey][BuffAttr[attr.type]] }); } }); console.log("最终属性加成", this.attrs); oops.message.dispatchEvent(GameEvent.EquipChange, this.attrs); } // 重置所有属性为0 private reset_attrs() { // 创建新的属性对象 const newAttrs = { hero: getBuffNum(), ally: getBuffNum(), enemy: getBuffNum(), friend: getBuffNum() }; // 替换整个 attrs 对象 this.attrs = newAttrs; console.log("重置属性", { hero: this.attrs.hero, ally: this.attrs.ally, enemy: this.attrs.enemy, friend: this.attrs.friend }); } equip_remove(e:GameEvent,data:any){ console.log("equip_remove",data) } update(dt: number): void { if(!smc.mission.play||smc.mission.pause) return } }