В инфраструктуре начался сущий кошмар

This commit is contained in:
ThomasCharester committed 2025-11-14 22:21:51 +03:00
1 parent 346dc97fef
commit e67fea2051
51 files changed
+659 -140

No files matched your search

@@ -15,7 +15,7 @@ MonoBehaviour:
m_DefaultGroup: d447fc60305c17a17bf20948ab295a45
m_currentHash:
serializedVersion: 2
Hash: 34399050abff08a61a01aced0e2bdda4
Hash: 7ed5aa0308ed28c84409cb70340524a8
m_OptimizeCatalogSize: 0
m_BuildRemoteCatalog: 0
m_CatalogRequestsTimeout: 0
@@ -35,16 +35,41 @@ MonoBehaviour:
m_ReadOnly: 0
m_SerializedLabels: []
FlaggedDuringContentUpdateRestriction: 0
- m_GUID: 1f79c7b1e492a4ea2a8d666cdead0c52
m_Address: Audio/Dispatcher/take_damage4
m_ReadOnly: 0
m_SerializedLabels: []
FlaggedDuringContentUpdateRestriction: 0
- m_GUID: 2301400160a23924eb27c4bdbe797739
m_Address: 'Audio/Music/Nightmargin (Oneshot OST) - The Prophecy '
m_ReadOnly: 0
m_SerializedLabels: []
FlaggedDuringContentUpdateRestriction: 0
- m_GUID: 23e11d2c8a4f12f4ea9a7a43d1118464
m_Address: Gameplay
m_ReadOnly: 0
m_SerializedLabels: []
FlaggedDuringContentUpdateRestriction: 0
- m_GUID: 29bff8011973e4e519906b9da8fca0fc
m_Address: Audio/Dispatcher/late3
m_ReadOnly: 0
m_SerializedLabels: []
FlaggedDuringContentUpdateRestriction: 0
- m_GUID: 29ee630aab7bbef8799dc76ed0c239f7
m_Address: Audio/Dispatcher/late4
m_ReadOnly: 0
m_SerializedLabels: []
FlaggedDuringContentUpdateRestriction: 0
- m_GUID: 2f6134357dc2a5641a846a7478ce4c2c
m_Address: bravo!
m_ReadOnly: 0
m_SerializedLabels: []
FlaggedDuringContentUpdateRestriction: 0
- m_GUID: 31f16c866d3224ab8a7e0fabf3745ec5
m_Address: Audio/Dispatcher/late5
m_ReadOnly: 0
m_SerializedLabels: []
FlaggedDuringContentUpdateRestriction: 0
- m_GUID: 3831a36e0c8e48f659517a6bb99378b6
m_Address: cbar_hit1
m_ReadOnly: 0
@@ -55,6 +80,21 @@ MonoBehaviour:
m_ReadOnly: 0
m_SerializedLabels: []
FlaggedDuringContentUpdateRestriction: 0
- m_GUID: 4bd64d1fcecc9c6b09d81e78b7dcfebe
m_Address: Audio/Dispatcher/take_damage1
m_ReadOnly: 0
m_SerializedLabels: []
FlaggedDuringContentUpdateRestriction: 0
- m_GUID: 735f38402ea347fa381408293503a24e
m_Address: Audio/Dispatcher/receiving_an_order1
m_ReadOnly: 0
m_SerializedLabels: []
FlaggedDuringContentUpdateRestriction: 0
- m_GUID: 7c5caf3ceee44f71588860c5c1fbdbe0
m_Address: Audio/Dispatcher/take_damage3
m_ReadOnly: 0
m_SerializedLabels: []
FlaggedDuringContentUpdateRestriction: 0
- m_GUID: 803e40b883c823b89a91aa8b9d9fc483
m_Address: valve_sound
m_ReadOnly: 0
@@ -65,6 +105,16 @@ MonoBehaviour:
m_ReadOnly: 0
m_SerializedLabels: []
FlaggedDuringContentUpdateRestriction: 0
- m_GUID: 8c2be26d359d54063825fedfad7a493b
m_Address: Audio/Dispatcher/late2
m_ReadOnly: 0
m_SerializedLabels: []
FlaggedDuringContentUpdateRestriction: 0
- m_GUID: 8fa89a492fc3a3768a0f0ba1bb7080e0
m_Address: Audio/Dispatcher/late1
m_ReadOnly: 0
m_SerializedLabels: []
FlaggedDuringContentUpdateRestriction: 0
- m_GUID: 9293380a88bf6736889be29722b94269
m_Address: Audio/AudioSource
m_ReadOnly: 0
@@ -90,6 +140,11 @@ MonoBehaviour:
m_ReadOnly: 0
m_SerializedLabels: []
FlaggedDuringContentUpdateRestriction: 0
- m_GUID: cab4b1ff78dd6b1fba61aa165aa17b4d
m_Address: Audio/Dispatcher/receiving_an_order2
m_ReadOnly: 0
m_SerializedLabels: []
FlaggedDuringContentUpdateRestriction: 0
- m_GUID: ebe18293a5ef86704b23dad3a1786476
m_Address: Half-Life01
m_ReadOnly: 0
@@ -100,6 +155,16 @@ MonoBehaviour:
m_ReadOnly: 0
m_SerializedLabels: []
FlaggedDuringContentUpdateRestriction: 0
- m_GUID: f4b6fa54ecac6cc418f98824491aa17a
m_Address: Audio/Music/SANABI - JUSTICE Is Watching You
m_ReadOnly: 0
m_SerializedLabels: []
FlaggedDuringContentUpdateRestriction: 0
- m_GUID: f74a409bf11b25148ad305acc05b14f5
m_Address: Audio/Dispatcher/take_damage2
m_ReadOnly: 0
m_SerializedLabels: []
FlaggedDuringContentUpdateRestriction: 0
m_ReadOnly: 0
m_Settings: {fileID: 11400000, guid: 2588e84eb64800d0781c574a37fa48d8, type: 2}
m_SchemaSet:
@@ -0,0 +1,28 @@
%YAML 1.1
%TAG !u! tag:unity3d.com,2011:
--- !u!114 &11400000
MonoBehaviour:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 0}
m_Enabled: 1
m_EditorHideFlags: 0
m_Script: {fileID: 11500000, guid: 7e3976da977cb49238499ea3b4c237ae, type: 3}
m_Name: ProfileDataSourceSettings
m_EditorClassIdentifier: Unity.Addressables.Editor::UnityEditor.AddressableAssets.Settings.ProfileDataSourceSettings
profileGroupTypes:
- m_GroupTypePrefix: Built-In
m_Variables:
- m_Suffix: BuildPath
m_Value: '[UnityEngine.AddressableAssets.Addressables.BuildPath]/[BuildTarget]'
- m_Suffix: LoadPath
m_Value: '{UnityEngine.AddressableAssets.Addressables.RuntimePath}/[BuildTarget]'
environments: []
currentEnvironment:
id:
projectId:
projectGenesisId:
name:
isDefault: 0
@@ -0,0 +1,8 @@
fileFormatVersion: 2
guid: 7e2b0e48c9649284a9541c4d1dad59c2
NativeFormatImporter:
externalObjects: {}
mainObjectFileID: 11400000
userData:
assetBundleName:
assetBundleVariant:
@@ -4,26 +4,35 @@ using Code.Gameplay.Camera;
using Code.Gameplay.Player;
using Code.Input;
using Code.Scenes;
using Code.Scenes.SceneEnvironments;
using Code.StateMachine;
using Code.UI;
using Cysharp.Threading.Tasks;
using Reflex.Extensions;
using UnityEngine;
using UnityEngine.InputSystem;
using UnityEngine.SceneManagement;
namespace Code.App.AppStates
{
public class GameplayState : BaseState<AppStateMachineContext>
{
// DEBUG
private Transform _testSFXTransform;
// DEBUG
private PlayerHealth _playerHealth;
private PlayerMoney _playerMoney;
private bool _uiLoaded, _sceneLoaded, _onGameplayMusicLoaded, _onActionMusicLoaded;
private bool _uiLoaded, _sceneLoaded, _onGameplayMusicLoaded, _onSFXLoaded;
public GameplayState(AppStateMachineContext context) : base(context)
{
}
public override void EnterState()
{
_uiLoaded = _sceneLoaded = _onActionMusicLoaded = _onGameplayMusicLoaded = false;
_uiLoaded = _sceneLoaded = _onGameplayMusicLoaded = _onSFXLoaded = false;
Context.UIService.LoadingScreen.Show();
@@ -32,52 +41,101 @@ namespace Code.App.AppStates
_playerHealth.OnDeath += EndGame;
Context.SceneLoaderService.LoadSceneAsync((int)SceneIds.MovementDev, callBack: OnSceneLoaded); // TODO Фабрика игрока Nada
// TODO
// Context.SceneLoaderService.LoadSceneAsync((int)SceneIds.MovementDev, callBack: OnSceneLoaded); // TODO Фабрика игрока Nada
Context.UIService.SwitchPanelTo(UIPanel.Gameplay, callback: PostUILoaded);
// Context.UIService.SwitchPanelTo(UIPanel.Gameplay, callback: PostUILoaded);
Context.AudioFactory.WarmGameplayMusic(OnGameplayMusicLoaded);
// Context.AudioFactory.WarmGameplayMusic(OnGameplayMusicLoaded);
// Context.AudioFactory.WarmSFX(OnSFXLoaded);
// TODO
Context.AudioService.TransitToSnapshot(AudioSnapshotState.Peaceful);
Context.InputService.DebugBindAction((int)ActionMappings.Debug, (int)DebugActions.GiveHealth, GiveHealth);
Context.InputService.DebugBindAction((int)ActionMappings.Debug, (int)DebugActions.GiveMoney, GiveMoney);
Context.InputService.DebugBindAction((int)ActionMappings.Debug, (int)DebugActions.LooseHealth, LooseHealth);
Context.InputService.DebugBindAction((int)ActionMappings.Debug, (int)DebugActions.LooseMoney, LooseMoney);
}
private void OnGameplayMusicLoaded()
{
_onGameplayMusicLoaded = true;
// Context.AudioService.();
CheckIfLoaded();
}
private void OnSceneLoaded()
{
_sceneLoaded = true;
CheckIfLoaded();
Context.InputService.DebugBindAction((int)ActionMappings.Debug, (int)DebugActions.Debug1, GiveHealth);
Context.InputService.DebugBindAction((int)ActionMappings.Debug, (int)DebugActions.Debug3, GiveMoney);
Context.InputService.DebugBindAction((int)ActionMappings.Debug, (int)DebugActions.Debug2, LooseHealth);
Context.InputService.DebugBindAction((int)ActionMappings.Debug, (int)DebugActions.Debug4, LooseMoney);
Context.InputService.DebugBindAction((int)ActionMappings.Debug, (int)DebugActions.Debug5, PlayDebugSFX);
WaitForSceneToLoad();
}
private void PostUILoaded()
private async UniTaskVoid WaitForSceneToLoad()
{
await UniTask.WhenAll(
Context.SceneLoaderService.LoadSceneAsyncAwaitable((int)SceneIds.MovementDev),
Context.UIService.AsyncSwitchPanelTo(UIPanel.Gameplay),
Context.AudioFactory.WarmGameplayMusic(),
Context.AudioFactory.WarmSFX()
);
Context.AudioService.PlayRandomPeacefulMusicUntilHumanityWillBeDestroyedForTheySins();
Context.AudioService.PlayRandomActionMusicUntilHumanityWillBeDestroyedForTheySins();
var sceneEnvironment = ((GameplaySceneEnvironment)SceneManager.GetActiveScene()
.GetSceneContainer().Resolve<CurrentSceneEnvironment>());
_testSFXTransform = sceneEnvironment.debugSfxTarget;
((GameplayPanel)Context.UIService.CurrentPanel).Initialize(_playerMoney, _playerHealth);
_uiLoaded = true;
CheckIfLoaded();
}
private void CheckIfLoaded()
{
if(!_uiLoaded || !_sceneLoaded) return;
Context.UIService.LoadingScreen.Hide();
Context.CameraStateMachine.SwitchState(CameraMode.FirstPerson);
Context.InputService.EnableMap(ActionMappings.Gameplay);
Context.UIService.LoadingScreen.Hide();
}
// private void OnGameplayMusicLoaded()
// {
// _onGameplayMusicLoaded = true;
//
// Context.AudioService.PlayRandomPeacefulMusicUntilHumanityWillBeDestroyedForTheySins();
// Context.AudioService.PlayRandomActionMusicUntilHumanityWillBeDestroyedForTheySins();
//
// CheckIfLoaded();
// }
// private void OnSFXLoaded()
// {
// _onSFXLoaded = true;
//
// CheckIfLoaded();
// }
// private void OnSceneLoaded()
// {
// _sceneLoaded = true;
//
// var sceneEnvironment = ((GameplaySceneEnvironment)SceneManager.GetActiveScene()
// .GetSceneContainer().Resolve<CurrentSceneEnvironment>());
//
// _testSFXTransform = sceneEnvironment.debugSfxTarget;
//
// CheckIfLoaded();
// }
//
// private void PostUILoaded()
// {
// ((GameplayPanel)Context.UIService.CurrentPanel).Initialize(_playerMoney, _playerHealth);
// _uiLoaded = true;
// CheckIfLoaded();
// }
//
// private void CheckIfLoaded()
// {
// if(!_uiLoaded || !_sceneLoaded || !_onGameplayMusicLoaded || !_onSFXLoaded) return;
//
// Context.UIService.LoadingScreen.Hide();
//
// Context.CameraStateMachine.SwitchState(CameraMode.FirstPerson);
// Context.InputService.EnableMap(ActionMappings.Gameplay);
// }
// Debug
// DEBUG
private void PlayDebugSFX(InputAction.CallbackContext context)
{
Context.AudioService.PlaySFX(SFXSounds.Crowbar, _testSFXTransform.position);
}
private void GiveHealth(InputAction.CallbackContext context)
{
_playerHealth.GetDamage(-1);
@@ -99,7 +157,7 @@ namespace Code.App.AppStates
_playerMoney.LooseMoney(100);
((GameplayPanel)(Context.UIService.CurrentPanel)).CloseDispatcher();
}
// DEBUG
public override void Tick()
{
}
@@ -116,11 +174,13 @@ namespace Code.App.AppStates
_playerMoney = null;
Context.InputService.DisableMap(ActionMappings.Gameplay);
Context.AudioService.GladlyAskToStopGameplayMusic(Context.AudioFactory.ReleaseGameplayMusic);
Context.InputService.DebugUnbindAction((int)ActionMappings.Debug, (int)DebugActions.GiveHealth, GiveHealth);
Context.InputService.DebugUnbindAction((int)ActionMappings.Debug, (int)DebugActions.GiveMoney, GiveHealth);
Context.InputService.DebugUnbindAction((int)ActionMappings.Debug, (int)DebugActions.LooseHealth, LooseHealth);
Context.InputService.DebugUnbindAction((int)ActionMappings.Debug, (int)DebugActions.LooseMoney, LooseMoney);
Context.InputService.DebugUnbindAction((int)ActionMappings.Debug, (int)DebugActions.Debug1, GiveHealth);
Context.InputService.DebugUnbindAction((int)ActionMappings.Debug, (int)DebugActions.Debug3, GiveHealth);
Context.InputService.DebugUnbindAction((int)ActionMappings.Debug, (int)DebugActions.Debug2, LooseHealth);
Context.InputService.DebugUnbindAction((int)ActionMappings.Debug, (int)DebugActions.Debug4, LooseMoney);
Context.InputService.DebugUnbindAction((int)ActionMappings.Debug, (int)DebugActions.Debug5, PlayDebugSFX);
base.ExitState();
}
@@ -7,6 +7,7 @@ using Code.Scenes;
using Code.Scenes.SceneEnvironments;
using Code.StateMachine;
using Code.UI;
using Cysharp.Threading.Tasks;
using Reflex.Extensions;
using UnityEngine;
using UnityEngine.SceneManagement;
@@ -15,47 +16,42 @@ namespace Code.App.AppStates
{
public class MainMenuState : BaseState<AppStateMachineContext>
{
private bool _uiLoaded, _sceneLoaded, _menuMusicLoaded;
// private bool _uiLoaded, _sceneLoaded, _menuMusicLoaded;
public MainMenuState(AppStateMachineContext context) : base(context)
{
}
public override void EnterState()
{
_uiLoaded = _sceneLoaded = _menuMusicLoaded = false;
// _uiLoaded = _sceneLoaded = _menuMusicLoaded = false;
Context.UIService.LoadingScreen.Show();
Context.SceneLoaderService.LoadSceneAsync((int)SceneIds.MainMenu, callBack: SceneLoaded);
Context.UIService.SwitchPanelTo(UIPanel.MainMenu, PostUILoaded);
Context.AudioFactory.WarmMenuMusic(MenuMusicLoaded);
// Context.SceneLoaderService.LoadSceneAsync((int)SceneIds.MainMenu);
//
// Context.UIService.SwitchPanelTo(UIPanel.MainMenu, PostUILoaded);
//
// Context.AudioFactory.WarmMenuMusic(MenuMusicLoaded);
Context.CameraStateMachine.SwitchState(CameraMode.Static);
WaitForSceneToLoad();
}
private void MenuMusicLoaded()
private async UniTaskVoid WaitForSceneToLoad()
{
_menuMusicLoaded = true;
await UniTask.WhenAll(
Context.SceneLoaderService.LoadSceneAsyncAwaitable((int)SceneIds.MainMenu),
Context.UIService.AsyncSwitchPanelTo(UIPanel.MainMenu),
Context.AudioFactory.WarmMenuMusic()
);
Context.AudioService.TransitToSnapshot(AudioSnapshotState.Peaceful);
Context.AudioService.PlayRandomMenuMusicUntilHumanityWillBeDestroyedForTheySins();
CheckIfLoaded();
}
private void PostUILoaded()
{
((MainMenuPanel)Context.UIService.CurrentPanel).startButton.onClick.AddListener(StartGame);
((MainMenuPanel)Context.UIService.CurrentPanel).exitButton.onClick.AddListener(ExitGame);
_uiLoaded = true;
CheckIfLoaded();
}
private void SceneLoaded()
{
var hui = ((MainMenuEnvironment)SceneManager.GetActiveScene()
.GetSceneContainer().Resolve<CurrentSceneEnvironment>());
@@ -64,22 +60,56 @@ namespace Code.App.AppStates
((BaseCameraState)Context.CameraStateMachine.CurrentBaseState).SetFollowTransform(hui.cameraPosition);
_sceneLoaded = true;
CheckIfLoaded();
}
private void CheckIfLoaded()
{
if(!_uiLoaded || !_sceneLoaded || !_menuMusicLoaded) return;
Context.UIService.LoadingScreen.Hide();
Context.InputService.EnableMap(ActionMappings.MainMenu);
base.EnterState();
}
// private void MenuMusicLoaded()
// {
// _menuMusicLoaded = true;
//
// Context.AudioService.TransitToSnapshot(AudioSnapshotState.Peaceful);
// Context.AudioService.PlayRandomMenuMusicUntilHumanityWillBeDestroyedForTheySins();
//
// CheckIfLoaded();
// }
// private void PostUILoaded()
// {
// ((MainMenuPanel)Context.UIService.CurrentPanel).startButton.onClick.AddListener(StartGame);
// ((MainMenuPanel)Context.UIService.CurrentPanel).exitButton.onClick.AddListener(ExitGame);
//
// _uiLoaded = true;
//
// CheckIfLoaded();
// }
//
// private void SceneLoaded()
// {
// var hui = ((MainMenuEnvironment)SceneManager.GetActiveScene()
// .GetSceneContainer().Resolve<CurrentSceneEnvironment>());
//
// ((StaticState)Context.CameraStateMachine.CurrentBaseState).LookTarget =
// hui.cameraTarget;
//
// ((BaseCameraState)Context.CameraStateMachine.CurrentBaseState).SetFollowTransform(hui.cameraPosition);
//
//
// _sceneLoaded = true;
//
// CheckIfLoaded();
// }
//
// private void CheckIfLoaded()
// {
// if(!_uiLoaded || !_sceneLoaded || !_menuMusicLoaded) return;
//
// Context.UIService.LoadingScreen.Hide();
//
// Context.InputService.EnableMap(ActionMappings.MainMenu);
//
// base.EnterState();
// }
public override void Tick()
{
@@ -79,18 +79,13 @@ namespace Code.App
containerBuilder.AddSingleton(staticDataService.SFXListConfig, typeof(SFXListConfig));
containerBuilder.AddSingleton(staticDataService.DispatcherSoundListConfig, typeof(DispatcherSoundListConfig));
containerBuilder.AddSingleton(staticDataService.EnemiesSoundListConfig, typeof(EnemiesSoundListConfig));
// containerBuilder.AddSingleton(staticDataService.UIConfig.canvasPrefab, typeof(Canvas));
// containerBuilder.AddSingleton(staticDataService.UIConfig.uiElementsPrefabs, typeof(UIElement[]));
}
private bool _onAudioLoaded;
private AppStateMachine _appStateMachine;
private void Bootstrap(Container container)
{
container.Resolve<IAudioFactory>();
IAudioService audioService = container.Resolve<IAudioService>();
audioService.Initialize(OnAudioLoaded);
_appStateMachine = container.Resolve<AppStateMachine>();
_appStateMachine.Initialize();
AttributeInjector.Inject(_appStateMachine.StateMachineContext, container);
@@ -98,28 +93,24 @@ namespace Code.App
CameraStateMachine cameraStateMachine = container.Resolve<CameraStateMachine>();
AttributeInjector.Inject(cameraStateMachine.StateMachineContext, container);
cameraStateMachine.Initialize();
BootstrapFinish(container);
}
private async UniTaskVoid BootstrapFinish(Container container)
{
// container.Resolve<IAudioFactory>();
var loadingScreen = GameObject.FindWithTag(Tags.LoadingScreen);
DontDestroyOnLoad(loadingScreen);
IUIService uiService = container.Resolve<IUIService>();
uiService.Initialize(loadingScreen.GetComponent<LoadingScreen>());
await UniTask.WhenAll(
container.Resolve<IUIService>().Initialize(loadingScreen.GetComponent<LoadingScreen>()),
container.Resolve<IAudioService>().Initialize()
);
}
private void TryStartGame()
{
if (!_onAudioLoaded) return;
// TODO: поменяно для теста
_appStateMachine
.SwitchState(AppState.MainMenu)
.AllowStateTransition(AppState.Gameplay);
}
private void OnAudioLoaded()
{
_onAudioLoaded = true;
TryStartGame();
}
}
}
@@ -0,0 +1,26 @@
using Code.Scenes;
using Code.Scenes.SceneEnvironments;
using Reflex.Core;
using UnityEngine;
namespace Code.App.SceneInstallers
{
public class GameplaySceneInstaller : MonoBehaviour, IInstaller
{
[SerializeField] private GameplaySceneEnvironment _gameplaySceneEnvironment;
public void InstallBindings(ContainerBuilder containerBuilder)
{
containerBuilder.AddScoped(typeof(GameplaySceneEnvironment), typeof(CurrentSceneEnvironment));
containerBuilder.OnContainerBuilt += Initialize;
}
private void Initialize(Container container)
{
GameplaySceneEnvironment env = (GameplaySceneEnvironment)container.Resolve<CurrentSceneEnvironment>();
env.TransitVariables(_gameplaySceneEnvironment);
}
}
}
@@ -0,0 +1,3 @@
fileFormatVersion: 2
guid: 88584fd4361b46f6a7326440cd95ce69
timeCreated: 1763144580
@@ -2,6 +2,7 @@ using Code.Scenes;
using Code.Scenes.SceneEnvironments;
using Reflex.Core;
using UnityEngine;
using UnityEngine.Serialization;
namespace Code.App.SceneInstallers
{
@@ -66,14 +66,13 @@ namespace Code.Audio
public async UniTask LoadAudioSourcePrefab(Action<GameObject> callback) =>
callback?.Invoke(await Addressables.LoadAssetAsync<GameObject>(_audioSourcePrefab));
public async UniTaskVoid WarmGameplayMusic(Action callback)
public async UniTask WarmGameplayMusic( )
{
_actionMusicHandle = Addressables.LoadAssetsAsync<AudioClip>(_actionSoundtrack, OnActionTrackLoaded);
_peacefulMusicHandle = Addressables.LoadAssetsAsync<AudioClip>(_peacefulSoundtrack, OnPeacefulTrackLoaded);
_actionMusicHandle = Addressables.LoadAssetsAsync<AudioClip>(_actionSoundtrack, OnActionTrackLoaded, Addressables.MergeMode.None);
_peacefulMusicHandle = Addressables.LoadAssetsAsync<AudioClip>(_peacefulSoundtrack, OnPeacefulTrackLoaded, Addressables.MergeMode.None);
await UniTask.WhenAll(_actionMusicHandle.ToUniTask(), _peacefulMusicHandle.ToUniTask());
callback?.Invoke();
}
public void ReleaseGameplayMusic()
@@ -85,13 +84,12 @@ namespace Code.Audio
_peacefulMusicHandle.Release();
}
public async UniTaskVoid WarmMenuMusic(Action callback)
public async UniTask WarmMenuMusic( )
{
_menuMusicHandle = Addressables.LoadAssetsAsync<AudioClip>(_menuSoundtrack, OnMenuTrackLoaded, Addressables.MergeMode.None);
// foreach (var assetReference in _menuSoundtrack) MenuMusic.Add(await assetReference.LoadAssetAsync<AudioClip>());
await _menuMusicHandle.ToUniTask();
callback?.Invoke();
}
public void ReleaseMenuMusic()
@@ -100,13 +98,12 @@ namespace Code.Audio
// foreach (var assetReference in _menuSoundtrack) assetReference.ReleaseAsset();
_menuMusicHandle.Release();
}
public async UniTaskVoid WarmSFX(Action callback)
public async UniTask WarmSFX( )
{
_SFXHandle = Addressables.LoadAssetsAsync<AudioClip>(_SFX, OnSFXLoaded);
_SFXHandle = Addressables.LoadAssetsAsync<AudioClip>(_SFX, OnSFXLoaded, Addressables.MergeMode.None);
await _SFXHandle.ToUniTask();
callback?.Invoke();
}
public void ReleaseSFX()
@@ -114,13 +111,12 @@ namespace Code.Audio
SFXAudios.Clear();
_SFXHandle.Release();
}
public async UniTaskVoid WarmEnemies(Action callback)
public async UniTask WarmEnemies( )
{
_enemiesHandle = Addressables.LoadAssetsAsync<AudioClip>(_enemies, OnEnemiesLoaded);
_enemiesHandle = Addressables.LoadAssetsAsync<AudioClip>(_enemies, OnEnemiesLoaded, Addressables.MergeMode.None);
await _enemiesHandle.ToUniTask();
callback?.Invoke();
}
public void ReleaseEnemies()
@@ -129,13 +125,12 @@ namespace Code.Audio
_enemiesHandle.Release();
}
public async UniTaskVoid WarmDispatcher(Action callback)
public async UniTask WarmDispatcher( )
{
_dispatcherHandle = Addressables.LoadAssetsAsync<AudioClip>(_dispatcher, OnDispatcherLoaded);
_dispatcherHandle = Addressables.LoadAssetsAsync<AudioClip>(_dispatcher, OnDispatcherLoaded, Addressables.MergeMode.None);
await _dispatcherHandle.ToUniTask();
callback?.Invoke();
}
public void ReleaseDispatcher()
@@ -40,7 +40,7 @@ namespace Code.Audio
_audioFactory = audioFactory;
}
public async UniTaskVoid Initialize(Action callback)
public async UniTask Initialize()
{
// _mixer = await _audioFactory.CreateMixer();
_mixer = _audioFactory.AudioMixer;
@@ -62,8 +62,6 @@ namespace Code.Audio
await _audioFactory.LoadAudioSourcePrefab(_audioSourcePool.Initialize);
InitializeMusicSources();
callback?.Invoke();
}
private void InitializeMusicSources()
@@ -180,6 +178,20 @@ namespace Code.Audio
callback?.Invoke();
}
public async UniTaskVoid GladlyAskToStopGameplayMusic(Action callback = null)
{
TransitToSnapshot(AudioSnapshotState.None);
await UniTask.WaitForSeconds(1f);
_actionMusicSource.Stop();
_peacefulMusicSource.Stop();
_actionMusicTokenSource.Cancel();
_peacefulMusicTokenSource.Cancel();
callback?.Invoke();
}
public async UniTaskVoid GladlyAskToStopActionMusic(Action callback = null)
{
TransitToSnapshot(AudioSnapshotState.None);
@@ -16,15 +16,15 @@ namespace Code.Audio
List<AudioClip> DispatcherAudios { get; }
AudioMixer AudioMixer { get; }
UniTask LoadAudioSourcePrefab(Action<GameObject> callback);
UniTaskVoid WarmGameplayMusic(Action callback);
UniTask WarmGameplayMusic();
void ReleaseGameplayMusic();
UniTaskVoid WarmMenuMusic(Action callback);
UniTask WarmMenuMusic();
void ReleaseMenuMusic();
UniTaskVoid WarmSFX(Action callback);
UniTask WarmSFX();
void ReleaseSFX();
UniTaskVoid WarmEnemies(Action callback);
UniTask WarmEnemies();
void ReleaseEnemies();
UniTaskVoid WarmDispatcher(Action callback);
UniTask WarmDispatcher();
void ReleaseDispatcher();
}
}
@@ -6,7 +6,7 @@ namespace Code.Audio
{
public interface IAudioService
{
UniTaskVoid Initialize(Action callback);
UniTask Initialize();
void PlayRandomGameplayMusic();
void TransitToSnapshot(AudioSnapshotState state, float time = 1f);
void PlaySFX(SFXSounds sfxId, Vector3 position);
@@ -19,5 +19,8 @@ namespace Code.Audio
UniTaskVoid GladlyAskToStopMenuMusic(Action callback = null);
UniTaskVoid GladlyAskToStopActionMusic(Action callback = null);
UniTaskVoid GladlyAskToStopPeacefulMusic(Action callback = null);
UniTaskVoid PlayRandomPeacefulMusicUntilHumanityWillBeDestroyedForTheySins();
UniTaskVoid PlayRandomActionMusicUntilHumanityWillBeDestroyedForTheySins();
UniTaskVoid GladlyAskToStopGameplayMusic(Action callback = null);
}
}
@@ -8,9 +8,11 @@ namespace Code.Input
}
public enum DebugActions
{
GiveHealth,
LooseHealth,
GiveMoney,
LooseMoney
Debug1,
Debug2,
Debug3,
Debug4,
Debug5,
Debug6
}
}
@@ -7,5 +7,6 @@ namespace Code.Scenes
{
UniTaskVoid LoadSceneAsync(string sceneName, float waitFor = 0f, Action callBack = null);
UniTaskVoid LoadSceneAsync(int sceneId, float waitFor = 0f, Action callBack = null);
UniTask LoadSceneAsyncAwaitable(int sceneId, float waitFor = 0f);
}
}
@@ -0,0 +1,16 @@
using UnityEngine;
using UnityEngine.Serialization;
namespace Code.Scenes.SceneEnvironments
{
[System.Serializable]
public class GameplaySceneEnvironment : CurrentSceneEnvironment
{
[FormerlySerializedAs("sfxTarget")] public Transform debugSfxTarget;
public void TransitVariables(GameplaySceneEnvironment env)
{
debugSfxTarget = env.debugSfxTarget;
}
}
}
@@ -0,0 +1,3 @@
fileFormatVersion: 2
guid: 286a31cf64d54f509b13784d928d8842
timeCreated: 1763144375
@@ -29,5 +29,12 @@ namespace Code.Scenes
SceneManager.LoadSceneAsync(sceneId, LoadSceneMode.Single).ToUniTask());
callBack?.Invoke();
}
public async UniTask LoadSceneAsyncAwaitable(int sceneId, float waitFor = 0)
{
await UniTask.WhenAll(
UniTask.Delay(TimeSpan.FromSeconds(waitFor)),
SceneManager.LoadSceneAsync(sceneId, LoadSceneMode.Single).ToUniTask());
}
}
}
+3 -1
View File
@@ -1,13 +1,15 @@
using System;
using Code.UI.Panels;
using Cysharp.Threading.Tasks;
namespace Code.UI
{
public interface IUIService
{
void SwitchPanelTo(UIPanel uiPanel, Action callback = null);
UniTask AsyncSwitchPanelTo(UIPanel uiPanel);
UIElement CurrentPanel { get; }
LoadingScreen LoadingScreen { get; }
void Initialize(LoadingScreen loadingScreen);
UniTask Initialize(LoadingScreen loadingScreen);
}
}
+12 -3
View File
@@ -12,7 +12,8 @@ namespace Code.UI
{
private Canvas _canvas;
private IUIFactory _factory;
public UIElement CurrentPanel { get; private set; }
public LoadingScreen LoadingScreen { get; private set; }
@@ -22,7 +23,7 @@ namespace Code.UI
_factory = factory;
}
public async void Initialize(LoadingScreen loadingScreen)
public async UniTask Initialize(LoadingScreen loadingScreen)
{
LoadingScreen = loadingScreen;
LoadingScreen.Show();
@@ -30,9 +31,17 @@ namespace Code.UI
_canvas = await _factory.CreateCanvas();
}
public async UniTask AsyncSwitchPanelTo(UIPanel uiPanel)
{
// if (!_canvas) await UniTask.WaitUntil(() => _canvas );
if(CurrentPanel) Addressables.ReleaseInstance(CurrentPanel.gameObject);//Object.Destroy(CurrentPanel.gameObject);
CurrentPanel = await _factory.CreatePanel(_canvas, uiPanel);
}
public async void SwitchPanelTo(UIPanel uiPanel, Action callback = null)
{
if (!_canvas) await UniTask.WaitUntil(() => _canvas );
// if (!_canvas) await UniTask.WaitUntil(() => _canvas );
if(CurrentPanel) Addressables.ReleaseInstance(CurrentPanel.gameObject);//Object.Destroy(CurrentPanel.gameObject);
@@ -28,3 +28,58 @@ MonoBehaviour:
m_SubObjectType:
m_SubObjectGUID:
m_EditorAssetChanged: 1
- m_AssetGUID: 735f38402ea347fa381408293503a24e
m_SubObjectName:
m_SubObjectType:
m_SubObjectGUID:
m_EditorAssetChanged: 0
- m_AssetGUID: cab4b1ff78dd6b1fba61aa165aa17b4d
m_SubObjectName:
m_SubObjectType:
m_SubObjectGUID:
m_EditorAssetChanged: 0
- m_AssetGUID: 4bd64d1fcecc9c6b09d81e78b7dcfebe
m_SubObjectName:
m_SubObjectType:
m_SubObjectGUID:
m_EditorAssetChanged: 0
- m_AssetGUID: f74a409bf11b25148ad305acc05b14f5
m_SubObjectName:
m_SubObjectType:
m_SubObjectGUID:
m_EditorAssetChanged: 0
- m_AssetGUID: 7c5caf3ceee44f71588860c5c1fbdbe0
m_SubObjectName:
m_SubObjectType:
m_SubObjectGUID:
m_EditorAssetChanged: 0
- m_AssetGUID: 1f79c7b1e492a4ea2a8d666cdead0c52
m_SubObjectName:
m_SubObjectType:
m_SubObjectGUID:
m_EditorAssetChanged: 1
- m_AssetGUID: 8fa89a492fc3a3768a0f0ba1bb7080e0
m_SubObjectName:
m_SubObjectType:
m_SubObjectGUID:
m_EditorAssetChanged: 0
- m_AssetGUID: 8c2be26d359d54063825fedfad7a493b
m_SubObjectName:
m_SubObjectType:
m_SubObjectGUID:
m_EditorAssetChanged: 0
- m_AssetGUID: 29bff8011973e4e519906b9da8fca0fc
m_SubObjectName:
m_SubObjectType:
m_SubObjectGUID:
m_EditorAssetChanged: 1
- m_AssetGUID: 29ee630aab7bbef8799dc76ed0c239f7
m_SubObjectName:
m_SubObjectType:
m_SubObjectGUID:
m_EditorAssetChanged: 0
- m_AssetGUID: 31f16c866d3224ab8a7e0fabf3745ec5
m_SubObjectName:
m_SubObjectType:
m_SubObjectGUID:
m_EditorAssetChanged: 0
@@ -25,7 +25,12 @@ MonoBehaviour:
m_SubObjectGUID:
m_EditorAssetChanged: 0
menuSoundtrack:
- m_AssetGUID: 803e40b883c823b89a91aa8b9d9fc483
- m_AssetGUID: 2301400160a23924eb27c4bdbe797739
m_SubObjectName:
m_SubObjectType:
m_SubObjectGUID:
m_EditorAssetChanged: 0
- m_AssetGUID: f4b6fa54ecac6cc418f98824491aa17a
m_SubObjectName:
m_SubObjectType:
m_SubObjectGUID:
@@ -527,6 +527,95 @@ Transform:
m_Children: []
m_Father: {fileID: 0}
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
--- !u!1 &1460292948
GameObject:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
serializedVersion: 6
m_Component:
- component: {fileID: 1460292952}
- component: {fileID: 1460292951}
- component: {fileID: 1460292950}
m_Layer: 0
m_Name: SFXTest
m_TagString: Untagged
m_Icon: {fileID: 0}
m_NavMeshLayer: 0
m_StaticEditorFlags: 0
m_IsActive: 1
--- !u!23 &1460292950
MeshRenderer:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 1460292948}
m_Enabled: 1
m_CastShadows: 1
m_ReceiveShadows: 1
m_DynamicOccludee: 1
m_StaticShadowCaster: 0
m_MotionVectors: 1
m_LightProbeUsage: 1
m_ReflectionProbeUsage: 1
m_RayTracingMode: 2
m_RayTraceProcedural: 0
m_RayTracingAccelStructBuildFlagsOverride: 0
m_RayTracingAccelStructBuildFlags: 1
m_SmallMeshCulling: 1
m_ForceMeshLod: -1
m_MeshLodSelectionBias: 0
m_RenderingLayerMask: 1
m_RendererPriority: 0
m_Materials:
- {fileID: 2100000, guid: 31321ba15b8f8eb4c954353edc038b1d, type: 2}
m_StaticBatchInfo:
firstSubMesh: 0
subMeshCount: 0
m_StaticBatchRoot: {fileID: 0}
m_ProbeAnchor: {fileID: 0}
m_LightProbeVolumeOverride: {fileID: 0}
m_ScaleInLightmap: 1
m_ReceiveGI: 1
m_PreserveUVs: 0
m_IgnoreNormalsForChartDetection: 0
m_ImportantGI: 0
m_StitchLightmapSeams: 1
m_SelectedEditorRenderState: 3
m_MinimumChartSize: 4
m_AutoUVMaxDistance: 0.5
m_AutoUVMaxAngle: 89
m_LightmapParameters: {fileID: 0}
m_GlobalIlluminationMeshLod: 0
m_SortingLayerID: 0
m_SortingLayer: 0
m_SortingOrder: 0
m_AdditionalVertexStreams: {fileID: 0}
--- !u!33 &1460292951
MeshFilter:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 1460292948}
m_Mesh: {fileID: 10202, guid: 0000000000000000e000000000000000, type: 0}
--- !u!4 &1460292952
Transform:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 1460292948}
serializedVersion: 2
m_LocalRotation: {x: 0, y: 0, z: 0, w: 1}
m_LocalPosition: {x: 7.44, y: 2.04, z: 8.13}
m_LocalScale: {x: 1, y: 1, z: 1}
m_ConstrainProportionsScale: 0
m_Children: []
m_Father: {fileID: 0}
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
--- !u!1 &1533098597
GameObject:
m_ObjectHideFlags: 0
@@ -867,6 +956,7 @@ GameObject:
m_Component:
- component: {fileID: 1959874991}
- component: {fileID: 1959874990}
- component: {fileID: 1959874992}
m_Layer: 0
m_Name: SceneScope
m_TagString: Untagged
@@ -901,6 +991,20 @@ Transform:
m_Children: []
m_Father: {fileID: 0}
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
--- !u!114 &1959874992
MonoBehaviour:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 1959874989}
m_Enabled: 1
m_EditorHideFlags: 0
m_Script: {fileID: 11500000, guid: 88584fd4361b46f6a7326440cd95ce69, type: 3}
m_Name:
m_EditorClassIdentifier: Assembly-CSharp::Code.App.SceneInstallers.GameplaySceneInstaller
_gameplaySceneEnvironment:
debugSfxTarget: {fileID: 1460292952}
--- !u!1660057539 &9223372036854775807
SceneRoots:
m_ObjectHideFlags: 0
@@ -910,3 +1014,4 @@ SceneRoots:
- {fileID: 481156070}
- {fileID: 1376862595}
- {fileID: 1543748509}
- {fileID: 1460292952}
@@ -0,0 +1,23 @@
fileFormatVersion: 2
guid: 2301400160a23924eb27c4bdbe797739
AudioImporter:
externalObjects: {}
serializedVersion: 8
defaultSettings:
serializedVersion: 2
loadType: 0
sampleRateSetting: 0
sampleRateOverride: 44100
compressionFormat: 1
quality: 1
conversionMode: 0
preloadAudioData: 0
platformSettingOverrides: {}
forceToMono: 0
normalize: 1
loadInBackground: 0
ambisonic: 0
3D: 1
userData:
assetBundleName:
assetBundleVariant:
@@ -0,0 +1,23 @@
fileFormatVersion: 2
guid: f4b6fa54ecac6cc418f98824491aa17a
AudioImporter:
externalObjects: {}
serializedVersion: 8
defaultSettings:
serializedVersion: 2
loadType: 0
sampleRateSetting: 0
sampleRateOverride: 44100
compressionFormat: 1
quality: 1
conversionMode: 0
preloadAudioData: 0
platformSettingOverrides: {}
forceToMono: 0
normalize: 1
loadInBackground: 0
ambisonic: 0
3D: 1
userData:
assetBundleName:
assetBundleVariant:
@@ -785,7 +785,7 @@
"id": "b3e669ff-e0e0-48cb-9b63-8c54cdbdaa0e",
"actions": [
{
"name": "GiveHealth",
"name": "Debug1",
"type": "Button",
"id": "074d042b-dc5a-4c4b-a9c3-9c969f757a12",
"expectedControlType": "",
@@ -794,7 +794,7 @@
"initialStateCheck": false
},
{
"name": "LooseYourself",
"name": "Debug2",
"type": "Button",
"id": "28cbcb74-1124-4508-8816-689711db5d68",
"expectedControlType": "",
@@ -803,7 +803,7 @@
"initialStateCheck": false
},
{
"name": "GiveMoney",
"name": "Debug3",
"type": "Button",
"id": "77048d98-965a-42fd-8da5-7af8b5adb1fa",
"expectedControlType": "",
@@ -812,13 +812,31 @@
"initialStateCheck": false
},
{
"name": "LooseMoney",
"name": "Debug4",
"type": "Button",
"id": "17325795-103a-477d-baec-95c185880b63",
"expectedControlType": "",
"processors": "",
"interactions": "",
"initialStateCheck": false
},
{
"name": "Debug5",
"type": "Button",
"id": "1dde8e45-159c-471d-8fb1-7c8dddec02ac",
"expectedControlType": "",
"processors": "",
"interactions": "",
"initialStateCheck": false
},
{
"name": "Debug6",
"type": "Button",
"id": "19dacc2e-d804-4f94-980f-c134dcbb7c6e",
"expectedControlType": "",
"processors": "",
"interactions": "",
"initialStateCheck": false
}
],
"bindings": [
@@ -829,7 +847,7 @@
"interactions": "",
"processors": "",
"groups": "",
"action": "GiveHealth",
"action": "Debug1",
"isComposite": false,
"isPartOfComposite": false
},
@@ -840,7 +858,7 @@
"interactions": "",
"processors": "",
"groups": "",
"action": "LooseYourself",
"action": "Debug2",
"isComposite": false,
"isPartOfComposite": false
},
@@ -851,7 +869,7 @@
"interactions": "",
"processors": "",
"groups": "",
"action": "GiveMoney",
"action": "Debug3",
"isComposite": false,
"isPartOfComposite": false
},
@@ -862,7 +880,29 @@
"interactions": "",
"processors": "",
"groups": "",
"action": "LooseMoney",
"action": "Debug4",
"isComposite": false,
"isPartOfComposite": false
},
{
"name": "",
"id": "2268d3a4-6112-4395-9260-b7dc77282357",
"path": "<Keyboard>/5",
"interactions": "",
"processors": "",
"groups": "",
"action": "Debug5",
"isComposite": false,
"isPartOfComposite": false
},
{
"name": "",
"id": "c1b30fc8-baa0-45fd-a901-eda8acc9f6ec",
"path": "<Keyboard>/6",
"interactions": "",
"processors": "",
"groups": "",
"action": "Debug6",
"isComposite": false,
"isPartOfComposite": false
}