From d940a18e132d965b564af9cbe591bab73678aa14 Mon Sep 17 00:00:00 2001 From: MuHua-123 <136542559+MuHua-123@users.noreply.github.com> Date: Thu, 25 Sep 2025 09:24:28 +0800 Subject: [PATCH] 1 --- .../ModuleInventory/DataItem/DataEquipment.cs | 2 +- .../ModuleCore/ModuleInventory/Equipment.cs | 52 ++++++++- .../ModuleUIPanel/UIDragItem.cs | 22 ++-- .../ModuleUIPanel/UIEquipment.cs | 71 ++++++++---- .../ModuleUIPanel/UIInventory.cs | 107 ++++++++---------- .../ModuleCore/ModuleSingle/SingleManager.cs | 24 ++-- .../ModuleUI/ModuleUIPage/UIBackpackPage.cs | 4 + .../GamePage/BackpackPage/BackpackPage.uxml | 2 +- .../GamePanel/Equipment/EquipmentSlot.uxml | 2 +- 9 files changed, 176 insertions(+), 110 deletions(-) diff --git a/Assets/ModuleCore/ModuleInventory/DataItem/DataEquipment.cs b/Assets/ModuleCore/ModuleInventory/DataItem/DataEquipment.cs index 0b66b64..1663a85 100644 --- a/Assets/ModuleCore/ModuleInventory/DataItem/DataEquipment.cs +++ b/Assets/ModuleCore/ModuleInventory/DataItem/DataEquipment.cs @@ -6,6 +6,6 @@ using UnityEngine; /// 装备 - 物品 /// public class DataEquipment : DataItem { - /// 装备类型 + /// 装备类型 (类型1/类型2) public string type; } diff --git a/Assets/ModuleCore/ModuleInventory/Equipment.cs b/Assets/ModuleCore/ModuleInventory/Equipment.cs index af17aba..bb433ef 100644 --- a/Assets/ModuleCore/ModuleInventory/Equipment.cs +++ b/Assets/ModuleCore/ModuleInventory/Equipment.cs @@ -1,3 +1,4 @@ +using System; using System.Collections; using System.Collections.Generic; using UnityEngine; @@ -12,10 +13,17 @@ public class Equipment { /// 索引器 public EquipmentSlot this[string key] => dictionary[key]; + public bool ContainsKey(string key) => dictionary.ContainsKey(key); /// 添加插槽 public void AddSlot(EquipmentSlot slot) => dictionary.Add(slot.name, slot); } /// +/// 插槽类型 +/// +public enum SlotType { + 库存, 主手, 副手, 上衣, 头盔, 手套, 腰带, 鞋子, 项链, 戒指1, 戒指2, 手镯1, 手镯2 +} +/// /// 装备插槽 /// public abstract class EquipmentSlot { @@ -24,7 +32,14 @@ public abstract class EquipmentSlot { /// 物品 public DataEquipment item; - public EquipmentSlot(string name) => this.name = name; + public EquipmentSlot(SlotType slot) => name = slot.ToString(); + + /// 设置 + public void Settings(DataItem item, int count) { + if (item is DataEquipment equipment) { this.item = equipment; } + else { this.item = null; } + } + public abstract bool Verify(DataEquipment equipment); } /// /// 武器 - 装备插槽 @@ -33,7 +48,14 @@ public class WeaponSlot : EquipmentSlot { /// 副手插槽 public DeputySlot deputy; - public WeaponSlot(string name) : base(name) { } + public WeaponSlot(SlotType slot) : base(slot) { } + + public override bool Verify(DataEquipment equipment) { + string[] type = equipment.type.Split("/"); + if (type[0] == WeaponType.单手.ToString()) { return true; } + if (type[0] == WeaponType.双手.ToString()) { return true; } + return false; + } } /// /// 副手 - 装备插槽 @@ -42,21 +64,41 @@ public class DeputySlot : EquipmentSlot { /// 主手插槽 public WeaponSlot weapon; - public DeputySlot(string name) : base(name) { } + public DeputySlot(SlotType slot) : base(slot) { } + + public override bool Verify(DataEquipment equipment) { + string[] type = equipment.type.Split("/"); + if (type[0] == WeaponType.副手.ToString()) { return true; } + return false; + } } /// /// 护甲 - 装备插槽 /// public class ArmorSlot : EquipmentSlot { + /// 护甲类型 + public string armorType; - public ArmorSlot(string name) : base(name) { } + public ArmorSlot(SlotType slot, ArmorType armor) : base(slot) => armorType = armor.ToString(); + public override bool Verify(DataEquipment equipment) { + string[] type = equipment.type.Split("/"); + if (type[0] == armorType) { return true; } + return false; + } } /// /// 饰品 - 装备插槽 /// public class AccessorySlot : EquipmentSlot { + /// 饰品类型 + public string accessoryType; - public AccessorySlot(string name) : base(name) { } + public AccessorySlot(SlotType slot, AccessoryType accessory) : base(slot) => accessoryType = accessory.ToString(); + public override bool Verify(DataEquipment equipment) { + string[] type = equipment.type.Split("/"); + if (type[0] == accessoryType) { return true; } + return false; + } } \ No newline at end of file diff --git a/Assets/ModuleCore/ModuleInventory/ModuleUIPanel/UIDragItem.cs b/Assets/ModuleCore/ModuleInventory/ModuleUIPanel/UIDragItem.cs index dd20093..7122e5b 100644 --- a/Assets/ModuleCore/ModuleInventory/ModuleUIPanel/UIDragItem.cs +++ b/Assets/ModuleCore/ModuleInventory/ModuleUIPanel/UIDragItem.cs @@ -9,17 +9,17 @@ using MuHua; /// public class UIDragItem : ModuleUIPanel, UIControl { /// 画布 - private VisualElement canvas; + public VisualElement canvas; /// 是否启用 - private bool isEnable; + public bool isEnable; /// 鼠标位置 - private Vector2 mousePosition; + public Vector2 mousePosition; /// 偏移位置 - private Vector2 offsetPosition; + public Vector2 offsetPosition; /// 物品容器 - private DragContainer container; + public DragContainer container; /// 目标容器 - private DragContainer targetContainer; + public DragContainer targetContainer; public Label Count => Q public class UIEquipment : ModuleUIPanel { - public VisualElement EquipmentSlot1 => Q("EquipmentSlot1");// 主手 - public VisualElement EquipmentSlot2 => Q("EquipmentSlot2");// 副手 - public VisualElement EquipmentSlot3 => Q("EquipmentSlot3");// 衣服 - public VisualElement EquipmentSlot4 => Q("EquipmentSlot4");// 项链 - public VisualElement EquipmentSlot5 => Q("EquipmentSlot5");// 戒指1 - public VisualElement EquipmentSlot6 => Q("EquipmentSlot6");// 戒指2 - public VisualElement EquipmentSlot7 => Q("EquipmentSlot7");// 手镯1 - public VisualElement EquipmentSlot8 => Q("EquipmentSlot8");// 手镯2 - public VisualElement EquipmentSlot9 => Q("EquipmentSlot9");// 头盔 - public VisualElement EquipmentSlot10 => Q("EquipmentSlot10");// 手套 - public VisualElement EquipmentSlot11 => Q("EquipmentSlot11");// 腰带 - public VisualElement EquipmentSlot12 => Q("EquipmentSlot12");// 鞋子 + public Equipment equipment; + /// 插槽字典 + public Dictionary dictionary = new Dictionary(); public UIEquipment(VisualElement element) : base(element) { + InitialSlot(1, SlotType.主手); + InitialSlot(2, SlotType.副手); + InitialSlot(3, SlotType.上衣); + InitialSlot(4, SlotType.项链); + InitialSlot(4, SlotType.戒指1); + InitialSlot(4, SlotType.戒指2); + InitialSlot(4, SlotType.手镯1); + InitialSlot(4, SlotType.手镯2); + + InitialSlot(4, SlotType.头盔); + InitialSlot(4, SlotType.手套); + InitialSlot(4, SlotType.腰带); + InitialSlot(4, SlotType.鞋子); + } + public void Dispose() { + + } + + public void Settings(Equipment equipment) { + if (this.equipment != null) { Dispose(); } + this.equipment = equipment; + if (equipment == null) { return; } + foreach (var item in dictionary) { + if (!equipment.ContainsKey(item.Key)) { continue; } + EquipmentSlot slot = equipment[item.Key]; + item.Value.Settings(slot); + } + } + + private void InitialSlot(int index, SlotType type) { + VisualElement element = Q($"EquipmentSlot{index}"); + UIEquipmentSlot uiSlot = new UIEquipmentSlot(element); + dictionary.Add(type.ToString(), uiSlot); } } /// @@ -51,6 +75,7 @@ public class UIEquipmentSlot : ModuleUIPanel, DragContainer { Image.EnableInClassList("equipment-image-drag", true); } private void MouseOverEvent(MouseOverEvent evt) { + if (!Verify()) { return; } UIPopupManager.I.dragItem.EnterContainer(this); } private void MouseLeaveEvent(MouseLeaveEvent evt) { @@ -64,24 +89,22 @@ public class UIEquipmentSlot : ModuleUIPanel, DragContainer { this.value = value; UpdatePreview(); } + public void Settings(DataItem item, int count) { + value.Settings(item, count); + UpdatePreview(); + } public void Cancel() { Image.EnableInClassList("equipment-image-drag", false); } - public void Exchange(DragContainer container) { - int count = container.Count; - DataEquipment item = container.Item as DataEquipment; - - if (container is UIInventory.UIItem inventoryItem) { - inventoryItem.value.Settings(value.item, 1); - inventoryItem.UpdatePreview(); - } - - value.item = item; - UpdatePreview(); - } private void UpdatePreview() { Sprite sprite = value == null || value.item == null ? null : value.item.sprite; Image.style.backgroundImage = new StyleBackground(sprite); } + private bool Verify() { + DragContainer container = UIPopupManager.I.dragItem.container; + if (container == null) { return false; } + if (container.Item is DataEquipment equipment) { return value.Verify(equipment); } + return false; + } } \ No newline at end of file diff --git a/Assets/ModuleCore/ModuleInventory/ModuleUIPanel/UIInventory.cs b/Assets/ModuleCore/ModuleInventory/ModuleUIPanel/UIInventory.cs index c129764..ef5f1a8 100644 --- a/Assets/ModuleCore/ModuleInventory/ModuleUIPanel/UIInventory.cs +++ b/Assets/ModuleCore/ModuleInventory/ModuleUIPanel/UIInventory.cs @@ -10,13 +10,13 @@ using MuHua; public class UIInventory : ModuleUIPanel { public Inventory inventory; - public ModuleUIItems items; + public ModuleUIItems items; public VisualElement Container => Q("Container"); public UIInventory(VisualElement element, VisualTreeAsset templateAsset) : base(element) { - items = new ModuleUIItems(Container, templateAsset, - (data, element) => new UIItem(data, element)); + items = new ModuleUIItems(Container, templateAsset, + (data, element) => new UIInventorySlot(data, element)); } public void Dispose() { items.Release(); @@ -35,58 +35,51 @@ public class UIInventory : ModuleUIPanel { private void Inventory_OnChange(Inventory inventory) { items.Create(inventory.slots); } - - /// UI项目 - public class UIItem : ModuleUIItem, DragContainer { - - public Label CountLabel => Q