223 lines
5.8 KiB
TypeScript
223 lines
5.8 KiB
TypeScript
import { _decorator, Component, Node, Label, Sprite, resources, SpriteFrame } from 'cc';
|
|
import { Items } from '../common/config/Items';
|
|
import { QualitySet } from '../common/config/BoxSet';
|
|
import { oops } from 'db://oops-framework/core/Oops';
|
|
import { UIID } from '../common/config/GameUIConfig';
|
|
const { ccclass, property } = _decorator;
|
|
|
|
@ccclass('ItemComp')
|
|
export class ItemComp extends Component {
|
|
item_uuid: number = 0;
|
|
item_count: number = 1;
|
|
type: number = 0;
|
|
slot: number = 0;
|
|
no_show:boolean=false
|
|
|
|
|
|
|
|
start() {
|
|
// console.log("[ItemComp]:start");
|
|
}
|
|
|
|
update(deltaTime: number) {
|
|
|
|
}
|
|
|
|
/**
|
|
* 更新物品数据
|
|
* @param hero_uuid 物品ID
|
|
* @param count 物品数量
|
|
* @param args 额外参数
|
|
*/
|
|
update_data(hero_uuid: number, count: number = 1, args: any = {}) {
|
|
this.item_uuid = hero_uuid;
|
|
this.item_count = count;
|
|
this.type = args.type || 0;
|
|
this.slot = args.slot || 0;
|
|
this.no_show = args.no_show || false;
|
|
// console.log("[ItemComp]:update_data", hero_uuid, count, this.type, this.slot, args);
|
|
|
|
// 获取物品配置
|
|
const itemData = Items[hero_uuid];
|
|
if (!itemData) {
|
|
console.error("[ItemComp]: Item not found", hero_uuid);
|
|
return;
|
|
}
|
|
|
|
// 设置物品图标
|
|
this.setItemIcon(itemData.path);
|
|
|
|
// 设置品质边框
|
|
this.setQualityFrame(itemData.quality);
|
|
|
|
// 设置数量显示
|
|
this.setItemCount(count);
|
|
|
|
// 设置选中状态
|
|
if (args.selected) {
|
|
this.setSelected(true);
|
|
} else {
|
|
this.setSelected(false);
|
|
}
|
|
}
|
|
|
|
/**
|
|
* 设置物品图标
|
|
* @param iconPath 图标路径
|
|
*/
|
|
private setItemIcon(iconPath: string) {
|
|
let path=`gui/items/${iconPath}`
|
|
// console.log("[ItemComp]: setItemIcon", path);
|
|
resources.load(path, SpriteFrame, (err, spriteFrame) => {
|
|
if (err) {
|
|
console.error("[ItemComp]: Failed to load item icon", iconPath, err);
|
|
return;
|
|
}
|
|
// console.log("[ItemComp]: setItemIcon", iconPath, spriteFrame);
|
|
this.node.getChildByName("icon").getComponent(Sprite)!.spriteFrame = spriteFrame;
|
|
});
|
|
}
|
|
|
|
/**
|
|
* 设置品质边框
|
|
* @param quality 品质类型
|
|
*/
|
|
private setQualityFrame(quality: QualitySet) {
|
|
// 隐藏所有品质边框
|
|
this.hideAllQualityFrames();
|
|
|
|
// 根据品质显示对应边框
|
|
switch (quality) {
|
|
case QualitySet.GREEN:
|
|
this.node.getChildByName("q1").active = true;
|
|
break;
|
|
case QualitySet.BLUE:
|
|
this.node.getChildByName("q2").active = true;
|
|
break;
|
|
case QualitySet.PURPLE:
|
|
this.node.getChildByName("q3").active = true;
|
|
break;
|
|
case QualitySet.ORANGE:
|
|
this.node.getChildByName("q4").active = true;
|
|
break;
|
|
default:
|
|
// 默认使用绿色边框
|
|
this.node.getChildByName("q").active = true;
|
|
break;
|
|
}
|
|
}
|
|
|
|
/**
|
|
* 隐藏所有品质边框
|
|
*/
|
|
private hideAllQualityFrames() {
|
|
this.node.getChildByName("q").active = false;
|
|
this.node.getChildByName("q1").active = false;
|
|
this.node.getChildByName("q2").active = false;
|
|
this.node.getChildByName("q3").active = false;
|
|
this.node.getChildByName("q4").active = false;
|
|
this.node.getChildByName("focus").active = false;
|
|
}
|
|
|
|
/**
|
|
* 设置物品数量
|
|
* @param count 数量
|
|
*/
|
|
private setItemCount(count: number) {
|
|
this.node.getChildByName("num").getComponent(Label)!.string = count.toString();
|
|
}
|
|
|
|
/**
|
|
* 设置选中状态
|
|
* @param selected 是否选中
|
|
*/
|
|
private setSelected(selected: boolean) {
|
|
this.node.getChildByName("focus").active = selected;
|
|
}
|
|
|
|
/**
|
|
* 物品点击事件
|
|
*/
|
|
do_click() {
|
|
// console.log("[ItemComp]: Item clicked", this.item_uuid, this.item_count);
|
|
|
|
// 根据类型处理不同逻辑
|
|
switch (this.type) {
|
|
case 1: // 普通点击
|
|
this.onItemClick();
|
|
break;
|
|
case 2: // 选择物品
|
|
this.onItemSelect();
|
|
break;
|
|
case 3: // 使用物品
|
|
this.onItemUse();
|
|
break;
|
|
default:
|
|
this.onItemClick();
|
|
break;
|
|
}
|
|
}
|
|
|
|
/**
|
|
* 普通物品点击
|
|
*/
|
|
private onItemClick() {
|
|
// 显示物品信息或执行其他逻辑
|
|
// console.log("[ItemComp]: Show item info", this.item_uuid);
|
|
}
|
|
|
|
/**
|
|
* 选择物品
|
|
*/
|
|
private onItemSelect() {
|
|
// 处理物品选择逻辑
|
|
// console.log("[ItemComp]: Item selected", this.item_uuid);
|
|
}
|
|
|
|
/**
|
|
* 使用物品
|
|
*/
|
|
private onItemUse() {
|
|
// 处理物品使用逻辑
|
|
// console.log("[ItemComp]: Use item", this.item_uuid);
|
|
}
|
|
show_item_info(){
|
|
if(this.no_show){
|
|
return
|
|
}
|
|
oops.gui.open(UIID.ItemInfo, { item_uuid: this.item_uuid ,count:this.item_count});
|
|
}
|
|
/**
|
|
* 获取物品UUID
|
|
*/
|
|
getItemUUID(): number {
|
|
return this.item_uuid;
|
|
}
|
|
|
|
/**
|
|
* 获取物品数量
|
|
*/
|
|
getItemCount(): number {
|
|
return this.item_count;
|
|
}
|
|
addItemCount(count:number){
|
|
this.item_count+=count
|
|
this.setItemCount(this.item_count)
|
|
}
|
|
/**
|
|
* 设置物品类型
|
|
*/
|
|
setItemType(type: number) {
|
|
this.type = type;
|
|
}
|
|
|
|
/**
|
|
* 设置物品槽位
|
|
*/
|
|
setItemSlot(slot: number) {
|
|
this.slot = slot;
|
|
}
|
|
}
|
|
|
|
|