Ejemplo n.º 1
0
    // ReSharper disable once UnusedMember.Local
    public void Awake()
    {
        InitServices();

        var nodeViewModels = InitNodeViewModels();

        _nodeViewModels.AddRange(nodeViewModels);

        var playerActorViewModel = PlayerPersonInitiator.InitPlayerActor(nodeViewModels, ActorViewModels);

        AddPlayerActorEventHandlers(playerActorViewModel);

        CreateMonsterViewModels(nodeViewModels);
        CreateStaticObjectViewModels(nodeViewModels);

        FowManager.InitViewModels(nodeViewModels, ActorViewModels, _staticObjectViewModels);

        //TODO Разобраться, почему остаются блоки от перемещения при использовании перехода
        _commandBlockerService.DropBlockers();

        // Изначально канвас отключен.
        // Эта операция нужна, чтобы Start у всяких панелей выполнялся после инициализации
        // таких сервисов, как ISectorUiState. Потому что есть много элементов UI,
        // которые зависят от значения ActiveActor.
        WindowCanvas.gameObject.SetActive(true);
    }
Ejemplo n.º 2
0
    private async Task StartGameLoopUpdateAsync(CancellationToken cancelToken)
    {
        while (!_player.MainPerson.GetModule <ISurvivalModule>().IsDead)
        {
            cancelToken.ThrowIfCancellationRequested();

            try
            {
                await _player.Globe.UpdateAsync();
            }
            catch (Exception exception)
            {
                Debug.LogError(exception);
                return;
            }

            ClearupActionUiState();

            var animationBlockerTask = _commandBlockerService.WaitBlockersAsync();
            var fuseDelayTask        = Task.Delay(10_000);

            await Task.WhenAny(animationBlockerTask, fuseDelayTask);

            _commandBlockerService.DropBlockers();
        }
    }
Ejemplo n.º 3
0
        private void HandleScreenChanging()
        {
            _animationBlockerService.DropBlockers();

            if (_sectorViewModel is not null)
            {
                _sectorViewModel.UnsubscribeEventHandlers();
            }
            else
            {
                Debug.Fail("Sector view model must initalized before user performs transition and change screen.");
            }

            if (_uiState.ActiveActor is not null)
            {
                _uiState.ActiveActor.Actor.Person.GetModule <ICombatActModule>().IsCombatMode = false;
                _uiState.ActiveActor.Actor.OpenedContainer -= Actor_OpenedContainer;
                _uiState.ActiveActor.Actor.BeginTransitionToOtherSector -= Actor_BeginTransitionToOtherSector;
            }

            _bottomMenu.UnsubscribeEvents();

            _uiState.ActiveActor       = null;
            _uiState.SelectedViewModel = null;
        }
Ejemplo n.º 4
0
        private async Task StartGameLoopUpdateAsync(CancellationToken cancelToken)
        {
            while (_gameLoopContext.HasNextIteration)
            {
                cancelToken.ThrowIfCancellationRequested();

                try
                {
                    await _gameLoopContext.UpdateAsync(cancelToken);
                }
                catch (Exception exception)
                {
                    ErrorOccured?.Invoke(this, new ErrorOccuredEventArgs(exception));
                }

                var animationBlockerTask = _animationBlockerService.WaitBlockersAsync();
                var fuseDelayTask        = Task.Delay(10_000, cancelToken);

                await Task.WhenAny(animationBlockerTask, fuseDelayTask).ConfigureAwait(false);

                _animationBlockerService.DropBlockers();
            }
        }