82 lines
2.6 KiB
C#
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();
|
|
}
|
|
}
|
|
} |