init
This commit is contained in:
@@ -0,0 +1,129 @@
|
||||
using GeometryTD.CustomEvent;
|
||||
using GeometryTD.Definition;
|
||||
using GeometryTD.Procedure;
|
||||
using GameFramework.Event;
|
||||
using UnityGameFramework.Runtime;
|
||||
|
||||
namespace GeometryTD.UI
|
||||
{
|
||||
public class MenuFormController : UIFormControllerCommonBase<MenuFormContext, MenuForm>
|
||||
{
|
||||
private MenuFormUseCase _useCase;
|
||||
|
||||
protected override UIFormType UIFormTypeId => UIFormType.MenuForm;
|
||||
|
||||
protected override void RefreshUI(MenuForm form, MenuFormContext context)
|
||||
{
|
||||
form.RefreshUI(context);
|
||||
}
|
||||
|
||||
protected override void SubscribeCustomEvents()
|
||||
{
|
||||
GameEntry.Event.Subscribe(MenuStartRequestedEventArgs.EventId, OnStartRequested);
|
||||
GameEntry.Event.Subscribe(MenuSettingsRequestedEventArgs.EventId, OnSettingsRequested);
|
||||
GameEntry.Event.Subscribe(MenuExitRequestedEventArgs.EventId, OnExitRequested);
|
||||
}
|
||||
|
||||
protected override void UnsubscribeCustomEvents()
|
||||
{
|
||||
GameEntry.Event.Unsubscribe(MenuStartRequestedEventArgs.EventId, OnStartRequested);
|
||||
GameEntry.Event.Unsubscribe(MenuSettingsRequestedEventArgs.EventId, OnSettingsRequested);
|
||||
GameEntry.Event.Unsubscribe(MenuExitRequestedEventArgs.EventId, OnExitRequested);
|
||||
}
|
||||
|
||||
public override int? OpenUI(object userData = null)
|
||||
{
|
||||
if (userData is MenuFormContext context)
|
||||
{
|
||||
return OpenUIInternal(context);
|
||||
}
|
||||
|
||||
if (userData is MenuFormRawData rawDataFromUserData)
|
||||
{
|
||||
return OpenUI(rawDataFromUserData);
|
||||
}
|
||||
|
||||
if (userData != null)
|
||||
{
|
||||
Log.Warning("MenuFormController.OpenUI() userData type is invalid.");
|
||||
return null;
|
||||
}
|
||||
|
||||
if (_useCase == null)
|
||||
{
|
||||
Log.Error("MenuFormController.OpenUI() useCase is null.");
|
||||
return null;
|
||||
}
|
||||
|
||||
return OpenUI(_useCase.CreateInitialModel());
|
||||
}
|
||||
|
||||
public int? OpenUI(MenuFormRawData rawData)
|
||||
{
|
||||
return OpenUIInternal(BuildContext(rawData));
|
||||
}
|
||||
|
||||
public override void BindUseCase(IUIUseCase useCase)
|
||||
{
|
||||
if (!(useCase is MenuFormUseCase menuFormUseCase))
|
||||
{
|
||||
Log.Error("MenuFormController.BindUseCase() useCase is invalid.");
|
||||
return;
|
||||
}
|
||||
|
||||
_useCase = menuFormUseCase;
|
||||
}
|
||||
|
||||
private void OnStartRequested(object sender, GameEventArgs e)
|
||||
{
|
||||
if (!IsCurrentFormEvent(sender) || !(e is MenuStartRequestedEventArgs))
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
if (GameEntry.Procedure.CurrentProcedure is ProcedureMenu procedureMenu)
|
||||
{
|
||||
procedureMenu.GameStart = true;
|
||||
return;
|
||||
}
|
||||
|
||||
Log.Warning("MenuFormController received start request outside ProcedureMenu.");
|
||||
}
|
||||
|
||||
private void OnSettingsRequested(object sender, GameEventArgs e)
|
||||
{
|
||||
if (!IsCurrentFormEvent(sender) || !(e is MenuSettingsRequestedEventArgs))
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
Log.Warning("Menu settings button click is TODO.");
|
||||
}
|
||||
|
||||
private void OnExitRequested(object sender, GameEventArgs e)
|
||||
{
|
||||
if (!IsCurrentFormEvent(sender) || !(e is MenuExitRequestedEventArgs))
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
UnityGameFramework.Runtime.GameEntry.Shutdown(ShutdownType.Quit);
|
||||
}
|
||||
|
||||
private bool IsCurrentFormEvent(object sender)
|
||||
{
|
||||
return Form != null && ReferenceEquals(sender, Form);
|
||||
}
|
||||
|
||||
private static MenuFormContext BuildContext(MenuFormRawData rawData)
|
||||
{
|
||||
return new MenuFormContext
|
||||
{
|
||||
TitleText = rawData?.TitleText ?? string.Empty,
|
||||
StartButtonText = rawData?.StartButtonText ?? string.Empty,
|
||||
SettingsButtonText = rawData?.SettingsButtonText ?? string.Empty,
|
||||
ExitButtonText = rawData?.ExitButtonText ?? string.Empty
|
||||
};
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,57 @@
|
||||
using GeometryTD.CustomEvent;
|
||||
using GeometryTD.Definition;
|
||||
using GeometryTD.Procedure;
|
||||
using UnityGameFramework.Runtime;
|
||||
|
||||
namespace GeometryTD.UI
|
||||
{
|
||||
public class TestMenuFormController : UIFormControllerCommonBase<TestMenuFormContext, TestMenuForm>
|
||||
{
|
||||
protected override UIFormType UIFormTypeId => UIFormType.TestMenuForm;
|
||||
|
||||
protected override void RefreshUI(TestMenuForm form, TestMenuFormContext context)
|
||||
{
|
||||
form.RefreshUI(context);
|
||||
}
|
||||
|
||||
protected override void SubscribeCustomEvents()
|
||||
{
|
||||
}
|
||||
|
||||
protected override void UnsubscribeCustomEvents()
|
||||
{
|
||||
}
|
||||
|
||||
public override int? OpenUI(object userData = null)
|
||||
{
|
||||
if (userData is TestMenuFormContext context)
|
||||
{
|
||||
return OpenUIInternal(context);
|
||||
}
|
||||
|
||||
if (userData != null)
|
||||
{
|
||||
Log.Warning("TestMenuFormController.OpenUI() userData type is invalid.");
|
||||
return null;
|
||||
}
|
||||
|
||||
return OpenUIInternal(BuildDefaultContext());
|
||||
}
|
||||
|
||||
public override void BindUseCase(IUIUseCase useCase)
|
||||
{
|
||||
if (useCase != null)
|
||||
{
|
||||
Log.Warning("TestMenuFormController does not use a use case.");
|
||||
}
|
||||
}
|
||||
|
||||
private static TestMenuFormContext BuildDefaultContext()
|
||||
{
|
||||
return new TestMenuFormContext
|
||||
{
|
||||
CurrentNodeType = RunNodeType.None
|
||||
};
|
||||
}
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user