为随机角色卡补 hover 反向链路

新增 SelectRoleClearEventArgs:hover 随机卡时清空选中状态,让上方属性区回到 _randomRoleCard。

- SelectRoleForm.OnRandomHoverEnter 上报事件
- SelectRoleUseCase.ClearSelection 重置 SelectedRoleId 并重建 RawData
- SelectRoleController 订阅事件并刷新 Context
- SelectRoleForm.prefab 随机卡 _onPointerEnterAction 绑定新方法
This commit is contained in:
SepComet
2026-06-16 17:09:21 +08:00
committed by basil
parent 0fb4ff01f9
commit 11621ee1c9
7 changed files with 98 additions and 14 deletions
@@ -0,0 +1,21 @@
using GameFramework;
using GameFramework.Event;
namespace SepCore.Event
{
public class SelectRoleClearEventArgs : GameEventArgs
{
public static readonly int EventId = typeof(SelectRoleClearEventArgs).GetHashCode();
public override int Id => EventId;
public static SelectRoleClearEventArgs Create()
{
return ReferencePool.Acquire<SelectRoleClearEventArgs>();
}
public override void Clear()
{
}
}
}
@@ -0,0 +1,11 @@
fileFormatVersion: 2
guid: af5e47498caf28f4bad0b19945197767
MonoImporter:
externalObjects: {}
serializedVersion: 2
defaultReferences: []
executionOrder: 0
icon: {instanceID: 0}
userData:
assetBundleName:
assetBundleVariant:
@@ -23,6 +23,7 @@ namespace SepCore.UI
{
GameEntry.Event.Subscribe(SelectRoleReturnEventArgs.EventId, OnSelectRoleReturn);
GameEntry.Event.Subscribe(SelectRoleHoverEventArgs.EventId, OnSelectRoleHover);
GameEntry.Event.Subscribe(SelectRoleClearEventArgs.EventId, OnSelectRoleClear);
GameEntry.Event.Subscribe(SelectRoleConfirmEventArgs.EventId, OnSelectRoleConfirm);
}
@@ -30,6 +31,7 @@ namespace SepCore.UI
{
GameEntry.Event.Unsubscribe(SelectRoleReturnEventArgs.EventId, OnSelectRoleReturn);
GameEntry.Event.Unsubscribe(SelectRoleHoverEventArgs.EventId, OnSelectRoleHover);
GameEntry.Event.Unsubscribe(SelectRoleClearEventArgs.EventId, OnSelectRoleClear);
GameEntry.Event.Unsubscribe(SelectRoleConfirmEventArgs.EventId, OnSelectRoleConfirm);
}
@@ -170,6 +172,33 @@ namespace SepCore.UI
await OpenUIAsync(rawData);
}
private void OnSelectRoleClear(object sender, GameEventArgs e)
{
if (e is not SelectRoleClearEventArgs)
{
return;
}
if (!IsCurrentFormEventSender(sender))
{
return;
}
OnSelectRoleClearAsync().Forget();
}
private async UniTaskVoid OnSelectRoleClearAsync()
{
if (_useCase == null)
{
Log.Error("SelectRoleController.OnSelectRoleClearAsync() useCase is null.");
return;
}
SelectRoleRawData rawData = _useCase.ClearSelection();
await OpenUIAsync(rawData);
}
private void OnSelectRoleConfirm(object sender, GameEventArgs e)
{
if (e is not SelectRoleConfirmEventArgs)
@@ -98,5 +98,10 @@ namespace SepCore.UI
{
GameEntry.Event.Fire(this, SelectRoleConfirmEventArgs.Create());
}
public void OnRandomHoverEnter()
{
GameEntry.Event.Fire(this, SelectRoleClearEventArgs.Create());
}
}
}
@@ -30,6 +30,12 @@ namespace SepCore.UI
return BuildModel(roleId);
}
public SelectRoleRawData ClearSelection()
{
SelectedRoleId = 0;
return BuildModel(0);
}
public bool ConfirmSelectedRole()
{
DRRole[] roles = _roleDataTable != null ? _roleDataTable.GetAllDataRows() : null;