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