diff --git a/Assets/AssetsPackage/物品数据/属性容器.asset b/Assets/AssetsPackage/物品数据/属性容器.asset new file mode 100644 index 0000000..c5ba3ae --- /dev/null +++ b/Assets/AssetsPackage/物品数据/属性容器.asset @@ -0,0 +1,51 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!114 &-6358681353448287529 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 0} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: e891e45f4230ee04d8d329520fd39cbc, type: 3} + m_Name: "\u653B\u51FB\u529B" + m_EditorClassIdentifier: + type: 0 + defaultValue: 0 + minValue: 0 + maxValue: 3.4028235e+38 + container: {fileID: 11400000} +--- !u!114 &-1377547097575584075 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 0} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: e891e45f4230ee04d8d329520fd39cbc, type: 3} + m_Name: "\u653B\u51FB\u901F\u5EA6" + m_EditorClassIdentifier: + type: 0 + defaultValue: 0 + minValue: 0 + maxValue: 3.4028235e+38 + container: {fileID: 11400000} +--- !u!114 &11400000 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 0} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 23403840a9d12654f8f15c6188728498, type: 3} + m_Name: "\u5C5E\u6027\u5BB9\u5668" + m_EditorClassIdentifier: + instances: + - {fileID: -1377547097575584075} + - {fileID: -6358681353448287529} diff --git a/Assets/AssetsPackage/物品数据/属性容器.asset.meta b/Assets/AssetsPackage/物品数据/属性容器.asset.meta new file mode 100644 index 0000000..4b228e4 --- /dev/null +++ b/Assets/AssetsPackage/物品数据/属性容器.asset.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 09e8991e4b5a20745a227d1bc138548a +NativeFormatImporter: + externalObjects: {} + mainObjectFileID: 11400000 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/ModuleCore/ModuleInventory/DataItem.meta b/Assets/ModuleCore/ModuleAttribute.meta similarity index 77% rename from Assets/ModuleCore/ModuleInventory/DataItem.meta rename to Assets/ModuleCore/ModuleAttribute.meta index 2f78985..a69ce00 100644 --- a/Assets/ModuleCore/ModuleInventory/DataItem.meta +++ b/Assets/ModuleCore/ModuleAttribute.meta @@ -1,5 +1,5 @@ fileFormatVersion: 2 -guid: 8a4ee71d02fa8cd40aceb7f62a6efd89 +guid: 6a2d6badedf74af4a8e4faffb6130a48 folderAsset: yes DefaultImporter: externalObjects: {} diff --git a/Assets/ModuleCore/ModuleAttribute/AttributeContainer.cs b/Assets/ModuleCore/ModuleAttribute/AttributeContainer.cs new file mode 100644 index 0000000..078a07b --- /dev/null +++ b/Assets/ModuleCore/ModuleAttribute/AttributeContainer.cs @@ -0,0 +1,41 @@ +using System; +using System.Collections; +using System.Collections.Generic; +using UnityEngine; + +/// +/// 属性容器 +/// +public class AttributeContainer { + /// 属性字典 + public Dictionary dictionary = new Dictionary(); + + /// 添加属性 + public void AddInstance(string attributeID, AttributeInstance instance) { + if (dictionary.ContainsKey(attributeID)) { return; } + dictionary.Add(attributeID, instance); + } + /// 添加修改器 + public void AddModifier(string attributeID, AttributeModifier mod, bool isUpdate) { + if (!dictionary.ContainsKey(attributeID)) { return; } + dictionary[attributeID].AddModifier(mod, isUpdate); + } + /// 重新计算值 + public void RecalculateValue() { + foreach (var item in dictionary) { item.Value.RecalculateValue(); } + } + /// 循环属性集合 + public void ForEach(Action action) { + foreach (var item in dictionary) { action?.Invoke(item.Key, item.Value); } + } + /// 查询值 + public float FindValue(string attributeID) { + if (!dictionary.ContainsKey(attributeID)) { return 0; } + return dictionary[attributeID].currentValue; + } + /// 查询修改器 + public List FindModifier(string attributeID) { + if (!dictionary.ContainsKey(attributeID)) { return new(); } + return dictionary[attributeID].modifiers; + } +} diff --git a/Assets/ModuleCore/ModuleAttribute/AttributeContainer.cs.meta b/Assets/ModuleCore/ModuleAttribute/AttributeContainer.cs.meta new file mode 100644 index 0000000..4c1e746 --- /dev/null +++ b/Assets/ModuleCore/ModuleAttribute/AttributeContainer.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 112a5ce9d53f8d2408d0f882a639982c +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/ModuleCore/ModuleAttribute/AttributeInstance.cs b/Assets/ModuleCore/ModuleAttribute/AttributeInstance.cs new file mode 100644 index 0000000..d979c4e --- /dev/null +++ b/Assets/ModuleCore/ModuleAttribute/AttributeInstance.cs @@ -0,0 +1,45 @@ +using System.Collections; +using System.Collections.Generic; +using UnityEngine; + +/// +/// 属性实例 +/// +public class AttributeInstance { + /// 属性名称 + public string name; + /// 基础值 + public float baseValue; + /// 当前值 + public float currentValue; + /// 附加值% + public float additionValue; + /// 最小值 + public float minValue; + /// 最大值 + public float maxValue = float.MaxValue; + /// 属性类型 + public AttributeType type; + /// 修改器列表 + public List modifiers = new List(); + + /// 添加修改器 + public void AddModifier(AttributeModifier mod, bool isUpdate) { + modifiers.Add(mod); + if (isUpdate) { RecalculateValue(); } + } + /// 添加修改器 + public void AddModifier(List mods, bool isUpdate) { + modifiers.AddRange(mods); + if (isUpdate) { RecalculateValue(); } + } + /// 重新计算值 + public void RecalculateValue() { + currentValue = baseValue; + modifiers.ForEach(mod => currentValue = mod.Fixed(currentValue)); + additionValue = 1; + modifiers.ForEach(mod => additionValue = mod.Addition(additionValue)); + currentValue = currentValue * additionValue; + currentValue = Mathf.Clamp(currentValue, minValue, maxValue); + } +} diff --git a/Assets/ModuleCore/ModuleAttribute/AttributeInstance.cs.meta b/Assets/ModuleCore/ModuleAttribute/AttributeInstance.cs.meta new file mode 100644 index 0000000..bb2a546 --- /dev/null +++ b/Assets/ModuleCore/ModuleAttribute/AttributeInstance.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 3552e7ce95869d341adbe3a4b2a98851 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/ModuleCore/ModuleAttribute/AttributeModifier.cs b/Assets/ModuleCore/ModuleAttribute/AttributeModifier.cs new file mode 100644 index 0000000..020c51a --- /dev/null +++ b/Assets/ModuleCore/ModuleAttribute/AttributeModifier.cs @@ -0,0 +1,13 @@ +using System.Collections; +using System.Collections.Generic; +using UnityEngine; + +/// +/// 属性调整 +/// +public abstract class AttributeModifier { + /// 固定值 + public abstract float Fixed(float input); + /// 附加值% + public abstract float Addition(float input); +} diff --git a/Assets/ModuleCore/ModuleAttribute/AttributeModifier.cs.meta b/Assets/ModuleCore/ModuleAttribute/AttributeModifier.cs.meta new file mode 100644 index 0000000..f3b7160 --- /dev/null +++ b/Assets/ModuleCore/ModuleAttribute/AttributeModifier.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 2a544851e744f1540b431f2506157f18 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/ModuleCore/ModuleAttribute/AttributeSystem.cs b/Assets/ModuleCore/ModuleAttribute/AttributeSystem.cs new file mode 100644 index 0000000..10a5e3e --- /dev/null +++ b/Assets/ModuleCore/ModuleAttribute/AttributeSystem.cs @@ -0,0 +1,46 @@ +using System; +using System.Collections; +using System.Collections.Generic; +using UnityEngine; +using MuHua; + +/// +/// 属性附加 +/// +public class AttributeSystem : Module { + /// 修改事件 + public static event Action OnChange; + /// 附加字典 + public Dictionary dictionary = new Dictionary(); + + /// 应用修改 + public void Apply() => OnChange?.Invoke(this); + /// 添加容器 + public void AddInstance(string containerID, AttributeContainer container) { + if (dictionary.ContainsKey(containerID)) { return; } + dictionary.Add(containerID, container); + OnChange?.Invoke(this); + } + /// 添加修改器 + public void AddModifier(string containerID, string attributeID, AttributeModifier mod, bool isUpdate) { + if (!dictionary.ContainsKey(containerID)) { return; } + dictionary[containerID].AddModifier(attributeID, mod, isUpdate); + OnChange?.Invoke(this); + } + /// 重新计算值 + public void RecalculateValue() { + foreach (var item in dictionary) { item.Value.RecalculateValue(); } + } + /// 查询容器 + public AttributeContainer FindContainer(string containerID) { + if (!dictionary.ContainsKey(containerID)) { return new(); } + return dictionary[containerID]; + } + /// 查询容器 + public bool TryContainer(string containerID, out AttributeContainer container) { + container = null; + if (!dictionary.ContainsKey(containerID)) { return false; } + container = dictionary[containerID]; + return true; + } +} diff --git a/Assets/ModuleCore/ModuleAttribute/AttributeSystem.cs.meta b/Assets/ModuleCore/ModuleAttribute/AttributeSystem.cs.meta new file mode 100644 index 0000000..b520475 --- /dev/null +++ b/Assets/ModuleCore/ModuleAttribute/AttributeSystem.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 828a59f9caabfb340aa07273f42ccfa4 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/ModuleCore/ModuleAttribute/AttributeType.cs b/Assets/ModuleCore/ModuleAttribute/AttributeType.cs new file mode 100644 index 0000000..833916d --- /dev/null +++ b/Assets/ModuleCore/ModuleAttribute/AttributeType.cs @@ -0,0 +1,17 @@ +using System.Collections; +using System.Collections.Generic; +using UnityEngine; + +/// +/// 属性类型 +/// +public enum AttributeType { + /// 浮点数值 + Float, + /// 整数值 + Integer, + /// 布尔值 + Boolean, + /// 百分比值 + Percentage +} diff --git a/Assets/ModuleCore/ModuleAttribute/AttributeType.cs.meta b/Assets/ModuleCore/ModuleAttribute/AttributeType.cs.meta new file mode 100644 index 0000000..dfce9e0 --- /dev/null +++ b/Assets/ModuleCore/ModuleAttribute/AttributeType.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: bdb0856dce49d2a4cae5b351eed7ef48 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/ModuleCore/ModuleInventory/ModuleConst/ConstEquipment.meta b/Assets/ModuleCore/ModuleAttribute/ModuleConst.meta similarity index 77% rename from Assets/ModuleCore/ModuleInventory/ModuleConst/ConstEquipment.meta rename to Assets/ModuleCore/ModuleAttribute/ModuleConst.meta index 3fcf9de..5e5c914 100644 --- a/Assets/ModuleCore/ModuleInventory/ModuleConst/ConstEquipment.meta +++ b/Assets/ModuleCore/ModuleAttribute/ModuleConst.meta @@ -1,5 +1,5 @@ fileFormatVersion: 2 -guid: 681e43f413713dd46914cb6348821756 +guid: 01e61c86999f6aa40aa7742bb891014e folderAsset: yes DefaultImporter: externalObjects: {} diff --git a/Assets/ModuleCore/ModuleAttribute/ModuleConst/ConstAttributeContainer.cs b/Assets/ModuleCore/ModuleAttribute/ModuleConst/ConstAttributeContainer.cs new file mode 100644 index 0000000..1425291 --- /dev/null +++ b/Assets/ModuleCore/ModuleAttribute/ModuleConst/ConstAttributeContainer.cs @@ -0,0 +1,20 @@ +using System.Collections; +using System.Collections.Generic; +using UnityEngine; + +/// +/// 属性容器 - 常量 +/// +[CreateAssetMenu(menuName = "MuHua/属性模块/属性容器")] +public class ConstAttributeContainer : ScriptableObject { + /// 属性列表 + [HideInInspector] + public List instances; + + /// 转换数据 + public AttributeContainer To() { + AttributeContainer container = new AttributeContainer(); + instances.ForEach(obj => container.AddInstance(obj.name, obj.To())); + return container; + } +} diff --git a/Assets/ModuleCore/ModuleAttribute/ModuleConst/ConstAttributeContainer.cs.meta b/Assets/ModuleCore/ModuleAttribute/ModuleConst/ConstAttributeContainer.cs.meta new file mode 100644 index 0000000..d55435e --- /dev/null +++ b/Assets/ModuleCore/ModuleAttribute/ModuleConst/ConstAttributeContainer.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 23403840a9d12654f8f15c6188728498 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/ModuleCore/ModuleAttribute/ModuleConst/ConstAttributeInstance.cs b/Assets/ModuleCore/ModuleAttribute/ModuleConst/ConstAttributeInstance.cs new file mode 100644 index 0000000..b22ebcf --- /dev/null +++ b/Assets/ModuleCore/ModuleAttribute/ModuleConst/ConstAttributeInstance.cs @@ -0,0 +1,34 @@ +using System.Collections; +using System.Collections.Generic; +using UnityEngine; + +/// +/// 属性实例 - 常量 +/// +[CreateAssetMenu(menuName = "MuHua/属性模块/属性实例")] +public class ConstAttributeInstance : ScriptableObject { + /// 属性类型 + public AttributeType type; + /// 默认值 + public float defaultValue; + /// 最小值 + public float minValue; + /// 最大值 + public float maxValue = float.MaxValue; + + /// 属性容器 + [HideInInspector] + public ConstAttributeContainer container; + + /// 转换数据 + public AttributeInstance To() { + AttributeInstance instance = new AttributeInstance(); + instance.type = type; + instance.name = name; + instance.baseValue = defaultValue; + instance.currentValue = defaultValue; + instance.minValue = minValue; + instance.maxValue = maxValue; + return instance; + } +} diff --git a/Assets/ModuleCore/ModuleAttribute/ModuleConst/ConstAttributeInstance.cs.meta b/Assets/ModuleCore/ModuleAttribute/ModuleConst/ConstAttributeInstance.cs.meta new file mode 100644 index 0000000..8e39ae2 --- /dev/null +++ b/Assets/ModuleCore/ModuleAttribute/ModuleConst/ConstAttributeInstance.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: e891e45f4230ee04d8d329520fd39cbc +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/ModuleCore/ModuleAttribute/ModuleConst/Editor.meta b/Assets/ModuleCore/ModuleAttribute/ModuleConst/Editor.meta new file mode 100644 index 0000000..5f4d21b --- /dev/null +++ b/Assets/ModuleCore/ModuleAttribute/ModuleConst/Editor.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: d96c081aa34edfb4d9197a0bfb23858c +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/ModuleCore/ModuleAttribute/ModuleConst/Editor/ConstAttributeContainerEditor.cs b/Assets/ModuleCore/ModuleAttribute/ModuleConst/Editor/ConstAttributeContainerEditor.cs new file mode 100644 index 0000000..a61e43f --- /dev/null +++ b/Assets/ModuleCore/ModuleAttribute/ModuleConst/Editor/ConstAttributeContainerEditor.cs @@ -0,0 +1,43 @@ +using System.Collections; +using System.Collections.Generic; +using UnityEngine; +using UnityEditor; + +/// +/// 属性容器 - 自定义编辑器 +/// +[CustomEditor(typeof(ConstAttributeContainer))] +public class ConstAttributeContainerEditor : Editor { + + private ConstAttributeContainer container; + + private void Awake() => container = target as ConstAttributeContainer; + + public override void OnInspectorGUI() { + base.OnInspectorGUI(); + if (GUILayout.Button("创建属性")) { GenerateAttribute(); } + if (GUILayout.Button("删除属性")) { DeleteInstance(); } + } + + /// 创建属性实例 + private void GenerateAttribute() { + ConstAttributeInstance instance = CreateInstance(); + instance.container = container; + // 加入容器 + container.instances.Add(instance); + AssetDatabase.AddObjectToAsset(instance, container); + EditorUtility.SetDirty(instance); + EditorUtility.SetDirty(container); + AssetDatabase.SaveAssets(); + } + /// 删除全部实例 + private void DeleteInstance() { + for (int i = container.instances.Count; i-- > 0;) { + ConstAttributeInstance instance = container.instances[i]; + container.instances.Remove(instance); + Undo.DestroyObjectImmediate(instance); + } + EditorUtility.SetDirty(container); + AssetDatabase.SaveAssets(); + } +} diff --git a/Assets/ModuleCore/ModuleAttribute/ModuleConst/Editor/ConstAttributeContainerEditor.cs.meta b/Assets/ModuleCore/ModuleAttribute/ModuleConst/Editor/ConstAttributeContainerEditor.cs.meta new file mode 100644 index 0000000..973f07a --- /dev/null +++ b/Assets/ModuleCore/ModuleAttribute/ModuleConst/Editor/ConstAttributeContainerEditor.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: d8ae6bbae674e19448216fd6b41cd012 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/ModuleCore/ModuleAttribute/ModuleConst/Editor/ConstAttributeInstanceEditor.cs b/Assets/ModuleCore/ModuleAttribute/ModuleConst/Editor/ConstAttributeInstanceEditor.cs new file mode 100644 index 0000000..ec8eb63 --- /dev/null +++ b/Assets/ModuleCore/ModuleAttribute/ModuleConst/Editor/ConstAttributeInstanceEditor.cs @@ -0,0 +1,44 @@ +using System.Collections; +using System.Collections.Generic; +using UnityEngine; +using UnityEditor; + +/// +/// 属性实例 - 自定义编辑器 +/// +[CustomEditor(typeof(ConstAttributeInstance))] +public class ConstAttributeInstanceEditor : Editor { + + private ConstAttributeInstance instance; + + private void Awake() => instance = target as ConstAttributeInstance; + + public override void OnInspectorGUI() { + base.OnInspectorGUI(); + if (instance.container == null) { return; } + EditorGUILayout.Space(20); + + // 输入字段修改 name + EditorGUI.BeginChangeCheck(); + string newName = EditorGUILayout.TextField("属性名称", instance.name); + if (EditorGUI.EndChangeCheck()) { ModifyName(newName); } + // 按钮功能 + if (GUILayout.Button("删除属性")) { DeleteInstance(); } + } + + /// 修改名字 + private void ModifyName(string newName) { + instance.name = newName; + Undo.RecordObject(instance, "修改属性名称"); + EditorUtility.SetDirty(instance); + AssetDatabase.SaveAssets(); + } + /// 删除实例 + private void DeleteInstance() { + ConstAttributeContainer container = instance.container; + container.instances.Remove(instance); + EditorUtility.SetDirty(container); + Undo.DestroyObjectImmediate(instance); + AssetDatabase.SaveAssets(); + } +} diff --git a/Assets/ModuleCore/ModuleAttribute/ModuleConst/Editor/ConstAttributeInstanceEditor.cs.meta b/Assets/ModuleCore/ModuleAttribute/ModuleConst/Editor/ConstAttributeInstanceEditor.cs.meta new file mode 100644 index 0000000..8bc3ce7 --- /dev/null +++ b/Assets/ModuleCore/ModuleAttribute/ModuleConst/Editor/ConstAttributeInstanceEditor.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 1e2db82f02928494990b89396707863b +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/ModuleCore/ModuleEquipment.meta b/Assets/ModuleCore/ModuleEquipment.meta new file mode 100644 index 0000000..bc0c70b --- /dev/null +++ b/Assets/ModuleCore/ModuleEquipment.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 51f470ac3872ca44f9c8d012857bda7b +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/ModuleCore/ModuleInventory/DataItem/DataEquipment.cs b/Assets/ModuleCore/ModuleEquipment/Equipment.cs similarity index 54% rename from Assets/ModuleCore/ModuleInventory/DataItem/DataEquipment.cs rename to Assets/ModuleCore/ModuleEquipment/Equipment.cs index 1663a85..ab3582f 100644 --- a/Assets/ModuleCore/ModuleInventory/DataItem/DataEquipment.cs +++ b/Assets/ModuleCore/ModuleEquipment/Equipment.cs @@ -3,9 +3,11 @@ using System.Collections.Generic; using UnityEngine; /// -/// 装备 - 物品 +/// 装备 /// -public class DataEquipment : DataItem { +public class Equipment : InventoryItem { /// 装备类型 (类型1/类型2) public string type; -} + /// 词缀列表 + public List affixes = new List(); +} \ No newline at end of file diff --git a/Assets/ModuleCore/ModuleInventory/DataItem/DataEquipment.cs.meta b/Assets/ModuleCore/ModuleEquipment/Equipment.cs.meta similarity index 100% rename from Assets/ModuleCore/ModuleInventory/DataItem/DataEquipment.cs.meta rename to Assets/ModuleCore/ModuleEquipment/Equipment.cs.meta diff --git a/Assets/ModuleCore/ModuleEquipment/EquipmentAffix.cs b/Assets/ModuleCore/ModuleEquipment/EquipmentAffix.cs new file mode 100644 index 0000000..467435b --- /dev/null +++ b/Assets/ModuleCore/ModuleEquipment/EquipmentAffix.cs @@ -0,0 +1,19 @@ +using System.Collections; +using System.Collections.Generic; +using UnityEngine; + +/// +/// 装备词缀 +/// +public class EquipmentAffix { + /// 名字 + public string name; + /// 数值 + public float value; + /// 最大值 + public float minValue; + /// 最小值 + public float maxValue = float.MaxValue; + /// 属性类型 + public AttributeType attributeType; +} diff --git a/Assets/ModuleCore/ModuleEquipment/EquipmentAffix.cs.meta b/Assets/ModuleCore/ModuleEquipment/EquipmentAffix.cs.meta new file mode 100644 index 0000000..79ac77c --- /dev/null +++ b/Assets/ModuleCore/ModuleEquipment/EquipmentAffix.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 9eb47618daf43564cbc94b780e6b03f0 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/ModuleCore/ModuleEquipment/EquipmentColumn.cs b/Assets/ModuleCore/ModuleEquipment/EquipmentColumn.cs new file mode 100644 index 0000000..230333b --- /dev/null +++ b/Assets/ModuleCore/ModuleEquipment/EquipmentColumn.cs @@ -0,0 +1,56 @@ +using System; +using System.Collections; +using System.Collections.Generic; +using UnityEngine; + +/// +/// 装备栏 +/// +public class EquipmentColumn { + /// 插槽字典 + public Dictionary dictionary = new Dictionary(); + + /// 索引器 + public EquipmentSlot this[string key] => dictionary[key]; + + public EquipmentColumn() { + AddSlot(new EquipmentSlot(EquipmentSlotType.主手, VerifyWeapon)); + AddSlot(new EquipmentSlot(EquipmentSlotType.副手, VerifyDeputy)); + + AddSlot(new EquipmentSlot(EquipmentSlotType.上衣, (equipment) => VerifyCommon(equipment, ArmorType.上衣.ToString()))); + AddSlot(new EquipmentSlot(EquipmentSlotType.头盔, (equipment) => VerifyCommon(equipment, ArmorType.头盔.ToString()))); + AddSlot(new EquipmentSlot(EquipmentSlotType.手套, (equipment) => VerifyCommon(equipment, ArmorType.手套.ToString()))); + AddSlot(new EquipmentSlot(EquipmentSlotType.腰带, (equipment) => VerifyCommon(equipment, ArmorType.腰带.ToString()))); + AddSlot(new EquipmentSlot(EquipmentSlotType.鞋子, (equipment) => VerifyCommon(equipment, ArmorType.鞋子.ToString()))); + + AddSlot(new EquipmentSlot(EquipmentSlotType.项链, (equipment) => VerifyCommon(equipment, AccessoryType.项链.ToString()))); + AddSlot(new EquipmentSlot(EquipmentSlotType.戒指1, (equipment) => VerifyCommon(equipment, AccessoryType.戒指.ToString()))); + AddSlot(new EquipmentSlot(EquipmentSlotType.戒指2, (equipment) => VerifyCommon(equipment, AccessoryType.戒指.ToString()))); + AddSlot(new EquipmentSlot(EquipmentSlotType.手镯1, (equipment) => VerifyCommon(equipment, AccessoryType.手镯.ToString()))); + AddSlot(new EquipmentSlot(EquipmentSlotType.手镯2, (equipment) => VerifyCommon(equipment, AccessoryType.手镯.ToString()))); + } + + public bool ContainsKey(string key) => dictionary.ContainsKey(key); + /// 添加插槽 + public void AddSlot(EquipmentSlot slot) => dictionary.Add(slot.name, slot); + + /// 通用校验 + public static bool VerifyCommon(Equipment equipment, string type) { + string[] types = equipment.type.Split("/"); + if (types[0] == type) { return true; } + return false; + } + /// 主手校验 + public static bool VerifyWeapon(Equipment equipment) { + string[] type = equipment.type.Split("/"); + if (type[0] == WeaponType.单手.ToString()) { return true; } + if (type[0] == WeaponType.双手.ToString()) { return true; } + return false; + } + /// 副手校验 + public static bool VerifyDeputy(Equipment equipment) { + string[] type = equipment.type.Split("/"); + if (type[0] == WeaponType.副手.ToString()) { return true; } + return false; + } +} \ No newline at end of file diff --git a/Assets/ModuleCore/ModuleInventory/Equipment.cs.meta b/Assets/ModuleCore/ModuleEquipment/EquipmentColumn.cs.meta similarity index 100% rename from Assets/ModuleCore/ModuleInventory/Equipment.cs.meta rename to Assets/ModuleCore/ModuleEquipment/EquipmentColumn.cs.meta diff --git a/Assets/ModuleCore/ModuleEquipment/EquipmentSlot.cs b/Assets/ModuleCore/ModuleEquipment/EquipmentSlot.cs new file mode 100644 index 0000000..06f4bb0 --- /dev/null +++ b/Assets/ModuleCore/ModuleEquipment/EquipmentSlot.cs @@ -0,0 +1,35 @@ +using System; +using System.Collections; +using System.Collections.Generic; +using UnityEngine; + +/// +/// 插槽类型 +/// +public enum EquipmentSlotType { + 主手, 副手, 上衣, 项链, + 头盔, 手套, 腰带, 鞋子, + 戒指1, 戒指2, 手镯1, 手镯2 +} +/// +/// 装备插槽 +/// +public class EquipmentSlot { + /// 名字 + public string name; + /// 物品 + public Equipment item; + /// 装备验证 + public Func verify; + + public EquipmentSlot(EquipmentSlotType slot, Func verify) { + name = slot.ToString(); + this.verify = verify; + } + + /// 设置 + public void Settings(InventoryItem item) { + if (item is Equipment equipment) { this.item = equipment; } + else { this.item = null; } + } +} diff --git a/Assets/ModuleCore/ModuleEquipment/EquipmentSlot.cs.meta b/Assets/ModuleCore/ModuleEquipment/EquipmentSlot.cs.meta new file mode 100644 index 0000000..bd56ee2 --- /dev/null +++ b/Assets/ModuleCore/ModuleEquipment/EquipmentSlot.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: f1d68199e9959734e85efd7a39d4d78c +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/ModuleCore/ModuleEquipment/ModuleConst.meta b/Assets/ModuleCore/ModuleEquipment/ModuleConst.meta new file mode 100644 index 0000000..cb05ab2 --- /dev/null +++ b/Assets/ModuleCore/ModuleEquipment/ModuleConst.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: e0cd838d2a0877c4780133f6dcb808f3 +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/ModuleCore/ModuleInventory/ModuleConst/ConstEquipment/ConstAccessory.cs b/Assets/ModuleCore/ModuleEquipment/ModuleConst/ConstAccessory.cs similarity index 86% rename from Assets/ModuleCore/ModuleInventory/ModuleConst/ConstEquipment/ConstAccessory.cs rename to Assets/ModuleCore/ModuleEquipment/ModuleConst/ConstAccessory.cs index 4ddb506..fc11383 100644 --- a/Assets/ModuleCore/ModuleInventory/ModuleConst/ConstEquipment/ConstAccessory.cs +++ b/Assets/ModuleCore/ModuleEquipment/ModuleConst/ConstAccessory.cs @@ -2,6 +2,12 @@ using System.Collections; using System.Collections.Generic; using UnityEngine; +/// +/// 饰品类型 +/// +public enum AccessoryType { + 戒指, 手镯, 项链 +} /// /// 饰品 - 物品常量 /// @@ -10,17 +16,11 @@ public class ConstAccessory : ConstEquipment { /// 饰品类型 public AccessoryType type; - public override DataItem To() { - DataEquipment item = new DataEquipment(); + public override InventoryItem To() { + Equipment item = new Equipment(); item.name = name; item.sprite = sprite; item.type = type.ToString(); return item; } } -/// -/// 饰品类型 -/// -public enum AccessoryType { - 戒指, 手镯, 项链 -} \ No newline at end of file diff --git a/Assets/ModuleCore/ModuleInventory/ModuleConst/ConstEquipment/ConstAccessory.cs.meta b/Assets/ModuleCore/ModuleEquipment/ModuleConst/ConstAccessory.cs.meta similarity index 100% rename from Assets/ModuleCore/ModuleInventory/ModuleConst/ConstEquipment/ConstAccessory.cs.meta rename to Assets/ModuleCore/ModuleEquipment/ModuleConst/ConstAccessory.cs.meta diff --git a/Assets/ModuleCore/ModuleInventory/ModuleConst/ConstEquipment/ConstArmor.cs b/Assets/ModuleCore/ModuleEquipment/ModuleConst/ConstArmor.cs similarity index 86% rename from Assets/ModuleCore/ModuleInventory/ModuleConst/ConstEquipment/ConstArmor.cs rename to Assets/ModuleCore/ModuleEquipment/ModuleConst/ConstArmor.cs index 4ffd4d8..1c7a83e 100644 --- a/Assets/ModuleCore/ModuleInventory/ModuleConst/ConstEquipment/ConstArmor.cs +++ b/Assets/ModuleCore/ModuleEquipment/ModuleConst/ConstArmor.cs @@ -2,6 +2,12 @@ using System.Collections; using System.Collections.Generic; using UnityEngine; +/// +/// 护甲类型 +/// +public enum ArmorType { + 上衣, 头盔, 手套, 腰带, 鞋子 +} /// /// 护甲 - 物品常量 /// @@ -10,17 +16,11 @@ public class ConstArmor : ConstEquipment { /// 护甲类型 public ArmorType type; - public override DataItem To() { - DataEquipment item = new DataEquipment(); + public override InventoryItem To() { + Equipment item = new Equipment(); item.name = name; item.sprite = sprite; item.type = type.ToString(); return item; } } -/// -/// 护甲类型 -/// -public enum ArmorType { - 上衣, 头盔, 手套, 腰带, 鞋子 -} \ No newline at end of file diff --git a/Assets/ModuleCore/ModuleInventory/ModuleConst/ConstEquipment/ConstArmor.cs.meta b/Assets/ModuleCore/ModuleEquipment/ModuleConst/ConstArmor.cs.meta similarity index 100% rename from Assets/ModuleCore/ModuleInventory/ModuleConst/ConstEquipment/ConstArmor.cs.meta rename to Assets/ModuleCore/ModuleEquipment/ModuleConst/ConstArmor.cs.meta diff --git a/Assets/ModuleCore/ModuleInventory/ModuleConst/ConstEquipment/ConstEquipment.cs b/Assets/ModuleCore/ModuleEquipment/ModuleConst/ConstEquipment.cs similarity index 73% rename from Assets/ModuleCore/ModuleInventory/ModuleConst/ConstEquipment/ConstEquipment.cs rename to Assets/ModuleCore/ModuleEquipment/ModuleConst/ConstEquipment.cs index 2c66a40..27d62bf 100644 --- a/Assets/ModuleCore/ModuleInventory/ModuleConst/ConstEquipment/ConstEquipment.cs +++ b/Assets/ModuleCore/ModuleEquipment/ModuleConst/ConstEquipment.cs @@ -5,6 +5,6 @@ using UnityEngine; /// /// 装备 - 物品常量 /// -public class ConstEquipment : ConstItem { +public class ConstEquipment : ConstInventoryItem { } diff --git a/Assets/ModuleCore/ModuleInventory/ModuleConst/ConstEquipment/ConstEquipment.cs.meta b/Assets/ModuleCore/ModuleEquipment/ModuleConst/ConstEquipment.cs.meta similarity index 100% rename from Assets/ModuleCore/ModuleInventory/ModuleConst/ConstEquipment/ConstEquipment.cs.meta rename to Assets/ModuleCore/ModuleEquipment/ModuleConst/ConstEquipment.cs.meta diff --git a/Assets/ModuleCore/ModuleInventory/ModuleConst/ConstEquipment/ConstWeapon.cs b/Assets/ModuleCore/ModuleEquipment/ModuleConst/ConstWeapon.cs similarity index 86% rename from Assets/ModuleCore/ModuleInventory/ModuleConst/ConstEquipment/ConstWeapon.cs rename to Assets/ModuleCore/ModuleEquipment/ModuleConst/ConstWeapon.cs index 7d9ce69..bf0e197 100644 --- a/Assets/ModuleCore/ModuleInventory/ModuleConst/ConstEquipment/ConstWeapon.cs +++ b/Assets/ModuleCore/ModuleEquipment/ModuleConst/ConstWeapon.cs @@ -2,6 +2,12 @@ using System.Collections; using System.Collections.Generic; using UnityEngine; +/// +/// 武器类型 +/// +public enum WeaponType { + 单手, 副手, 双手 +} /// /// 武器 - 物品常量 /// @@ -10,17 +16,11 @@ public class ConstWeapon : ConstEquipment { /// 武器类型 public WeaponType type; - public override DataItem To() { - DataEquipment item = new DataEquipment(); + public override InventoryItem To() { + Equipment item = new Equipment(); item.name = name; item.sprite = sprite; item.type = type.ToString(); return item; } } -/// -/// 武器类型 -/// -public enum WeaponType { - 单手, 副手, 双手 -} \ No newline at end of file diff --git a/Assets/ModuleCore/ModuleInventory/ModuleConst/ConstEquipment/ConstWeapon.cs.meta b/Assets/ModuleCore/ModuleEquipment/ModuleConst/ConstWeapon.cs.meta similarity index 100% rename from Assets/ModuleCore/ModuleInventory/ModuleConst/ConstEquipment/ConstWeapon.cs.meta rename to Assets/ModuleCore/ModuleEquipment/ModuleConst/ConstWeapon.cs.meta diff --git a/Assets/ModuleCore/ModuleEquipment/ModuleConst/Editor.meta b/Assets/ModuleCore/ModuleEquipment/ModuleConst/Editor.meta new file mode 100644 index 0000000..0774415 --- /dev/null +++ b/Assets/ModuleCore/ModuleEquipment/ModuleConst/Editor.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: f49fabc8e03afc44bb1b5ea3fca16255 +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/ModuleCore/ModuleEquipment/ModuleConst/Editor/ConstWeaponEditor.cs b/Assets/ModuleCore/ModuleEquipment/ModuleConst/Editor/ConstWeaponEditor.cs new file mode 100644 index 0000000..45f8bbe --- /dev/null +++ b/Assets/ModuleCore/ModuleEquipment/ModuleConst/Editor/ConstWeaponEditor.cs @@ -0,0 +1,18 @@ +using System.Collections; +using System.Collections.Generic; +using UnityEngine; + +public class ConstWeaponEditor : MonoBehaviour +{ + // Start is called before the first frame update + void Start() + { + + } + + // Update is called once per frame + void Update() + { + + } +} diff --git a/Assets/ModuleCore/ModuleEquipment/ModuleConst/Editor/ConstWeaponEditor.cs.meta b/Assets/ModuleCore/ModuleEquipment/ModuleConst/Editor/ConstWeaponEditor.cs.meta new file mode 100644 index 0000000..343e7a3 --- /dev/null +++ b/Assets/ModuleCore/ModuleEquipment/ModuleConst/Editor/ConstWeaponEditor.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: b2c69e4ee377a7f48934adc2c8d6359f +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/ModuleCore/ModuleEquipment/ModuleUIPanel.meta b/Assets/ModuleCore/ModuleEquipment/ModuleUIPanel.meta new file mode 100644 index 0000000..a00ce3d --- /dev/null +++ b/Assets/ModuleCore/ModuleEquipment/ModuleUIPanel.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: ce2626e82921eb14992661fc763dc7b5 +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/ModuleCore/ModuleEquipment/ModuleUIPanel/UIEquipmentColumn.cs b/Assets/ModuleCore/ModuleEquipment/ModuleUIPanel/UIEquipmentColumn.cs new file mode 100644 index 0000000..18ec1fe --- /dev/null +++ b/Assets/ModuleCore/ModuleEquipment/ModuleUIPanel/UIEquipmentColumn.cs @@ -0,0 +1,53 @@ +using System.Collections; +using System.Collections.Generic; +using UnityEngine; +using UnityEngine.UIElements; +using MuHua; + +/// +/// UI装备栏 +/// +public class UIEquipmentColumn : ModuleUIPanel { + + public EquipmentColumn equipment; + /// 插槽字典 + public Dictionary dictionary = new Dictionary(); + + public UIEquipmentColumn(VisualElement element) : base(element) { + InitialSlot(1, EquipmentSlotType.主手); + InitialSlot(2, EquipmentSlotType.副手); + InitialSlot(3, EquipmentSlotType.上衣); + InitialSlot(4, EquipmentSlotType.项链); + + InitialSlot(5, EquipmentSlotType.戒指1); + InitialSlot(6, EquipmentSlotType.戒指2); + InitialSlot(7, EquipmentSlotType.手镯1); + InitialSlot(8, EquipmentSlotType.手镯2); + + InitialSlot(9, EquipmentSlotType.头盔); + InitialSlot(10, EquipmentSlotType.手套); + InitialSlot(11, EquipmentSlotType.腰带); + InitialSlot(12, EquipmentSlotType.鞋子); + } + public void Dispose() { + + } + + public void Settings(EquipmentColumn equipment) { + if (this.equipment != null) { Dispose(); } + this.equipment = equipment; + if (equipment == null) { return; } + foreach (var item in dictionary) { Settings(item.Key, item.Value); } + } + public void Settings(string key, UIEquipmentSlot uISlot) { + if (!equipment.ContainsKey(key)) { return; } + EquipmentSlot slot = equipment[key]; + uISlot.Settings(slot); + } + + private void InitialSlot(int index, EquipmentSlotType type) { + VisualElement element = Q($"EquipmentSlot{index}"); + UIEquipmentSlot uiSlot = new UIEquipmentSlot(element); + dictionary.Add(type.ToString(), uiSlot); + } +} diff --git a/Assets/ModuleCore/ModuleInventory/ModuleUIPanel/UIEquipment.cs.meta b/Assets/ModuleCore/ModuleEquipment/ModuleUIPanel/UIEquipmentColumn.cs.meta similarity index 100% rename from Assets/ModuleCore/ModuleInventory/ModuleUIPanel/UIEquipment.cs.meta rename to Assets/ModuleCore/ModuleEquipment/ModuleUIPanel/UIEquipmentColumn.cs.meta diff --git a/Assets/ModuleCore/ModuleEquipment/ModuleUIPanel/UIEquipmentSlot.cs b/Assets/ModuleCore/ModuleEquipment/ModuleUIPanel/UIEquipmentSlot.cs new file mode 100644 index 0000000..c1d5f7d --- /dev/null +++ b/Assets/ModuleCore/ModuleEquipment/ModuleUIPanel/UIEquipmentSlot.cs @@ -0,0 +1,64 @@ +using System.Collections; +using System.Collections.Generic; +using UnityEngine; +using UnityEngine.UIElements; +using MuHua; + +/// +/// UI装备插槽 +/// +public class UIEquipmentSlot : ModuleUIPanel, InventoryDrag { + + public EquipmentSlot value; + + public Label CountLabel => Q