Ethan_M

ttt

Jul 21st, 2025
539
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C# 4.63 KB | None | 0 0
  1. using System;
  2. using Common;
  3. using Common.AssetManagement;
  4. using GamePlay;
  5. using GamePlay.Audio;
  6. using GamePlay.Data;
  7. using GamePlay.Palette;
  8. using GamePlay.Services;
  9. using Mirror;
  10. using Networking.Client;
  11. using Networking.Messages.Requests;
  12. using R3;
  13. using UI;
  14. using UnityEngine;
  15. using VoxelMap;
  16. using Object = UnityEngine.Object;
  17.  
  18. namespace Infrastructure.States
  19. {
  20.     public class GameLoopState : IPayloadedState<(IClient client, MapProvider mapProvider)>
  21.     {
  22.         private readonly IAssetProvider _assets;
  23.         private readonly IAvatarLoader _avatarLoader;
  24.         private readonly GameStateMachine _gameStateMachine;
  25.         private readonly IInputService _inputService;
  26.         private readonly IStaticDataService _staticData;
  27.         private readonly IStorageService _storageService;
  28.         private readonly IUIFactory _uiFactory;
  29.         private Character _character;
  30.         private IClient _client;
  31.         private InGameUI _inGameUI;
  32.         private RectPalette _rectPalette;
  33.         private IDisposable _disposable;
  34.  
  35.         public GameLoopState(GameStateMachine gameStateMachine, IStaticDataService staticData, IAssetProvider assets,
  36.             IUIFactory uiFactory,
  37.             IInputService inputService,
  38.             IStorageService storageService,
  39.             IAvatarLoader avatarLoader)
  40.         {
  41.             _gameStateMachine = gameStateMachine;
  42.             _staticData = staticData;
  43.             _assets = assets;
  44.             _uiFactory = uiFactory;
  45.             _inputService = inputService;
  46.             _storageService = storageService;
  47.             _avatarLoader = avatarLoader;
  48.         }
  49.  
  50.         public void Enter((IClient client, MapProvider mapProvider) payload)
  51.         {
  52.             AudioPlayer.Initialize(_assets);
  53.             _client = payload.client;
  54.             _inGameUI = _uiFactory.CreateInGameUI(_inputService, _storageService);
  55.             _client.GameTimeChanged += _inGameUI.TimeInfo.ChangeGameTime;
  56.             _client.RespawnTimeChanged += _inGameUI.TimeInfo.ChangeRespawnTime;
  57.             _client.CharacterSpawned += OnCharacterSpawned;
  58.             _client.CharacterDespawned += OnCharacterDespawned;
  59.             _inGameUI.ChooseClassMenu.ChangeClassButtonPressed += OnChangeClassButtonPressed;
  60.             _inGameUI.InGameMenu.ExitButtonPressed += OnExitButtonPressed;
  61.             _inGameUI.Hud.InventoryPresenter.Construct(_inputService);
  62.             _rectPalette = new RectPalette(_staticData);
  63.             _inGameUI.Hud.PalettePresenter.Construct(_inputService, _rectPalette);
  64.             _inGameUI.Hud.PalettePresenter.Initialize();
  65.             _inGameUI.Hud.MiniMap.Construct(payload.mapProvider);
  66.             _inGameUI.Hud.MiniMap.gameObject.SetActive(false);
  67.             _disposable = _storageService.Subscribe<MouseSettingsData>(OnMouseSettingsChanged);
  68.         }
  69.  
  70.         public void Exit()
  71.         {
  72.             _client.GameTimeChanged -= _inGameUI.TimeInfo.ChangeGameTime;
  73.             _client.RespawnTimeChanged -= _inGameUI.TimeInfo.ChangeRespawnTime;
  74.             _client.CharacterSpawned -= OnCharacterSpawned;
  75.             _client.CharacterDespawned -= OnCharacterDespawned;
  76.             _inGameUI.ChooseClassMenu.ChangeClassButtonPressed -= OnChangeClassButtonPressed;
  77.             _inGameUI.InGameMenu.ExitButtonPressed -= OnExitButtonPressed;
  78.             _disposable.Dispose();
  79.             Object.Destroy(_inGameUI.gameObject);
  80.         }
  81.  
  82.         private void OnCharacterSpawned(Character character)
  83.         {
  84.             _character = character;
  85.             _character.HealthSystem.HealthChanged += _inGameUI.Hud.HealthCounter.SetHealthValue;
  86.             _inGameUI.Hud.gameObject.SetActive(true);
  87.             _inGameUI.Hud.InventoryPresenter.gameObject.SetActive(true);
  88.             _inGameUI.Hud.InventoryPresenter.Initialize(character.Inventory);
  89.             _rectPalette.SelectedColor
  90.                 .Subscribe(color => _character.Inventory.ApplyEffectToItems<Block>(block => block.Data.SelectedColor = color)).AddTo(character);
  91.             _inGameUI.Hud.MiniMap.SetCharacter(character);
  92.             _inGameUI.Hud.MiniMap.gameObject.SetActive(true);
  93.         }
  94.  
  95.         private void OnCharacterDespawned(Character character)
  96.         {
  97.             _character.HealthSystem.HealthChanged -= _inGameUI.Hud.HealthCounter.SetHealthValue;
  98.             _inGameUI.Hud.InventoryPresenter.gameObject.SetActive(false);
  99.             _inGameUI.Hud.InventoryPresenter.ResetInventory();
  100.             _inGameUI.Hud.MiniMap.gameObject.SetActive(false);
  101.         }
  102.  
  103.         private void OnMouseSettingsChanged(MouseSettingsData mouseSettingsData)
  104.         {
  105.             CrosshairSprite crosshairSprite = _staticData.GetCrosshairSprite(mouseSettingsData.CrosshairId);
  106.             _inGameUI.Hud.SetCrosshairIcon(crosshairSprite.Sprite);
  107.         }
  108.  
  109.         private void OnChangeClassButtonPressed(GameClass gameClass)
  110.         {
  111.             NetworkClient.Send(new ChangeClassRequest(gameClass));
  112.         }
  113.  
  114.         private async void OnGameFinished()
  115.         {
  116.             try
  117.             {
  118.                 await _inGameUI.ShowFinalStatisticAsync();
  119.                 _gameStateMachine.Enter<GameMenuState>();
  120.             }
  121.             catch (Exception e)
  122.             {
  123.                 Debug.LogException(e);
  124.             }
  125.         }
  126.  
  127.         private void OnExitButtonPressed()
  128.         {
  129.             _client.Stop();
  130.             _gameStateMachine.Enter<GameMenuState>();
  131.         }
  132.     }
  133. }
Advertisement
Add Comment
Please, Sign In to add comment