第一批重构,主要是物理迁移脚本和部分命名空间的调整

- 结构上迁移文件,将脚本分成 Base/Runtime/Presentation/Procedure/Editor 五大文件夹
- 调整 DataTable 和 Definition 下脚本的命名空间
- 依据 UI-5层架构设计规范 拆分原先的 UI 到 Runtime 和 Presentation 下
This commit is contained in:
SepComet
2026-06-02 19:12:34 +08:00
parent 56f74eee9a
commit 34c0784190
655 changed files with 1272 additions and 516 deletions
@@ -0,0 +1,8 @@
fileFormatVersion: 2
guid: 3de11b75970e21e47961778ef728a4cb
folderAsset: yes
DefaultImporter:
externalObjects: {}
userData:
assetBundleName:
assetBundleVariant:
@@ -0,0 +1,82 @@
//------------------------------------------------------------
// Game Framework
// Copyright © 2013-2021 Jiang Yin. All rights reserved.
// Homepage: https://gameframework.cn/
// Feedback: mailto:ellan@gameframework.cn
//------------------------------------------------------------
using StarForce;
using UnityEngine;
using UnityEngine.Serialization;
using UnityEngine.UI;
using UnityGameFramework.Runtime;
namespace UI
{
public class AboutForm : UGuiForm
{
[SerializeField] private RectTransform _rectTransform = null;
[SerializeField] private float _scrollSpeed = 1f;
private float _initPosition = 0f;
#if UNITY_2017_3_OR_NEWER
protected override void OnInit(object userData)
#else
protected internal override void OnInit(object userData)
#endif
{
base.OnInit(userData);
CanvasScaler canvasScaler = GetComponentInParent<CanvasScaler>();
if (canvasScaler == null)
{
Log.Warning("Can not find CanvasScaler component.");
return;
}
_initPosition = -0.5f * canvasScaler.referenceResolution.x * Screen.height / Screen.width;
}
#if UNITY_2017_3_OR_NEWER
protected override void OnOpen(object userData)
#else
protected internal override void OnOpen(object userData)
#endif
{
base.OnOpen(userData);
_rectTransform.SetLocalPositionY(_initPosition);
// 换个音乐
GameEntry.Sound.PlayMusic(3);
}
#if UNITY_2017_3_OR_NEWER
protected override void OnClose(bool isShutdown, object userData)
#else
protected internal override void OnClose(bool isShutdown, object userData)
#endif
{
base.OnClose(isShutdown, userData);
// 还原音乐
GameEntry.Sound.PlayMusic(1);
}
#if UNITY_2017_3_OR_NEWER
protected override void OnUpdate(float elapseSeconds, float realElapseSeconds)
#else
protected internal override void OnUpdate(float elapseSeconds, float realElapseSeconds)
#endif
{
base.OnUpdate(elapseSeconds, realElapseSeconds);
_rectTransform.AddLocalPositionY(_scrollSpeed * elapseSeconds);
if (_rectTransform.localPosition.y > _rectTransform.sizeDelta.y - _initPosition)
{
_rectTransform.SetLocalPositionY(_initPosition);
}
}
}
}
@@ -0,0 +1,12 @@
fileFormatVersion: 2
guid: 3d18eec7c2f2d3d4ca59e310ef625db1
timeCreated: 1528026160
licenseType: Pro
MonoImporter:
serializedVersion: 2
defaultReferences: []
executionOrder: 0
icon: {instanceID: 0}
userData:
assetBundleName:
assetBundleVariant:
@@ -0,0 +1,8 @@
fileFormatVersion: 2
guid: 2b9ea0ac3213e6b4da166ad0aebc8ad4
folderAsset: yes
DefaultImporter:
externalObjects: {}
userData:
assetBundleName:
assetBundleVariant:
@@ -0,0 +1,8 @@
namespace UI
{
public class RoleItemContext : UIContext
{
public int RoleId;
public string IconName;
}
}
@@ -0,0 +1,11 @@
fileFormatVersion: 2
guid: 0337fd9faf4a5b44eb95858bff44c015
MonoImporter:
externalObjects: {}
serializedVersion: 2
defaultReferences: []
executionOrder: 0
icon: {instanceID: 0}
userData:
assetBundleName:
assetBundleVariant:
@@ -0,0 +1,8 @@
namespace UI
{
public class RolePropertyAreaContext : UIContext
{
public string RoleName;
public string InitialPropertyText;
}
}
@@ -0,0 +1,11 @@
fileFormatVersion: 2
guid: 8f37335b27f20c647a0a6175226c0b45
MonoImporter:
externalObjects: {}
serializedVersion: 2
defaultReferences: []
executionOrder: 0
icon: {instanceID: 0}
userData:
assetBundleName:
assetBundleVariant:
@@ -0,0 +1,8 @@
fileFormatVersion: 2
guid: 45aad4db21a495446bd48194e1b3b45d
folderAsset: yes
DefaultImporter:
externalObjects: {}
userData:
assetBundleName:
assetBundleVariant:
@@ -0,0 +1,232 @@
//------------------------------------------------------------
// Game Framework
// Copyright © 2013-2021 Jiang Yin. All rights reserved.
// Homepage: https://gameframework.cn/
// Feedback: mailto:ellan@gameframework.cn
//------------------------------------------------------------
using GameFramework;
using TMPro;
using UnityEngine;
using UnityEngine.Serialization;
using UnityEngine.UI;
using UnityGameFramework.Runtime;
namespace UI
{
public class DialogForm : UGuiForm
{
[SerializeField] private TMP_Text _titleText = null;
[SerializeField] private TMP_Text _messageText = null;
[SerializeField] private GameObject[] _modeObjects = null;
[SerializeField] private TMP_Text[] _confirmTexts = null;
[SerializeField] private TMP_Text[] _cancelTexts = null;
[SerializeField] private TMP_Text[] _otherTexts = null;
private int _dialogMode = 1;
private bool _pauseGame = false;
private object _userData = null;
private GameFrameworkAction<object> _onClickConfirmGFAction = null;
private GameFrameworkAction<object> _onClickCancelGFAction = null;
private GameFrameworkAction<object> _onClickOtherGFAction = null;
private DialogFormContext _context = null;
public int DialogMode => _dialogMode;
public bool PauseGame => _pauseGame;
public object UserData => _userData;
public void OnConfirmButtonClick()
{
Close();
if (_onClickConfirmGFAction != null)
{
_onClickConfirmGFAction(_userData);
}
}
public void OnCancelButtonClick()
{
Close();
if (_onClickCancelGFAction != null)
{
_onClickCancelGFAction(_userData);
}
}
public void OnOtherButtonClick()
{
Close();
if (_onClickOtherGFAction != null)
{
_onClickOtherGFAction(_userData);
}
}
#if UNITY_2017_3_OR_NEWER
protected override void OnOpen(object userData)
#else
protected internal override void OnOpen(object userData)
#endif
{
base.OnOpen(userData);
if (userData is DialogFormContext context)
{
RefreshUI(context);
return;
}
if (userData is DialogFormRawData dialogParams)
{
RefreshUI(BuildContext(dialogParams));
return;
}
Log.Warning("DialogForm requires DialogFormContext or DialogParams as userData.");
}
#if UNITY_2017_3_OR_NEWER
protected override void OnClose(bool isShutdown, object userData)
#else
protected internal override void OnClose(bool isShutdown, object userData)
#endif
{
if (_pauseGame)
{
GameEntry.Base.ResumeGame();
}
_dialogMode = 1;
_titleText.text = string.Empty;
_messageText.text = string.Empty;
_pauseGame = false;
_userData = null;
_context = null;
RefreshConfirmText(string.Empty);
_onClickConfirmGFAction = null;
RefreshCancelText(string.Empty);
_onClickCancelGFAction = null;
RefreshOtherText(string.Empty);
_onClickOtherGFAction = null;
base.OnClose(isShutdown, userData);
}
public void RefreshUI(DialogFormContext context)
{
if (context == null)
{
Log.Warning("DialogForm context is invalid.");
return;
}
_context = context;
_dialogMode = context.Mode;
RefreshDialogMode();
_titleText.text = context.Title;
_messageText.text = context.Message;
_pauseGame = context.PauseGame;
RefreshPauseGame();
_userData = context.UserData;
RefreshConfirmText(context.ConfirmText);
_onClickConfirmGFAction = context.OnClickConfirm;
RefreshCancelText(context.CancelText);
_onClickCancelGFAction = context.OnClickCancel;
RefreshOtherText(context.OtherText);
_onClickOtherGFAction = context.OnClickOther;
}
private static DialogFormContext BuildContext(DialogFormRawData rawData)
{
if (rawData == null)
{
return null;
}
return new DialogFormContext
{
Mode = rawData.Mode,
Title = rawData.Title,
Message = rawData.Message,
PauseGame = rawData.PauseGame,
ConfirmText = rawData.ConfirmText,
OnClickConfirm = rawData.OnClickConfirm,
CancelText = rawData.CancelText,
OnClickCancel = rawData.OnClickCancel,
OtherText = rawData.OtherText,
OnClickOther = rawData.OnClickOther,
UserData = rawData.UserData
};
}
private void RefreshDialogMode()
{
for (int i = 1; i <= _modeObjects.Length; i++)
{
_modeObjects[i - 1].SetActive(i == _dialogMode);
}
}
private void RefreshPauseGame()
{
if (_pauseGame)
{
GameEntry.Base.PauseGame();
}
}
private void RefreshConfirmText(string confirmText)
{
if (string.IsNullOrEmpty(confirmText))
{
confirmText = GameEntry.Localization.GetString("Dialog.ConfirmButton");
}
for (int i = 0; i < _confirmTexts.Length; i++)
{
_confirmTexts[i].text = confirmText;
}
}
private void RefreshCancelText(string cancelText)
{
if (string.IsNullOrEmpty(cancelText))
{
cancelText = GameEntry.Localization.GetString("Dialog.CancelButton");
}
for (int i = 0; i < _cancelTexts.Length; i++)
{
_cancelTexts[i].text = cancelText;
}
}
private void RefreshOtherText(string otherText)
{
if (string.IsNullOrEmpty(otherText))
{
otherText = GameEntry.Localization.GetString("Dialog.OtherButton");
}
for (int i = 0; i < _otherTexts.Length; i++)
{
_otherTexts[i].text = otherText;
}
}
}
}
@@ -0,0 +1,12 @@
fileFormatVersion: 2
guid: c04f3be6bab0c7748bc236f9023e47f9
timeCreated: 1528026160
licenseType: Pro
MonoImporter:
serializedVersion: 2
defaultReferences: []
executionOrder: 0
icon: {instanceID: 0}
userData:
assetBundleName:
assetBundleVariant:
@@ -0,0 +1,19 @@
using GameFramework;
namespace UI
{
public class DialogFormContext : UIContext
{
public int Mode;
public string Title;
public string Message;
public bool PauseGame;
public string ConfirmText;
public GameFrameworkAction<object> OnClickConfirm;
public string CancelText;
public GameFrameworkAction<object> OnClickCancel;
public string OtherText;
public GameFrameworkAction<object> OnClickOther;
public object UserData;
}
}
@@ -0,0 +1,11 @@
fileFormatVersion: 2
guid: e9602a461df53c048af85df015fa8cb7
MonoImporter:
externalObjects: {}
serializedVersion: 2
defaultReferences: []
executionOrder: 0
icon: {instanceID: 0}
userData:
assetBundleName:
assetBundleVariant:
@@ -0,0 +1,78 @@
using SepCore.Definition;
using UnityGameFramework.Runtime;
namespace UI
{
public class DialogFormController : UIFormControllerCommonBase<DialogFormContext, DialogForm>
{
protected override UIFormType UIFormTypeId => UIFormType.DialogForm;
protected override void RefreshUI(DialogForm form, DialogFormContext context)
{
form.RefreshUI(context);
}
protected override void CloseLoadedFormDirect(DialogForm form)
{
GameEntry.UI.CloseUIForm(form);
}
private static DialogFormContext BuildContext(DialogFormRawData rawData)
{
if (rawData == null)
{
return null;
}
return new DialogFormContext
{
Mode = rawData.Mode,
Title = rawData.Title,
Message = rawData.Message,
PauseGame = rawData.PauseGame,
ConfirmText = rawData.ConfirmText,
OnClickConfirm = rawData.OnClickConfirm,
CancelText = rawData.CancelText,
OnClickCancel = rawData.OnClickCancel,
OtherText = rawData.OtherText,
OnClickOther = rawData.OnClickOther,
UserData = rawData.UserData
};
}
public int? OpenUI(DialogFormRawData rawData)
{
DialogFormContext context = BuildContext(rawData);
return OpenUIInternal(context);
}
public override int? OpenUI(object userData = null)
{
if (userData is DialogFormContext context)
{
return OpenUIInternal(context);
}
if (userData is DialogFormRawData rawData)
{
return OpenUI(rawData);
}
if (userData != null)
{
Log.Warning("DialogFormController.OpenUI() userData type is invalid.");
return null;
}
return OpenUIInternal(Context);
}
public override void BindUseCase(IUIUseCase useCase)
{
if (useCase != null)
{
Log.Warning("DialogFormController does not use a use case.");
}
}
}
}
@@ -0,0 +1,11 @@
fileFormatVersion: 2
guid: bcea24781fc934c42a5aac696d86f98d
MonoImporter:
externalObjects: {}
serializedVersion: 2
defaultReferences: []
executionOrder: 0
icon: {instanceID: 0}
userData:
assetBundleName:
assetBundleVariant:
@@ -0,0 +1,8 @@
fileFormatVersion: 2
guid: 61587606f17823143b72f971d68ce995
folderAsset: yes
DefaultImporter:
externalObjects: {}
userData:
assetBundleName:
assetBundleVariant:
@@ -0,0 +1,43 @@
using SepCore.Definition;
using UnityEngine;
using UnityEngine.UI;
namespace UI
{
public class IconArea : MonoBehaviour
{
[SerializeField] private Image _board;
[SerializeField] private Image _icon;
public void OnInit(Sprite sprite, ItemRarity rarity)
{
SetIcon(sprite);
SetRarity(rarity);
}
public void SetIcon(Sprite sprite)
{
_icon.sprite = sprite;
}
public void SetRarity(ItemRarity rarity)
{
_board.color = rarity switch
{
ItemRarity.White => Color.white,
ItemRarity.Green => Color.green,
ItemRarity.Blue => Color.blue,
ItemRarity.Purple => Color.magenta,
ItemRarity.Red => Color.red,
_ => Color.clear,
};
}
public void OnReset()
{
SetIcon(null);
SetRarity(ItemRarity.None);
}
}
}
@@ -0,0 +1,11 @@
fileFormatVersion: 2
guid: 578fa91d15f54e74a95ccce338d0a772
MonoImporter:
externalObjects: {}
serializedVersion: 2
defaultReferences: []
executionOrder: 0
icon: {instanceID: 0}
userData:
assetBundleName:
assetBundleVariant:
@@ -0,0 +1,40 @@
using CustomEvent;
using UnityEngine;
using UnityEngine.UI;
namespace UI
{
public class RoleItem : MonoBehaviour
{
[SerializeField] private Image _roleImage = null;
private RoleItemContext _context = null;
public void OnInit(RoleItemContext context)
{
_context = context;
if (_context == null || string.IsNullOrEmpty(_context.IconName))
{
return;
}
GameEntry.SpriteCache.GetSprite(_context.IconName, sprite => _roleImage.sprite = sprite);
}
public void OnReset()
{
_context = null;
}
public void UpdateShowRole()
{
int roleId = _context?.RoleId ?? -1;
GameEntry.Event.Fire(this, MenuSelectRoleSelectedEventArgs.Create(roleId));
}
public void OnConfirmRoleClick()
{
GameEntry.Event.Fire(this, MenuSelectRoleConfirmEventArgs.Create());
}
}
}
@@ -0,0 +1,11 @@
fileFormatVersion: 2
guid: 35de2974f065de547952f8d5cbb9f6fe
MonoImporter:
externalObjects: {}
serializedVersion: 2
defaultReferences: []
executionOrder: 0
icon: {instanceID: 0}
userData:
assetBundleName:
assetBundleVariant:
@@ -0,0 +1,37 @@
using TMPro;
using UnityEngine;
using UnityEngine.UI;
namespace UI
{
public class RolePropertyArea : MonoBehaviour
{
[SerializeField] private TMP_Text _roleNameText;
[SerializeField] private RawImage _roleAvatar;
[SerializeField] private TMP_Text _roleInitialPropertyText;
[SerializeField] private Transform _roleInitialItemParent;
private RolePropertyAreaContext _context;
public void OnInit(RolePropertyAreaContext context)
{
_context = context;
if (_context == null)
{
OnReset();
return;
}
_roleNameText.text = _context.RoleName;
_roleInitialPropertyText.text = _context.InitialPropertyText;
}
public void OnReset(object userData = null)
{
_context = null;
}
}
}
@@ -0,0 +1,11 @@
fileFormatVersion: 2
guid: e82dc413a4cd277429ec1e3f2de69434
MonoImporter:
externalObjects: {}
serializedVersion: 2
defaultReferences: []
executionOrder: 0
icon: {instanceID: 0}
userData:
assetBundleName:
assetBundleVariant:
@@ -0,0 +1,30 @@
using UnityEngine;
using UnityEngine.UI;
namespace UI
{
public class UpdateResourceForm : MonoBehaviour
{
[SerializeField]
private Text m_DescriptionText = null;
[SerializeField]
private Slider m_ProgressSlider = null;
private void Start()
{
}
private void Update()
{
}
public void SetProgress(float progress, string description)
{
m_ProgressSlider.value = progress;
m_DescriptionText.text = description;
}
}
}
@@ -0,0 +1,12 @@
fileFormatVersion: 2
guid: 3d8946ea9933b16499cd11174ad3c410
timeCreated: 1504077253
licenseType: Pro
MonoImporter:
serializedVersion: 2
defaultReferences: []
executionOrder: 0
icon: {instanceID: 0}
userData:
assetBundleName:
assetBundleVariant: