Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- using System;
- using Common;
- using Common.AssetManagement;
- using GamePlay;
- using GamePlay.Audio;
- using GamePlay.Data;
- using GamePlay.Palette;
- using GamePlay.Services;
- using Mirror;
- using Networking.Client;
- using Networking.Messages.Requests;
- using R3;
- using UI;
- using UnityEngine;
- using VoxelMap;
- using Object = UnityEngine.Object;
- namespace Infrastructure.States
- {
- public class GameLoopState : IPayloadedState<(IClient client, MapProvider mapProvider)>
- {
- private readonly IAssetProvider _assets;
- private readonly IAvatarLoader _avatarLoader;
- private readonly GameStateMachine _gameStateMachine;
- private readonly IInputService _inputService;
- private readonly IStaticDataService _staticData;
- private readonly IStorageService _storageService;
- private readonly IUIFactory _uiFactory;
- private Character _character;
- private IClient _client;
- private InGameUI _inGameUI;
- private RectPalette _rectPalette;
- private IDisposable _disposable;
- public GameLoopState(GameStateMachine gameStateMachine, IStaticDataService staticData, IAssetProvider assets,
- IUIFactory uiFactory,
- IInputService inputService,
- IStorageService storageService,
- IAvatarLoader avatarLoader)
- {
- _gameStateMachine = gameStateMachine;
- _staticData = staticData;
- _assets = assets;
- _uiFactory = uiFactory;
- _inputService = inputService;
- _storageService = storageService;
- _avatarLoader = avatarLoader;
- }
- public void Enter((IClient client, MapProvider mapProvider) payload)
- {
- AudioPlayer.Initialize(_assets);
- _client = payload.client;
- _inGameUI = _uiFactory.CreateInGameUI(_inputService, _storageService);
- _client.GameTimeChanged += _inGameUI.TimeInfo.ChangeGameTime;
- _client.RespawnTimeChanged += _inGameUI.TimeInfo.ChangeRespawnTime;
- _client.CharacterSpawned += OnCharacterSpawned;
- _client.CharacterDespawned += OnCharacterDespawned;
- _inGameUI.ChooseClassMenu.ChangeClassButtonPressed += OnChangeClassButtonPressed;
- _inGameUI.InGameMenu.ExitButtonPressed += OnExitButtonPressed;
- _inGameUI.Hud.InventoryPresenter.Construct(_inputService);
- _rectPalette = new RectPalette(_staticData);
- _inGameUI.Hud.PalettePresenter.Construct(_inputService, _rectPalette);
- _inGameUI.Hud.PalettePresenter.Initialize();
- _inGameUI.Hud.MiniMap.Construct(payload.mapProvider);
- _inGameUI.Hud.MiniMap.gameObject.SetActive(false);
- _disposable = _storageService.Subscribe<MouseSettingsData>(OnMouseSettingsChanged);
- }
- public void Exit()
- {
- _client.GameTimeChanged -= _inGameUI.TimeInfo.ChangeGameTime;
- _client.RespawnTimeChanged -= _inGameUI.TimeInfo.ChangeRespawnTime;
- _client.CharacterSpawned -= OnCharacterSpawned;
- _client.CharacterDespawned -= OnCharacterDespawned;
- _inGameUI.ChooseClassMenu.ChangeClassButtonPressed -= OnChangeClassButtonPressed;
- _inGameUI.InGameMenu.ExitButtonPressed -= OnExitButtonPressed;
- _disposable.Dispose();
- Object.Destroy(_inGameUI.gameObject);
- }
- private void OnCharacterSpawned(Character character)
- {
- _character = character;
- _character.HealthSystem.HealthChanged += _inGameUI.Hud.HealthCounter.SetHealthValue;
- _inGameUI.Hud.gameObject.SetActive(true);
- _inGameUI.Hud.InventoryPresenter.gameObject.SetActive(true);
- _inGameUI.Hud.InventoryPresenter.Initialize(character.Inventory);
- _rectPalette.SelectedColor
- .Subscribe(color => _character.Inventory.ApplyEffectToItems<Block>(block => block.Data.SelectedColor = color)).AddTo(character);
- _inGameUI.Hud.MiniMap.SetCharacter(character);
- _inGameUI.Hud.MiniMap.gameObject.SetActive(true);
- }
- private void OnCharacterDespawned(Character character)
- {
- _character.HealthSystem.HealthChanged -= _inGameUI.Hud.HealthCounter.SetHealthValue;
- _inGameUI.Hud.InventoryPresenter.gameObject.SetActive(false);
- _inGameUI.Hud.InventoryPresenter.ResetInventory();
- _inGameUI.Hud.MiniMap.gameObject.SetActive(false);
- }
- private void OnMouseSettingsChanged(MouseSettingsData mouseSettingsData)
- {
- CrosshairSprite crosshairSprite = _staticData.GetCrosshairSprite(mouseSettingsData.CrosshairId);
- _inGameUI.Hud.SetCrosshairIcon(crosshairSprite.Sprite);
- }
- private void OnChangeClassButtonPressed(GameClass gameClass)
- {
- NetworkClient.Send(new ChangeClassRequest(gameClass));
- }
- private async void OnGameFinished()
- {
- try
- {
- await _inGameUI.ShowFinalStatisticAsync();
- _gameStateMachine.Enter<GameMenuState>();
- }
- catch (Exception e)
- {
- Debug.LogException(e);
- }
- }
- private void OnExitButtonPressed()
- {
- _client.Stop();
- _gameStateMachine.Enter<GameMenuState>();
- }
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment