diff --git a/.idea/.idea.Infra/.idea/workspace.xml b/.idea/.idea.Infra/.idea/workspace.xml index 1e322c8..6d76872 100644 --- a/.idea/.idea.Infra/.idea/workspace.xml +++ b/.idea/.idea.Infra/.idea/workspace.xml @@ -5,31 +5,23 @@ - - - - - - - - + + + + - - - - - - - - - - - - - + + + + + + + + + + - diff --git a/Assets/Code/Infrastructure/Audio/AudioGroupType.cs b/Assets/Code/Infrastructure/Audio/AudioGroupType.cs new file mode 100644 index 0000000..7337cbf --- /dev/null +++ b/Assets/Code/Infrastructure/Audio/AudioGroupType.cs @@ -0,0 +1,11 @@ +using Code.Infrastructure.Generators; + +namespace Code.Infrastructure.Audio +{ + [AudioMixerEnum] + public enum AudioGroupType + { + Master, + + } +} \ No newline at end of file diff --git a/Assets/Code/Infrastructure/Audio/AudioGroupType.cs.meta b/Assets/Code/Infrastructure/Audio/AudioGroupType.cs.meta new file mode 100644 index 0000000..6aa3a81 --- /dev/null +++ b/Assets/Code/Infrastructure/Audio/AudioGroupType.cs.meta @@ -0,0 +1,3 @@ +fileFormatVersion: 2 +guid: 754a72a6b2c140a49a23bf6d39654c94 +timeCreated: 1769609499 \ No newline at end of file diff --git a/Assets/Code/Infrastructure/Audio/AudioInfo.cs b/Assets/Code/Infrastructure/Audio/AudioInfo.cs index e9a4858..73bafcc 100644 --- a/Assets/Code/Infrastructure/Audio/AudioInfo.cs +++ b/Assets/Code/Infrastructure/Audio/AudioInfo.cs @@ -11,9 +11,10 @@ namespace Code.Infrastructure.Audio [ToConfig] public int id; [ToConfig] public AssetReference fileReference; } - [Config("Configs/Audio/AudioSource")] - public class AudioSourcePrefab + [Config("Configs/Audio/AudioServiceSettings")] + public class AudioServiceSettings { - [ToConfig] public AssetReference prefabReference; + [ToConfig] public AssetReference sourcePrefab; + [ToConfig] public AssetReference mixerPrefab; } } diff --git a/Assets/Code/Infrastructure/Audio/AudioService.cs b/Assets/Code/Infrastructure/Audio/AudioService.cs index 238c076..6eb1a54 100644 --- a/Assets/Code/Infrastructure/Audio/AudioService.cs +++ b/Assets/Code/Infrastructure/Audio/AudioService.cs @@ -3,6 +3,7 @@ using System.Threading; using Code.Infrastructure.EventBus; using Cysharp.Threading.Tasks; using UnityEngine; +using UnityEngine.Audio; namespace Code.Infrastructure.Audio { @@ -19,13 +20,15 @@ namespace Code.Infrastructure.Audio CancellationTokenSource cancellationTokenSource, AudioSourceType sourceType = AudioSourceType.NoBlend, AudioSource audioSource = null); } - public class AudioService : IAudioClipsEventHandle, IAudioService + public partial class AudioService : IAudioClipsEventHandle, IAudioService { private EventBus.EventBus _eventBus; private IAudioFactory _audioFactory; private IAudioSourcePool _pool; private Dictionary> _audioClips = new(); + private AudioMixer _mixer; + private Dictionary _audioMixerGroups = new(); public AudioService(EventBus.EventBus eventBus, IAudioFactory audioFactory, IAudioSourcePool pool) { _eventBus = eventBus; @@ -36,8 +39,11 @@ namespace Code.Infrastructure.Audio for (int i = 0; i < typeof(AudioNames).GetEnumValues().Length; i++) _audioClips.Add((AudioNames)i, new Dictionary()); + + InitializeMixer(); } + private partial void InitializeMixer(); public void PlayTest() { _pool.GetSource(AudioSourceType.NoBlend).PlayOneShot(GetClip(AudioNames.UISounds, 0)); diff --git a/Assets/Code/Infrastructure/Audio/AudioSourcePool.cs b/Assets/Code/Infrastructure/Audio/AudioSourcePool.cs index 66d321a..38d7af5 100644 --- a/Assets/Code/Infrastructure/Audio/AudioSourcePool.cs +++ b/Assets/Code/Infrastructure/Audio/AudioSourcePool.cs @@ -33,7 +33,7 @@ namespace Code.Infrastructure.Audio private string _configsLabel; private AsyncOperationHandle> _handles; private AssetReference _sourcePrefabConfigReference; - private AsyncOperationHandle _prefabConfigHandle; + private AsyncOperationHandle _prefabConfigHandle; private AsyncOperationHandle _prefabHandle; private EventBus.EventBus _eventBus; @@ -42,21 +42,21 @@ namespace Code.Infrastructure.Audio _eventBus = eventBus; _configsLabel = configLocator.TryGetManyConfigAssetReferences(); - _sourcePrefabConfigReference = configLocator.TryGetConfigAssetReference(); + _sourcePrefabConfigReference = configLocator.TryGetConfigAssetReference(); LoadConfigs().Forget(); } private async UniTaskVoid LoadConfigs() { - _prefabConfigHandle = Addressables.LoadAssetAsync(_sourcePrefabConfigReference); + _prefabConfigHandle = Addressables.LoadAssetAsync(_sourcePrefabConfigReference); _handles = Addressables.LoadAssetsAsync(_configsLabel); await UniTask.WhenAll( _prefabConfigHandle.ToUniTask(), _handles.ToUniTask()); - _prefabHandle = Addressables.LoadAssetAsync(_prefabConfigHandle.Result.prefabReference); + _prefabHandle = Addressables.LoadAssetAsync(_prefabConfigHandle.Result.sourcePrefab); _settings = _handles.Result.ToDictionary(x => x.sourceType); diff --git a/Assets/Code/Infrastructure/Audio/AudioSourceSettings.cs b/Assets/Code/Infrastructure/Audio/AudioSourceSettings.cs index 936fd6f..81809a7 100644 --- a/Assets/Code/Infrastructure/Audio/AudioSourceSettings.cs +++ b/Assets/Code/Infrastructure/Audio/AudioSourceSettings.cs @@ -9,5 +9,6 @@ namespace Code.Infrastructure.Audio [ToConfig] public float spatialBlend; [ToConfig] public AudioSourceType sourceType; + } } \ No newline at end of file diff --git a/Assets/Code/Infrastructure/Generators/Attributes.cs b/Assets/Code/Infrastructure/Generators/Attributes.cs index 27d4574..1cfc309 100644 --- a/Assets/Code/Infrastructure/Generators/Attributes.cs +++ b/Assets/Code/Infrastructure/Generators/Attributes.cs @@ -46,4 +46,7 @@ namespace Code.Infrastructure.Generators public class SceneIdEnum : Attribute { } + public class AudioMixerEnum : Attribute + { + } } \ No newline at end of file diff --git a/Assets/Code/Infrastructure/Generators/AudioMixerGenerator.cs b/Assets/Code/Infrastructure/Generators/AudioMixerGenerator.cs new file mode 100644 index 0000000..63d7e54 --- /dev/null +++ b/Assets/Code/Infrastructure/Generators/AudioMixerGenerator.cs @@ -0,0 +1,73 @@ +#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 \ No newline at end of file diff --git a/Assets/Code/Infrastructure/Generators/AudioMixerGenerator.cs.meta b/Assets/Code/Infrastructure/Generators/AudioMixerGenerator.cs.meta new file mode 100644 index 0000000..2ec8ebe --- /dev/null +++ b/Assets/Code/Infrastructure/Generators/AudioMixerGenerator.cs.meta @@ -0,0 +1,3 @@ +fileFormatVersion: 2 +guid: c0e1349496af435c8bad4f3a409d8d58 +timeCreated: 1769608573 \ No newline at end of file diff --git a/Assets/Resources_moved/Configs/Audio/AudioSourcePrefabConfig.asset b/Assets/Resources_moved/Configs/Audio/AudioSourcePrefabConfig.asset index 2df6c6d..834db0a 100644 --- a/Assets/Resources_moved/Configs/Audio/AudioSourcePrefabConfig.asset +++ b/Assets/Resources_moved/Configs/Audio/AudioSourcePrefabConfig.asset @@ -12,9 +12,11 @@ MonoBehaviour: m_Script: {fileID: 11500000, guid: ba4d0c0f70786a459b739ae33e66122a, type: 3} m_Name: AudioSourcePrefabConfig m_EditorClassIdentifier: Assembly-CSharp::Code.Infrastructure.Audio.AudioSourcePrefabConfig - prefabReference: + sourcePrefab: m_AssetGUID: 2471ee3760db4ecfe8c313bb2c00daf0 m_SubObjectName: m_SubObjectType: m_SubObjectGUID: + m_CachedAsset: {fileID: 8652297258760236330, guid: 2471ee3760db4ecfe8c313bb2c00daf0, type: 3} + m_CachedGUID: 2471ee3760db4ecfe8c313bb2c00daf0 m_EditorAssetChanged: 0 diff --git a/Assets/UnityCodeGen.Generated/AudioMixer.Generated.cs b/Assets/UnityCodeGen.Generated/AudioMixer.Generated.cs new file mode 100644 index 0000000..77da2a9 --- /dev/null +++ b/Assets/UnityCodeGen.Generated/AudioMixer.Generated.cs @@ -0,0 +1,17 @@ + +#pragma warning disable CS0105 + +// using Code.Infrastructure.Audio; + +#pragma warning restore CS0105 +namespace Code.Infrastructure.Audio{ +public partial class AudioService + { +private partial void InitializeMixer(){ + + _audioMixerGroups.Add(Code.Infrastructure.Audio.AudioGroupType.Master, _mixer.FindMatchingGroups("Master")[0]); + + +} + } +} \ No newline at end of file diff --git a/Assets/UnityCodeGen.Generated/AudioMixer.Generated.cs.meta b/Assets/UnityCodeGen.Generated/AudioMixer.Generated.cs.meta new file mode 100644 index 0000000..3dadaaf --- /dev/null +++ b/Assets/UnityCodeGen.Generated/AudioMixer.Generated.cs.meta @@ -0,0 +1,2 @@ +fileFormatVersion: 2 +guid: a277529887b1e2e4688f63c5c886c6fe \ No newline at end of file diff --git a/Assets/UnityCodeGen.Generated/AudioServiceSettingsConfig.Generated.cs b/Assets/UnityCodeGen.Generated/AudioServiceSettingsConfig.Generated.cs new file mode 100644 index 0000000..0365e0c --- /dev/null +++ b/Assets/UnityCodeGen.Generated/AudioServiceSettingsConfig.Generated.cs @@ -0,0 +1,18 @@ + +#pragma warning disable CS0105 +using UnityEngine.AddressableAssets; +using UnityEngine.AddressableAssets; + +using UnityEngine; +using UnityEngine.AddressableAssets; + +namespace Code.Infrastructure.Audio{ +#pragma warning restore CS0105 +[CreateAssetMenu(fileName = "AudioServiceSettingsConfig", menuName = "Configs/Audio/AudioServiceSettings")] +public class AudioServiceSettingsConfig : ScriptableObject +{ + public UnityEngine.AddressableAssets.AssetReference sourcePrefab; +public UnityEngine.AddressableAssets.AssetReference mixerPrefab; + +} +} diff --git a/Assets/UnityCodeGen.Generated/AudioServiceSettingsConfig.Generated.cs.meta b/Assets/UnityCodeGen.Generated/AudioServiceSettingsConfig.Generated.cs.meta new file mode 100644 index 0000000..1a40500 --- /dev/null +++ b/Assets/UnityCodeGen.Generated/AudioServiceSettingsConfig.Generated.cs.meta @@ -0,0 +1,2 @@ +fileFormatVersion: 2 +guid: 0f74886b687d21842831d79d48f04eee \ No newline at end of file diff --git a/Assets/UnityCodeGen.Generated/AudioSourcePrefabConfig.Generated.cs b/Assets/UnityCodeGen.Generated/AudioSourcePrefabConfig.Generated.cs deleted file mode 100644 index 3470b77..0000000 --- a/Assets/UnityCodeGen.Generated/AudioSourcePrefabConfig.Generated.cs +++ /dev/null @@ -1,16 +0,0 @@ - -#pragma warning disable CS0105 -using UnityEngine.AddressableAssets; - -using UnityEngine; -using UnityEngine.AddressableAssets; - -namespace Code.Infrastructure.Audio{ -#pragma warning restore CS0105 -[CreateAssetMenu(fileName = "AudioSourcePrefabConfig", menuName = "Configs/Audio/AudioSource")] -public class AudioSourcePrefabConfig : ScriptableObject -{ - public UnityEngine.AddressableAssets.AssetReference prefabReference; - -} -} diff --git a/Assets/UnityCodeGen.Generated/AudioSourcePrefabConfig.Generated.cs.meta b/Assets/UnityCodeGen.Generated/AudioSourcePrefabConfig.Generated.cs.meta deleted file mode 100644 index 1bda51f..0000000 --- a/Assets/UnityCodeGen.Generated/AudioSourcePrefabConfig.Generated.cs.meta +++ /dev/null @@ -1,2 +0,0 @@ -fileFormatVersion: 2 -guid: ba4d0c0f70786a459b739ae33e66122a \ No newline at end of file diff --git a/Assets/UnityCodeGen.Generated/Code.Infrastructure.App.AppStateMachine.Generated.cs b/Assets/UnityCodeGen.Generated/Code.Infrastructure.App.AppStateMachine.Generated.cs index 660f016..734a9b6 100644 --- a/Assets/UnityCodeGen.Generated/Code.Infrastructure.App.AppStateMachine.Generated.cs +++ b/Assets/UnityCodeGen.Generated/Code.Infrastructure.App.AppStateMachine.Generated.cs @@ -19,12 +19,12 @@ public partial class AppStateMachine : AbstractStateMachine("SystemConfigsReferences"); - _singleConfigReferences.Add(typeof(Code.Infrastructure.UI.CanvasSettingsConfig), systemConfigsReferences.CanvasSettings); - - _singleConfigReferences.Add(typeof(Code.Infrastructure.Camera.GameCameraConfig), systemConfigsReferences.GameCamera); + _multipleConfigReferences.Add(typeof(Code.Infrastructure.Camera.CameraSettingsConfig), systemConfigsReferences.CameraSettings); _singleConfigReferences.Add(typeof(Code.Infrastructure.Input.InputServiceConfig), systemConfigsReferences.InputService); - _singleConfigReferences.Add(typeof(Code.Infrastructure.Audio.AudioSourcePrefabConfig), systemConfigsReferences.AudioSourcePrefab); - - _multipleConfigReferences.Add(typeof(Code.Infrastructure.Audio.AudioInfoConfig), systemConfigsReferences.AudioInfo); - - _multipleConfigReferences.Add(typeof(Code.Infrastructure.Camera.CameraSettingsConfig), systemConfigsReferences.CameraSettings); - - _multipleConfigReferences.Add(typeof(Code.Infrastructure.UI.UIPanelSettingsConfig), systemConfigsReferences.UIPanelSettings); + _singleConfigReferences.Add(typeof(Code.Infrastructure.Audio.AudioServiceSettingsConfig), systemConfigsReferences.AudioServiceSettings); _multipleConfigReferences.Add(typeof(Code.Infrastructure.Volume.VolumeSettingsConfig), systemConfigsReferences.VolumeSettings); + _multipleConfigReferences.Add(typeof(Code.Infrastructure.UI.UIPanelSettingsConfig), systemConfigsReferences.UIPanelSettings); + + _singleConfigReferences.Add(typeof(Code.Infrastructure.UI.CanvasSettingsConfig), systemConfigsReferences.CanvasSettings); + _multipleConfigReferences.Add(typeof(Code.Infrastructure.Audio.AudioSourceSettingsConfig), systemConfigsReferences.AudioSourceSettings); + _singleConfigReferences.Add(typeof(Code.Infrastructure.Camera.GameCameraConfig), systemConfigsReferences.GameCamera); + _multipleConfigReferences.Add(typeof(Code.Infrastructure.SceneLoader.SceneInfoConfig), systemConfigsReferences.SceneInfo); + _multipleConfigReferences.Add(typeof(Code.Infrastructure.Audio.AudioInfoConfig), systemConfigsReferences.AudioInfo); + //_singleConfigReferences.Add(typeof(ScenesAssetReferences), systemConfigsReferences.scenesAssetReferences); } } diff --git a/Assets/UnityCodeGen.Generated/SystemConfigsReferences.Generated.cs b/Assets/UnityCodeGen.Generated/SystemConfigsReferences.Generated.cs index fbc6c56..9bf01f8 100644 --- a/Assets/UnityCodeGen.Generated/SystemConfigsReferences.Generated.cs +++ b/Assets/UnityCodeGen.Generated/SystemConfigsReferences.Generated.cs @@ -1,15 +1,15 @@ #pragma warning disable CS0105 - using Code.Infrastructure.UI; -using Code.Infrastructure.Camera; + using Code.Infrastructure.Camera; using Code.Infrastructure.Input; using Code.Infrastructure.Audio; +using Code.Infrastructure.Volume; +using Code.Infrastructure.UI; +using Code.Infrastructure.UI; using Code.Infrastructure.Audio; using Code.Infrastructure.Camera; -using Code.Infrastructure.UI; -using Code.Infrastructure.Volume; -using Code.Infrastructure.Audio; using Code.Infrastructure.SceneLoader; +using Code.Infrastructure.Audio; using UnityEngine.AddressableAssets; #pragma warning restore CS0105 @@ -17,16 +17,16 @@ using Code.Infrastructure.SceneLoader; namespace Code.Infrastructure.Configs{ public partial class SystemConfigsReferences { - public AssetReference CanvasSettings; -public AssetReference GameCamera; + public string CameraSettings; public AssetReference InputService; -public AssetReference AudioSourcePrefab; -public string AudioInfo; -public string CameraSettings; -public string UIPanelSettings; +public AssetReference AudioServiceSettings; public string VolumeSettings; +public string UIPanelSettings; +public AssetReference CanvasSettings; public string AudioSourceSettings; +public AssetReference GameCamera; public string SceneInfo; +public string AudioInfo; } }