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 @@
-
-
-
-
-
-
-
-
+
+
+
+
-
-
-
-
-
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
+
+
-
@@ -83,7 +75,7 @@
-
+
@@ -91,7 +83,7 @@
-
+
@@ -132,6 +124,7 @@
+
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;
}
}