Files
CourierOld/Game/CourierOld/Assets/Code/App/AppStates/MainMenuState.cs
T
2025-11-14 23:07:55 +03:00

82 lines
2.6 KiB
C#

using Code.App.StateMachine;
using Code.Audio;
using Code.Gameplay.Camera;
using Code.Gameplay.Camera.CameraStates;
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.SceneManagement;
namespace Code.App.AppStates
{
public class MainMenuState : BaseState<AppStateMachineContext>
{
public MainMenuState(AppStateMachineContext context) : base(context)
{
}
public override void EnterState()
{
Context.UIService.LoadingScreen.Show();
Context.CameraStateMachine.SwitchState(CameraMode.Static);
WaitForSceneToLoad();
}
private async UniTaskVoid WaitForSceneToLoad()
{
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();
((MainMenuPanel)Context.UIService.CurrentPanel).startButton.onClick.AddListener(StartGame);
((MainMenuPanel)Context.UIService.CurrentPanel).exitButton.onClick.AddListener(ExitGame);
var hui = ((MainMenuEnvironment)SceneManager.GetActiveScene()
.GetSceneContainer().Resolve<CurrentSceneEnvironment>());
((StaticState)Context.CameraStateMachine.CurrentBaseState).LookTarget =
hui.cameraTarget;
((BaseCameraState)Context.CameraStateMachine.CurrentBaseState).SetFollowTransform(hui.cameraPosition);
Context.UIService.LoadingScreen.Hide();
Context.InputService.EnableMap(ActionMappings.MainMenu);
}
public override void Tick()
{
}
private void StartGame()
{
Context.StateMachine.SwitchState(AppState.Gameplay)
.AllowStateTransition(AppState.GameOver);
}
private void ExitGame()
{
Application.Quit();
}
public override void ExitState()
{
Context.InputService.DisableMap(ActionMappings.MainMenu);
Context.AudioService.GladlyAskToStopMenuMusic(Context.AudioFactory.ReleaseMenuMusic);
base.ExitState();
}
}
}