修改框架

This commit is contained in:
MuHua-123
2025-09-25 17:50:28 +08:00
parent d940a18e13
commit 18c6b4387d
79 changed files with 1017 additions and 392 deletions
@@ -0,0 +1,13 @@
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
/// <summary>
/// 装备
/// </summary>
public class Equipment : InventoryItem {
/// <summary> 装备类型 (类型1/类型2 </summary>
public string type;
/// <summary> 词缀列表 </summary>
public List<EquipmentAffix> affixes = new List<EquipmentAffix>();
}
@@ -0,0 +1,11 @@
fileFormatVersion: 2
guid: 3d078f2759ef3ef4bb65217dd9b2fb94
MonoImporter:
externalObjects: {}
serializedVersion: 2
defaultReferences: []
executionOrder: 0
icon: {instanceID: 0}
userData:
assetBundleName:
assetBundleVariant:
@@ -0,0 +1,19 @@
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
/// <summary>
/// 装备词缀
/// </summary>
public class EquipmentAffix {
/// <summary> 名字 </summary>
public string name;
/// <summary> 数值 </summary>
public float value;
/// <summary> 最大值 </summary>
public float minValue;
/// <summary> 最小值 </summary>
public float maxValue = float.MaxValue;
/// <summary> 属性类型 </summary>
public AttributeType attributeType;
}
@@ -0,0 +1,11 @@
fileFormatVersion: 2
guid: 9eb47618daf43564cbc94b780e6b03f0
MonoImporter:
externalObjects: {}
serializedVersion: 2
defaultReferences: []
executionOrder: 0
icon: {instanceID: 0}
userData:
assetBundleName:
assetBundleVariant:
@@ -0,0 +1,56 @@
using System;
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
/// <summary>
/// 装备栏
/// </summary>
public class EquipmentColumn {
/// <summary> 插槽字典 </summary>
public Dictionary<string, EquipmentSlot> dictionary = new Dictionary<string, EquipmentSlot>();
/// <summary> 索引器 </summary>
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);
/// <summary> 添加插槽 </summary>
public void AddSlot(EquipmentSlot slot) => dictionary.Add(slot.name, slot);
/// <summary> 通用校验 </summary>
public static bool VerifyCommon(Equipment equipment, string type) {
string[] types = equipment.type.Split("/");
if (types[0] == type) { return true; }
return false;
}
/// <summary> 主手校验 </summary>
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;
}
/// <summary> 副手校验 </summary>
public static bool VerifyDeputy(Equipment equipment) {
string[] type = equipment.type.Split("/");
if (type[0] == WeaponType..ToString()) { return true; }
return false;
}
}
@@ -0,0 +1,11 @@
fileFormatVersion: 2
guid: 13afb37aea13dc94b97e8e85af77b5b8
MonoImporter:
externalObjects: {}
serializedVersion: 2
defaultReferences: []
executionOrder: 0
icon: {instanceID: 0}
userData:
assetBundleName:
assetBundleVariant:
@@ -0,0 +1,35 @@
using System;
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
/// <summary>
/// 插槽类型
/// </summary>
public enum EquipmentSlotType {
, , , ,
, , , ,
1, 2, 1, 2
}
/// <summary>
/// 装备插槽
/// </summary>
public class EquipmentSlot {
/// <summary> 名字 </summary>
public string name;
/// <summary> 物品 </summary>
public Equipment item;
/// <summary> 装备验证 </summary>
public Func<Equipment, bool> verify;
public EquipmentSlot(EquipmentSlotType slot, Func<Equipment, bool> verify) {
name = slot.ToString();
this.verify = verify;
}
/// <summary> 设置 </summary>
public void Settings(InventoryItem item) {
if (item is Equipment equipment) { this.item = equipment; }
else { this.item = null; }
}
}
@@ -0,0 +1,11 @@
fileFormatVersion: 2
guid: f1d68199e9959734e85efd7a39d4d78c
MonoImporter:
externalObjects: {}
serializedVersion: 2
defaultReferences: []
executionOrder: 0
icon: {instanceID: 0}
userData:
assetBundleName:
assetBundleVariant:
@@ -0,0 +1,8 @@
fileFormatVersion: 2
guid: e0cd838d2a0877c4780133f6dcb808f3
folderAsset: yes
DefaultImporter:
externalObjects: {}
userData:
assetBundleName:
assetBundleVariant:
@@ -0,0 +1,26 @@
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
/// <summary>
/// 饰品类型
/// </summary>
public enum AccessoryType {
, ,
}
/// <summary>
/// 饰品 - 物品常量
/// </summary>
[CreateAssetMenu(menuName = "MuHua/物品系统/饰品")]
public class ConstAccessory : ConstEquipment {
/// <summary> 饰品类型 </summary>
public AccessoryType type;
public override InventoryItem To() {
Equipment item = new Equipment();
item.name = name;
item.sprite = sprite;
item.type = type.ToString();
return item;
}
}
@@ -0,0 +1,11 @@
fileFormatVersion: 2
guid: fe5fcaac3685ff2408432feaa1d0999a
MonoImporter:
externalObjects: {}
serializedVersion: 2
defaultReferences: []
executionOrder: 0
icon: {instanceID: 0}
userData:
assetBundleName:
assetBundleVariant:
@@ -0,0 +1,26 @@
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
/// <summary>
/// 护甲类型
/// </summary>
public enum ArmorType {
, , , ,
}
/// <summary>
/// 护甲 - 物品常量
/// </summary>
[CreateAssetMenu(menuName = "MuHua/物品系统/护甲")]
public class ConstArmor : ConstEquipment {
/// <summary> 护甲类型 </summary>
public ArmorType type;
public override InventoryItem To() {
Equipment item = new Equipment();
item.name = name;
item.sprite = sprite;
item.type = type.ToString();
return item;
}
}
@@ -0,0 +1,11 @@
fileFormatVersion: 2
guid: 33876f23eac24b14e8ba9cca9d545a4a
MonoImporter:
externalObjects: {}
serializedVersion: 2
defaultReferences: []
executionOrder: 0
icon: {instanceID: 0}
userData:
assetBundleName:
assetBundleVariant:
@@ -0,0 +1,10 @@
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
/// <summary>
/// 装备 - 物品常量
/// </summary>
public class ConstEquipment : ConstInventoryItem {
}
@@ -0,0 +1,11 @@
fileFormatVersion: 2
guid: 5f4628602f47a4241837820971e174a3
MonoImporter:
externalObjects: {}
serializedVersion: 2
defaultReferences: []
executionOrder: 0
icon: {instanceID: 0}
userData:
assetBundleName:
assetBundleVariant:
@@ -0,0 +1,26 @@
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
/// <summary>
/// 武器类型
/// </summary>
public enum WeaponType {
, ,
}
/// <summary>
/// 武器 - 物品常量
/// </summary>
[CreateAssetMenu(menuName = "MuHua/物品系统/武器")]
public class ConstWeapon : ConstEquipment {
/// <summary> 武器类型 </summary>
public WeaponType type;
public override InventoryItem To() {
Equipment item = new Equipment();
item.name = name;
item.sprite = sprite;
item.type = type.ToString();
return item;
}
}
@@ -0,0 +1,11 @@
fileFormatVersion: 2
guid: 45818eb64c9b04441b20b29f0230edb7
MonoImporter:
externalObjects: {}
serializedVersion: 2
defaultReferences: []
executionOrder: 0
icon: {instanceID: 0}
userData:
assetBundleName:
assetBundleVariant:
@@ -0,0 +1,8 @@
fileFormatVersion: 2
guid: f49fabc8e03afc44bb1b5ea3fca16255
folderAsset: yes
DefaultImporter:
externalObjects: {}
userData:
assetBundleName:
assetBundleVariant:
@@ -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()
{
}
}
@@ -0,0 +1,11 @@
fileFormatVersion: 2
guid: b2c69e4ee377a7f48934adc2c8d6359f
MonoImporter:
externalObjects: {}
serializedVersion: 2
defaultReferences: []
executionOrder: 0
icon: {instanceID: 0}
userData:
assetBundleName:
assetBundleVariant:
@@ -0,0 +1,8 @@
fileFormatVersion: 2
guid: ce2626e82921eb14992661fc763dc7b5
folderAsset: yes
DefaultImporter:
externalObjects: {}
userData:
assetBundleName:
assetBundleVariant:
@@ -0,0 +1,53 @@
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UIElements;
using MuHua;
/// <summary>
/// UI装备栏
/// </summary>
public class UIEquipmentColumn : ModuleUIPanel {
public EquipmentColumn equipment;
/// <summary> 插槽字典 </summary>
public Dictionary<string, UIEquipmentSlot> dictionary = new Dictionary<string, UIEquipmentSlot>();
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<VisualElement>($"EquipmentSlot{index}");
UIEquipmentSlot uiSlot = new UIEquipmentSlot(element);
dictionary.Add(type.ToString(), uiSlot);
}
}
@@ -0,0 +1,11 @@
fileFormatVersion: 2
guid: bad4c66685a426345b174ec593f67f56
MonoImporter:
externalObjects: {}
serializedVersion: 2
defaultReferences: []
executionOrder: 0
icon: {instanceID: 0}
userData:
assetBundleName:
assetBundleVariant:
@@ -0,0 +1,64 @@
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UIElements;
using MuHua;
/// <summary>
/// UI装备插槽
/// </summary>
public class UIEquipmentSlot : ModuleUIPanel, InventoryDrag {
public EquipmentSlot value;
public Label CountLabel => Q<Label>("Count");
public VisualElement Image => Q<VisualElement>("Image");
public int Count => 1;
public InventoryItem Item => value.item;
public VisualElement Anchor => element;
public UIEquipmentSlot(VisualElement element) : base(element) {
element.RegisterCallback<MouseDownEvent>(MouseDownEvent);
element.RegisterCallback<MouseOverEvent>(MouseOverEvent);
element.RegisterCallback<MouseLeaveEvent>(MouseLeaveEvent);
element.RegisterCallback<ClickEvent>(ClickEvent);
}
private void MouseDownEvent(MouseDownEvent evt) {
UIPopupManager.I.inventoryDrag.Settings(this);
Image.EnableInClassList("equipment-image-drag", true);
}
private void MouseOverEvent(MouseOverEvent evt) {
if (!Verify()) { return; }
UIPopupManager.I.inventoryDrag.EnterContainer(this);
}
private void MouseLeaveEvent(MouseLeaveEvent evt) {
UIPopupManager.I.inventoryDrag.ExitContainer(this);
}
private void ClickEvent(ClickEvent evt) {
// Debug.Log("sss");
}
public void Settings(EquipmentSlot value) {
this.value = value;
UpdatePreview();
}
public void Settings(InventoryItem item, int count) {
value.Settings(item);
UpdatePreview();
}
public void Cancel() {
Image.EnableInClassList("equipment-image-drag", false);
}
private void UpdatePreview() {
Sprite sprite = value == null || value.item == null ? null : value.item.sprite;
Image.style.backgroundImage = new StyleBackground(sprite);
}
private bool Verify() {
InventoryDrag container = UIPopupManager.I.inventoryDrag.container;
if (container == null) { return false; }
if (container.Item is Equipment equipment) { return value.verify.Invoke(equipment); }
return false;
}
}
@@ -0,0 +1,11 @@
fileFormatVersion: 2
guid: 99dc774aaeb03bc44b6607bd012c0e6e
MonoImporter:
externalObjects: {}
serializedVersion: 2
defaultReferences: []
executionOrder: 0
icon: {instanceID: 0}
userData:
assetBundleName:
assetBundleVariant: