Интерфейс, конфиги камер
This commit is contained in:
1 parent
efad72b4d9
commit
e5f4f292c2
66 files changed
+11465
-9059
No files matched your search
@@ -1,41 +1,51 @@
|
||||
using Code.App.Loading;
|
||||
using Code.App.StateMachine;
|
||||
using Code.Scenes;
|
||||
using Code.StateMachine;
|
||||
using Code.UI;
|
||||
using UnityEngine;
|
||||
using Cysharp.Threading.Tasks;
|
||||
|
||||
namespace Code.App.AppStates
|
||||
{
|
||||
public class GameOverState : BaseState<AppStateMachineContext>
|
||||
{
|
||||
public GameOverState(AppStateMachineContext context) : base(context)
|
||||
{ }
|
||||
{
|
||||
}
|
||||
|
||||
private float damnTimer = 3f; // TODO Удалить при первой возможности
|
||||
|
||||
|
||||
public override void EnterState()
|
||||
{
|
||||
Context.UIService.SwitchPanelTo(UIPanel.GameOver);
|
||||
|
||||
GameOver();
|
||||
|
||||
base.EnterState();
|
||||
}
|
||||
|
||||
|
||||
private async UniTaskVoid GameOver()
|
||||
{
|
||||
await UniTask.WhenAll(
|
||||
Context.UIService.AsyncSwitchPanelTo(UIPanel.GameOver),
|
||||
UniTask.WaitForSeconds(damnTimer)
|
||||
);
|
||||
|
||||
ToMainMenu();
|
||||
}
|
||||
|
||||
private void ToMainMenu()
|
||||
{
|
||||
Context.StateMachine.SwitchState(AppState.MainMenu)
|
||||
.AllowStateTransition(AppState.Gameplay);
|
||||
}
|
||||
|
||||
public override void Tick()
|
||||
{
|
||||
damnTimer -= Time.deltaTime;
|
||||
if (damnTimer <= float.Epsilon) ToMainMenu();
|
||||
}
|
||||
// public override void Tick()
|
||||
// {
|
||||
// damnTimer -= Time.deltaTime;
|
||||
// if (damnTimer <= float.Epsilon) ToMainMenu();
|
||||
// }
|
||||
public override void ExitState()
|
||||
{
|
||||
damnTimer = 5f;
|
||||
|
||||
Context.UIService.LoadingScreen.Show();
|
||||
|
||||
base.ExitState();
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1,5 +1,6 @@
|
||||
using System.Globalization;
|
||||
using System.Reflection.Emit;
|
||||
using Code.App.Loading;
|
||||
using Code.App.StateMachine;
|
||||
using Code.Audio;
|
||||
using Code.Gameplay.Camera;
|
||||
@@ -41,7 +42,13 @@ namespace Code.App.AppStates
|
||||
|
||||
public override void EnterState()
|
||||
{
|
||||
Context.UIService.LoadingScreen.Show();
|
||||
Context.LoadingManager
|
||||
.RegisterLoading(LoadingWork.LoadScene)
|
||||
.RegisterLoading(LoadingWork.WaitForSceneInstaller)
|
||||
.RegisterLoading(LoadingWork.LoadUI)
|
||||
.RegisterLoading(LoadingWork.LoadModelResource)
|
||||
.RegisterLoading(LoadingWork.LoadAudio);
|
||||
// Context.UIService.LoadingScreen.Show();
|
||||
|
||||
_playerMoney = Context.PlayerFactory.CreatePlayerMoney();
|
||||
_playerHealth = Context.PlayerFactory.CreatePlayerHealth();
|
||||
@@ -79,7 +86,6 @@ namespace Code.App.AppStates
|
||||
WaitForPlayerArmsToInitialize(),
|
||||
WaitForPlayerCharacterLoad()
|
||||
);
|
||||
MusicInitialize();
|
||||
|
||||
Container sceneContainer = SceneManager.GetActiveScene().GetSceneContainer();
|
||||
|
||||
@@ -87,24 +93,35 @@ namespace Code.App.AppStates
|
||||
|
||||
PlayerInitialize(sceneEnvironment);
|
||||
|
||||
UIInitialize();
|
||||
|
||||
CameraInitialize();
|
||||
|
||||
InputServiceInitialize();
|
||||
|
||||
GameplayServicesInitialize(sceneContainer);
|
||||
|
||||
MusicInitialize();
|
||||
|
||||
UIInitialize();
|
||||
|
||||
_tickEnabled = true;
|
||||
|
||||
Context.UIService.LoadingScreen.Hide();
|
||||
Context.LoadingManager
|
||||
.UnregisterLoading(LoadingWork.LoadScene)
|
||||
.UnregisterLoading(LoadingWork.LoadUI)
|
||||
.UnregisterLoading(LoadingWork.LoadModelResource)
|
||||
.UnregisterLoading(LoadingWork.LoadAudio);
|
||||
// Context.UIService.LoadingScreen.Hide();
|
||||
}
|
||||
|
||||
private async UniTask WaitForPlayerArmsToInitialize() => _armsMesh = await Context.PlayerFactory.CreateArms(Context.CameraStateMachine.Camera.transform);
|
||||
|
||||
private void OrderGiven(float time)
|
||||
{
|
||||
|
||||
_gameplayPanel.ShowTimer();
|
||||
}
|
||||
private void OrderFailure()
|
||||
{
|
||||
_playerHealth.InstaKill();
|
||||
}
|
||||
private void OrderRecieved(float time)
|
||||
{
|
||||
@@ -112,6 +129,8 @@ namespace Code.App.AppStates
|
||||
}
|
||||
private void OrderDelivered(int score, float time)
|
||||
{
|
||||
_gameplayPanel.HideTimer();
|
||||
|
||||
if(time < 0f) Context.AudioService.PlayDispatcher((DispatcherSounds)Random.Range((int)DispatcherSounds.Late1,(int)DispatcherSounds.Late2));
|
||||
_playerMoney.GiveMoney(score);
|
||||
}
|
||||
@@ -145,8 +164,7 @@ namespace Code.App.AppStates
|
||||
{
|
||||
if (!_tickEnabled) return;
|
||||
|
||||
// TODO ГРЯЗь
|
||||
_gameplayPanel.Timer.text = ((int)_orderService.DecreaseTimer(Time.deltaTime)).ToString(CultureInfo.CurrentCulture);
|
||||
_orderService.DecreaseTimer(Time.deltaTime);
|
||||
}
|
||||
|
||||
private void EndGame()
|
||||
@@ -166,6 +184,7 @@ namespace Code.App.AppStates
|
||||
_playerCharacter = null;
|
||||
Context.PlayerFactory.ReleaseArms(_armsMesh);
|
||||
_armsMesh = null;
|
||||
_orderService = null;
|
||||
|
||||
Context.InputService.DisableMap(ActionMappings.Gameplay);
|
||||
Context.AudioService.GladlyAskToStopMusic(MusicType.Action, callback: Context.AudioFactory.ReleaseActionMusic);
|
||||
@@ -198,7 +217,9 @@ namespace Code.App.AppStates
|
||||
private void UIInitialize()
|
||||
{
|
||||
_gameplayPanel = (GameplayPanel)Context.UIService.CurrentPanel;
|
||||
_gameplayPanel.Initialize(_playerMoney, _playerHealth);
|
||||
_gameplayPanel.Initialize(_playerMoney, _playerHealth, _orderService);
|
||||
Context.AudioService.OnDispatcherStarted += _gameplayPanel.SummonDispatcher;
|
||||
Context.AudioService.OnDispatcherEnded += _gameplayPanel.CloseDispatcher;
|
||||
}
|
||||
private void MusicInitialize()
|
||||
{
|
||||
@@ -218,6 +239,7 @@ namespace Code.App.AppStates
|
||||
_orderService.OnOrderGiven += OrderGiven;
|
||||
_orderService.OnOrderRecieved += OrderRecieved;
|
||||
_orderService.OnOrderDelivered += OrderDelivered;
|
||||
_orderService.OnOrderFailure += OrderFailure;
|
||||
}
|
||||
private GameplaySceneEnvironment SceneEnvironmentVariables(Container sceneContainer)
|
||||
{
|
||||
|
||||
@@ -1,3 +1,4 @@
|
||||
using Code.App.Loading;
|
||||
using Code.App.StateMachine;
|
||||
using Code.Audio;
|
||||
using Code.Gameplay.Camera;
|
||||
@@ -24,9 +25,15 @@ namespace Code.App.AppStates
|
||||
|
||||
public override void EnterState()
|
||||
{
|
||||
Context.UIService.LoadingScreen.Show();
|
||||
Context.LoadingManager
|
||||
.RegisterLoading(LoadingWork.LoadScene)
|
||||
.RegisterLoading(LoadingWork.WaitForSceneInstaller)
|
||||
.RegisterLoading(LoadingWork.LoadUI)
|
||||
.RegisterLoading(LoadingWork.LoadAudio);
|
||||
|
||||
// Context.UIService.LoadingScreen.Show();
|
||||
|
||||
Context.CameraStateMachine.SwitchState(CameraMode.UltraStatic);
|
||||
Context.CameraStateMachine.SwitchState(CameraMode.MainMenu);
|
||||
|
||||
#pragma warning disable CS4014 // Because this call is not awaited, execution of the current method continues before the call is completed
|
||||
WaitForSceneToLoad();
|
||||
@@ -40,11 +47,15 @@ namespace Code.App.AppStates
|
||||
Context.UIService.AsyncSwitchPanelTo(UIPanel.MainMenu),
|
||||
Context.AudioFactory.WarmMenuMusic()
|
||||
);
|
||||
Context.LoadingManager
|
||||
.UnregisterLoading(LoadingWork.LoadScene)
|
||||
.UnregisterLoading(LoadingWork.LoadUI)
|
||||
.UnregisterLoading(LoadingWork.LoadAudio);
|
||||
|
||||
InitializeAudio();
|
||||
|
||||
var mainMenuEnvironment = ((MainMenuEnvironment)SceneManager.GetActiveScene()
|
||||
.GetSceneContainer().Resolve<CurrentSceneEnvironment>());
|
||||
var mainMenuEnvironment = (MainMenuEnvironment)SceneManager.GetActiveScene()
|
||||
.GetSceneContainer().Resolve<CurrentSceneEnvironment>();
|
||||
|
||||
InitializeUI(mainMenuEnvironment);
|
||||
|
||||
@@ -52,12 +63,12 @@ namespace Code.App.AppStates
|
||||
|
||||
InitializeInput();
|
||||
|
||||
Context.UIService.LoadingScreen.Hide();
|
||||
// Context.UIService.LoadingScreen.Hide();
|
||||
}
|
||||
|
||||
private void InitializeCamera(MainMenuEnvironment mainMenuEnvironment)
|
||||
{
|
||||
((UltraStaticState)Context.CameraStateMachine.CurrentBaseState).SetFollowTransform(mainMenuEnvironment
|
||||
((Gameplay.Camera.CameraStates.MainMenuState)Context.CameraStateMachine.CurrentBaseState).SetFollowTransform(mainMenuEnvironment
|
||||
.cameraPosition);
|
||||
}
|
||||
|
||||
|
||||
@@ -1,3 +1,5 @@
|
||||
using System.Collections.Generic;
|
||||
using Code.App.Loading;
|
||||
using Code.App.StateMachine;
|
||||
using Code.Audio;
|
||||
using Code.Configs;
|
||||
@@ -26,10 +28,13 @@ namespace Code.App
|
||||
|
||||
InstallInfrastructureUnit(containerBuilder, staticDataService);
|
||||
|
||||
containerBuilder.AddSingleton(typeof(LoadingManager), typeof(ILoadingManager));
|
||||
|
||||
containerBuilder.AddSingleton(typeof(InputService), typeof(IInputService));
|
||||
containerBuilder.AddSingleton(typeof(PlayerFactory), typeof(IPlayerFactory));
|
||||
|
||||
InitializeCamera(containerBuilder, staticDataService);
|
||||
|
||||
containerBuilder.AddSingleton(typeof(UIFactory), typeof(IUIFactory));
|
||||
containerBuilder.AddSingleton(typeof(UIService), typeof(IUIService));
|
||||
|
||||
@@ -72,6 +77,7 @@ namespace Code.App
|
||||
containerBuilder.AddSingleton(staticDataService.InputConfig, typeof(InputConfig));
|
||||
|
||||
containerBuilder.AddSingleton(staticDataService.CameraConfig, typeof(CameraConfig));
|
||||
containerBuilder.AddSingleton(staticDataService.CameraSettingsConfigs, typeof(Dictionary<CameraMode,CameraSettingsConfig>));
|
||||
|
||||
containerBuilder.AddSingleton(staticDataService.PlayerConfig, typeof(PlayerConfig));
|
||||
containerBuilder.AddSingleton(staticDataService.CharacterConfig, typeof(CharacterConfig));
|
||||
@@ -106,14 +112,22 @@ namespace Code.App
|
||||
}
|
||||
private async UniTaskVoid BootstrapFinish(Container container)
|
||||
{
|
||||
var loadingScreen = GameObject.FindWithTag(Tags.LoadingScreen);
|
||||
DontDestroyOnLoad(loadingScreen);
|
||||
var loadingScreen = GameObject.FindWithTag(Tags.LoadingScreen).GetComponent<LoadingScreen>();
|
||||
DontDestroyOnLoad(loadingScreen.gameObject);
|
||||
|
||||
ILoadingManager loadingManager = container.Resolve<ILoadingManager>();
|
||||
loadingManager.OnLoadingStarted += loadingScreen.Show;
|
||||
loadingManager.OnLoadingEnded += loadingScreen.Hide;
|
||||
|
||||
loadingManager.RegisterLoading(LoadingWork.Bootstrap);
|
||||
|
||||
await UniTask.WhenAll(
|
||||
container.Resolve<IUIService>().Initialize(loadingScreen.GetComponent<LoadingScreen>()),
|
||||
container.Resolve<IUIService>().Initialize(loadingScreen),
|
||||
container.Resolve<IAudioService>().Initialize()
|
||||
);
|
||||
|
||||
loadingManager.UnregisterLoading(LoadingWork.Bootstrap);
|
||||
|
||||
_appStateMachine
|
||||
.SwitchState(AppState.MainMenu)
|
||||
.AllowStateTransition(AppState.Gameplay);
|
||||
|
||||
@@ -0,0 +1,3 @@
|
||||
fileFormatVersion: 2
|
||||
guid: 08b54658296d4279b85a2bfc3cf10e62
|
||||
timeCreated: 1763842256
|
||||
@@ -0,0 +1,15 @@
|
||||
using System.Collections.ObjectModel;
|
||||
|
||||
namespace Code.App.Loading
|
||||
{
|
||||
public interface ILoadingManager
|
||||
{
|
||||
delegate void OnLoadingDelegate();
|
||||
|
||||
event OnLoadingDelegate OnLoadingStarted;
|
||||
event OnLoadingDelegate OnLoadingEnded;
|
||||
ReadOnlyCollection<LoadingWork> LoadingThings { get; }
|
||||
LoadingManager RegisterLoading(LoadingWork loadingThingName);
|
||||
LoadingManager UnregisterLoading(LoadingWork loadingThingName);
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,3 @@
|
||||
fileFormatVersion: 2
|
||||
guid: bfb3837590d04da3b04ca8b0f0aca437
|
||||
timeCreated: 1763842985
|
||||
@@ -0,0 +1,46 @@
|
||||
using System.Collections.Generic;
|
||||
using System.Collections.ObjectModel;
|
||||
|
||||
namespace Code.App.Loading
|
||||
{
|
||||
public class LoadingManager : ILoadingManager
|
||||
{
|
||||
public event ILoadingManager.OnLoadingDelegate OnLoadingStarted;
|
||||
public event ILoadingManager.OnLoadingDelegate OnLoadingEnded;
|
||||
|
||||
private List<LoadingWork> _loadingThings = new();
|
||||
public ReadOnlyCollection<LoadingWork> LoadingThings => _loadingThings.AsReadOnly();
|
||||
|
||||
public LoadingManager RegisterLoading(LoadingWork loadingThingName)
|
||||
{
|
||||
if(_loadingThings.Count == 0) OnLoadingStarted?.Invoke();
|
||||
|
||||
_loadingThings.Add(loadingThingName);
|
||||
|
||||
return this;
|
||||
}
|
||||
public LoadingManager UnregisterLoading(LoadingWork loadingThingName)
|
||||
{
|
||||
_loadingThings.Remove(loadingThingName);
|
||||
|
||||
if(_loadingThings.Count == 0) OnLoadingEnded?.Invoke();
|
||||
|
||||
return this;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
// public static class LoadingManagerExtensions
|
||||
// {
|
||||
// public static LoadingManager AddLoading(this LoadingManager manager, LoadingWork loadingThingName)
|
||||
// {
|
||||
// manager.RegisterLoading(loadingThingName);
|
||||
// return manager;
|
||||
// }
|
||||
// public static LoadingManager RemoveLoading(this LoadingManager manager, LoadingWork loadingThingName)
|
||||
// {
|
||||
// manager.UnregisterLoading(loadingThingName);
|
||||
// return manager;
|
||||
// }
|
||||
// }
|
||||
}
|
||||
@@ -0,0 +1,3 @@
|
||||
fileFormatVersion: 2
|
||||
guid: 185988ac74a24a39864238cd7f5cb626
|
||||
timeCreated: 1763842268
|
||||
@@ -0,0 +1,13 @@
|
||||
namespace Code.App.Loading
|
||||
{
|
||||
public enum LoadingWork
|
||||
{
|
||||
Bootstrap,
|
||||
LoadUI,
|
||||
LoadAudio,
|
||||
LoadScene,
|
||||
LoadModelResource,
|
||||
WaitForSceneInstaller,
|
||||
WaitingForTime
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,3 @@
|
||||
fileFormatVersion: 2
|
||||
guid: 318d1b29b41d4b96bc09334acbf36506
|
||||
timeCreated: 1763843934
|
||||
@@ -1,3 +1,4 @@
|
||||
using Code.App.Loading;
|
||||
using Code.Gameplay.Orders.Order;
|
||||
using Code.Scenes;
|
||||
using Code.Scenes.SceneEnvironments;
|
||||
@@ -21,9 +22,13 @@ namespace Code.App.SceneInstallers
|
||||
|
||||
private void Initialize(Container container)
|
||||
{
|
||||
GameplaySceneEnvironment env = (GameplaySceneEnvironment)container.Resolve<CurrentSceneEnvironment>();
|
||||
ILoadingManager loadingManager = container.Resolve<ILoadingManager>();
|
||||
|
||||
GameplaySceneEnvironment env = (GameplaySceneEnvironment)container.Resolve<CurrentSceneEnvironment>();
|
||||
|
||||
env.TransitVariables(_gameplaySceneEnvironment);
|
||||
|
||||
loadingManager.UnregisterLoading(LoadingWork.WaitForSceneInstaller);
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -1,8 +1,8 @@
|
||||
using Code.App.Loading;
|
||||
using Code.Scenes;
|
||||
using Code.Scenes.SceneEnvironments;
|
||||
using Reflex.Core;
|
||||
using UnityEngine;
|
||||
using UnityEngine.Serialization;
|
||||
using UnityEngine;
|
||||
|
||||
namespace Code.App.SceneInstallers
|
||||
{
|
||||
@@ -22,6 +22,10 @@ namespace Code.App.SceneInstallers
|
||||
MainMenuEnvironment env = (MainMenuEnvironment)container.Resolve<CurrentSceneEnvironment>();
|
||||
|
||||
env.TransitVariables(_mainMenuEnvironment);
|
||||
|
||||
ILoadingManager loadingManager = container.Resolve<ILoadingManager>();
|
||||
|
||||
loadingManager.UnregisterLoading(LoadingWork.WaitForSceneInstaller);
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -1,3 +1,4 @@
|
||||
using Code.App.Loading;
|
||||
using Code.Audio;
|
||||
using Code.Gameplay.Camera;
|
||||
using Code.Gameplay.Player;
|
||||
@@ -10,6 +11,7 @@ namespace Code.App.StateMachine
|
||||
{
|
||||
public class AppStateMachineContext
|
||||
{
|
||||
[Inject] public ILoadingManager LoadingManager { get; private set; }
|
||||
[Inject] public ISceneLoaderService SceneLoaderService { get; private set; }
|
||||
[Inject] public IInputService InputService { get; private set; }
|
||||
[Inject] public AppStateMachine StateMachine { get; private set; }
|
||||
|
||||
@@ -164,9 +164,12 @@ namespace Code.Audio
|
||||
_audioSourcePool.PlayOneShot(_audioFactory.EnemiesAudios[(int)enemySoundId], position, _enemiesGroup);
|
||||
}
|
||||
|
||||
public event IAudioService.OnAudioPlayingDelegate OnDispatcherStarted;
|
||||
public event IAudioService.OnAudioPlayingDelegate OnDispatcherEnded;
|
||||
public void PlayDispatcher(DispatcherSounds dispatcherSoundId)
|
||||
{
|
||||
_audioSourcePool.PlayShizo(_audioFactory.DispatcherAudios[(int)dispatcherSoundId], _dispatcherGroup);
|
||||
OnDispatcherStarted?.Invoke();
|
||||
_audioSourcePool.PlayShizo(_audioFactory.DispatcherAudios[(int)dispatcherSoundId], _dispatcherGroup, () => OnDispatcherEnded?.Invoke());
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -1,7 +1,9 @@
|
||||
using System;
|
||||
using Cysharp.Threading.Tasks;
|
||||
using UnityEngine;
|
||||
using UnityEngine.Audio;
|
||||
using UnityEngine.Pool;
|
||||
using Object = UnityEngine.Object;
|
||||
|
||||
namespace Code.Audio
|
||||
{
|
||||
@@ -55,7 +57,7 @@ namespace Code.Audio
|
||||
Object.Destroy(source.gameObject);
|
||||
}
|
||||
|
||||
public async UniTaskVoid PlayOneShot(AudioClip clip, Vector3 position, AudioMixerGroup audioMixerGroup)
|
||||
public async UniTaskVoid PlayOneShot(AudioClip clip, Vector3 position, AudioMixerGroup audioMixerGroup, Action onComplete = null)
|
||||
{
|
||||
AudioSource source = _pool.Get();
|
||||
source.PlayOneShot(clip);
|
||||
@@ -64,10 +66,10 @@ namespace Code.Audio
|
||||
source.outputAudioMixerGroup = audioMixerGroup;
|
||||
|
||||
await UniTask.WaitUntilValueChanged(source, x => x.isPlaying);
|
||||
|
||||
onComplete?.Invoke();
|
||||
_pool.Release(source);
|
||||
}
|
||||
public async UniTaskVoid PlayShizo(AudioClip clip, AudioMixerGroup audioMixerGroup)
|
||||
public async UniTaskVoid PlayShizo(AudioClip clip, AudioMixerGroup audioMixerGroup, Action onComplete = null)
|
||||
{
|
||||
AudioSource source = _pool.Get();
|
||||
source.PlayOneShot(clip);
|
||||
@@ -75,7 +77,7 @@ namespace Code.Audio
|
||||
source.outputAudioMixerGroup = audioMixerGroup;
|
||||
|
||||
await UniTask.WaitUntilValueChanged(source, x => x.isPlaying);
|
||||
|
||||
onComplete?.Invoke();
|
||||
_pool.Release(source);
|
||||
}
|
||||
public AudioSource GetSource() => _pool.Get();
|
||||
|
||||
@@ -14,6 +14,11 @@ namespace Code.Audio
|
||||
void TransitToSnapshot(AudioSnapshotState state, float time = 1f);
|
||||
void PlaySFX(SFXSounds sfxId, Vector3 position);
|
||||
void PlayEnemy(EnemiesSounds enemySoundId, Vector3 position);
|
||||
|
||||
delegate void OnAudioPlayingDelegate();
|
||||
|
||||
event OnAudioPlayingDelegate OnDispatcherStarted;
|
||||
event OnAudioPlayingDelegate OnDispatcherEnded;
|
||||
void PlayDispatcher(DispatcherSounds dispatcherSoundId);
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,14 @@
|
||||
using Code.Gameplay.Camera;
|
||||
using UnityEngine;
|
||||
|
||||
namespace Code.Configs
|
||||
{
|
||||
[CreateAssetMenu(fileName = "CameraSettingsConfig", menuName = "Config/CameraSettingsConfig")]
|
||||
public class CameraSettingsConfig : ScriptableObject
|
||||
{
|
||||
// Дополнять по мере необходимости
|
||||
public float fov;
|
||||
|
||||
public CameraMode cameraMode;
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,3 @@
|
||||
fileFormatVersion: 2
|
||||
guid: 6610b94e9823401c94533e1756a97195
|
||||
timeCreated: 1763846744
|
||||
@@ -10,9 +10,9 @@ namespace Code.Gameplay.Camera
|
||||
*/
|
||||
public enum CameraMode
|
||||
{
|
||||
Bogdan,
|
||||
None,
|
||||
Static,
|
||||
UltraStatic,
|
||||
MainMenu,
|
||||
FirstPerson,
|
||||
ThirdPerson,
|
||||
Cinematic
|
||||
|
||||
@@ -9,12 +9,13 @@ namespace Code.Gameplay.Camera
|
||||
// Текущий режим работы камеры
|
||||
public override void Initialize()
|
||||
{
|
||||
States.Add(CameraMode.None, new NoneState(StateMachineContext));
|
||||
States.Add(CameraMode.Static, new StaticState(StateMachineContext));
|
||||
States.Add(CameraMode.UltraStatic, new UltraStaticState(StateMachineContext));
|
||||
States.Add(CameraMode.MainMenu, new MainMenuState(StateMachineContext));
|
||||
States.Add(CameraMode.FirstPerson, new FirstPersonState(StateMachineContext));
|
||||
States.Add(CameraMode.ThirdPerson, new ThirdPersonState(StateMachineContext));
|
||||
|
||||
CurrentBaseState = States[CameraMode.UltraStatic];
|
||||
CurrentBaseState = States[CameraMode.None];
|
||||
}
|
||||
|
||||
public UnityEngine.Camera Camera => StateMachineContext.Camera;
|
||||
|
||||
@@ -1,3 +1,4 @@
|
||||
using System.Collections.Generic;
|
||||
using Code.Configs;
|
||||
using Code.Input;
|
||||
using Reflex.Attributes;
|
||||
@@ -9,5 +10,6 @@ namespace Code.Gameplay.Camera
|
||||
[Inject] public UnityEngine.Camera Camera;
|
||||
[Inject] public CameraConfig Config;
|
||||
[Inject] public IInputService InputService;
|
||||
[Inject] public Dictionary<CameraMode,CameraSettingsConfig> CameraSettingsConfigs;
|
||||
}
|
||||
}
|
||||
@@ -14,14 +14,16 @@ namespace Code.Gameplay.Camera.CameraStates
|
||||
|
||||
public override void EnterState()
|
||||
{
|
||||
base.EnterState();
|
||||
|
||||
// В FirstPerson режиме дистанция всегда равна 0
|
||||
MinDistance = 0f;
|
||||
MaxDistance = 0f;
|
||||
DefaultDistance = 0f;
|
||||
TargetDistance = 0f;
|
||||
CurrentDistance = 0f;
|
||||
|
||||
base.EnterState();
|
||||
|
||||
Camera.fieldOfView = Context.CameraSettingsConfigs[CameraMode.FirstPerson].fov;
|
||||
}
|
||||
|
||||
protected override void HandlePosition(float deltaTime, float zoomInput, Quaternion targetRotation)
|
||||
|
||||
+5
-4
@@ -2,14 +2,15 @@ using UnityEngine;
|
||||
|
||||
namespace Code.Gameplay.Camera.CameraStates
|
||||
{
|
||||
public class UltraStaticState : BaseCameraState, ICameraState
|
||||
public class MainMenuState : BaseCameraState, ICameraState
|
||||
{
|
||||
public UltraStaticState(CameraStateMachineContext context) : base(context) { }
|
||||
public MainMenuState(CameraStateMachineContext context) : base(context) { }
|
||||
|
||||
public override void EnterState()
|
||||
{
|
||||
Debug.Log("Ultra static State Enter");
|
||||
base.EnterState();
|
||||
|
||||
Camera.fieldOfView = Context.CameraSettingsConfigs[CameraMode.MainMenu].fov;
|
||||
}
|
||||
|
||||
protected override void HandlePosition(float deltaTime, float zoomInput, Quaternion targetRotation)
|
||||
@@ -17,7 +18,7 @@ namespace Code.Gameplay.Camera.CameraStates
|
||||
Camera.transform.position = FollowTransform.position;
|
||||
}
|
||||
|
||||
public CameraMode GetCameraMode() => CameraMode.UltraStatic;
|
||||
public CameraMode GetCameraMode() => CameraMode.MainMenu;
|
||||
|
||||
protected override void HandleRotationInput(float deltaTime, Vector3 rotationInput,
|
||||
out Quaternion targetRotation)
|
||||
File renamed without changes.
@@ -0,0 +1,21 @@
|
||||
using UnityEngine;
|
||||
|
||||
namespace Code.Gameplay.Camera.CameraStates
|
||||
{
|
||||
public class NoneState : BaseCameraState, ICameraState
|
||||
{
|
||||
public NoneState(CameraStateMachineContext context) : base(context) { }
|
||||
|
||||
protected override void HandlePosition(float deltaTime, float zoomInput, Quaternion targetRotation)
|
||||
{
|
||||
}
|
||||
|
||||
public CameraMode GetCameraMode() => CameraMode.None;
|
||||
|
||||
protected override void HandleRotationInput(float deltaTime, Vector3 rotationInput,
|
||||
out Quaternion targetRotation)
|
||||
{
|
||||
targetRotation = Quaternion.identity;
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,3 @@
|
||||
fileFormatVersion: 2
|
||||
guid: d8fa6119113f4f12a35365fd27387124
|
||||
timeCreated: 1763847889
|
||||
@@ -9,8 +9,9 @@ namespace Code.Gameplay.Camera.CameraStates
|
||||
|
||||
public override void EnterState()
|
||||
{
|
||||
Debug.Log("Static State Enter");
|
||||
base.EnterState();
|
||||
|
||||
Camera.fieldOfView = Context.CameraSettingsConfigs[CameraMode.Static].fov;
|
||||
}
|
||||
|
||||
protected override void HandlePosition(float deltaTime, float zoomInput, Quaternion targetRotation)
|
||||
|
||||
@@ -14,13 +14,13 @@ namespace Code.Gameplay.Camera.CameraStates
|
||||
|
||||
public override void EnterState()
|
||||
{
|
||||
base.EnterState();
|
||||
|
||||
// Восстанавливаем исходные значения дистанции
|
||||
MinDistance = OriginalMinDistance;
|
||||
MaxDistance = OriginalMaxDistance;
|
||||
DefaultDistance = OriginalDefaultDistance;
|
||||
TargetDistance = DefaultDistance;
|
||||
|
||||
base.EnterState();
|
||||
}
|
||||
|
||||
protected override void HandlePosition(float deltaTime, float zoomInput, Quaternion targetRotation)
|
||||
|
||||
@@ -180,7 +180,6 @@ namespace Code.Gameplay.Character.Controller
|
||||
// Заготовка на будущее (если понадобится)
|
||||
case CameraMode.Static:
|
||||
case CameraMode.Cinematic:
|
||||
case CameraMode.Bogdan: // Скорее всего юзлес, но пускай будет
|
||||
default:
|
||||
break;
|
||||
}
|
||||
|
||||
@@ -2,19 +2,24 @@ namespace Code.Gameplay.Orders.Order
|
||||
{
|
||||
public interface IOrderService
|
||||
{
|
||||
delegate void OrderFailureDelegate();
|
||||
|
||||
delegate void OrderProgressDelegate(float time);
|
||||
|
||||
event OrderProgressDelegate OnOrderGiven;
|
||||
event OrderProgressDelegate OnOrderRecieved;
|
||||
event OrderFailureDelegate OnOrderFailure;
|
||||
|
||||
delegate void OrderDeliveredDelegate(int score, float time);
|
||||
|
||||
event OrderDeliveredDelegate OnOrderDelivered;
|
||||
OrderState OrderState { get; }
|
||||
float DeliveryTimer { get; }
|
||||
void RoomPassed();
|
||||
float DecreaseTimer(float delta);
|
||||
void DecreaseTimer(float delta);
|
||||
void OrderGive();
|
||||
void OrderRecieved();
|
||||
void OrderDelivered();
|
||||
void OrderFailed();
|
||||
}
|
||||
}
|
||||
@@ -11,7 +11,7 @@ namespace Code.Gameplay.Orders.Order
|
||||
{
|
||||
[Inject] private IOrderService _orderService;
|
||||
public Rigidbody rigidbody;
|
||||
[SerializeField] private bool _pickupMode;
|
||||
private bool _pickupMode;
|
||||
// [SerializeField] private AnimationCurve debugCurve;
|
||||
|
||||
//DEBUG
|
||||
@@ -41,9 +41,7 @@ namespace Code.Gameplay.Orders.Order
|
||||
|
||||
public async UniTaskVoid SwitchMode()
|
||||
{
|
||||
Debug.LogWarning("Activating");
|
||||
await UniTask.WaitForSeconds(_activationTime);
|
||||
Debug.LogWarning("Available");
|
||||
_pickupMode = true;
|
||||
rigidbody.isKinematic = true;
|
||||
_capturedPosition = transform.position;
|
||||
@@ -62,7 +60,6 @@ namespace Code.Gameplay.Orders.Order
|
||||
if (_timeForMoving > _curveLength) _timeForMoving = 0;
|
||||
|
||||
transform.position = _capturedPosition + new Vector3(0, _floatingCurve.Evaluate(_timeForMoving), 0);
|
||||
Debug.Log(transform.position);
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -1,6 +1,6 @@
|
||||
using Code.Audio;
|
||||
using Code.Configs;
|
||||
using UnityEngine;
|
||||
using Random = UnityEngine.Random;
|
||||
|
||||
namespace Code.Gameplay.Orders.Order
|
||||
{
|
||||
@@ -9,16 +9,18 @@ namespace Code.Gameplay.Orders.Order
|
||||
public event IOrderService.OrderProgressDelegate OnOrderGiven;
|
||||
public event IOrderService.OrderProgressDelegate OnOrderRecieved;
|
||||
public event IOrderService.OrderDeliveredDelegate OnOrderDelivered;
|
||||
public event IOrderService.OrderFailureDelegate OnOrderFailure;
|
||||
|
||||
private OrderState _orderState;
|
||||
public OrderState OrderState => _orderState;
|
||||
|
||||
private float _deliveryTimer = 0.0f;
|
||||
private float _deliveryTimer;
|
||||
public float DeliveryTimer => _deliveryTimer;
|
||||
|
||||
private Vector2 _timeBounds;
|
||||
private float _koefRooms, _koefOvertime;
|
||||
|
||||
private int _roomsPassed;
|
||||
private int _roomsPassed;
|
||||
|
||||
public OrderService(OrderServiceConfig config)
|
||||
{
|
||||
@@ -30,11 +32,8 @@ namespace Code.Gameplay.Orders.Order
|
||||
}
|
||||
|
||||
public void RoomPassed() => _roomsPassed++;
|
||||
public float DecreaseTimer(float delta)
|
||||
{
|
||||
return _deliveryTimer -= delta;
|
||||
}
|
||||
|
||||
public void DecreaseTimer(float delta) => _deliveryTimer -= delta;
|
||||
|
||||
public void OrderGive()
|
||||
{
|
||||
_orderState = OrderState.Given;
|
||||
@@ -49,9 +48,16 @@ namespace Code.Gameplay.Orders.Order
|
||||
_orderState = OrderState.Recieved;
|
||||
OnOrderRecieved?.Invoke(_deliveryTimer);
|
||||
}
|
||||
public void OrderFailed() => OnOrderFailure?.Invoke();
|
||||
|
||||
public void OrderDelivered()
|
||||
{
|
||||
if (_orderState != OrderState.Recieved)
|
||||
{
|
||||
OnOrderFailure?.Invoke();
|
||||
return;
|
||||
}
|
||||
|
||||
_orderState = OrderState.Delivered;
|
||||
|
||||
int score = (int)(_koefRooms * _roomsPassed + _deliveryTimer * _koefOvertime);
|
||||
|
||||
@@ -28,5 +28,11 @@ namespace Code.Gameplay.Player
|
||||
_healthPoints = maxHealthPoints;
|
||||
MaxHealthPoints = maxHealthPoints;
|
||||
}
|
||||
|
||||
public void InstaKill()
|
||||
{
|
||||
_healthPoints = 0;
|
||||
OnDeath?.Invoke();
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -2,6 +2,7 @@ using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Threading.Tasks;
|
||||
using Code.Configs;
|
||||
using Code.Gameplay.Camera;
|
||||
using Cysharp.Threading.Tasks;
|
||||
using UnityEngine;
|
||||
using UnityEngine.AddressableAssets;
|
||||
@@ -23,6 +24,7 @@ namespace Code.StaticData
|
||||
EnemiesSoundListConfig EnemiesSoundListConfig { get; }
|
||||
OrderServiceConfig OrderServiceConfig { get; }
|
||||
OrderBoxConfig OrderBoxConfig { get; }
|
||||
Dictionary<CameraMode, CameraSettingsConfig> CameraSettingsConfigs { get; }
|
||||
void Load();
|
||||
Task<T> InstantiateAsset<T>(AssetReference assetReference) where T : Behaviour;
|
||||
}
|
||||
|
||||
@@ -1,6 +1,9 @@
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using System.Threading.Tasks;
|
||||
using Code.Configs;
|
||||
using Code.Constants;
|
||||
using Code.Gameplay.Camera;
|
||||
using Cysharp.Threading.Tasks;
|
||||
using UnityEngine;
|
||||
using UnityEngine.AddressableAssets;
|
||||
@@ -21,19 +24,23 @@ namespace Code.StaticData
|
||||
public DispatcherSoundListConfig DispatcherSoundListConfig { get; private set; }
|
||||
public EnemiesSoundListConfig EnemiesSoundListConfig { get; private set; }
|
||||
public OrderServiceConfig OrderServiceConfig { get; private set; }
|
||||
public OrderBoxConfig OrderBoxConfig { get; private set; }
|
||||
public OrderBoxConfig OrderBoxConfig { get; private set; }
|
||||
|
||||
public Dictionary<CameraMode, CameraSettingsConfig> CameraSettingsConfigs { get; private set; } = new();
|
||||
|
||||
public void Load()
|
||||
{
|
||||
InputConfig = Resources.Load<InputConfig>(string.Format(StringPaths.ConfigSingle, "App", "InputConfig"));
|
||||
AppConfig = Resources.Load<AppConfig>(string.Format(StringPaths.ConfigSingle, "App", "AppConfig"));
|
||||
CameraConfig = Resources.Load<CameraConfig>(string.Format(StringPaths.ConfigSingle, "App", "CameraConfig"));
|
||||
CharacterConfig = Resources.Load<CharacterConfig>(string.Format(StringPaths.ConfigSingle, "App", "CharacterConfig"));
|
||||
UIConfig = Resources.Load<UIConfig>(string.Format(StringPaths.ConfigSingle, "App", "UIConfig"));
|
||||
PlayerConfig = Resources.Load<PlayerConfig>(string.Format(StringPaths.ConfigSingle, "App", "PlayerConfig"));
|
||||
OrderServiceConfig = Resources.Load<OrderServiceConfig>(string.Format(StringPaths.ConfigSingle, "Gameplay", "OrderServiceConfig"));
|
||||
OrderBoxConfig = Resources.Load<OrderBoxConfig>(string.Format(StringPaths.ConfigSingle, "Gameplay", "OrderBoxConfig"));
|
||||
|
||||
CameraConfig = Resources.Load<CameraConfig>(string.Format(StringPaths.ConfigSingle, "Camera", "CameraConfig"));
|
||||
CameraSettingsConfigs = Resources.LoadAll<CameraSettingsConfig>(string.Format(StringPaths.ConfigMultiple, "Camera")).ToDictionary(x=> x.cameraMode);
|
||||
|
||||
LoadAudioConfigs();
|
||||
}
|
||||
|
||||
|
||||
@@ -10,10 +10,12 @@ namespace Code.UI
|
||||
public override void Hide()
|
||||
{
|
||||
_background.enabled = false;
|
||||
base.Hide();
|
||||
}
|
||||
public override void Show()
|
||||
{
|
||||
_background.enabled = true;
|
||||
base.Show();
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -1,3 +1,4 @@
|
||||
using Code.Gameplay.Orders.Order;
|
||||
using Code.Gameplay.Player;
|
||||
using DG.Tweening;
|
||||
using TMPro;
|
||||
@@ -15,12 +16,16 @@ namespace Code.UI.Panels
|
||||
[SerializeField] private float dispatcherTransitionTime = 0.5f;
|
||||
[Header("Timer")]
|
||||
[SerializeField] private TMP_Text timer;
|
||||
[SerializeField] private Image timerBackGround;
|
||||
public TMP_Text Timer => timer;
|
||||
[SerializeField] private RectTransform timerHiddenPosition;
|
||||
[SerializeField] private RectTransform timerShownPosition;
|
||||
[SerializeField] private float timerTransitionTime = 0.5f;
|
||||
[Header("HealthBar")]
|
||||
[SerializeField] private Image healthBar;
|
||||
[Header("MoneyBar")]
|
||||
[SerializeField] private TMP_Text moneyText;
|
||||
|
||||
|
||||
private void MoneyUpdate(int count, int money)
|
||||
{
|
||||
// TODO Анимация получения\потери
|
||||
@@ -32,7 +37,9 @@ namespace Code.UI.Panels
|
||||
float fillAmount = (float)health.HealthPoints / health.MaxHealthPoints;
|
||||
healthBar.fillAmount = fillAmount;
|
||||
}
|
||||
public void Initialize(PlayerMoney money, PlayerHealth health)
|
||||
private IOrderService _orderService;
|
||||
|
||||
public void Initialize(PlayerMoney money, PlayerHealth health, IOrderService orderService)
|
||||
{
|
||||
money.OnMoneyGet += MoneyUpdate;
|
||||
money.OnMoneyLoose += MoneyUpdate;
|
||||
@@ -40,22 +47,37 @@ namespace Code.UI.Panels
|
||||
|
||||
health.OnDamage += HealthUpdate;
|
||||
HealthUpdate(0,health);
|
||||
|
||||
_orderService = orderService;
|
||||
}
|
||||
|
||||
private void Update()
|
||||
{
|
||||
if (_orderService != null) timer.text = ((int)_orderService.DeliveryTimer).ToString();
|
||||
}
|
||||
private int _dispatcherCalls;
|
||||
public void SummonDispatcher()
|
||||
{
|
||||
// TODO
|
||||
dispatcher.transform.DOMoveX(dispatcherShownPosition.position.x, dispatcherTransitionTime);
|
||||
_dispatcherCalls++;
|
||||
dispatcher.transform.DOMoveY(dispatcherShownPosition.position.y, dispatcherTransitionTime);
|
||||
}
|
||||
public void CloseDispatcher()
|
||||
{
|
||||
dispatcher.transform.DOMoveX(dispatcherHiddenPosition.position.x, dispatcherTransitionTime);
|
||||
_dispatcherCalls--;
|
||||
if (_dispatcherCalls > 0) return;
|
||||
dispatcher.transform.DOMoveY(dispatcherHiddenPosition.position.y, dispatcherTransitionTime);
|
||||
// TODO
|
||||
}
|
||||
public override void Hide()
|
||||
public void ShowTimer()
|
||||
{
|
||||
// TODO
|
||||
timerBackGround.transform.DOMoveX(timerShownPosition.position.x, timerTransitionTime);
|
||||
}
|
||||
public override void Show()
|
||||
public void HideTimer()
|
||||
{
|
||||
}
|
||||
timerBackGround.transform.DOMoveX(timerHiddenPosition.position.x, timerTransitionTime);
|
||||
// TODO
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -11,12 +11,14 @@ namespace Code.UI.Panels
|
||||
[SerializeField] private TMP_Text vyapWatermark;
|
||||
public override void Hide()
|
||||
{
|
||||
Shown = false;
|
||||
background.enabled = false;
|
||||
loadingTitle.enabled = false;
|
||||
vyapWatermark.enabled = false;
|
||||
}
|
||||
public override void Show()
|
||||
{
|
||||
Shown = true;
|
||||
background.enabled = true;
|
||||
loadingTitle.enabled = true;
|
||||
vyapWatermark.enabled = true;
|
||||
|
||||
@@ -38,15 +38,7 @@ namespace Code.UI.Panels
|
||||
|
||||
_cinematicDoorOpening = new(mainMenuUIVariables.MainMenuDoor, mainMenuUIVariables.DoorLight);
|
||||
}
|
||||
|
||||
public override void Show()
|
||||
{
|
||||
}
|
||||
|
||||
public override void Hide()
|
||||
{
|
||||
}
|
||||
|
||||
|
||||
private void OpenStart() => _cinematicDoorOpening.PreOpen(0);
|
||||
|
||||
private void OpenSettings() => _cinematicDoorOpening.PreOpen(1);
|
||||
|
||||
@@ -4,7 +4,8 @@ namespace Code.UI
|
||||
{
|
||||
public abstract class UIElement : MonoBehaviour
|
||||
{
|
||||
public abstract void Show();
|
||||
public abstract void Hide();
|
||||
public bool Shown { get; protected set; }
|
||||
public virtual void Show() => Shown = true;
|
||||
public virtual void Hide() => Shown = false;
|
||||
}
|
||||
}
|
||||
Reference in new issue
Block a user