Files
Infratest/Assets/Code/Infrastructure/Generators/AudioMixerGenerator.cs
T

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