diff --git a/Game/CourierOld/Assets/Code/App/AppStates/GameOverState.cs b/Game/CourierOld/Assets/Code/App/AppStates/GameOverState.cs index 8da0b7d..1f7def8 100644 --- a/Game/CourierOld/Assets/Code/App/AppStates/GameOverState.cs +++ b/Game/CourierOld/Assets/Code/App/AppStates/GameOverState.cs @@ -1,5 +1,6 @@ using Code.App.StateMachine; using Code.StateMachine; +using Code.UI; namespace Code.App.AppStates { @@ -10,6 +11,9 @@ namespace Code.App.AppStates public override void EnterState() { + Context.UIService.LoadingScreen.Show(); + Context.UIService.SwitchPanelTo(UIPanel.GameOver); + base.EnterState(); } diff --git a/Game/CourierOld/Assets/Code/App/AppStates/GameplayState.cs b/Game/CourierOld/Assets/Code/App/AppStates/GameplayState.cs index 0853031..0c14f2f 100644 --- a/Game/CourierOld/Assets/Code/App/AppStates/GameplayState.cs +++ b/Game/CourierOld/Assets/Code/App/AppStates/GameplayState.cs @@ -31,6 +31,8 @@ namespace Code.App.AppStates _playerMoney = Context.PlayerFactory.CreatePlayerMoney(); _playerHealth = Context.PlayerFactory.CreatePlayerHealth(); + + _playerHealth.OnDeath += EndGame; Context.InputService.DebugBindAction((int)ActionMappings.Debug, (int)DebugActions.GiveHealth, GiveHealth); Context.InputService.DebugBindAction((int)ActionMappings.Debug, (int)DebugActions.GiveMoney, GiveMoney); @@ -46,6 +48,8 @@ namespace Code.App.AppStates base.EnterState(); } + + // Debug private void GiveHealth(InputAction.CallbackContext context) { UnityEngine.Debug.Log("Giving health"); @@ -74,6 +78,11 @@ namespace Code.App.AppStates { } + private void EndGame() + { + Context.StateMachine.SwitchState(AppState.GameOver); + } + public override void ExitState() { _playerHealth = null; diff --git a/Game/CourierOld/Assets/Code/App/BootstrapInstaller.cs b/Game/CourierOld/Assets/Code/App/BootstrapInstaller.cs index 1af8d6b..5925e27 100644 --- a/Game/CourierOld/Assets/Code/App/BootstrapInstaller.cs +++ b/Game/CourierOld/Assets/Code/App/BootstrapInstaller.cs @@ -26,6 +26,7 @@ namespace Code.App containerBuilder.AddSingleton(typeof(PlayerFactory), typeof(IPlayerFactory)); InitializeCamera(containerBuilder, staticDataService); + containerBuilder.AddSingleton(typeof(UIFactory), typeof(IUIFactory)); containerBuilder.AddSingleton(typeof(UIService), typeof(IUIService)); containerBuilder.AddSingleton(typeof(SceneLoaderService), typeof(ISceneLoaderService)); diff --git a/Game/CourierOld/Assets/Code/UI/GameplayPanel.cs b/Game/CourierOld/Assets/Code/UI/GameplayPanel.cs index d583f98..40e4da5 100644 --- a/Game/CourierOld/Assets/Code/UI/GameplayPanel.cs +++ b/Game/CourierOld/Assets/Code/UI/GameplayPanel.cs @@ -10,22 +10,28 @@ namespace Code.UI { [SerializeField] private Image dispatcher; [SerializeField] private TMP_Text timer; - - private HealthBar _healthBar; - private MoneyBar _moneyBar; + [SerializeField] private Image healthBar; + [SerializeField] private TMP_Text moneyText; - public void Initialize(PlayerMoney money, PlayerHealth health, HealthBar healthBar = null, MoneyBar moneyBar = null) + private void MoneyUpdate(int count, int money) { - _healthBar = healthBar; - _moneyBar = moneyBar; - - money.OnMoneyGet += _moneyBar.MoneyUpdate; - money.OnMoneyLoose += _moneyBar.MoneyUpdate; - _moneyBar.MoneyUpdate(0,money.Money); - - health.OnDamage += _healthBar.HealthUpdate; - _healthBar.HealthUpdate(0,health); + // TODO Анимация получения\потери + moneyText.text = money.ToString(); + } + private void HealthUpdate(int count, PlayerHealth health) + { + // TODO Анимация потери + float fillAmount = (float)health.HealthPoints / health.MaxHealthPoints; + healthBar.fillAmount = fillAmount; + } + public void Initialize(PlayerMoney money, PlayerHealth health) + { + money.OnMoneyGet += MoneyUpdate; + money.OnMoneyLoose += MoneyUpdate; + MoneyUpdate(0,money.Money); + health.OnDamage += HealthUpdate; + HealthUpdate(0,health); } private void Update() { diff --git a/Game/CourierOld/Assets/Code/UI/IUIFactory.cs b/Game/CourierOld/Assets/Code/UI/IUIFactory.cs index 624bd52..986f99f 100644 --- a/Game/CourierOld/Assets/Code/UI/IUIFactory.cs +++ b/Game/CourierOld/Assets/Code/UI/IUIFactory.cs @@ -5,7 +5,7 @@ namespace Code.UI { public interface IUIFactory { - MoneyBar CreateMoneybar(Canvas canvas); - HealthBar CreateHealthbar(Canvas canvas); + Canvas CreateCanvas(); + UIElement CreatePanel(Canvas canvas, UIPanel uiPanel); } } \ No newline at end of file diff --git a/Game/CourierOld/Assets/Code/UI/UIFactory.cs b/Game/CourierOld/Assets/Code/UI/UIFactory.cs index 379b7e6..aff1537 100644 --- a/Game/CourierOld/Assets/Code/UI/UIFactory.cs +++ b/Game/CourierOld/Assets/Code/UI/UIFactory.cs @@ -1,4 +1,3 @@ -using Code.UI.GameplayElements; using Reflex.Attributes; using UnityEngine; @@ -6,10 +5,20 @@ namespace Code.UI { public class UIFactory : IUIFactory { - [Inject] private HealthBar healthbarPrefab; - [Inject] private MoneyBar moneybarPrefab; + [Inject] private UIElement[] _uiPanelsPrefabs; + [Inject] private Canvas _canvasPrefab; - public MoneyBar CreateMoneybar(Canvas canvas) => Object.Instantiate(moneybarPrefab, canvas.transform); - public HealthBar CreateHealthbar(Canvas canvas) => Object.Instantiate(healthbarPrefab, canvas.transform); + public Canvas CreateCanvas() + { + Canvas canvas = Object.Instantiate(_canvasPrefab); + Object.DontDestroyOnLoad(canvas); + + return canvas; + } + + public UIElement CreatePanel(Canvas canvas, UIPanel uiPanel) + { + return Object.Instantiate(_uiPanelsPrefabs[(int)uiPanel], canvas.transform); + } } } \ No newline at end of file diff --git a/Game/CourierOld/Assets/Code/UI/UIPanel.cs b/Game/CourierOld/Assets/Code/UI/UIPanel.cs index ebb0900..79a9fbb 100644 --- a/Game/CourierOld/Assets/Code/UI/UIPanel.cs +++ b/Game/CourierOld/Assets/Code/UI/UIPanel.cs @@ -4,6 +4,7 @@ namespace Code.UI { Loading, MainMenu, - Gameplay + Gameplay, + GameOver } } \ No newline at end of file diff --git a/Game/CourierOld/Assets/Code/UI/UIService.cs b/Game/CourierOld/Assets/Code/UI/UIService.cs index c69d9fa..ffb5264 100644 --- a/Game/CourierOld/Assets/Code/UI/UIService.cs +++ b/Game/CourierOld/Assets/Code/UI/UIService.cs @@ -4,19 +4,18 @@ namespace Code.UI { public class UIService : IUIService { - private UIElement[] _uiPanelsPrefabs; private Canvas _canvas; + private IUIFactory _factory; + public UIElement CurrentPanel { get; private set; } public LoadingPanel LoadingScreen { get; private set; } - - public UIService(UIElement[] uiPanelsPrefabs, Canvas canvas) + + public UIService(IUIFactory factory) { - _canvas = Object.Instantiate(canvas); - Object.DontDestroyOnLoad(_canvas); + _factory = factory; + _canvas = _factory.CreateCanvas(); - _uiPanelsPrefabs = uiPanelsPrefabs; - - LoadingScreen = (LoadingPanel) Object.Instantiate(_uiPanelsPrefabs[(int)UIPanel.Loading], _canvas.transform); + LoadingScreen = (LoadingPanel) _factory.CreatePanel(_canvas,UIPanel.Loading); } public void EnablePanel() => CurrentPanel.gameObject.SetActive(true); @@ -26,7 +25,7 @@ namespace Code.UI { if(CurrentPanel) Object.Destroy(CurrentPanel.gameObject); - CurrentPanel = Object.Instantiate(_uiPanelsPrefabs[(int)uiPanel], _canvas.transform); + CurrentPanel = _factory.CreatePanel(_canvas, uiPanel); } } } \ No newline at end of file diff --git a/Game/CourierOld/Assets/Resources/UI/Gameplay.prefab b/Game/CourierOld/Assets/Resources/UI/Gameplay.prefab index 1e5ca08..47a15bb 100644 --- a/Game/CourierOld/Assets/Resources/UI/Gameplay.prefab +++ b/Game/CourierOld/Assets/Resources/UI/Gameplay.prefab @@ -231,10 +231,10 @@ MonoBehaviour: m_Script: {fileID: 11500000, guid: d79893d2e9024719924dc5c15d582e33, type: 3} m_Name: m_EditorClassIdentifier: Assembly-CSharp::Code.UI.GameplayPanel - healthBar: {fileID: 2665776386830848828} dispatcher: {fileID: 3222823750140455214} - moneyText: {fileID: 6387758596913220167} timer: {fileID: 1501140738844702411} + healthBar: {fileID: 2665776386830848828} + moneyText: {fileID: 6387758596913220167} --- !u!1 &1919154497512289354 GameObject: m_ObjectHideFlags: 0 @@ -270,7 +270,7 @@ RectTransform: m_AnchorMin: {x: 1, y: 1} m_AnchorMax: {x: 1, y: 1} m_AnchoredPosition: {x: 0, y: 0} - m_SizeDelta: {x: 135.31158, y: 37.73999} + m_SizeDelta: {x: 319.71, y: 107.84} m_Pivot: {x: 1, y: 1} --- !u!222 &9096664839021089168 CanvasRenderer: @@ -327,14 +327,14 @@ MonoBehaviour: m_faceColor: serializedVersion: 2 rgba: 4294967295 - m_fontSize: 36 - m_fontSizeBase: 36 + m_fontSize: 105.6 + m_fontSizeBase: 105.6 m_fontWeight: 400 m_enableAutoSizing: 0 m_fontSizeMin: 18 m_fontSizeMax: 72 m_fontStyle: 0 - m_HorizontalAlignment: 1 + m_HorizontalAlignment: 2 m_VerticalAlignment: 512 m_textAlignment: 65535 m_characterSpacing: 0 @@ -406,7 +406,7 @@ RectTransform: m_AnchorMin: {x: 0, y: 0} m_AnchorMax: {x: 0, y: 0} m_AnchoredPosition: {x: 0, y: 0} - m_SizeDelta: {x: 114.76929, y: 128.45679} + m_SizeDelta: {x: 291.7762, y: 376.2665} m_Pivot: {x: 0, y: 0} --- !u!222 &5289021947733735622 CanvasRenderer: @@ -481,7 +481,7 @@ RectTransform: m_AnchorMin: {x: 1, y: 1} m_AnchorMax: {x: 1, y: 1} m_AnchoredPosition: {x: 0, y: 0} - m_SizeDelta: {x: 139.10437, y: 37.73999} + m_SizeDelta: {x: 319.7096, y: 107.842} m_Pivot: {x: 1, y: 1} --- !u!222 &84950586336650232 CanvasRenderer: @@ -555,8 +555,8 @@ RectTransform: m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} m_AnchorMin: {x: 1, y: 1} m_AnchorMax: {x: 1, y: 1} - m_AnchoredPosition: {x: 1, y: -35} - m_SizeDelta: {x: 117.510925, y: 46.700012} + m_AnchoredPosition: {x: -2, y: -107} + m_SizeDelta: {x: 269.7093, y: 80.867} m_Pivot: {x: 1, y: 1} --- !u!222 &1088048040329591264 CanvasRenderer: @@ -613,8 +613,8 @@ MonoBehaviour: m_faceColor: serializedVersion: 2 rgba: 4294967295 - m_fontSize: 36 - m_fontSizeBase: 36 + m_fontSize: 71 + m_fontSizeBase: 71 m_fontWeight: 400 m_enableAutoSizing: 0 m_fontSizeMin: 18 @@ -692,7 +692,7 @@ RectTransform: m_AnchorMin: {x: 0, y: 1} m_AnchorMax: {x: 0, y: 1} m_AnchoredPosition: {x: 0, y: 0} - m_SizeDelta: {x: 240.0957, y: 46.76001} + m_SizeDelta: {x: 494.098, y: 102.7266} m_Pivot: {x: 0, y: 1} --- !u!222 &1154202756743218800 CanvasRenderer: @@ -766,8 +766,8 @@ RectTransform: m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} m_AnchorMin: {x: 1, y: 1} m_AnchorMax: {x: 1, y: 1} - m_AnchoredPosition: {x: 1, y: -35} - m_SizeDelta: {x: 109.52362, y: 38.674713} + m_AnchoredPosition: {x: -2, y: -107.004395} + m_SizeDelta: {x: 269.71, y: 80.867} m_Pivot: {x: 1, y: 1} --- !u!222 &8440000272582601589 CanvasRenderer: