Меню, дверь, цвет

This commit is contained in:
ThomasCharester committed 2025-11-19 14:45:45 +03:00
1 parent c4ab11488b
commit 5da64a7b3d
29 files changed
+1581 -443

No files matched your search

@@ -2,11 +2,13 @@ using Code.App.StateMachine;
using Code.Audio;
using Code.Gameplay.Camera;
using Code.Gameplay.Camera.CameraStates;
using Code.Gameplay.Door;
using Code.Input;
using Code.Scenes;
using Code.Scenes.SceneEnvironments;
using Code.StateMachine;
using Code.UI;
using Code.UI.Panels;
using Cysharp.Threading.Tasks;
using Reflex.Extensions;
using UnityEngine;
@@ -24,13 +26,14 @@ namespace Code.App.AppStates
{
Context.UIService.LoadingScreen.Show();
Context.CameraStateMachine.SwitchState(CameraMode.Static);
Context.CameraStateMachine.SwitchState(CameraMode.UltraStatic);
#pragma warning disable CS4014 // Because this call is not awaited, execution of the current method continues before the call is completed
WaitForSceneToLoad();
#pragma warning restore CS4014 // Because this call is not awaited, execution of the current method continues before the call is completed
}
private CinematicDoorOpening _damnDoor = new();
private async UniTaskVoid WaitForSceneToLoad()
{
await UniTask.WhenAll(
@@ -42,17 +45,20 @@ namespace Code.App.AppStates
Context.AudioService.TransitToSnapshot(AudioSnapshotState.Menu);
Context.AudioService.PlayRandomMusicUntilHumanityWillBeDestroyedForTheySins(MusicType.Menu);
((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);
_damnDoor.DamnDoor = hui.damnDoor;
_damnDoor.DamnDoor.SetPhysics(false);
_damnDoor.DoorLight = hui.doorLight;
var menuPanel = (MainMenuPanel)Context.UIService.CurrentPanel;
menuPanel.startButton.button.onClick.AddListener(StartGame);
menuPanel.exitButton.button.onClick.AddListener(ExitGame);
menuPanel.CinematicDoorOpening = _damnDoor;
((UltraStaticState)Context.CameraStateMachine.CurrentBaseState).SetFollowTransform(hui.cameraPosition);
Context.UIService.LoadingScreen.Hide();
Context.InputService.EnableMap(ActionMappings.MainMenu);
@@ -12,6 +12,7 @@ namespace Code.Gameplay.Camera
{
Bogdan,
Static,
UltraStatic,
FirstPerson,
ThirdPerson,
Cinematic
@@ -10,10 +10,11 @@ namespace Code.Gameplay.Camera
public override void Initialize()
{
States.Add(CameraMode.Static, new StaticState(StateMachineContext));
States.Add(CameraMode.UltraStatic, new UltraStaticState(StateMachineContext));
States.Add(CameraMode.FirstPerson, new FirstPersonState(StateMachineContext));
States.Add(CameraMode.ThirdPerson, new ThirdPersonState(StateMachineContext));
CurrentBaseState = States[CameraMode.Static];
CurrentBaseState = States[CameraMode.UltraStatic];
}
@@ -0,0 +1,29 @@
using UnityEngine;
namespace Code.Gameplay.Camera.CameraStates
{
public class UltraStaticState : BaseCameraState, ICameraState
{
public UltraStaticState(CameraStateMachineContext context) : base(context) { }
public override void EnterState()
{
Debug.Log("Ultra static State Enter");
base.EnterState();
}
protected override void HandlePosition(float deltaTime, float zoomInput, Quaternion targetRotation)
{
Camera.transform.position = FollowTransform.position;
}
public CameraMode GetCameraMode() => CameraMode.UltraStatic;
protected override void HandleRotationInput(float deltaTime, Vector3 rotationInput,
out Quaternion targetRotation)
{
if(FollowTransform) Camera.transform.rotation = FollowTransform.rotation;
targetRotation = Camera.transform.rotation;
}
}
}
@@ -0,0 +1,3 @@
fileFormatVersion: 2
guid: 8e4b2fa3af4b4ba78ab79ca154f05fb4
timeCreated: 1763547110
@@ -0,0 +1,3 @@
fileFormatVersion: 2
guid: b7ba7b62b1aa47c48dc82ac8d8e8530e
timeCreated: 1763548306
@@ -0,0 +1,23 @@
using DG.Tweening;
using UnityEngine;
namespace Code.Gameplay.Door
{
public class CinematicDoorOpening
{
public DamnDoor DamnDoor;
public Light DoorLight;
public void PreOpen(bool start)
{
DoorLight.DOColor(start ? Color.yellow : Color.red, 0.2f);
DamnDoor.Petlya.DORotate(new Vector3(0, -40, 0), 1f);
}
public void Close()
{
DamnDoor.Petlya.DORotate(new Vector3(0, 0, 0), 1f);
}
}
}
@@ -0,0 +1,3 @@
fileFormatVersion: 2
guid: deda0339570d44609dd62eafd9c6215f
timeCreated: 1763548908
@@ -0,0 +1,16 @@
using UnityEngine;
namespace Code.Gameplay.Door
{
public class DamnDoor : MonoBehaviour
{
[SerializeField] Rigidbody rigidbody;
[SerializeField] private Transform petlya;
public Transform Petlya => petlya;
public void SetPhysics(bool active)
{
rigidbody.isKinematic = active;
}
}
}
@@ -0,0 +1,3 @@
fileFormatVersion: 2
guid: 50a6b5e332704611b19f5a209d4dbffe
timeCreated: 1763548314
@@ -1,18 +1,21 @@
using Code.Gameplay.Door;
using UnityEngine;
using UnityEngine.Serialization;
using UnityEngine.Experimental.GlobalIllumination;
namespace Code.Scenes.SceneEnvironments
{
[System.Serializable]
public class MainMenuEnvironment : CurrentSceneEnvironment
{
public Transform cameraTarget;
public Transform cameraPosition;
public DamnDoor damnDoor;
public Light doorLight;
public void TransitVariables(MainMenuEnvironment env)
{
cameraTarget = env.cameraTarget;
cameraPosition = env.cameraPosition;
damnDoor = env.damnDoor;
doorLight = env.doorLight;
}
}
}
@@ -0,0 +1,3 @@
fileFormatVersion: 2
guid: 14bf9dd380324bf49ea98fbeb8c94186
timeCreated: 1763550884
@@ -0,0 +1,16 @@
using System;
using UnityEngine;
using UnityEngine.EventSystems;
using UnityEngine.UI;
namespace Code.UI.Panels.Etc
{
public class HoverButton : MonoBehaviour, IPointerEnterHandler, IPointerExitHandler
{
public Button button;
public Action OnPointerEnterEvent, OnPointerExitEvent;
public void OnPointerEnter(PointerEventData eventData) => OnPointerEnterEvent?.Invoke();
public void OnPointerExit(PointerEventData eventData) => OnPointerExitEvent?.Invoke();
}
}
@@ -0,0 +1,3 @@
fileFormatVersion: 2
guid: f97de34a1f6042128921ad728f153909
timeCreated: 1763550895
@@ -1,12 +1,22 @@
using UnityEngine;
using UnityEngine.UI;
using Code.Gameplay.Door;
using Code.UI.Panels.Etc;
namespace Code.UI
namespace Code.UI.Panels
{
public class MainMenuPanel : UIElement
{
public Button startButton;
public Button exitButton;
public HoverButton startButton;
public HoverButton exitButton;
public CinematicDoorOpening CinematicDoorOpening;
public void Start()
{
startButton.OnPointerEnterEvent = OpenStart;
exitButton.OnPointerEnterEvent = OpenExit;
startButton.OnPointerExitEvent = CloseDoor;
exitButton.OnPointerExitEvent = CloseDoor;
}
public override void Show()
{
}
@@ -14,5 +24,18 @@ namespace Code.UI
public override void Hide()
{
}
private void OpenExit()
{
CinematicDoorOpening.PreOpen(false);
}
private void OpenStart()
{
CinematicDoorOpening.PreOpen(true);
}
private void CloseDoor()
{
CinematicDoorOpening.Close();
}
}
}