73 lines
1.9 KiB
C#
73 lines
1.9 KiB
C#
#if UNITY_EDITOR
|
|
using UnityCodeGen;
|
|
using UnityEditor;
|
|
using UnityEngine;
|
|
|
|
namespace Code.Infrastructure.Generators
|
|
{
|
|
[Generator]
|
|
public class AudioMixerGenerator : ICodeGenerator
|
|
{
|
|
public void Execute(GeneratorContext context)
|
|
{
|
|
var Enum = TypeCache.GetTypesWithAttribute<AudioMixerEnum>();
|
|
|
|
var initializedCode = "";
|
|
var serviceCode = "";
|
|
var interfacesUsingsCode = $@"
|
|
// using Code.Infrastructure.Audio;
|
|
";
|
|
|
|
foreach (var en in Enum)
|
|
{
|
|
if (!en.IsEnum) return;
|
|
|
|
var members = en.GetFields();
|
|
|
|
foreach (var member in members)
|
|
{
|
|
if (member.FieldType.FullName != en.FullName) continue;
|
|
initializedCode += $@"
|
|
_audioMixerGroups.Add({en.FullName}.{member.Name}, _mixer.FindMatchingGroups(""{member.Name}"")[0]);
|
|
|
|
";
|
|
// dictionaryCode += $@"
|
|
//
|
|
// _scenesActions.Add(SceneId.{member.Name},() => _eventBus.RaiseEvent<IOn{member.Name}SceneLoadedHandler>(h=> h.On{member.Name}SceneLoaded()));
|
|
// ";
|
|
}
|
|
|
|
serviceCode += $@"
|
|
#pragma warning disable CS0105
|
|
{interfacesUsingsCode}
|
|
#pragma warning restore CS0105
|
|
namespace Code.Infrastructure.Audio{{
|
|
public partial class AudioService
|
|
{{
|
|
private partial void InitializeMixer(){{
|
|
{initializedCode}
|
|
}}
|
|
}}
|
|
}}";
|
|
}
|
|
//
|
|
// loaderCode = $@"
|
|
// #pragma warning disable CS0105
|
|
// {interfacesUsingsCode}
|
|
// #pragma warning restore CS0105
|
|
//
|
|
// namespace Code.Infrastructure.SceneLoader
|
|
// {{
|
|
// public partial class SceneLoader{{
|
|
// partial void SetupScenesInfo(){{
|
|
// {dictionaryCode}
|
|
// }}
|
|
// }}
|
|
// {initializedCode}
|
|
// }}
|
|
// ";
|
|
context.AddCode($"AudioMixer.Generated.cs", serviceCode);
|
|
}
|
|
}
|
|
}
|
|
#endif |