71 lines
1.6 KiB
C#
71 lines
1.6 KiB
C#
#if UNITY_EDITOR
|
|
using Code.Infrastructure.UI;
|
|
using UnityCodeGen;
|
|
using UnityEditor;
|
|
|
|
namespace Code.Infrastructure.Generators
|
|
{
|
|
[Generator]
|
|
public class UIPanelEventsGenerator : ICodeGenerator
|
|
{
|
|
public void Execute(GeneratorContext context)
|
|
{
|
|
GenerateStates(context);
|
|
}
|
|
|
|
private void GenerateStates(GeneratorContext context)
|
|
{
|
|
var states = TypeCache.GetTypesDerivedFrom<UIPanel>();
|
|
|
|
foreach (var st in states)
|
|
{
|
|
var fireStatesCode = $@"
|
|
public override void FireCreatedEvent()
|
|
{{
|
|
_eventBus.RaiseEvent<I{st.Name}CreatedHandle>(h => h.{st.Name}Created(this));
|
|
}}
|
|
|
|
public override void FireRemovedEvent()
|
|
{{
|
|
_eventBus.RaiseEvent<I{st.Name}RemovedHandle>(h => h.{st.Name}Removed());
|
|
}}
|
|
";
|
|
var fireStatesInterfacesCode = $@"
|
|
|
|
public interface I{st.Name}CreatedHandle : IGlobalSubscriber
|
|
{{
|
|
void {st.Name}Created(UIPanel panel);
|
|
}}
|
|
|
|
public interface I{st.Name}RemovedHandle : IGlobalSubscriber
|
|
{{
|
|
void {st.Name}Removed();
|
|
}}
|
|
";
|
|
|
|
var statesCode = $@"
|
|
|
|
// retard-generated
|
|
|
|
using Code.Infrastructure.UI;
|
|
using Code.Infrastructure.EventBus;
|
|
using Code.Infrastructure.StateMachine;
|
|
|
|
namespace {st.Namespace}
|
|
{{
|
|
public partial class {st.Name}
|
|
{{
|
|
{fireStatesCode}
|
|
}}
|
|
|
|
{fireStatesInterfacesCode}
|
|
}}
|
|
";
|
|
|
|
|
|
context.AddCode($"{st.FullName}Events.Generated.cs", statesCode);
|
|
}
|
|
}
|
|
}
|
|
}
|
|
#endif |