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

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

- SelectRoleForm.OnRandomHoverEnter 上报事件
- SelectRoleUseCase.ClearSelection 重置 SelectedRoleId 并重建 RawData
- SelectRoleController 订阅事件并刷新 Context
- SelectRoleForm.prefab 随机卡 _onPointerEnterAction 绑定新方法
This commit is contained in:
SepComet 2026-06-14 17:25:20 +08:00 committed by basil
parent 0fb4ff01f9
commit 11621ee1c9
7 changed files with 98 additions and 14 deletions

View File

@ -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()
{
}
}
}

View File

@ -0,0 +1,11 @@
fileFormatVersion: 2
guid: af5e47498caf28f4bad0b19945197767
MonoImporter:
externalObjects: {}
serializedVersion: 2
defaultReferences: []
executionOrder: 0
icon: {instanceID: 0}
userData:
assetBundleName:
assetBundleVariant:

View File

@ -23,6 +23,7 @@ namespace SepCore.UI
{ {
GameEntry.Event.Subscribe(SelectRoleReturnEventArgs.EventId, OnSelectRoleReturn); GameEntry.Event.Subscribe(SelectRoleReturnEventArgs.EventId, OnSelectRoleReturn);
GameEntry.Event.Subscribe(SelectRoleHoverEventArgs.EventId, OnSelectRoleHover); GameEntry.Event.Subscribe(SelectRoleHoverEventArgs.EventId, OnSelectRoleHover);
GameEntry.Event.Subscribe(SelectRoleClearEventArgs.EventId, OnSelectRoleClear);
GameEntry.Event.Subscribe(SelectRoleConfirmEventArgs.EventId, OnSelectRoleConfirm); GameEntry.Event.Subscribe(SelectRoleConfirmEventArgs.EventId, OnSelectRoleConfirm);
} }
@ -30,6 +31,7 @@ namespace SepCore.UI
{ {
GameEntry.Event.Unsubscribe(SelectRoleReturnEventArgs.EventId, OnSelectRoleReturn); GameEntry.Event.Unsubscribe(SelectRoleReturnEventArgs.EventId, OnSelectRoleReturn);
GameEntry.Event.Unsubscribe(SelectRoleHoverEventArgs.EventId, OnSelectRoleHover); GameEntry.Event.Unsubscribe(SelectRoleHoverEventArgs.EventId, OnSelectRoleHover);
GameEntry.Event.Unsubscribe(SelectRoleClearEventArgs.EventId, OnSelectRoleClear);
GameEntry.Event.Unsubscribe(SelectRoleConfirmEventArgs.EventId, OnSelectRoleConfirm); GameEntry.Event.Unsubscribe(SelectRoleConfirmEventArgs.EventId, OnSelectRoleConfirm);
} }
@ -170,6 +172,33 @@ namespace SepCore.UI
await OpenUIAsync(rawData); 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) private void OnSelectRoleConfirm(object sender, GameEventArgs e)
{ {
if (e is not SelectRoleConfirmEventArgs) if (e is not SelectRoleConfirmEventArgs)

View File

@ -98,5 +98,10 @@ namespace SepCore.UI
{ {
GameEntry.Event.Fire(this, SelectRoleConfirmEventArgs.Create()); GameEntry.Event.Fire(this, SelectRoleConfirmEventArgs.Create());
} }
public void OnRandomHoverEnter()
{
GameEntry.Event.Fire(this, SelectRoleClearEventArgs.Create());
}
} }
} }

View File

