feat(物品系统): 添加物品使用功能及相关配置
- 在GameEvent枚举中添加UseItemCard事件 - 创建ItemSet物品配置表,包含8种不同效果的物品 - 在HeroAttrsComp中添加物品使用逻辑,处理物品效果应用 - 修改MissionCardComp支持物品购买界面和购买逻辑 - 添加物品购买后的视觉反馈和状态管理
This commit is contained in:
@@ -1,9 +1,11 @@
|
||||
import { _decorator, Label, Node, tween, Vec3 } from "cc";
|
||||
import { _decorator, Label, Node, tween, Vec3, Color, Sprite } 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 { oops } from "../../../../extensions/oops-plugin-framework/assets/core/Oops";
|
||||
import { GameEvent } from "../common/config/GameEvent";
|
||||
import { talConf, ItalConf } from "../common/config/TalSet";
|
||||
import { ItemSet } from "../common/config/ItemSet";
|
||||
import { smc } from "../common/SingletonModuleComp";
|
||||
|
||||
const { ccclass, property } = _decorator;
|
||||
|
||||
@@ -34,13 +36,18 @@ export class MissionCardComp extends CCComp {
|
||||
|
||||
// 当前卡片类型
|
||||
curCardType: CardType = CardType.Talent;
|
||||
|
||||
// 已购买的卡片槽位标记 (用于物品购买)
|
||||
purchasedSlots: boolean[] = [false, false, false, false, false];
|
||||
|
||||
onLoad() {
|
||||
oops.message.on(GameEvent.TalentSelect, this.onTalentSelect, this);
|
||||
oops.message.on(GameEvent.ShopOpen, this.onShopOpen, this);
|
||||
}
|
||||
|
||||
onDestroy() {
|
||||
oops.message.off(GameEvent.TalentSelect, this.onTalentSelect, this);
|
||||
oops.message.off(GameEvent.ShopOpen, this.onShopOpen, this);
|
||||
this.ent.destroy();
|
||||
}
|
||||
|
||||
@@ -56,13 +63,28 @@ export class MissionCardComp extends CCComp {
|
||||
if (card) {
|
||||
const selected = card.getChildByName("selected");
|
||||
if (selected) selected.active = false;
|
||||
// 恢复缩放和颜色
|
||||
card.setScale(1, 1, 1);
|
||||
const sprite = card.getComponent(Sprite);
|
||||
if (sprite) sprite.color = new Color(255, 255, 255);
|
||||
}
|
||||
});
|
||||
// 重置购买状态
|
||||
this.purchasedSlots = [false, false, false, false, false];
|
||||
}
|
||||
|
||||
// 是否已经选择了天赋
|
||||
private hasSelected: boolean = false;
|
||||
|
||||
private onShopOpen(event: string, args: any) {
|
||||
this.node.active = true;
|
||||
this.hasSelected = false;
|
||||
this.curCardType = CardType.Potion;
|
||||
this.resetCardStates();
|
||||
this.refCards();
|
||||
this.playShowAnimation();
|
||||
}
|
||||
|
||||
private onTalentSelect(event: string, args: any) {
|
||||
this.node.active = true;
|
||||
this.hasSelected = false; // 重置选择状态
|
||||
@@ -180,6 +202,47 @@ export class MissionCardComp extends CCComp {
|
||||
}
|
||||
|
||||
if (selectedData && selectedCardNode) {
|
||||
// 处理物品购买逻辑
|
||||
if (this.curCardType === CardType.Potion) {
|
||||
if (this.purchasedSlots[_index]) {
|
||||
oops.gui.toast("该物品已购买");
|
||||
return;
|
||||
}
|
||||
|
||||
if (smc.vmdata.gold < selectedData.price) {
|
||||
oops.gui.toast("金币不足");
|
||||
return;
|
||||
}
|
||||
|
||||
// 扣除金币
|
||||
smc.updateGold(-selectedData.price);
|
||||
|
||||
// 发送使用物品事件
|
||||
oops.message.dispatchEvent(GameEvent.UseItemCard, selectedData.id);
|
||||
|
||||
// 标记已购买
|
||||
this.purchasedSlots[_index] = true;
|
||||
|
||||
// 视觉反馈 (变灰)
|
||||
const sprite = selectedCardNode.getComponent(Sprite);
|
||||
if (sprite) sprite.color = new Color(150, 150, 150);
|
||||
|
||||
oops.gui.toast("购买成功");
|
||||
|
||||
// 检查是否所有卡片都已购买,如果是则关闭
|
||||
let allPurchased = true;
|
||||
// 检查当前显示的卡片是否都买了
|
||||
if (this.card1.active && !this.purchasedSlots[1]) allPurchased = false;
|
||||
if (this.card2.active && !this.purchasedSlots[2]) allPurchased = false;
|
||||
if (this.card3.active && !this.purchasedSlots[3]) allPurchased = false;
|
||||
if (this.card4.active && !this.purchasedSlots[4]) allPurchased = false;
|
||||
|
||||
if (allPurchased) {
|
||||
this.node.active = false;
|
||||
}
|
||||
return;
|
||||
}
|
||||
|
||||
this.hasSelected = true;
|
||||
console.log("选择卡片:", selectedData.name, "类型:", this.curCardType);
|
||||
|
||||
@@ -216,6 +279,13 @@ export class MissionCardComp extends CCComp {
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* 关闭界面
|
||||
*/
|
||||
close() {
|
||||
this.node.active = false;
|
||||
}
|
||||
|
||||
/** 视图对象通过 ecs.Entity.remove(ModuleViewComp) 删除组件是触发组件处理自定义释放逻辑 */
|
||||
reset() {
|
||||
this.node.destroy();
|
||||
|
||||
Reference in New Issue
Block a user