#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(); 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(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