@ -30,6 +30,12 @@ namespace SepCore.UI
return BuildModel(roleId); return BuildModel(roleId);
} }
public SelectRoleRawData ClearSelection()
{
SelectedRoleId = 0;
return BuildModel(0);
}
public bool ConfirmSelectedRole() public bool ConfirmSelectedRole()
{ {
DRRole[] roles = _roleDataTable != null ? _roleDataTable.GetAllDataRows() : null; DRRole[] roles = _roleDataTable != null ? _roleDataTable.GetAllDataRows() : null;

View File

@ -748,7 +748,7 @@ GameObject:
- component: {fileID: 402127537566038992} - component: {fileID: 402127537566038992}
- component: {fileID: 7266142669901275671} - component: {fileID: 7266142669901275671}
m_Layer: 5 m_Layer: 5
m_Name: RoleItem m_Name: RandomRole
m_TagString: Untagged m_TagString: Untagged
m_Icon: {fileID: 0} m_Icon: {fileID: 0}
m_NavMeshLayer: 0 m_NavMeshLayer: 0
@ -843,6 +843,18 @@ MonoBehaviour:
m_StringArgument: m_StringArgument:
m_BoolArgument: 0 m_BoolArgument: 0
m_CallState: 2 m_CallState: 2
- m_Target: {fileID: 7510942500789349387}
m_TargetAssemblyTypeName: SepCore.UI.SelectRoleForm, SepCore.Presentation
m_MethodName: OnRandomHoverEnter
m_Mode: 1
m_Arguments:
m_ObjectArgument: {fileID: 0}
m_ObjectArgumentAssemblyTypeName: UnityEngine.Object, UnityEngine
m_IntArgument: 0
m_FloatArgument: 0
m_StringArgument:
m_BoolArgument: 0
m_CallState: 2
_onClickAction: _onClickAction:
m_PersistentCalls: m_PersistentCalls:
m_Calls: m_Calls:
@ -2729,7 +2741,7 @@ PrefabInstance:
type: 3} type: 3}
propertyPath: _onPointerEnterAction.m_PersistentCalls.m_Calls.Array.data[1].m_Target propertyPath: _onPointerEnterAction.m_PersistentCalls.m_Calls.Array.data[1].m_Target
value: value:
objectReference: {fileID: 5201218836764882073} objectReference: {fileID: 4965267041341936459}
- target: {fileID: 3813327180119752992, guid: 78595a129d0438c44b2d52720e9c0edd, - target: {fileID: 3813327180119752992, guid: 78595a129d0438c44b2d52720e9c0edd,
type: 3} type: 3}
propertyPath: _onPointerEnterAction.m_PersistentCalls.m_Calls.Array.data[1].m_CallState propertyPath: _onPointerEnterAction.m_PersistentCalls.m_Calls.Array.data[1].m_CallState
@ -2965,7 +2977,7 @@ PrefabInstance:
type: 3} type: 3}
propertyPath: _onPointerEnterAction.m_PersistentCalls.m_Calls.Array.data[1].m_Target propertyPath: _onPointerEnterAction.m_PersistentCalls.m_Calls.Array.data[1].m_Target
value: value:
objectReference: {fileID: 5201218836764882073} objectReference: {fileID: 8836415805828564547}
- target: {fileID: 3813327180119752992, guid: 78595a129d0438c44b2d52720e9c0edd, - target: {fileID: 3813327180119752992, guid: 78595a129d0438c44b2d52720e9c0edd,
type: 3} type: 3}
propertyPath: _onPointerEnterAction.m_PersistentCalls.m_Calls.Array.data[1].m_CallState propertyPath: _onPointerEnterAction.m_PersistentCalls.m_Calls.Array.data[1].m_CallState
@ -3201,7 +3213,7 @@ PrefabInstance:
type: 3} type: 3}
propertyPath: _onPointerEnterAction.m_PersistentCalls.m_Calls.Array.data[1].m_Target propertyPath: _onPointerEnterAction.m_PersistentCalls.m_Calls.Array.data[1].m_Target
value: value:
objectReference: {fileID: 5201218836764882073} objectReference: {fileID: 7249589387663696490}
- target: {fileID: 3813327180119752992, guid: 78595a129d0438c44b2d52720e9c0edd, - target: {fileID: 3813327180119752992, guid: 78595a129d0438c44b2d52720e9c0edd,
type: 3} type: 3}
propertyPath: _onPointerEnterAction.m_PersistentCalls.m_Calls.Array.data[1].m_CallState propertyPath: _onPointerEnterAction.m_PersistentCalls.m_Calls.Array.data[1].m_CallState
@ -3432,7 +3444,7 @@ PrefabInstance:
type: 3} type: 3}
propertyPath: _onPointerEnterAction.m_PersistentCalls.m_Calls.Array.data[1].m_Target propertyPath: _onPointerEnterAction.m_PersistentCalls.m_Calls.Array.data[1].m_Target
value: value:
objectReference: {fileID: 5201218836764882073} objectReference: {fileID: 7108998779798040682}
- target: {fileID: 3813327180119752992, guid: 78595a129d0438c44b2d52720e9c0edd, - target: {fileID: 3813327180119752992, guid: 78595a129d0438c44b2d52720e9c0edd,
type: 3} type: 3}
propertyPath: _onPointerEnterAction.m_PersistentCalls.m_Calls.Array.data[1].m_CallState propertyPath: _onPointerEnterAction.m_PersistentCalls.m_Calls.Array.data[1].m_CallState
@ -3932,7 +3944,7 @@ PrefabInstance:
type: 3} type: 3}
propertyPath: _onPointerEnterAction.m_PersistentCalls.m_Calls.Array.data[1].m_Target propertyPath: _onPointerEnterAction.m_PersistentCalls.m_Calls.Array.data[1].m_Target
value: value:
objectReference: {fileID: 5201218836764882073} objectReference: {fileID: 1254353399428518429}
- target: {fileID: 3813327180119752992, guid: 78595a129d0438c44b2d52720e9c0edd, - target: {fileID: 3813327180119752992, guid: 78595a129d0438c44b2d52720e9c0edd,
type: 3} type: 3}
propertyPath: _onPointerEnterAction.m_PersistentCalls.m_Calls.Array.data[1].m_CallState propertyPath: _onPointerEnterAction.m_PersistentCalls.m_Calls.Array.data[1].m_CallState
@ -4163,7 +4175,7 @@ PrefabInstance:
type: 3} type: 3}
propertyPath: _onPointerEnterAction.m_PersistentCalls.m_Calls.Array.data[1].m_Target propertyPath: _onPointerEnterAction.m_PersistentCalls.m_Calls.Array.data[1].m_Target
value: value:
objectReference: {fileID: 5201218836764882073} objectReference: {fileID: 1271290373848557919}
- target: {fileID: 3813327180119752992, guid: 78595a129d0438c44b2d52720e9c0edd, - target: {fileID: 3813327180119752992, guid: 78595a129d0438c44b2d52720e9c0edd,
type: 3} type: 3}
propertyPath: _onPointerEnterAction.m_PersistentCalls.m_Calls.Array.data[1].m_CallState propertyPath: _onPointerEnterAction.m_PersistentCalls.m_Calls.Array.data[1].m_CallState
@ -4394,7 +4406,7 @@ PrefabInstance:
type: 3} type: 3}
propertyPath: _onPointerEnterAction.m_PersistentCalls.m_Calls.Array.data[1].m_Target propertyPath: _onPointerEnterAction.m_PersistentCalls.m_Calls.Array.data[1].m_Target
value: value:
objectReference: {fileID: 5201218836764882073} objectReference: {fileID: 319567477725180536}
- target: {fileID: 3813327180119752992, guid: 78595a129d0438c44b2d52720e9c0edd, - target: {fileID: 3813327180119752992, guid: 78595a129d0438c44b2d52720e9c0edd,
type: 3} type: 3}
propertyPath: _onPointerEnterAction.m_PersistentCalls.m_Calls.Array.data[1].m_CallState propertyPath: _onPointerEnterAction.m_PersistentCalls.m_Calls.Array.data[1].m_CallState
@ -4625,7 +4637,7 @@ PrefabInstance:
type: 3} type: 3}
propertyPath: _onPointerEnterAction.m_PersistentCalls.m_Calls.Array.data[1].m_Target propertyPath: _onPointerEnterAction.m_PersistentCalls.m_Calls.Array.data[1].m_Target
value: value:
objectReference: {fileID: 5201218836764882073} objectReference: {fileID: 4146823842836454614}
- target: {fileID: 3813327180119752992, guid: 78595a129d0438c44b2d52720e9c0edd, - target: {fileID: 3813327180119752992, guid: 78595a129d0438c44b2d52720e9c0edd,
type: 3} type: 3}
propertyPath: _onPointerEnterAction.m_PersistentCalls.m_Calls.Array.data[1].m_CallState propertyPath: _onPointerEnterAction.m_PersistentCalls.m_Calls.Array.data[1].m_CallState
@ -4856,7 +4868,7 @@ PrefabInstance:
type: 3} type: 3}
propertyPath: _onPointerEnterAction.m_PersistentCalls.m_Calls.Array.data[1].m_Target propertyPath: _onPointerEnterAction.m_PersistentCalls.m_Calls.Array.data[1].m_Target
value: value:
objectReference: {fileID: 5201218836764882073} objectReference: {fileID: 3893566779691405690}
- target: {fileID: 3813327180119752992, guid: 78595a129d0438c44b2d52720e9c0edd, - target: {fileID: 3813327180119752992, guid: 78595a129d0438c44b2d52720e9c0edd,
type: 3} type: 3}
propertyPath: _onPointerEnterAction.m_PersistentCalls.m_Calls.Array.data[1].m_CallState propertyPath: _onPointerEnterAction.m_PersistentCalls.m_Calls.Array.data[1].m_CallState

View File

@ -261,10 +261,10 @@ MonoBehaviour:
_onClickAction: _onClickAction:
m_PersistentCalls: m_PersistentCalls:
m_Calls: m_Calls:
- m_Target: {fileID: 0} - m_Target: {fileID: 6873972826773845199}
m_TargetAssemblyTypeName: UI.UGuiForm, Assembly-CSharp m_TargetAssemblyTypeName: SepCore.UI.RoleItem, SepCore.Presentation
m_MethodName: PlayUISound m_MethodName: OnHoverEnter
m_Mode: 3 m_Mode: 1
m_Arguments: m_Arguments:
m_ObjectArgument: {fileID: 0} m_ObjectArgument: {fileID: 0}
m_ObjectArgumentAssemblyTypeName: UnityEngine.Object, UnityEngine m_ObjectArgumentAssemblyTypeName: UnityEngine.Object, UnityEngine