调整目录结构
This commit is contained in:
@@ -1,3 +0,0 @@
|
||||
fileFormatVersion: 2
|
||||
guid: 7cb50811095d496fad57afd7535d0f73
|
||||
timeCreated: 1748180763
|
||||
@@ -1,66 +0,0 @@
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Reflection;
|
||||
|
||||
namespace NBF
|
||||
{
|
||||
public static class AttributeHelper
|
||||
{
|
||||
// 获取特定嵌套类中带有InputIconAttribute的常量字段
|
||||
public static Dictionary<string, List<FieldInfo>> GetNestedClassInputIconFields()
|
||||
{
|
||||
var result = new Dictionary<string, List<FieldInfo>>();
|
||||
|
||||
// 获取InputDef类型
|
||||
Type inputDefType = typeof(NBF.InputDef);
|
||||
|
||||
// 检查UI类
|
||||
Type uiType = inputDefType.GetNestedType("UI");
|
||||
if (uiType != null)
|
||||
{
|
||||
var uiFields = GetInputIconFieldsFromType(uiType);
|
||||
if (uiFields.Count > 0)
|
||||
{
|
||||
result.Add("UI", uiFields);
|
||||
}
|
||||
}
|
||||
|
||||
// 检查Player类
|
||||
Type playerType = inputDefType.GetNestedType("Player");
|
||||
if (playerType != null)
|
||||
{
|
||||
var playerFields = GetInputIconFieldsFromType(playerType);
|
||||
if (playerFields.Count > 0)
|
||||
{
|
||||
result.Add("Player", playerFields);
|
||||
}
|
||||
}
|
||||
|
||||
return result;
|
||||
}
|
||||
|
||||
// 从特定类型获取带有InputIconAttribute的常量字段
|
||||
private static List<FieldInfo> GetInputIconFieldsFromType(Type type)
|
||||
{
|
||||
List<FieldInfo> result = new List<FieldInfo>();
|
||||
|
||||
// 只获取公共常量字段
|
||||
FieldInfo[] fields = type.GetFields(
|
||||
BindingFlags.Public |
|
||||
BindingFlags.Static |
|
||||
BindingFlags.FlattenHierarchy);
|
||||
|
||||
foreach (FieldInfo field in fields)
|
||||
{
|
||||
// 检查是否是常量且带有InputIconAttribute
|
||||
if (field.IsLiteral && !field.IsInitOnly &&
|
||||
Attribute.IsDefined(field, typeof(InputIconAttribute)))
|
||||
{
|
||||
result.Add(field);
|
||||
}
|
||||
}
|
||||
|
||||
return result;
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -1,3 +0,0 @@
|
||||
fileFormatVersion: 2
|
||||
guid: fa024ae7ea104f809ace6beff59c12d8
|
||||
timeCreated: 1748188551
|
||||
@@ -1,77 +0,0 @@
|
||||
using System;
|
||||
|
||||
namespace NBF
|
||||
{
|
||||
public abstract class BaseAttribute : Attribute
|
||||
{
|
||||
}
|
||||
|
||||
[AttributeUsage(AttributeTargets.Class)]
|
||||
public class UIBindAttribute : BaseAttribute
|
||||
{
|
||||
public int Id;
|
||||
|
||||
public UIBindAttribute(int id)
|
||||
{
|
||||
this.Id = id;
|
||||
}
|
||||
}
|
||||
|
||||
[AttributeUsage(AttributeTargets.Method)]
|
||||
public class UIExtensionAutoBindAttribute : BaseAttribute
|
||||
{
|
||||
|
||||
}
|
||||
|
||||
[AttributeUsage(AttributeTargets.Field)]
|
||||
public class InputIconAttribute : BaseAttribute
|
||||
{
|
||||
public string KeyBoardIcon;
|
||||
public string ControllerIcon;
|
||||
|
||||
/// <summary>
|
||||
///
|
||||
/// </summary>
|
||||
/// <param name="keyBoardIcon">键盘图标</param>
|
||||
/// <param name="controllerIcon">控制器图标</param>
|
||||
public InputIconAttribute(string keyBoardIcon, string controllerIcon)
|
||||
{
|
||||
KeyBoardIcon = keyBoardIcon;
|
||||
ControllerIcon = controllerIcon;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
[AttributeUsage(AttributeTargets.Field | AttributeTargets.Class, AllowMultiple = true)]
|
||||
public class TitleAttribute : BaseAttribute
|
||||
{
|
||||
public string Title;
|
||||
|
||||
public TitleAttribute(string title)
|
||||
{
|
||||
Title = title;
|
||||
}
|
||||
}
|
||||
|
||||
[AttributeUsage(AttributeTargets.Field | AttributeTargets.Class, AllowMultiple = true)]
|
||||
public class DescriptionAttribute : BaseAttribute
|
||||
{
|
||||
public string Description;
|
||||
|
||||
public DescriptionAttribute(string description)
|
||||
{
|
||||
Description = description;
|
||||
}
|
||||
}
|
||||
|
||||
[AttributeUsage(AttributeTargets.Field | AttributeTargets.Class, AllowMultiple = true)]
|
||||
public class SortAttribute : BaseAttribute
|
||||
{
|
||||
public int Sort;
|
||||
|
||||
public SortAttribute(int sort)
|
||||
{
|
||||
Sort = sort;
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -1,3 +0,0 @@
|
||||
fileFormatVersion: 2
|
||||
guid: 647174a4726c4c4c92193aa7dcd3ddad
|
||||
timeCreated: 1748509835
|
||||
@@ -1,77 +0,0 @@
|
||||
using System;
|
||||
using FairyGUI;
|
||||
using UnityEngine;
|
||||
using UnityEngine.Rendering.Universal;
|
||||
|
||||
namespace NBF
|
||||
{
|
||||
public class BaseCamera : MonoBehaviour
|
||||
{
|
||||
public static Camera Main { get; private set; }
|
||||
|
||||
public static UniversalAdditionalCameraData MainCameraData { get; private set; }
|
||||
|
||||
private void Awake()
|
||||
{
|
||||
Init();
|
||||
DontDestroyOnLoad(gameObject);
|
||||
}
|
||||
|
||||
public void Init()
|
||||
{
|
||||
Main = GetComponent<Camera>();
|
||||
MainCameraData = Main.GetUniversalAdditionalCameraData();
|
||||
}
|
||||
|
||||
|
||||
private static void FixUICamera()
|
||||
{
|
||||
if (StageCamera.main == null) return;
|
||||
var stageCameraData = StageCamera.main.GetUniversalAdditionalCameraData();
|
||||
if (stageCameraData != null)
|
||||
{
|
||||
if (MainCameraData.cameraStack.Contains(StageCamera.main)) // 防止重复添加
|
||||
{
|
||||
RemoveStack(StageCamera.main);
|
||||
}
|
||||
|
||||
AddStack(StageCamera.main);
|
||||
}
|
||||
}
|
||||
|
||||
private static void SetOverlay(Camera camera, UniversalAdditionalCameraData stageCameraData = null)
|
||||
{
|
||||
if (stageCameraData == null)
|
||||
{
|
||||
stageCameraData = camera.GetUniversalAdditionalCameraData();
|
||||
}
|
||||
|
||||
if (stageCameraData != null)
|
||||
{
|
||||
stageCameraData.renderType = CameraRenderType.Overlay;
|
||||
}
|
||||
}
|
||||
|
||||
public static void AddStack(Camera overlayCamera)
|
||||
{
|
||||
if (!MainCameraData.cameraStack.Contains(overlayCamera)) // 防止重复添加
|
||||
{
|
||||
SetOverlay(overlayCamera);
|
||||
MainCameraData.cameraStack.Add(overlayCamera);
|
||||
}
|
||||
|
||||
if (overlayCamera != StageCamera.main)
|
||||
{
|
||||
FixUICamera();
|
||||
}
|
||||
}
|
||||
|
||||
public static void RemoveStack(Camera overlayCamera)
|
||||
{
|
||||
if (MainCameraData.cameraStack.Contains(overlayCamera))
|
||||
{
|
||||
MainCameraData.cameraStack.Remove(overlayCamera);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -1,3 +0,0 @@
|
||||
fileFormatVersion: 2
|
||||
guid: c40f26e5da0a454b93cd5d1e94157699
|
||||
timeCreated: 1742635242
|
||||
3
Assets/Scripts/Common/Def.meta
Normal file
3
Assets/Scripts/Common/Def.meta
Normal file
@@ -0,0 +1,3 @@
|
||||
fileFormatVersion: 2
|
||||
guid: e3439dfc50894a30b05be1a8a65a20bb
|
||||
timeCreated: 1742307588
|
||||
8
Assets/Scripts/Common/Def/ErrorCode.cs
Normal file
8
Assets/Scripts/Common/Def/ErrorCode.cs
Normal file
@@ -0,0 +1,8 @@
|
||||
namespace NBF
|
||||
{
|
||||
public class ErrorCode
|
||||
{
|
||||
public const int Success = 0;
|
||||
public const int Error = 1;
|
||||
}
|
||||
}
|
||||
3
Assets/Scripts/Common/Def/ErrorCode.cs.meta
Normal file
3
Assets/Scripts/Common/Def/ErrorCode.cs.meta
Normal file
@@ -0,0 +1,3 @@
|
||||
fileFormatVersion: 2
|
||||
guid: 059e898abe0b45988f002ca7e6ff9540
|
||||
timeCreated: 1756365454
|
||||
147
Assets/Scripts/Common/Def/GameDef.cs
Normal file
147
Assets/Scripts/Common/Def/GameDef.cs
Normal file
@@ -0,0 +1,147 @@
|
||||
using System.Collections.Generic;
|
||||
|
||||
namespace NBF
|
||||
{
|
||||
public class InteractiveData
|
||||
{
|
||||
public UIDef.InteractiveType Type;
|
||||
public string Icon = "op-door";
|
||||
public string Name;
|
||||
public string Use1;
|
||||
public string Use2;
|
||||
public string Use1Title = "进入";
|
||||
public string Use2Title;
|
||||
}
|
||||
|
||||
public class GameDef
|
||||
{
|
||||
public const int NormalFOV = 50;
|
||||
public const int ZoomedFOV = 25;
|
||||
|
||||
public static List<InteractiveData> InteractiveDataList = new List<InteractiveData>()
|
||||
{
|
||||
new InteractiveData()
|
||||
{
|
||||
Type = UIDef.InteractiveType.Boat,
|
||||
Name = "船",
|
||||
Icon = "op-boat",
|
||||
Use1 = "1,1",
|
||||
Use1Title = "上船"
|
||||
},
|
||||
new InteractiveData()
|
||||
{
|
||||
Type = UIDef.InteractiveType.Bank,
|
||||
Name = "银行",
|
||||
Icon = "op-bank",
|
||||
Use1 = "1,1",
|
||||
Use1Title = "进入"
|
||||
},
|
||||
new InteractiveData()
|
||||
{
|
||||
Type = UIDef.InteractiveType.Canteen,
|
||||
Name = "餐厅",
|
||||
Icon = "op-door",
|
||||
Use1 = "1,1",
|
||||
Use1Title = "热饭"
|
||||
},
|
||||
new InteractiveData()
|
||||
{
|
||||
Type = UIDef.InteractiveType.Oven,
|
||||
Name = "烤箱",
|
||||
Icon = "op-oven",
|
||||
Use1 = "1,1",
|
||||
Use1Title = "使用"
|
||||
},
|
||||
new InteractiveData()
|
||||
{
|
||||
Type = UIDef.InteractiveType.Tent,
|
||||
Name = "帐篷",
|
||||
Icon = "op-tent",
|
||||
Use1 = "1,1",
|
||||
Use1Title = "打开"
|
||||
},
|
||||
new InteractiveData()
|
||||
{
|
||||
Type = UIDef.InteractiveType.Drying,
|
||||
Name = "晾干器",
|
||||
Icon = "op-use",
|
||||
Use1 = "1,1",
|
||||
Use1Title = "使用"
|
||||
},
|
||||
new InteractiveData()
|
||||
{
|
||||
Type = UIDef.InteractiveType.Bonfire,
|
||||
Name = "篝火",
|
||||
Icon = "op-fire",
|
||||
Use1 = "1,1",
|
||||
Use1Title = "使用"
|
||||
},
|
||||
new InteractiveData()
|
||||
{
|
||||
Type = UIDef.InteractiveType.Fumigate,
|
||||
Name = "烟熏箱",
|
||||
Icon = "op-use",
|
||||
Use1 = "1,1",
|
||||
Use1Title = "使用"
|
||||
},
|
||||
new InteractiveData()
|
||||
{
|
||||
Type = UIDef.InteractiveType.FoodShop,
|
||||
Name = "食品商店",
|
||||
Icon = "op-door",
|
||||
Use1 = "1,1",
|
||||
Use2 = "1,1",
|
||||
Use1Title = "进入",
|
||||
Use2Title = "退货"
|
||||
},
|
||||
new InteractiveData()
|
||||
{
|
||||
Type = UIDef.InteractiveType.FishingShop,
|
||||
Name = "钓鱼商店",
|
||||
Icon = "op-door",
|
||||
Use1 = "1,1",
|
||||
Use1Title = "进入",
|
||||
},
|
||||
new InteractiveData()
|
||||
{
|
||||
Type = UIDef.InteractiveType.ToolsShop,
|
||||
Name = "工业品店",
|
||||
Icon = "op-door",
|
||||
Use1 = "1,1",
|
||||
Use1Title = "进入",
|
||||
},
|
||||
new InteractiveData()
|
||||
{
|
||||
Type = UIDef.InteractiveType.VendingMachine,
|
||||
Name = "自动贩卖机",
|
||||
Icon = "op-vending",
|
||||
Use1 = "1,1",
|
||||
Use1Title = "进入",
|
||||
},
|
||||
new InteractiveData()
|
||||
{
|
||||
Type = UIDef.InteractiveType.Wharf,
|
||||
Name = "码头",
|
||||
Icon = "op-wharf",
|
||||
Use1 = "1,1",
|
||||
Use1Title = "进入",
|
||||
},
|
||||
new InteractiveData()
|
||||
{
|
||||
Type = UIDef.InteractiveType.FishBazaar,
|
||||
Name = "鱼市",
|
||||
Icon = "op-use",
|
||||
Use1 = "1,1",
|
||||
Use1Title = "进入",
|
||||
},
|
||||
new InteractiveData()
|
||||
{
|
||||
Type = UIDef.InteractiveType.ReserveBazaar,
|
||||
Name = "订购市场",
|
||||
Icon = "op-use",
|
||||
Use1 = "1,1",
|
||||
Use1Title = "进入",
|
||||
},
|
||||
};
|
||||
}
|
||||
}
|
||||
3
Assets/Scripts/Common/Def/GameDef.cs.meta
Normal file
3
Assets/Scripts/Common/Def/GameDef.cs.meta
Normal file
@@ -0,0 +1,3 @@
|
||||
fileFormatVersion: 2
|
||||
guid: e0e959f45daf44f2b7bf1efe6e8fbc2b
|
||||
timeCreated: 1747147951
|
||||
146
Assets/Scripts/Common/Def/InputDef.cs
Normal file
146
Assets/Scripts/Common/Def/InputDef.cs
Normal file
@@ -0,0 +1,146 @@
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Reflection;
|
||||
using NBC;
|
||||
using UnityEngine;
|
||||
|
||||
namespace NBF
|
||||
{
|
||||
public class InputDef
|
||||
{
|
||||
public class UI
|
||||
{
|
||||
public static Dictionary<string, List<string>> Icons = new Dictionary<string, List<string>>();
|
||||
|
||||
[InputIcon("icon_controller_123", "icon_controller_2")]
|
||||
public const string Back = "Back";
|
||||
|
||||
[InputIcon("icon_controller_129", "icon_controller_1")]
|
||||
public const string Enter = "Enter";
|
||||
|
||||
[InputIcon("icon_controller_129", "icon_controller_1")]
|
||||
public const string Reset = "Reset";
|
||||
|
||||
[InputIcon("icon_controller_127", "icon_controller_19")]
|
||||
public const string Tab = "Tab";
|
||||
|
||||
[InputIcon("icon_controller_29", "icon_controller_89")]
|
||||
public const string Prev = "Prev";
|
||||
|
||||
[InputIcon("icon_controller_30", "icon_controller_77")]
|
||||
public const string Next = "Next";
|
||||
|
||||
[InputIcon("icon_controller_98", "icon_controller_27")]
|
||||
public const string SubPrev = "SubPrev";
|
||||
|
||||
[InputIcon("icon_controller_75", " icon_controller_28")]
|
||||
public const string SubNext = "SubNext";
|
||||
|
||||
[InputIcon("", "")] public const string Left = "Left";
|
||||
[InputIcon("", "")] public const string Right = "Right";
|
||||
[InputIcon("", "")] public const string Up = "Up";
|
||||
[InputIcon("", "")] public const string Down = "Down";
|
||||
}
|
||||
|
||||
public static class Player
|
||||
{
|
||||
public static Dictionary<string, List<string>> Icons = new Dictionary<string, List<string>>();
|
||||
public const string Run = "Run";
|
||||
public const string Use1 = "Use1";
|
||||
public const string Use2 = "Use2";
|
||||
}
|
||||
|
||||
#region Load Icon
|
||||
|
||||
public static void LoadIcon()
|
||||
{
|
||||
// 获取InputDef类型
|
||||
Type inputDefType = typeof(NBF.InputDef);
|
||||
|
||||
// 检查UI类
|
||||
Type uiType = inputDefType.GetNestedType("UI");
|
||||
if (uiType != null)
|
||||
{
|
||||
var uiFields = GetInputIconFieldsFromType(uiType);
|
||||
if (uiFields.Count > 0)
|
||||
{
|
||||
foreach (var field in uiFields)
|
||||
{
|
||||
InputIconAttribute attribute =
|
||||
(InputIconAttribute)Attribute.GetCustomAttribute(field, typeof(InputIconAttribute));
|
||||
|
||||
string value = (string)field.GetValue(null); // 获取常量值
|
||||
if (attribute != null)
|
||||
{
|
||||
List<string> icons = new List<string>
|
||||
{
|
||||
attribute.KeyBoardIcon,
|
||||
attribute.ControllerIcon
|
||||
};
|
||||
UI.Icons[value] = icons;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// 检查Player类
|
||||
Type playerType = inputDefType.GetNestedType("Player");
|
||||
if (playerType != null)
|
||||
{
|
||||
var playerFields = GetInputIconFieldsFromType(playerType);
|
||||
if (playerFields.Count > 0)
|
||||
{
|
||||
foreach (var field in playerFields)
|
||||
{
|
||||
InputIconAttribute attribute =
|
||||
(InputIconAttribute)Attribute.GetCustomAttribute(field, typeof(InputIconAttribute));
|
||||
|
||||
string value = (string)field.GetValue(null); // 获取常量值
|
||||
if (attribute != null)
|
||||
{
|
||||
List<string> icons = new List<string>
|
||||
{
|
||||
attribute.KeyBoardIcon,
|
||||
attribute.ControllerIcon
|
||||
};
|
||||
Player.Icons[value] = icons;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// foreach (var key in InputDef.UI.Icons.Keys)
|
||||
// {
|
||||
// var icons = InputDef.UI.Icons[key];
|
||||
// Log.Error($"KEY={key} icon={string.Join(",", icons)}");
|
||||
// }
|
||||
}
|
||||
|
||||
|
||||
// 从特定类型获取带有InputIconAttribute的常量字段
|
||||
private static List<FieldInfo> GetInputIconFieldsFromType(Type type)
|
||||
{
|
||||
List<FieldInfo> result = new List<FieldInfo>();
|
||||
|
||||
// 只获取公共常量字段
|
||||
FieldInfo[] fields = type.GetFields(
|
||||
BindingFlags.Public |
|
||||
BindingFlags.Static |
|
||||
BindingFlags.FlattenHierarchy);
|
||||
|
||||
foreach (FieldInfo field in fields)
|
||||
{
|
||||
// 检查是否是常量且带有InputIconAttribute
|
||||
if (field.IsLiteral && !field.IsInitOnly &&
|
||||
Attribute.IsDefined(field, typeof(InputIconAttribute)))
|
||||
{
|
||||
result.Add(field);
|
||||
}
|
||||
}
|
||||
|
||||
return result;
|
||||
}
|
||||
|
||||
#endregion
|
||||
}
|
||||
}
|
||||
3
Assets/Scripts/Common/Def/InputDef.cs.meta
Normal file
3
Assets/Scripts/Common/Def/InputDef.cs.meta
Normal file
@@ -0,0 +1,3 @@
|
||||
fileFormatVersion: 2
|
||||
guid: 3c1d17072df749909ccc26de605346d1
|
||||
timeCreated: 1748104048
|
||||
10
Assets/Scripts/Common/Def/SelectorRodSetting.cs
Normal file
10
Assets/Scripts/Common/Def/SelectorRodSetting.cs
Normal file
@@ -0,0 +1,10 @@
|
||||
namespace NBF
|
||||
{
|
||||
public enum SelectorRodSetting
|
||||
{
|
||||
Speed = 0,
|
||||
Drag = 1,
|
||||
Leeder = 2
|
||||
}
|
||||
|
||||
}
|
||||
3
Assets/Scripts/Common/Def/SelectorRodSetting.cs.meta
Normal file
3
Assets/Scripts/Common/Def/SelectorRodSetting.cs.meta
Normal file
@@ -0,0 +1,3 @@
|
||||
fileFormatVersion: 2
|
||||
guid: ca512e729d2e4ef290f30f075bcdd698
|
||||
timeCreated: 1744039906
|
||||
147
Assets/Scripts/Common/Def/States.cs
Normal file
147
Assets/Scripts/Common/Def/States.cs
Normal file
@@ -0,0 +1,147 @@
|
||||
namespace NBF
|
||||
{
|
||||
public static class States
|
||||
{
|
||||
public const uint None = 0;
|
||||
|
||||
public static class Player
|
||||
{
|
||||
/// <summary>
|
||||
/// 闲置
|
||||
/// </summary>
|
||||
public const uint Idle = 2;
|
||||
|
||||
/// <summary>
|
||||
/// 拿着鱼竿闲置
|
||||
/// </summary>
|
||||
public const uint RodIdle = 3;
|
||||
|
||||
/// <summary>
|
||||
/// 等待抛竿,蓄力中
|
||||
/// </summary>
|
||||
public const uint WaitThrow = 4;
|
||||
|
||||
/// <summary>
|
||||
/// 抛竿中
|
||||
/// </summary>
|
||||
public const uint Throw = 5;
|
||||
|
||||
/// <summary>
|
||||
/// 钓鱼中
|
||||
/// </summary>
|
||||
public const uint Fishing = 6;
|
||||
|
||||
/// <summary>
|
||||
/// 上鱼搏斗中
|
||||
/// </summary>
|
||||
public const uint Fight = 7;
|
||||
|
||||
/// <summary>
|
||||
/// 展示鱼获
|
||||
/// </summary>
|
||||
public const uint ShowFish = 8;
|
||||
}
|
||||
|
||||
public static class Fish
|
||||
{
|
||||
/// <summary>
|
||||
/// 攻击
|
||||
/// </summary>
|
||||
public const uint Attack = 1;
|
||||
|
||||
/// <summary>
|
||||
/// 吃饵
|
||||
/// </summary>
|
||||
public const uint Bite = 2;
|
||||
|
||||
/// <summary>
|
||||
/// 销毁
|
||||
/// </summary>
|
||||
public const uint Destroy = 3;
|
||||
|
||||
/// <summary>
|
||||
/// 逃避
|
||||
/// </summary>
|
||||
public const uint Escape = 4;
|
||||
|
||||
/// <summary>
|
||||
/// 中钩
|
||||
/// </summary>
|
||||
public const uint Hooked = 5;
|
||||
|
||||
/// <summary>
|
||||
/// 捕食攻击
|
||||
/// </summary>
|
||||
public const uint PredatorAttack = 6;
|
||||
|
||||
/// <summary>
|
||||
/// 捕食者游泳
|
||||
/// </summary>
|
||||
public const uint PredatorSwim = 7;
|
||||
|
||||
/// <summary>
|
||||
/// 显示大鱼
|
||||
/// </summary>
|
||||
public const uint ShowBig = 8;
|
||||
|
||||
/// <summary>
|
||||
/// 显示小鱼
|
||||
/// </summary>
|
||||
public const uint ShowSmall = 9;
|
||||
|
||||
/// <summary>
|
||||
/// 游动
|
||||
/// </summary>
|
||||
public const uint Swim = 10;
|
||||
|
||||
/// <summary>
|
||||
/// 游走
|
||||
/// </summary>
|
||||
public const uint SwimAway = 11;
|
||||
}
|
||||
|
||||
public static class Float
|
||||
{
|
||||
public const uint Broken = 1;
|
||||
public const uint Floating = 2;
|
||||
public const uint Flying = 3;
|
||||
public const uint Hanging = 4;
|
||||
public const uint Hidden = 5;
|
||||
public const uint Hitched = 6;
|
||||
public const uint IdlePitch = 7;
|
||||
public const uint OnTip = 8;
|
||||
public const uint Pitching = 9;
|
||||
public const uint ShowBigFish = 10;
|
||||
public const uint ShowItem = 11;
|
||||
public const uint ShowSmallFish = 12;
|
||||
public const uint Swallowed = 13;
|
||||
}
|
||||
|
||||
public static class Hook
|
||||
{
|
||||
public const uint Floating = 1;
|
||||
public const uint Flying = 2;
|
||||
public const uint Hanging = 3;
|
||||
public const uint Hidden = 4;
|
||||
public const uint Hitched = 5;
|
||||
public const uint Showing = 6;
|
||||
}
|
||||
|
||||
public static class Lure
|
||||
{
|
||||
public const uint Broken = 1;
|
||||
public const uint Floating = 2;
|
||||
public const uint Flying = 3;
|
||||
public const uint Hanging = 4;
|
||||
public const uint Hidden = 5;
|
||||
public const uint Hitched = 6;
|
||||
public const uint IdlePitch = 7;
|
||||
public const uint OnTip = 8;
|
||||
public const uint Pitching = 9;
|
||||
public const uint ShowBigFish = 10;
|
||||
public const uint ShowItem = 11;
|
||||
public const uint ShowSmallFish = 12;
|
||||
public const uint Swallowed = 13;
|
||||
}
|
||||
}
|
||||
}
|
||||
3
Assets/Scripts/Common/Def/States.cs.meta
Normal file
3
Assets/Scripts/Common/Def/States.cs.meta
Normal file
@@ -0,0 +1,3 @@
|
||||
fileFormatVersion: 2
|
||||
guid: 1c891633bb59482ab0e95249873a664c
|
||||
timeCreated: 1743521988
|
||||
101
Assets/Scripts/Common/Def/UIDef.cs
Normal file
101
Assets/Scripts/Common/Def/UIDef.cs
Normal file
@@ -0,0 +1,101 @@
|
||||
using UnityEngine;
|
||||
|
||||
namespace NBF
|
||||
{
|
||||
public class UIDef
|
||||
{
|
||||
public const string UIRoot = "Fgui/";
|
||||
|
||||
public class DefaultScreen
|
||||
{
|
||||
public const int Width = 1920;
|
||||
public const int Height = 1080;
|
||||
}
|
||||
|
||||
public class Pack
|
||||
{
|
||||
public const string Common = "Common";
|
||||
public const string Main = "Main";
|
||||
}
|
||||
|
||||
public class UIOrder
|
||||
{
|
||||
public const int CommonTopPanel = 200;
|
||||
public const int Loading = 500;
|
||||
public const int Guide = 900;
|
||||
public const int Notices = 1000;
|
||||
|
||||
/// <summary>
|
||||
/// 屏蔽Combo操作
|
||||
/// </summary>
|
||||
public const int Forbid = 2000;
|
||||
|
||||
/// <summary>
|
||||
/// 转菊花
|
||||
/// </summary>
|
||||
public const int Wait = 2001;
|
||||
|
||||
/// <summary>
|
||||
/// 引导屏蔽所有操作
|
||||
/// </summary>
|
||||
public const int GuideForbid = 2002;
|
||||
|
||||
/// <summary>
|
||||
/// 网络错误弹框
|
||||
/// </summary>
|
||||
public const int NetDisconnect = 2100;
|
||||
|
||||
/// <summary>
|
||||
/// 最顶层层 GM之类的用
|
||||
/// </summary>
|
||||
public const int Max = 3100;
|
||||
}
|
||||
|
||||
public enum InteractiveType
|
||||
{
|
||||
[InspectorName("船")] Boat = 1,
|
||||
|
||||
[InspectorName("银行")] Bank = 2,
|
||||
|
||||
[InspectorName("餐厅")] Canteen = 3,
|
||||
|
||||
[InspectorName("烤箱")] Oven = 4,
|
||||
|
||||
[InspectorName("帐篷")] Tent = 5,
|
||||
|
||||
[InspectorName("晾干器")] Drying = 6,
|
||||
|
||||
[InspectorName("篝火")] Bonfire = 7,
|
||||
|
||||
[InspectorName("烟熏箱")] Fumigate = 8,
|
||||
|
||||
[InspectorName("食品商店")] FoodShop = 11,
|
||||
|
||||
[InspectorName("钓鱼商店")] FishingShop = 12,
|
||||
|
||||
[InspectorName("工业品店")] ToolsShop = 13,
|
||||
|
||||
[InspectorName("自动贩卖机")] VendingMachine = 14,
|
||||
|
||||
[InspectorName("码头")] Wharf = 15,
|
||||
|
||||
[InspectorName("鱼市")] FishBazaar = 21,
|
||||
|
||||
[InspectorName("订购市场")] ReserveBazaar = 22
|
||||
}
|
||||
|
||||
public class ID
|
||||
{
|
||||
public const int Loading = 1;
|
||||
public const int Home = 2;
|
||||
public const int SettingPanel = 3;
|
||||
public const int HelpPanel = 4;
|
||||
public const int MapPanel = 5;
|
||||
|
||||
public const int ShopPanel = 10;
|
||||
public const int MakePanel = 11;
|
||||
public const int BagPanel = 12;
|
||||
public const int FishBagPanel = 13;
|
||||
}
|
||||
}
|
||||
}
|
||||
3
Assets/Scripts/Common/Def/UIDef.cs.meta
Normal file
3
Assets/Scripts/Common/Def/UIDef.cs.meta
Normal file
@@ -0,0 +1,3 @@
|
||||
fileFormatVersion: 2
|
||||
guid: 50d4cd26b49d4053bf5d1c6f6674630a
|
||||
timeCreated: 1742307596
|
||||
@@ -1,3 +0,0 @@
|
||||
fileFormatVersion: 2
|
||||
guid: ef884391e7a4450a9cfc633e1c7a8785
|
||||
timeCreated: 1742999159
|
||||
@@ -1,75 +0,0 @@
|
||||
namespace NBF
|
||||
{
|
||||
public enum FishSpecies
|
||||
{
|
||||
BlackBullhead = 0,
|
||||
Perch = 1,
|
||||
SalmonSockeye = 2,
|
||||
TroutRainbow = 3,
|
||||
BassSmallmouth = 4,
|
||||
PerchYellow = 5,
|
||||
Asp = 6,
|
||||
CommonBarbel = 7,
|
||||
CommonBream = 8,
|
||||
BreamSilver = 9,
|
||||
Burbot = 10,
|
||||
CarpCommon = 11,
|
||||
CarpMirror = 12,
|
||||
CarpSezan = 13,
|
||||
CarpGrass = 14,
|
||||
CarpSilver = 15,
|
||||
CarpCrucian = 16,
|
||||
CarpPrussian = 17,
|
||||
CatfishChannel = 18,
|
||||
CatfishFlathead = 19,
|
||||
CatfishRedtail = 20,
|
||||
CatfishWels = 21,
|
||||
Chub = 22,
|
||||
EuropeanGrayling = 23,
|
||||
Ide = 24,
|
||||
PickerelChain = 25,
|
||||
PickerelGrass = 26,
|
||||
PickerelRedfin = 27,
|
||||
PikeAmur = 28,
|
||||
PikeNorthern = 29,
|
||||
PikeSoutherm = 30,
|
||||
PikeMuskellunge = 31,
|
||||
Roach = 32,
|
||||
Tench = 33,
|
||||
Zander = 34,
|
||||
BassLargemouth = 35,
|
||||
Bluegill = 36,
|
||||
Pumpkinseed = 37,
|
||||
AtlanticSalmon = 38,
|
||||
CommonBleak = 39,
|
||||
Huchen = 40,
|
||||
BrookTrout = 41,
|
||||
BrownTrout = 42,
|
||||
EuropeanBass = 43,
|
||||
AtlanticCod = 44,
|
||||
CrocodileNeedlefish = 45,
|
||||
EuropeanEel = 46,
|
||||
EuropeanFlounder = 47,
|
||||
Garfish = 48,
|
||||
EuropeanSeaSturgeon = 49,
|
||||
SeaTrout = 50,
|
||||
Beluga = 51,
|
||||
BaikalBlackGrayling = 52,
|
||||
ChumSalmon = 53,
|
||||
CohoSalmon = 54,
|
||||
PinkSalmon = 55,
|
||||
BarracudaGreat = 56,
|
||||
BarracudaYellowtail = 57,
|
||||
GrouperGiant = 58,
|
||||
GrouperMalabar = 59,
|
||||
LionfishRed = 60,
|
||||
MahiMahi = 61,
|
||||
SharkBlacktipReef = 62,
|
||||
SharkTiger = 63,
|
||||
SnapperGrey = 64,
|
||||
TreadfishIndian = 65,
|
||||
TrevallyGiant = 66,
|
||||
TunaYellowfin = 67,
|
||||
ZombieBass = 68
|
||||
}
|
||||
}
|
||||
@@ -1,3 +0,0 @@
|
||||
fileFormatVersion: 2
|
||||
guid: da1c9ef59c57429083f79d8c2a1bec86
|
||||
timeCreated: 1742999162
|
||||
78
Assets/Scripts/Common/Events.cs
Normal file
78
Assets/Scripts/Common/Events.cs
Normal file
@@ -0,0 +1,78 @@
|
||||
using NBF.Fishing2;
|
||||
|
||||
namespace NBF
|
||||
{
|
||||
public struct Wait_SceneChangeFinish : IWaitType
|
||||
{
|
||||
public int Error { get; set; }
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 开始切换场景
|
||||
/// </summary>
|
||||
public struct SceneChangeStart
|
||||
{
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Loading进度变化
|
||||
/// </summary>
|
||||
public struct LoadingProgress
|
||||
{
|
||||
public float Progress { get; set; }
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 场景切换结束
|
||||
/// </summary>
|
||||
public struct SceneChangeFinish
|
||||
{
|
||||
/// <summary>
|
||||
/// 是否首次切换场景
|
||||
/// </summary>
|
||||
public bool IsFirst { get; set; }
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 场景创建成功事件
|
||||
/// </summary>
|
||||
public struct AfterCreateCurrentScene
|
||||
{
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 游戏启动成功事件
|
||||
/// </summary>
|
||||
public struct AppStartInitFinish
|
||||
{
|
||||
public bool IsRobot;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 登录完成
|
||||
/// </summary>
|
||||
public struct LoginFinish
|
||||
{
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 进入地图成功
|
||||
/// </summary>
|
||||
public struct EnterMapFinish
|
||||
{
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 角色创建完成
|
||||
/// </summary>
|
||||
public struct AfterUnitCreate
|
||||
{
|
||||
/// <summary>
|
||||
/// 是否是主玩家
|
||||
/// </summary>
|
||||
public bool IsMainPlayer;
|
||||
|
||||
public Unit Unit;
|
||||
// public UnitInfo UnitInfo;
|
||||
}
|
||||
}
|
||||
3
Assets/Scripts/Common/Events.cs.meta
Normal file
3
Assets/Scripts/Common/Events.cs.meta
Normal file
@@ -0,0 +1,3 @@
|
||||
fileFormatVersion: 2
|
||||
guid: 9c1540ac905c4c4eb9486d66019e7485
|
||||
timeCreated: 1756365591
|
||||
@@ -1,3 +0,0 @@
|
||||
fileFormatVersion: 2
|
||||
guid: 1977fd60c4b24f33bc4143aaed9fba8a
|
||||
timeCreated: 1755792367
|
||||
@@ -1,10 +0,0 @@
|
||||
using System;
|
||||
using UnityEngine;
|
||||
|
||||
namespace NBF
|
||||
{
|
||||
public class InteractiveObject : MonoBehaviour
|
||||
{
|
||||
[Header("交互类型")] public UIDef.InteractiveType Type;
|
||||
}
|
||||
}
|
||||
@@ -1,3 +0,0 @@
|
||||
fileFormatVersion: 2
|
||||
guid: aa29ad8321da4a29a6fb475e9e97f87e
|
||||
timeCreated: 1747577976
|
||||
File diff suppressed because it is too large
Load Diff
@@ -1,2 +0,0 @@
|
||||
fileFormatVersion: 2
|
||||
guid: cdaa795bad2ccc34faab0c9036785b02
|
||||
@@ -1,249 +0,0 @@
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using UnityEngine;
|
||||
|
||||
[DisallowMultipleComponent]
|
||||
public class Outline : MonoBehaviour
|
||||
{
|
||||
public enum Mode
|
||||
{
|
||||
OutlineAll = 0,
|
||||
OutlineVisible = 1,
|
||||
OutlineHidden = 2,
|
||||
OutlineAndSilhouette = 3,
|
||||
SilhouetteOnly = 4
|
||||
}
|
||||
|
||||
[Serializable]
|
||||
private class ListVector3
|
||||
{
|
||||
public List<Vector3> data;
|
||||
}
|
||||
|
||||
private static HashSet<Mesh> registeredMeshes = new HashSet<Mesh>();
|
||||
|
||||
[SerializeField] private Mode outlineMode;
|
||||
|
||||
[SerializeField] private Color outlineColor = Color.white;
|
||||
|
||||
[SerializeField] [Range(0f, 10f)] private float outlineWidth = 2f;
|
||||
|
||||
[Header("Optional")]
|
||||
[SerializeField]
|
||||
[Tooltip(
|
||||
"Precompute enabled: Per-vertex calculations are performed in the editor and serialized with the object. Precompute disabled: Per-vertex calculations are performed at runtime in Awake(). This may cause a pause for large meshes.")]
|
||||
private bool precomputeOutline;
|
||||
|
||||
[SerializeField] [HideInInspector] private List<Mesh> bakeKeys = new List<Mesh>();
|
||||
|
||||
[SerializeField] [HideInInspector] private List<ListVector3> bakeValues = new List<ListVector3>();
|
||||
|
||||
private Renderer[] renderers;
|
||||
|
||||
private Material outlineMaskMaterial;
|
||||
|
||||
private Material outlineFillMaterial;
|
||||
|
||||
private bool needsUpdate;
|
||||
|
||||
public Mode OutlineMode
|
||||
{
|
||||
get { return outlineMode; }
|
||||
set
|
||||
{
|
||||
outlineMode = value;
|
||||
needsUpdate = true;
|
||||
}
|
||||
}
|
||||
|
||||
public Color OutlineColor
|
||||
{
|
||||
get { return outlineColor; }
|
||||
set
|
||||
{
|
||||
outlineColor = value;
|
||||
needsUpdate = true;
|
||||
}
|
||||
}
|
||||
|
||||
public float OutlineWidth
|
||||
{
|
||||
get { return outlineWidth; }
|
||||
set
|
||||
{
|
||||
outlineWidth = value;
|
||||
needsUpdate = true;
|
||||
}
|
||||
}
|
||||
|
||||
private void Awake()
|
||||
{
|
||||
renderers = GetComponentsInChildren<Renderer>();
|
||||
outlineMaskMaterial = Instantiate(Resources.Load<Material>("Materials/OutlineMask"));
|
||||
outlineFillMaterial = Instantiate(Resources.Load<Material>("Materials/OutlineFill"));
|
||||
outlineMaskMaterial.name = "OutlineMask (Instance)";
|
||||
outlineFillMaterial.name = "OutlineFill (Instance)";
|
||||
LoadSmoothNormals();
|
||||
needsUpdate = true;
|
||||
}
|
||||
|
||||
private void OnEnable()
|
||||
{
|
||||
Renderer[] array = renderers;
|
||||
foreach (Renderer obj in array)
|
||||
{
|
||||
List<Material> list = Enumerable.ToList(obj.sharedMaterials);
|
||||
list.Add(outlineMaskMaterial);
|
||||
list.Add(outlineFillMaterial);
|
||||
obj.materials = list.ToArray();
|
||||
}
|
||||
}
|
||||
|
||||
private void OnValidate()
|
||||
{
|
||||
needsUpdate = true;
|
||||
if ((!precomputeOutline && bakeKeys.Count != 0) || bakeKeys.Count != bakeValues.Count)
|
||||
{
|
||||
bakeKeys.Clear();
|
||||
bakeValues.Clear();
|
||||
}
|
||||
|
||||
if (precomputeOutline && bakeKeys.Count == 0)
|
||||
{
|
||||
Bake();
|
||||
}
|
||||
}
|
||||
|
||||
private void Update()
|
||||
{
|
||||
if (needsUpdate)
|
||||
{
|
||||
needsUpdate = false;
|
||||
UpdateMaterialProperties();
|
||||
}
|
||||
}
|
||||
|
||||
private void OnDisable()
|
||||
{
|
||||
Renderer[] array = renderers;
|
||||
foreach (Renderer obj in array)
|
||||
{
|
||||
List<Material> list = Enumerable.ToList(obj.sharedMaterials);
|
||||
list.Remove(outlineMaskMaterial);
|
||||
list.Remove(outlineFillMaterial);
|
||||
obj.materials = list.ToArray();
|
||||
}
|
||||
}
|
||||
|
||||
private void OnDestroy()
|
||||
{
|
||||
Destroy(outlineMaskMaterial);
|
||||
Destroy(outlineFillMaterial);
|
||||
}
|
||||
|
||||
private void Bake()
|
||||
{
|
||||
HashSet<Mesh> hashSet = new HashSet<Mesh>();
|
||||
MeshFilter[] componentsInChildren = GetComponentsInChildren<MeshFilter>();
|
||||
foreach (MeshFilter meshFilter in componentsInChildren)
|
||||
{
|
||||
if (hashSet.Add(meshFilter.sharedMesh))
|
||||
{
|
||||
List<Vector3> data = SmoothNormals(meshFilter.sharedMesh);
|
||||
bakeKeys.Add(meshFilter.sharedMesh);
|
||||
bakeValues.Add(new ListVector3
|
||||
{
|
||||
data = data
|
||||
});
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
private void LoadSmoothNormals()
|
||||
{
|
||||
MeshFilter[] componentsInChildren = GetComponentsInChildren<MeshFilter>();
|
||||
foreach (MeshFilter meshFilter in componentsInChildren)
|
||||
{
|
||||
if (registeredMeshes.Add(meshFilter.sharedMesh))
|
||||
{
|
||||
int num = bakeKeys.IndexOf(meshFilter.sharedMesh);
|
||||
List<Vector3> uvs = ((num >= 0) ? bakeValues[num].data : SmoothNormals(meshFilter.sharedMesh));
|
||||
meshFilter.sharedMesh.SetUVs(3, uvs);
|
||||
}
|
||||
}
|
||||
|
||||
SkinnedMeshRenderer[] componentsInChildren2 = GetComponentsInChildren<SkinnedMeshRenderer>();
|
||||
foreach (SkinnedMeshRenderer skinnedMeshRenderer in componentsInChildren2)
|
||||
{
|
||||
if (registeredMeshes.Add(skinnedMeshRenderer.sharedMesh))
|
||||
{
|
||||
skinnedMeshRenderer.sharedMesh.uv4 = new Vector2[skinnedMeshRenderer.sharedMesh.vertexCount];
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
private List<Vector3> SmoothNormals(Mesh mesh)
|
||||
{
|
||||
IEnumerable<IGrouping<Vector3, KeyValuePair<Vector3, int>>> enumerable =
|
||||
Enumerable.GroupBy(
|
||||
Enumerable.Select(mesh.vertices,
|
||||
(Vector3 vertex, int index) => new KeyValuePair<Vector3, int>(vertex, index)),
|
||||
(KeyValuePair<Vector3, int> pair) => pair.Key);
|
||||
List<Vector3> list = new List<Vector3>(mesh.normals);
|
||||
foreach (IGrouping<Vector3, KeyValuePair<Vector3, int>> item in enumerable)
|
||||
{
|
||||
if (Enumerable.Count(item) == 1)
|
||||
{
|
||||
continue;
|
||||
}
|
||||
|
||||
Vector3 zero = Vector3.zero;
|
||||
foreach (KeyValuePair<Vector3, int> item2 in item)
|
||||
{
|
||||
zero += mesh.normals[item2.Value];
|
||||
}
|
||||
|
||||
zero.Normalize();
|
||||
foreach (KeyValuePair<Vector3, int> item3 in item)
|
||||
{
|
||||
list[item3.Value] = zero;
|
||||
}
|
||||
}
|
||||
|
||||
return list;
|
||||
}
|
||||
|
||||
private void UpdateMaterialProperties()
|
||||
{
|
||||
outlineFillMaterial.SetColor("_OutlineColor", outlineColor);
|
||||
switch (outlineMode)
|
||||
{
|
||||
case Mode.OutlineAll:
|
||||
outlineMaskMaterial.SetFloat("_ZTest", 8f);
|
||||
outlineFillMaterial.SetFloat("_ZTest", 8f);
|
||||
outlineFillMaterial.SetFloat("_OutlineWidth", outlineWidth);
|
||||
break;
|
||||
case Mode.OutlineVisible:
|
||||
outlineMaskMaterial.SetFloat("_ZTest", 8f);
|
||||
outlineFillMaterial.SetFloat("_ZTest", 4f);
|
||||
outlineFillMaterial.SetFloat("_OutlineWidth", outlineWidth);
|
||||
break;
|
||||
case Mode.OutlineHidden:
|
||||
outlineMaskMaterial.SetFloat("_ZTest", 8f);
|
||||
outlineFillMaterial.SetFloat("_ZTest", 5f);
|
||||
outlineFillMaterial.SetFloat("_OutlineWidth", outlineWidth);
|
||||
break;
|
||||
case Mode.OutlineAndSilhouette:
|
||||
outlineMaskMaterial.SetFloat("_ZTest", 4f);
|
||||
outlineFillMaterial.SetFloat("_ZTest", 8f);
|
||||
outlineFillMaterial.SetFloat("_OutlineWidth", outlineWidth);
|
||||
break;
|
||||
case Mode.SilhouetteOnly:
|
||||
outlineMaskMaterial.SetFloat("_ZTest", 4f);
|
||||
outlineFillMaterial.SetFloat("_ZTest", 5f);
|
||||
outlineFillMaterial.SetFloat("_OutlineWidth", 0f);
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -1,3 +0,0 @@
|
||||
fileFormatVersion: 2
|
||||
guid: 944328972a42400fa3fa1289ba2a1e2e
|
||||
timeCreated: 1742387511
|
||||
@@ -1,30 +0,0 @@
|
||||
using NBC;
|
||||
using UnityEngine;
|
||||
|
||||
namespace NBF
|
||||
{
|
||||
/// <summary>
|
||||
/// 常驻公共脚本
|
||||
/// </summary>
|
||||
public class PermanentCommon
|
||||
{
|
||||
private static bool _init;
|
||||
private static PermanentCommon _inst;
|
||||
|
||||
public static PermanentCommon Inst
|
||||
{
|
||||
get { return _inst ??= new PermanentCommon(); }
|
||||
}
|
||||
|
||||
public static void Init()
|
||||
{
|
||||
if (_init) return;
|
||||
_init = true;
|
||||
}
|
||||
|
||||
public static void Dispose()
|
||||
{
|
||||
_init = false;
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -1,3 +0,0 @@
|
||||
fileFormatVersion: 2
|
||||
guid: 3816467cfd1648e685a33ebfd1d9fb7d
|
||||
timeCreated: 1748184924
|
||||
@@ -1,3 +0,0 @@
|
||||
fileFormatVersion: 2
|
||||
guid: 011d59a9e9454122bc76461e942de184
|
||||
timeCreated: 1748489400
|
||||
@@ -1,3 +0,0 @@
|
||||
fileFormatVersion: 2
|
||||
guid: d846463d130b4191a5a4a9d2e2dfe45b
|
||||
timeCreated: 1748180579
|
||||
@@ -1,46 +0,0 @@
|
||||
using NBC;
|
||||
|
||||
namespace NBF
|
||||
{
|
||||
public static class InputCursorExtension
|
||||
{
|
||||
public static void InputInit()
|
||||
{
|
||||
// UI.Inst.On(UIEvents.UIShow, UIShow, null, 1);
|
||||
// UI.Inst.On(UIEvents.UIHide, UIHide, null, 1);
|
||||
}
|
||||
|
||||
public static void Dispose()
|
||||
{
|
||||
}
|
||||
|
||||
private static void UIShow(EventArgs ev)
|
||||
{
|
||||
CheckUICursor();
|
||||
}
|
||||
|
||||
private static void UIHide(EventArgs ev)
|
||||
{
|
||||
CheckUICursor();
|
||||
}
|
||||
|
||||
|
||||
private static void CheckUICursor()
|
||||
{
|
||||
var uis = App.UI.GetAllUI();
|
||||
bool showCursor = false;
|
||||
foreach (var ui in uis)
|
||||
{
|
||||
if (!ui.IsShowing) continue;
|
||||
if (ui.IsShowCursor)
|
||||
{
|
||||
showCursor = true;
|
||||
break;
|
||||
}
|
||||
}
|
||||
Log.Error($"showCursor={showCursor}");
|
||||
InputManager.IsUIStopInput = showCursor;
|
||||
InputManager.SetMouseCursor(showCursor);
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -1,3 +0,0 @@
|
||||
fileFormatVersion: 2
|
||||
guid: 0644b8eb12e44351ab75b467f90d4c32
|
||||
timeCreated: 1748185434
|
||||
@@ -1,213 +0,0 @@
|
||||
using System;
|
||||
using System.Runtime.InteropServices;
|
||||
using NBC;
|
||||
// using Rewired;
|
||||
using UnityEngine;
|
||||
using UnityEngine.InputSystem;
|
||||
|
||||
namespace NBF
|
||||
{
|
||||
public enum ControllerType
|
||||
{
|
||||
KeyboardMouse = 0,
|
||||
GamePad = 1
|
||||
}
|
||||
|
||||
public class InputManager : MonoService<InputManager>
|
||||
{
|
||||
public static bool IsOp1;
|
||||
public static bool IsOp2;
|
||||
|
||||
public static event Action<bool> OnOp1Action;
|
||||
public static event Action<bool> OnOp2Action;
|
||||
|
||||
/// <summary>
|
||||
/// 执行输入事件
|
||||
/// </summary>
|
||||
public static event Action<string> OnUIPerformed;
|
||||
|
||||
/// <summary>
|
||||
/// 执行输入事件完毕
|
||||
/// </summary>
|
||||
public static event Action<string> OnUICanceled;
|
||||
|
||||
/// <summary>
|
||||
/// 执行输入事件
|
||||
/// </summary>
|
||||
public static event Action<string> OnPlayerPerformed;
|
||||
|
||||
/// <summary>
|
||||
/// 执行输入事件完毕
|
||||
/// </summary>
|
||||
public static event Action<string> OnPlayerCanceled;
|
||||
|
||||
/// <summary>
|
||||
/// 触发交互游戏对象
|
||||
/// </summary>
|
||||
public static event Action<InteractiveObject> OnInteractiveObjectAction;
|
||||
|
||||
public static PlayerInputControl PlayerInputControl { get; private set; }
|
||||
|
||||
/// <summary>
|
||||
/// 手柄输入
|
||||
/// </summary>
|
||||
public static bool IsControllerInput;
|
||||
|
||||
/// <summary>
|
||||
/// ui阻止游戏输入
|
||||
/// </summary>
|
||||
public static bool IsUIStopInput;
|
||||
|
||||
public static ControllerType ControllerType = ControllerType.KeyboardMouse;
|
||||
|
||||
protected override void OnAwake()
|
||||
{
|
||||
InputCursorExtension.InputInit();
|
||||
DontDestroyOnLoad(gameObject);
|
||||
PlayerInputControl = new PlayerInputControl();
|
||||
PlayerInputControl.Enable();
|
||||
}
|
||||
|
||||
private void Start()
|
||||
{
|
||||
|
||||
AddEvent();
|
||||
}
|
||||
|
||||
private void OnDestroy()
|
||||
{
|
||||
RemoveEvent();
|
||||
InputCursorExtension.Dispose();
|
||||
}
|
||||
|
||||
|
||||
public static void SetMouseCursor(bool val)
|
||||
{
|
||||
if (val)
|
||||
{
|
||||
if (ControllerType == ControllerType.KeyboardMouse)
|
||||
{
|
||||
Cursor.visible = true;
|
||||
}
|
||||
|
||||
Cursor.lockState = CursorLockMode.None;
|
||||
}
|
||||
else if (ControllerType == ControllerType.KeyboardMouse)
|
||||
{
|
||||
Cursor.visible = false;
|
||||
}
|
||||
|
||||
Cursor.visible = val;
|
||||
if (!val)
|
||||
{
|
||||
Cursor.lockState = CursorLockMode.Confined;
|
||||
}
|
||||
}
|
||||
|
||||
public static Vector2 GetMovementInput()
|
||||
{
|
||||
if (IsUIStopInput) return Vector2.zero;
|
||||
return PlayerInputControl.Player.Move?.ReadValue<Vector2>() ?? Vector2.zero;
|
||||
}
|
||||
|
||||
public static Vector2 GetLookInput()
|
||||
{
|
||||
if (IsUIStopInput) return Vector2.zero;
|
||||
return PlayerInputControl.Player.Look?.ReadValue<Vector2>() ?? Vector2.zero;
|
||||
}
|
||||
|
||||
|
||||
private void AddEvent()
|
||||
{
|
||||
foreach (var actionMap in PlayerInputControl.asset.actionMaps)
|
||||
{
|
||||
actionMap.Enable();
|
||||
if (actionMap.name == "UI")
|
||||
{
|
||||
foreach (var action in actionMap.actions)
|
||||
{
|
||||
if (action.type == InputActionType.Button)
|
||||
{
|
||||
action.performed += OnUIButtonPerformed;
|
||||
action.canceled += OnUIButtonCanceled;
|
||||
}
|
||||
}
|
||||
}
|
||||
else if (actionMap.name == "Player")
|
||||
{
|
||||
foreach (var action in actionMap.actions)
|
||||
{
|
||||
if (action.type == InputActionType.Button)
|
||||
{
|
||||
action.performed += OnPlayerButtonPerformed;
|
||||
action.canceled += OnPlayerButtonCanceled;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
private void RemoveEvent()
|
||||
{
|
||||
OnUIPerformed = null;
|
||||
OnUICanceled = null;
|
||||
OnPlayerPerformed = null;
|
||||
OnPlayerCanceled = null;
|
||||
}
|
||||
|
||||
private void OnUIButtonPerformed(InputAction.CallbackContext context)
|
||||
{
|
||||
OnUIPerformed?.Invoke(context.action.name);
|
||||
}
|
||||
|
||||
private void OnUIButtonCanceled(InputAction.CallbackContext context)
|
||||
{
|
||||
OnUICanceled?.Invoke(context.action.name);
|
||||
}
|
||||
|
||||
private void OnPlayerButtonPerformed(InputAction.CallbackContext context)
|
||||
{
|
||||
if (IsUIStopInput) return;
|
||||
var actionName = context.action.name;
|
||||
if (actionName == "Op1")
|
||||
{
|
||||
OnOp1Action?.Invoke(true);
|
||||
}
|
||||
else if (actionName == "Op2")
|
||||
{
|
||||
OnOp2Action?.Invoke(true);
|
||||
}
|
||||
|
||||
OnPlayerPerformed?.Invoke(actionName);
|
||||
}
|
||||
|
||||
private void OnPlayerButtonCanceled(InputAction.CallbackContext context)
|
||||
{
|
||||
if (IsUIStopInput) return;
|
||||
var actionName = context.action.name;
|
||||
if (actionName == "Op1")
|
||||
{
|
||||
OnOp1Action?.Invoke(false);
|
||||
}
|
||||
else if (actionName == "Op2")
|
||||
{
|
||||
OnOp2Action?.Invoke(false);
|
||||
}
|
||||
|
||||
OnPlayerCanceled?.Invoke(actionName);
|
||||
}
|
||||
|
||||
|
||||
public void OnInteractiveObject(InteractiveObject interactiveObject)
|
||||
{
|
||||
Debug.LogError($"OnInteractiveObject {interactiveObject != null}");
|
||||
OnInteractiveObjectAction?.Invoke(interactiveObject);
|
||||
}
|
||||
|
||||
public void SendUIInput(string actionName)
|
||||
{
|
||||
OnUIPerformed?.Invoke(actionName);
|
||||
OnUICanceled?.Invoke(actionName);
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -1,3 +0,0 @@
|
||||
fileFormatVersion: 2
|
||||
guid: fecc50928be248b896f6ee0a17e7b76d
|
||||
timeCreated: 1746892722
|
||||
@@ -1,24 +0,0 @@
|
||||
using NBC;
|
||||
using UnityEngine;
|
||||
|
||||
namespace NBF
|
||||
{
|
||||
public abstract class MonoService : MonoBehaviour
|
||||
{
|
||||
}
|
||||
|
||||
public abstract class MonoService<T> : MonoService where T : MonoService
|
||||
{
|
||||
public static T Instance { get; private set; }
|
||||
|
||||
protected void Awake()
|
||||
{
|
||||
Instance = this as T;
|
||||
OnAwake();
|
||||
}
|
||||
|
||||
protected virtual void OnAwake()
|
||||
{
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -1,3 +0,0 @@
|
||||
fileFormatVersion: 2
|
||||
guid: 62c58708f36041db9bb11a7e4d16c62c
|
||||
timeCreated: 1748491579
|
||||
@@ -1,3 +0,0 @@
|
||||
fileFormatVersion: 2
|
||||
guid: 6111c0ab89e74c9fada884e4e4051549
|
||||
timeCreated: 1748489421
|
||||
@@ -1,3 +0,0 @@
|
||||
fileFormatVersion: 2
|
||||
guid: c12ca701ad9f433d9e6e7eaf04f507d0
|
||||
timeCreated: 1748570535
|
||||
@@ -1,6 +0,0 @@
|
||||
namespace NBF.Setting
|
||||
{
|
||||
public abstract class ControllerOption : OptionBase
|
||||
{
|
||||
}
|
||||
}
|
||||
@@ -1,3 +0,0 @@
|
||||
fileFormatVersion: 2
|
||||
guid: 75e11d5298cd48718d39a3e2af82472f
|
||||
timeCreated: 1749634909
|
||||
@@ -1,18 +0,0 @@
|
||||
using UnityEngine.InputSystem;
|
||||
|
||||
namespace NBF.Setting
|
||||
{
|
||||
public abstract class GamepadOption : InputOption
|
||||
{
|
||||
protected override bool IsBindingContains(InputBinding binding)
|
||||
{
|
||||
var path = binding.path;
|
||||
if (path.Contains("<Gamepad>"))
|
||||
{
|
||||
return true;
|
||||
}
|
||||
|
||||
return false;
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -1,3 +0,0 @@
|
||||
fileFormatVersion: 2
|
||||
guid: 49041e6a08b744038368d7010acf61ea
|
||||
timeCreated: 1750408186
|
||||
@@ -1,12 +0,0 @@
|
||||
using System.Collections.Generic;
|
||||
using NBF.Setting;
|
||||
|
||||
namespace NBF
|
||||
{
|
||||
public interface ISettings
|
||||
{
|
||||
List<OptionBase> GetOptionsByTab(string group);
|
||||
IEnumerable<string> GetAllTabs();
|
||||
T GetSettingOption<T>() where T : OptionBase;
|
||||
}
|
||||
}
|
||||
@@ -1,3 +0,0 @@
|
||||
fileFormatVersion: 2
|
||||
guid: d2cb28b8c7664cc28fe0b0a0a4516704
|
||||
timeCreated: 1748678126
|
||||
@@ -1,96 +0,0 @@
|
||||
using UnityEngine;
|
||||
using UnityEngine.InputSystem;
|
||||
|
||||
namespace NBF.Setting
|
||||
{
|
||||
public abstract class InputOption : OptionBase
|
||||
{
|
||||
private int _bindingIndex = 0;
|
||||
public abstract InputAction InputAction { get; }
|
||||
|
||||
public int BindingIndex => _bindingIndex;
|
||||
|
||||
protected override int DefaultValue => 0;
|
||||
|
||||
/// <summary>
|
||||
/// 保存的值
|
||||
/// </summary>
|
||||
protected string InputSaveValue;
|
||||
|
||||
public override bool HaveNotApple()
|
||||
{
|
||||
return !InputAction.SaveBindingOverridesAsJson().Equals(InputSaveValue);
|
||||
}
|
||||
|
||||
public override void Apply()
|
||||
{
|
||||
// 保存绑定
|
||||
InputSaveValue = InputAction.SaveBindingOverridesAsJson();
|
||||
PlayerPrefs.SetString(SaveKey, InputSaveValue);
|
||||
OnApply();
|
||||
}
|
||||
|
||||
public override void Load()
|
||||
{
|
||||
for (int i = 0; i < InputAction.bindings.Count; i++)
|
||||
{
|
||||
var binding = InputAction.bindings[i];
|
||||
if (IsBindingContains(binding))
|
||||
{
|
||||
_bindingIndex = i;
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
var value = PlayerPrefs.GetString(SaveKey, string.Empty);
|
||||
InputSaveValue = value;
|
||||
if (!string.IsNullOrEmpty(InputSaveValue))
|
||||
{
|
||||
InputAction.LoadBindingOverridesFromJson(InputSaveValue);
|
||||
}
|
||||
}
|
||||
|
||||
public override void Reset()
|
||||
{
|
||||
if (InputAction.bindings[BindingIndex].isComposite)
|
||||
{
|
||||
// It's a composite. Remove overrides from part bindings.
|
||||
for (var i = BindingIndex + 1;
|
||||
i < InputAction.bindings.Count && InputAction.bindings[i].isPartOfComposite;
|
||||
++i)
|
||||
InputAction.RemoveBindingOverride(i);
|
||||
}
|
||||
else
|
||||
{
|
||||
InputAction.RemoveBindingOverride(BindingIndex);
|
||||
}
|
||||
}
|
||||
|
||||
public override void Cancel()
|
||||
{
|
||||
if (!string.IsNullOrEmpty(InputSaveValue))
|
||||
{
|
||||
InputAction.LoadBindingOverridesFromJson(InputSaveValue);
|
||||
}
|
||||
else
|
||||
{
|
||||
Reset();
|
||||
}
|
||||
}
|
||||
|
||||
public override string GetDisplayString()
|
||||
{
|
||||
if (InputAction != null)
|
||||
{
|
||||
return InputAction.GetBindingDisplayString(BindingIndex);
|
||||
}
|
||||
|
||||
return base.GetDisplayString();
|
||||
}
|
||||
|
||||
protected virtual bool IsBindingContains(InputBinding binding)
|
||||
{
|
||||
return true;
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -1,3 +0,0 @@
|
||||
fileFormatVersion: 2
|
||||
guid: 0df4bee5d9b54ada8be3757d7fe02e30
|
||||
timeCreated: 1749634814
|
||||
@@ -1,18 +0,0 @@
|
||||
using UnityEngine.InputSystem;
|
||||
|
||||
namespace NBF.Setting
|
||||
{
|
||||
public abstract class KeyBoardOption : InputOption
|
||||
{
|
||||
protected override bool IsBindingContains(InputBinding binding)
|
||||
{
|
||||
var path = binding.path;
|
||||
if (path.Contains("<Keyboard>") || path.Contains("<Mouse>"))
|
||||
{
|
||||
return true;
|
||||
}
|
||||
|
||||
return false;
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -1,3 +0,0 @@
|
||||
fileFormatVersion: 2
|
||||
guid: 509d2fb0106b42b79854cca29707207d
|
||||
timeCreated: 1749634771
|
||||
@@ -1,63 +0,0 @@
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using UnityEngine;
|
||||
|
||||
namespace NBF.Setting
|
||||
{
|
||||
public interface IMultiOption : IOptionBase
|
||||
{
|
||||
List<string> GetOptionNames();
|
||||
}
|
||||
|
||||
public abstract class MultiOption<T> : OptionBase, IMultiOption
|
||||
{
|
||||
protected OptionTable<T> OptionTable = new OptionTable<T>();
|
||||
|
||||
|
||||
protected void AddOption(string name, T value)
|
||||
{
|
||||
OptionTable.Add(name, value);
|
||||
}
|
||||
|
||||
public List<string> GetOptionNames() => OptionTable.GetNames();
|
||||
|
||||
|
||||
protected void SelectOption(T value, int defaultIndex = 0)
|
||||
{
|
||||
SetValue(TryGetIndex(value, out var index) ? index : defaultIndex);
|
||||
}
|
||||
|
||||
protected void SelectOption(Predicate<T> predicate, int defaultIndex = 0)
|
||||
{
|
||||
SetValue(TryGetIndex(predicate, out var index) ? index : defaultIndex);
|
||||
}
|
||||
|
||||
protected bool TryGetIndex(T option, out int index)
|
||||
{
|
||||
return TryGetIndex(entry => entry.Equals(option), out index);
|
||||
}
|
||||
|
||||
protected bool TryGetIndex(Predicate<T> predicate, out int index)
|
||||
{
|
||||
index = -1;
|
||||
|
||||
var entries = OptionTable.GetValues();
|
||||
|
||||
for (var i = 0; i < entries.Count; i++)
|
||||
{
|
||||
if (!predicate(entries[i])) continue;
|
||||
index = i;
|
||||
return true;
|
||||
}
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
public T GetSelectedOption() => OptionTable.GetValue(Value);
|
||||
|
||||
public override string GetDisplayString()
|
||||
{
|
||||
return OptionTable.GetName(Value);
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -1,3 +0,0 @@
|
||||
fileFormatVersion: 2
|
||||
guid: 5b25650e359243468131db1f9b951ae7
|
||||
timeCreated: 1748571045
|
||||
@@ -1,115 +0,0 @@
|
||||
using UnityEngine;
|
||||
|
||||
namespace NBF.Setting
|
||||
{
|
||||
public interface IOptionBase
|
||||
{
|
||||
string Name { get; }
|
||||
void Initialize(ISettings root);
|
||||
void Apply();
|
||||
int GetValue();
|
||||
void SetValue(int index);
|
||||
bool HaveNotApple();
|
||||
ISettings Root { get; }
|
||||
string GetDisplayString();
|
||||
}
|
||||
|
||||
public abstract class OptionBase : IOptionBase
|
||||
{
|
||||
protected string SaveKey => $"Setting_{Group}_{Name}";
|
||||
|
||||
public abstract string Name { get; }
|
||||
|
||||
/// <summary>
|
||||
/// 所在组
|
||||
/// </summary>
|
||||
public abstract string Group { get; }
|
||||
|
||||
/// <summary>
|
||||
/// 所在分切页
|
||||
/// </summary>
|
||||
public abstract string Tab { get; }
|
||||
|
||||
/// <summary>
|
||||
/// 默认值
|
||||
/// </summary>
|
||||
protected abstract int DefaultValue { get; }
|
||||
|
||||
/// <summary>
|
||||
/// 当前的值
|
||||
/// </summary>
|
||||
protected int Value;
|
||||
|
||||
/// <summary>
|
||||
/// 保存的值
|
||||
/// </summary>
|
||||
protected int SaveValue;
|
||||
|
||||
public virtual bool HaveNotApple()
|
||||
{
|
||||
return !Value.Equals(SaveValue);
|
||||
}
|
||||
|
||||
public ISettings Root { get; private set; }
|
||||
|
||||
|
||||
public void Initialize(ISettings root)
|
||||
{
|
||||
Root = root;
|
||||
Load();
|
||||
OnInitialize();
|
||||
Apply();
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 加载用户的设置
|
||||
/// </summary>
|
||||
public virtual void Load()
|
||||
{
|
||||
var value = PlayerPrefs.GetInt(SaveKey, DefaultValue);
|
||||
Value = value;
|
||||
SaveValue = value;
|
||||
}
|
||||
|
||||
public virtual void Apply()
|
||||
{
|
||||
PlayerPrefs.SetInt(SaveKey, Value);
|
||||
SaveValue = Value;
|
||||
OnApply();
|
||||
}
|
||||
|
||||
public virtual void Reset()
|
||||
{
|
||||
Value = DefaultValue;
|
||||
}
|
||||
|
||||
public virtual void Cancel()
|
||||
{
|
||||
|
||||
}
|
||||
|
||||
|
||||
public virtual string GetDisplayString()
|
||||
{
|
||||
return GetValue().ToString();
|
||||
}
|
||||
|
||||
public virtual int GetValue()
|
||||
{
|
||||
return Value;
|
||||
}
|
||||
|
||||
public virtual void SetValue(int value)
|
||||
{
|
||||
Value = value;
|
||||
}
|
||||
|
||||
|
||||
protected virtual void OnInitialize()
|
||||
{
|
||||
}
|
||||
|
||||
|
||||
protected abstract void OnApply();
|
||||
}
|
||||
}
|
||||
@@ -1,3 +0,0 @@
|
||||
fileFormatVersion: 2
|
||||
guid: dd2d6f346b1145debf370bc3ac71bd7e
|
||||
timeCreated: 1748570612
|
||||
@@ -1,44 +0,0 @@
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
|
||||
namespace NBF.Setting
|
||||
{
|
||||
public class OptionTable<T>
|
||||
{
|
||||
public struct OptionEntry
|
||||
{
|
||||
public string Name;
|
||||
public T Value;
|
||||
|
||||
public OptionEntry(string name, T value)
|
||||
{
|
||||
this.Name = name;
|
||||
this.Value = value;
|
||||
}
|
||||
}
|
||||
|
||||
List<OptionEntry> entries = new List<OptionEntry>();
|
||||
|
||||
public void Add(string name, T value)
|
||||
{
|
||||
entries.Add(new OptionEntry(name, value));
|
||||
}
|
||||
|
||||
public List<string> GetNames() => entries.Select(x => x.Name).ToList();
|
||||
public List<T> GetValues() => entries.Select(x => x.Value).ToList();
|
||||
|
||||
public T GetValue(int index)
|
||||
{
|
||||
if (entries == null) return default;
|
||||
if (index < 0 || index >= entries.Count) return default;
|
||||
return entries[index].Value;
|
||||
}
|
||||
|
||||
public string GetName(int index)
|
||||
{
|
||||
if (entries == null) return string.Empty;
|
||||
if (index < 0 || index >= entries.Count) return string.Empty;
|
||||
return entries[index].Name;
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -1,3 +0,0 @@
|
||||
fileFormatVersion: 2
|
||||
guid: a7241b5524db446eb4f73ae3a8d7b0ec
|
||||
timeCreated: 1748571519
|
||||
@@ -1,33 +0,0 @@
|
||||
using System;
|
||||
using System.Globalization;
|
||||
|
||||
namespace NBF.Setting
|
||||
{
|
||||
/// <summary>
|
||||
/// 范围设置
|
||||
/// </summary>
|
||||
public abstract class RangeOption : OptionBase
|
||||
{
|
||||
public abstract int MinValue { get; }
|
||||
public abstract int MaxValue { get; }
|
||||
|
||||
public virtual int ShowRate => 0;
|
||||
|
||||
public override void SetValue(int value)
|
||||
{
|
||||
if (value > MaxValue) value = MaxValue;
|
||||
else if (value < MinValue) value = MinValue;
|
||||
Value = value;
|
||||
}
|
||||
|
||||
public override string GetDisplayString()
|
||||
{
|
||||
if (ShowRate > 0)
|
||||
{
|
||||
return Math.Round(GetValue() / (ShowRate * 1f), 1).ToString(CultureInfo.InvariantCulture);
|
||||
}
|
||||
|
||||
return base.GetDisplayString();
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -1,3 +0,0 @@
|
||||
fileFormatVersion: 2
|
||||
guid: 3531567c76fc48d5939644966fe22057
|
||||
timeCreated: 1748572844
|
||||
@@ -1,15 +0,0 @@
|
||||
namespace NBF.Setting
|
||||
{
|
||||
public abstract class ToggleOption : MultiOption<bool>
|
||||
{
|
||||
protected override void OnInitialize()
|
||||
{
|
||||
AddOption("Off", false);
|
||||
AddOption("On", true);
|
||||
|
||||
SelectOption(DefaultValue == 1);
|
||||
}
|
||||
|
||||
public bool IsEnabled() => GetSelectedOption();
|
||||
}
|
||||
}
|
||||
@@ -1,3 +0,0 @@
|
||||
fileFormatVersion: 2
|
||||
guid: dbcf52430d8b483497f040fe7cbcfa62
|
||||
timeCreated: 1748572278
|
||||
@@ -1,3 +0,0 @@
|
||||
fileFormatVersion: 2
|
||||
guid: b3f3e6458ad24086b8838b3750453007
|
||||
timeCreated: 1748585143
|
||||
@@ -1,3 +0,0 @@
|
||||
fileFormatVersion: 2
|
||||
guid: fc7b116a771640d58d650ff79698f301
|
||||
timeCreated: 1748589438
|
||||
@@ -1,41 +0,0 @@
|
||||
using System;
|
||||
using UnityEngine;
|
||||
using UnityEngine.Rendering.Universal;
|
||||
|
||||
namespace NBF.Setting
|
||||
{
|
||||
/// <summary>
|
||||
/// 全局各向异性纹理过滤模式
|
||||
/// </summary>
|
||||
[Sort(7)]
|
||||
public class AnisotropicModeSetting : MultiOption<AnisotropicFiltering>
|
||||
{
|
||||
public override string Name => "AnisotropicMode";
|
||||
public override string Group => SettingsDef.Group.Graphic;
|
||||
public override string Tab => SettingsDef.Tab.Graphic;
|
||||
|
||||
protected override int DefaultValue => (int)AnisotropicFiltering.Enable;
|
||||
|
||||
protected override void OnInitialize()
|
||||
{
|
||||
var enumValues = Enum.GetValues(typeof(AnisotropicFiltering));
|
||||
foreach (var value in enumValues)
|
||||
{
|
||||
AddOption(value.ToString(), (AnisotropicFiltering)value);
|
||||
}
|
||||
}
|
||||
|
||||
protected override void OnApply()
|
||||
{
|
||||
// 获取当前URP Asset
|
||||
UniversalRenderPipelineAsset URPAsset =
|
||||
QualitySettings.GetRenderPipelineAssetAt(QualitySettings.GetQualityLevel()) as
|
||||
UniversalRenderPipelineAsset;
|
||||
if (URPAsset)
|
||||
{
|
||||
//全局各向异性纹理过滤模式
|
||||
QualitySettings.anisotropicFiltering = GetSelectedOption();
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -1,3 +0,0 @@
|
||||
fileFormatVersion: 2
|
||||
guid: b96e677183324f5d8d01e786a828c0db
|
||||
timeCreated: 1748590207
|
||||
@@ -1,27 +0,0 @@
|
||||
using UnityEngine;
|
||||
|
||||
namespace NBF.Setting
|
||||
{
|
||||
[Sort(1)]
|
||||
public class FullScreenModeSetting : MultiOption<FullScreenMode>
|
||||
{
|
||||
public override string Name => "FullScreenMode";
|
||||
public override string Group => SettingsDef.Group.Graphic;
|
||||
public override string Tab => SettingsDef.Tab.Graphic;
|
||||
protected override int DefaultValue => (int)FullScreenMode.ExclusiveFullScreen;
|
||||
|
||||
protected override void OnInitialize()
|
||||
{
|
||||
AddOption(nameof(FullScreenMode.ExclusiveFullScreen), FullScreenMode.ExclusiveFullScreen);
|
||||
AddOption(nameof(FullScreenMode.Windowed), FullScreenMode.Windowed);
|
||||
AddOption(nameof(FullScreenMode.FullScreenWindow), FullScreenMode.FullScreenWindow);
|
||||
AddOption(nameof(FullScreenMode.MaximizedWindow), FullScreenMode.MaximizedWindow);
|
||||
}
|
||||
|
||||
protected override void OnApply()
|
||||
{
|
||||
// Screen.fullScreenMode = GetSelectedOption();
|
||||
// Debug.Log($"FullScreenMode: {Screen.fullScreenMode} value: {GetSelectedOption()}");
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -1,3 +0,0 @@
|
||||
fileFormatVersion: 2
|
||||
guid: 3a6386dea2d44f3fb004905e688b97d5
|
||||
timeCreated: 1748588770
|
||||
@@ -1,59 +0,0 @@
|
||||
using System;
|
||||
using UnityEngine;
|
||||
using UnityEngine.Rendering.Universal;
|
||||
|
||||
namespace NBF.Setting
|
||||
{
|
||||
public enum AnisotropicLevelEnum
|
||||
{
|
||||
Off = -1,
|
||||
x2 = 2,
|
||||
x4 = 4,
|
||||
x8 = 8,
|
||||
x16 = 16
|
||||
}
|
||||
|
||||
|
||||
/// <summary>
|
||||
/// 全局各向异性过滤限制
|
||||
/// </summary>
|
||||
[Sort(8)]
|
||||
public class GlobalAnisotropicFilteringLimitsSetting : MultiOption<AnisotropicLevelEnum>
|
||||
{
|
||||
public override string Name => "GlobalAnisotropicFilteringLimits";
|
||||
public override string Group => SettingsDef.Group.Graphic;
|
||||
public override string Tab => SettingsDef.Tab.Graphic;
|
||||
protected override int DefaultValue => (int)AnisotropicLevelEnum.x4;
|
||||
|
||||
protected override void OnInitialize()
|
||||
{
|
||||
var enumValues = Enum.GetValues(typeof(AnisotropicLevelEnum));
|
||||
foreach (var value in enumValues)
|
||||
{
|
||||
AddOption(value.ToString(), (AnisotropicLevelEnum)value);
|
||||
}
|
||||
}
|
||||
|
||||
protected override void OnApply()
|
||||
{
|
||||
// 获取当前URP Asset
|
||||
UniversalRenderPipelineAsset URPAsset =
|
||||
QualitySettings.GetRenderPipelineAssetAt(QualitySettings.GetQualityLevel()) as
|
||||
UniversalRenderPipelineAsset;
|
||||
if (URPAsset)
|
||||
{
|
||||
var current = QualitySettings.anisotropicFiltering;
|
||||
var level = GetSelectedOption();
|
||||
if (current == AnisotropicFiltering.Disable ||
|
||||
current == AnisotropicFiltering.Enable)
|
||||
{
|
||||
Texture.SetGlobalAnisotropicFilteringLimits(-1, -1);
|
||||
}
|
||||
else if (current == AnisotropicFiltering.ForceEnable)
|
||||
{
|
||||
Texture.SetGlobalAnisotropicFilteringLimits((int)level, (int)level);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -1,3 +0,0 @@
|
||||
fileFormatVersion: 2
|
||||
guid: 6937878e8f61426687c62e26252e9258
|
||||
timeCreated: 1748590403
|
||||
@@ -1,46 +0,0 @@
|
||||
using System;
|
||||
using UnityEngine;
|
||||
using UnityEngine.Rendering.Universal;
|
||||
|
||||
namespace NBF.Setting
|
||||
{
|
||||
public enum MsaaSampleEnum
|
||||
{
|
||||
Off = 1,
|
||||
x2 = 2,
|
||||
x4 = 4,
|
||||
x8 = 8
|
||||
}
|
||||
|
||||
[Sort(6)]
|
||||
public class MsaaSampleSetting : MultiOption<MsaaSampleEnum>
|
||||
{
|
||||
public override string Name => "MsaaSample";
|
||||
public override string Group => SettingsDef.Group.Graphic;
|
||||
public override string Tab => SettingsDef.Tab.Graphic;
|
||||
protected override int DefaultValue => (int)MsaaSampleEnum.Off;
|
||||
|
||||
protected override void OnInitialize()
|
||||
{
|
||||
var enumValues = Enum.GetValues(typeof(MsaaSampleEnum));
|
||||
foreach (var value in enumValues)
|
||||
{
|
||||
AddOption(value.ToString(), (MsaaSampleEnum)value);
|
||||
}
|
||||
}
|
||||
|
||||
protected override void OnApply()
|
||||
{
|
||||
// 获取当前URP Asset
|
||||
UniversalRenderPipelineAsset URPAsset =
|
||||
QualitySettings.GetRenderPipelineAssetAt(QualitySettings.GetQualityLevel()) as
|
||||
UniversalRenderPipelineAsset;
|
||||
if (URPAsset)
|
||||
{
|
||||
//抗锯齿等级
|
||||
URPAsset.msaaSampleCount = (int)GetSelectedOption();
|
||||
URPAsset.supportsHDR = true;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -1,3 +0,0 @@
|
||||
fileFormatVersion: 2
|
||||
guid: ae51922900c9429cb0de97b473a3429e
|
||||
timeCreated: 1748589774
|
||||
@@ -1,34 +0,0 @@
|
||||
using UnityEngine;
|
||||
|
||||
namespace NBF.Setting
|
||||
{
|
||||
/// <summary>
|
||||
/// 画质设置
|
||||
/// </summary>
|
||||
[Sort(3)]
|
||||
public class QualityLevelSetting : MultiOption<int>
|
||||
{
|
||||
private int _defaultQualityLevel;
|
||||
public override string Name => "QualityLevel";
|
||||
public override string Group => SettingsDef.Group.Graphic;
|
||||
public override string Tab => SettingsDef.Tab.Graphic;
|
||||
protected override int DefaultValue => _defaultQualityLevel;
|
||||
|
||||
protected override void OnInitialize()
|
||||
{
|
||||
var names = QualitySettings.names;
|
||||
|
||||
for (int i = 0; i < names.Length; i++)
|
||||
{
|
||||
AddOption(names[i], i);
|
||||
}
|
||||
|
||||
_defaultQualityLevel = QualitySettings.GetQualityLevel();
|
||||
}
|
||||
|
||||
protected override void OnApply()
|
||||
{
|
||||
QualitySettings.SetQualityLevel(GetSelectedOption());
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -1,3 +0,0 @@
|
||||
fileFormatVersion: 2
|
||||
guid: 470180f8a41b4856bf3318bc60f2abf1
|
||||
timeCreated: 1748588124
|
||||
@@ -1,38 +0,0 @@
|
||||
using System;
|
||||
using UnityEngine;
|
||||
using UnityEngine.Rendering.Universal;
|
||||
|
||||
namespace NBF.Setting
|
||||
{
|
||||
[Sort(5)]
|
||||
public class RenderScaleSetting : RangeOption
|
||||
{
|
||||
public override string Name => "RenderScale";
|
||||
public override string Group => SettingsDef.Group.Graphic;
|
||||
public override string Tab => SettingsDef.Tab.Graphic;
|
||||
public override int MinValue => 1;
|
||||
public override int MaxValue => 20;
|
||||
|
||||
protected override int DefaultValue => 10;
|
||||
|
||||
public override int ShowRate => 10;
|
||||
|
||||
protected override void OnInitialize()
|
||||
{
|
||||
SetValue(10);
|
||||
}
|
||||
|
||||
protected override void OnApply()
|
||||
{
|
||||
// 获取当前URP Asset
|
||||
UniversalRenderPipelineAsset URPAsset =
|
||||
QualitySettings.GetRenderPipelineAssetAt(QualitySettings.GetQualityLevel()) as
|
||||
UniversalRenderPipelineAsset;
|
||||
if (URPAsset)
|
||||
{
|
||||
//渲染比例
|
||||
URPAsset.renderScale = (float)Math.Round(GetValue() / 10f, 1);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -1,3 +0,0 @@
|
||||
fileFormatVersion: 2
|
||||
guid: e54edac5d4fe4dbda2da5bce433482dc
|
||||
timeCreated: 1748589449
|
||||
@@ -1,64 +0,0 @@
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using NBC;
|
||||
using UnityEngine;
|
||||
|
||||
namespace NBF.Setting
|
||||
{
|
||||
/// <summary>
|
||||
/// 分辨率设置
|
||||
/// </summary>
|
||||
[Sort(2)]
|
||||
public class ResolutionSetting : MultiOption<Resolution>
|
||||
{
|
||||
private int _defaultResolution;
|
||||
public override string Name => "Resolution";
|
||||
public override string Group => SettingsDef.Group.Graphic;
|
||||
protected override int DefaultValue => _defaultResolution;
|
||||
public override string Tab => SettingsDef.Tab.Graphic;
|
||||
|
||||
protected override void OnInitialize()
|
||||
{
|
||||
var supportedResolutions = Screen.resolutions
|
||||
.GroupBy(r => $"{r.width}x{r.height}") // 按宽高分组
|
||||
.Select(g => g.OrderByDescending(r => r.refreshRateRatio).First())
|
||||
.ToArray();
|
||||
foreach (var resolution in supportedResolutions)
|
||||
{
|
||||
if (resolution.width < 720 || resolution.height < 720) continue;
|
||||
AddOption($"{resolution.width}x{resolution.height}", resolution);
|
||||
Log.Info($"Resolution {resolution.width}x{resolution.height}");
|
||||
}
|
||||
|
||||
TryGetIndex(t =>
|
||||
t.width == Screen.currentResolution.width && t.height == Screen.currentResolution.height,
|
||||
out _defaultResolution);
|
||||
|
||||
if (_defaultResolution < 0)
|
||||
{
|
||||
_defaultResolution = 0;
|
||||
}
|
||||
}
|
||||
|
||||
protected override void OnApply()
|
||||
{
|
||||
var resolution = GetSelectedOption();
|
||||
Log.Info($"Screen.fullScreenMode {Screen.fullScreenMode}");
|
||||
var mode = FullScreenMode.ExclusiveFullScreen;
|
||||
var screenMode = Root.GetSettingOption<FullScreenModeSetting>();
|
||||
if (screenMode != null)
|
||||
{
|
||||
mode = screenMode.GetSelectedOption();
|
||||
}
|
||||
|
||||
if (mode == FullScreenMode.ExclusiveFullScreen)
|
||||
{
|
||||
Screen.SetResolution(Screen.currentResolution.width, Screen.currentResolution.height, mode);
|
||||
}
|
||||
else
|
||||
{
|
||||
Screen.SetResolution(resolution.width, resolution.height, mode);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -1,3 +0,0 @@
|
||||
fileFormatVersion: 2
|
||||
guid: 08fa420645764519a7a960565464a708
|
||||
timeCreated: 1748586208
|
||||
@@ -1,45 +0,0 @@
|
||||
using System;
|
||||
using UnityEngine;
|
||||
using UnityEngine.Rendering.Universal;
|
||||
|
||||
namespace NBF.Setting
|
||||
{
|
||||
public enum TextureQualityEnum
|
||||
{
|
||||
FullRes = 0,
|
||||
HalfRes = 1,
|
||||
QuarterRes = 2,
|
||||
EighthRes = 3
|
||||
}
|
||||
|
||||
[Sort(9)]
|
||||
public class TextureQualitySetting : MultiOption<TextureQualityEnum>
|
||||
{
|
||||
public override string Name => "TextureQuality";
|
||||
public override string Group => SettingsDef.Group.Graphic;
|
||||
protected override int DefaultValue => (int)TextureQualityEnum.FullRes;
|
||||
public override string Tab => SettingsDef.Tab.Graphic;
|
||||
|
||||
protected override void OnInitialize()
|
||||
{
|
||||
var enumValues = Enum.GetValues(typeof(TextureQualityEnum));
|
||||
foreach (var value in enumValues)
|
||||
{
|
||||
AddOption(value.ToString(), (TextureQualityEnum)value);
|
||||
}
|
||||
}
|
||||
|
||||
protected override void OnApply()
|
||||
{
|
||||
// 获取当前URP Asset
|
||||
UniversalRenderPipelineAsset URPAsset =
|
||||
QualitySettings.GetRenderPipelineAssetAt(QualitySettings.GetQualityLevel()) as
|
||||
UniversalRenderPipelineAsset;
|
||||
if (URPAsset)
|
||||
{
|
||||
//纹理质量
|
||||
QualitySettings.globalTextureMipmapLimit = (int)GetSelectedOption();
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -1,3 +0,0 @@
|
||||
fileFormatVersion: 2
|
||||
guid: d7ca1e2468b24b6285be9176ae024864
|
||||
timeCreated: 1748590058
|
||||
@@ -1,23 +0,0 @@
|
||||
using UnityEngine;
|
||||
|
||||
namespace NBF.Setting
|
||||
{
|
||||
/// <summary>
|
||||
/// 垂直同步
|
||||
/// </summary>
|
||||
[Sort(4)]
|
||||
public class VSyncSetting : ToggleOption
|
||||
{
|
||||
public override string Name => "VSync";
|
||||
|
||||
public override string Group => SettingsDef.Group.Graphic;
|
||||
public override string Tab => SettingsDef.Tab.Graphic;
|
||||
protected override int DefaultValue => 0;
|
||||
|
||||
protected override void OnApply()
|
||||
{
|
||||
//垂直同步
|
||||
QualitySettings.vSyncCount = GetSelectedOption() ? 1 : 0;
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -1,3 +0,0 @@
|
||||
fileFormatVersion: 2
|
||||
guid: 00628a08aaac416796a4018119e77cc6
|
||||
timeCreated: 1748585191
|
||||
@@ -1,3 +0,0 @@
|
||||
fileFormatVersion: 2
|
||||
guid: 9f72256d425749e3a05fd57c209d057d
|
||||
timeCreated: 1749539093
|
||||
@@ -1,17 +0,0 @@
|
||||
using UnityEngine.InputSystem;
|
||||
|
||||
namespace NBF.Setting
|
||||
{
|
||||
public class InputAddBobSetting : KeyBoardOption
|
||||
{
|
||||
public override string Name => "InputAddBob";
|
||||
public override string Group => SettingsDef.Group.Keyboard;
|
||||
public override string Tab => SettingsDef.Tab.Keyboard;
|
||||
|
||||
public override InputAction InputAction => InputManager.PlayerInputControl.Player.AddBob;
|
||||
|
||||
protected override void OnApply()
|
||||
{
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -1,3 +0,0 @@
|
||||
fileFormatVersion: 2
|
||||
guid: 673bfd453717403998342a57e58b9b3a
|
||||
timeCreated: 1749634714
|
||||
@@ -1,19 +0,0 @@
|
||||
using UnityEngine.InputSystem;
|
||||
|
||||
namespace NBF.Setting
|
||||
{
|
||||
public class InputChatSetting : KeyBoardOption
|
||||
{
|
||||
private int _defaultKey;
|
||||
public override string Name => "InputChat";
|
||||
public override string Group => SettingsDef.Group.Keyboard;
|
||||
public override string Tab => SettingsDef.Tab.Keyboard;
|
||||
|
||||
public override InputAction InputAction => InputManager.PlayerInputControl.Player.Chat;
|
||||
|
||||
protected override void OnApply()
|
||||
{
|
||||
// PlayerInputControl.PlayerActions
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -1,3 +0,0 @@
|
||||
fileFormatVersion: 2
|
||||
guid: a63f66ee0a384cf0a163c33dfa2f3c36
|
||||
timeCreated: 1750308320
|
||||
@@ -1,18 +0,0 @@
|
||||
using UnityEngine.InputSystem;
|
||||
|
||||
namespace NBF.Setting
|
||||
{
|
||||
public class InputHelpSetting : KeyBoardOption
|
||||
{
|
||||
public override string Name => "InputHelp";
|
||||
public override string Group => SettingsDef.Group.Keyboard;
|
||||
public override string Tab => SettingsDef.Tab.Keyboard;
|
||||
|
||||
public override InputAction InputAction => InputManager.PlayerInputControl.Player.Help;
|
||||
|
||||
protected override void OnApply()
|
||||
{
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
@@ -1,3 +0,0 @@
|
||||
fileFormatVersion: 2
|
||||
guid: 7b77e15344964a9ab0b1ecafcad3d03d
|
||||
timeCreated: 1750308298
|
||||
@@ -1,17 +0,0 @@
|
||||
using UnityEngine.InputSystem;
|
||||
|
||||
namespace NBF.Setting
|
||||
{
|
||||
public class InputSubBobSetting : KeyBoardOption
|
||||
{
|
||||
public override string Name => "InputSubBob";
|
||||
public override string Group => SettingsDef.Group.Keyboard;
|
||||
public override string Tab => SettingsDef.Tab.Keyboard;
|
||||
|
||||
public override InputAction InputAction => InputManager.PlayerInputControl.Player.SubBob;
|
||||
|
||||
protected override void OnApply()
|
||||
{
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -1,3 +0,0 @@
|
||||
fileFormatVersion: 2
|
||||
guid: ea72a2c910474d5ca4e96d2c881797d8
|
||||
timeCreated: 1750307386
|
||||
@@ -1,17 +0,0 @@
|
||||
using UnityEngine.InputSystem;
|
||||
|
||||
namespace NBF.Setting
|
||||
{
|
||||
public class InputToBagSetting : KeyBoardOption
|
||||
{
|
||||
public override string Name => "InputToBag";
|
||||
public override string Group => SettingsDef.Group.Keyboard;
|
||||
public override string Tab => SettingsDef.Tab.Keyboard;
|
||||
|
||||
public override InputAction InputAction => InputManager.PlayerInputControl.Player.ToBag;
|
||||
|
||||
protected override void OnApply()
|
||||
{
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -1,3 +0,0 @@
|
||||
fileFormatVersion: 2
|
||||
guid: 906eac0772874939a5223e1115d5dfe0
|
||||
timeCreated: 1750308244
|
||||
@@ -1,19 +0,0 @@
|
||||
using UnityEngine.InputSystem;
|
||||
|
||||
namespace NBF.Setting
|
||||
{
|
||||
public class InputUseTelescopeSetting : KeyBoardOption
|
||||
{
|
||||
public override string Name => "InputUseTelescope";
|
||||
public override string Group => SettingsDef.Group.Keyboard;
|
||||
public override string Tab => SettingsDef.Tab.Keyboard;
|
||||
|
||||
public override InputAction InputAction => InputManager.PlayerInputControl.Player.UseTelescope;
|
||||
|
||||
protected override void OnApply()
|
||||
{
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
}
|
||||
@@ -1,3 +0,0 @@
|
||||
fileFormatVersion: 2
|
||||
guid: 24089404fdb7424284ecafcd23d1537f
|
||||
timeCreated: 1750308215
|
||||
@@ -1,18 +0,0 @@
|
||||
using UnityEngine.InputSystem;
|
||||
|
||||
namespace NBF.Setting
|
||||
{
|
||||
public class InputUseTorchSetting : KeyBoardOption
|
||||
{
|
||||
public override string Name => "InputUseTorch";
|
||||
public override string Group => SettingsDef.Group.Keyboard;
|
||||
public override string Tab => SettingsDef.Tab.Keyboard;
|
||||
|
||||
public override InputAction InputAction => InputManager.PlayerInputControl.Player.UseTorch;
|
||||
|
||||
protected override void OnApply()
|
||||
{
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
@@ -1,3 +0,0 @@
|
||||
fileFormatVersion: 2
|
||||
guid: 12a79769a6534afa8212293adfa1e48a
|
||||
timeCreated: 1750307422
|
||||
@@ -1,3 +0,0 @@
|
||||
fileFormatVersion: 2
|
||||
guid: 03ec1dd2a17344dcb27d9f06c7dbbc34
|
||||
timeCreated: 1748590602
|
||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user