98 lines
2.4 KiB
C#
98 lines
2.4 KiB
C#
#if UNITY_EDITOR
|
|
using Code.Infrastructure.UI;
|
|
using Unity.VisualScripting;
|
|
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();
|
|
}}
|
|
";
|
|
|
|
if(st.HasAttribute(typeof(UIEventOpenClose)))
|
|
{
|
|
fireStatesCode += $@"
|
|
private void FireOpenedEvent()
|
|
{{
|
|
_eventBus.RaiseEvent<I{st.Name}OpenedHandle>(h => h.{st.Name}Opened(this));
|
|
}}
|
|
|
|
private void FireClosedEvent()
|
|
{{
|
|
_eventBus.RaiseEvent<I{st.Name}ClosedHandle>(h => h.{st.Name}Closed());
|
|
}}
|
|
";
|
|
fireStatesInterfacesCode += $@"
|
|
|
|
public interface I{st.Name}OpenedHandle : IGlobalSubscriber
|
|
{{
|
|
void {st.Name}Opened(UIPanel panel);
|
|
}}
|
|
|
|
public interface I{st.Name}ClosedHandle : IGlobalSubscriber
|
|
{{
|
|
void {st.Name}Closed();
|
|
}}
|
|
";
|
|
}
|
|
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 |