#if UNITY_EDITOR using UnityCodeGen; using UnityEditor; namespace Code.Infrastructure.Generators { [Generator] public class AudioMixerGenerator : ICodeGenerator { public void Execute(GeneratorContext context) { var Enum = TypeCache.GetTypesWithAttribute(); 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]); "; } serviceCode += $@" #pragma warning disable CS0105 {interfacesUsingsCode} #pragma warning restore CS0105 namespace Code.Infrastructure.Audio{{ public partial class AudioService {{ private partial void InitializeMixer(){{ {initializedCode} }} }} }}"; } context.AddCode($"AudioMixer.Generated.cs", serviceCode); } } } #endif