Esempio n. 1
0
    public (GameTile.CantMoveReason, Unit) CanWalkOnTileInDirection(Vector2Int position,
                                                                    MovementDirectionUtilities.MovementDirection direction)
    {
        var endPosition = position + MovementDirectionUtilities.VectorFromDirection(direction);

        return(CanWalk(endPosition));
    }
Esempio n. 2
0
        private List <MovementDirectionUtilities.MovementDirection> FindSuitableDirections(
            Vector2Int position)
        {
            var movementDirections = EnumUtilities.GetValues <MovementDirectionUtilities.MovementDirection>();

            movementDirections.Remove(MovementDirectionUtilities.MovementDirection.None);
            var suitableDirections = new List <MovementDirectionUtilities.MovementDirection>();

            foreach (var diff in locations.Select(l => l - position))
            {
                foreach (var movementDirection in from movementDirection in movementDirections
                         where !suitableDirections.Contains(movementDirection)
                         let possible = CheckLocation(diff, movementDirection)
                                        where possible
                                        select movementDirection)
                {
                    suitableDirections.Add(movementDirection);
                    if (suitableDirections.Count == 4)
                    {
                        return(suitableDirections);
                    }
                }
            }

            return(suitableDirections);

            bool CheckLocation(Vector2Int difference, MovementDirectionUtilities.MovementDirection movementDirection)
            {
                return(difference == MovementDirectionUtilities.VectorFromDirection(movementDirection));
            }
        }
Esempio n. 3
0
    protected Coroutine Move(MovementDirectionUtilities.MovementDirection movementDirection, bool force = false)
    {
        if (movementDirection != MovementDirectionUtilities.MovementDirection.None)
        {
            return(Move(currentPosition + MovementDirectionUtilities.VectorFromDirection(movementDirection), force));
        }

        return(null);
    }
Esempio n. 4
0
    public virtual void MakeAction()
    {
        switch (movementSettings.typeOfMovement)
        {
        case TypeOfMovement.None:
            break;

        case TypeOfMovement.Constant:
            Move(movementSettings.movementDirection);
            break;

        case TypeOfMovement.Random:
            AssignRandomDirection();
            Move(movementSettings.movementDirection);
            break;

        case TypeOfMovement.DefinedArea:
            movementSettings.movementDirection =
                movementSettings.definedArea.GetMovementDirectionWithinArea(currentPosition);
            Move(movementSettings.movementDirection);
            break;

        case TypeOfMovement.FollowPlayer:
            var(canMove, nextStep) = pathfinder.FindPath(Player.Instance.CurrentPosition, currentPosition);
            if (canMove)
            {
                movementSettings.movementDirection =
                    MovementDirectionUtilities.DirectionFromDifference(currentPosition, nextStep);
                Move(movementSettings.movementDirection);
            }
            else
            {
                (canMove, nextStep) = pathfinder.FindPath(Player.Instance.CurrentPosition, currentPosition, true);
                if (canMove &&
                    GameSessionManager.Instance.currentSceneObjects.currentWorld.CanWalk(nextStep).Item1 ==
                    GameTile.CantMoveReason.None)
                {
                    movementSettings.movementDirection =
                        MovementDirectionUtilities.DirectionFromDifference(currentPosition, nextStep);
                    Move(movementSettings.movementDirection);
                }
            }

            break;

        case TypeOfMovement.SpecificArea:
            movementSettings.movementDirection =
                movementSettings.specificArea.GetNextMovementDirection(CurrentPosition);
            Move(movementSettings.movementDirection);
            break;

        default:
            throw new ArgumentOutOfRangeException();
        }
    }
Esempio n. 5
0
        public MovementDirectionUtilities.MovementDirection GetNextMovementDirection(Vector2Int currentPosition)
        {
            var nextMoveLocation = GetNextMoveLocation(currentPosition);

            return(MovementDirectionUtilities.DirectionFromDifference(currentPosition, nextMoveLocation));
        }
Esempio n. 6
0
    public GameTile GetTileInDirection(Vector2Int position, MovementDirectionUtilities.MovementDirection direction)
    {
        var vectorFromDirection = MovementDirectionUtilities.VectorFromDirection(direction);

        return(GameSessionManager.Instance.currentSceneObjects.currentWorld.GetTile(position + vectorFromDirection));
    }
Esempio n. 7
0
    private void Update()
    {
        if (!acceptor.DontReceiveAnyInput)
        {
            if (acceptor.CanToggleInventory())
            {
                if (Input.GetButtonDown("Inventory"))
                {
                    GameUI.Instance.ToggleInventory();
                }
            }

            if (Input.GetButtonDown("Cancel"))
            {
                if (GameUI.Instance.uiInventory.open)
                {
                    GameUI.Instance.uiInventory.ApplyCancel();
                }
                else if (acceptor.MainMenuOpened)
                {
                    GameSessionManager.Instance.ApplyCancelToMainMenu();
                }
                else if (acceptor.CanToggleMainMenu())
                {
                    GameSessionManager.Instance.OpenMainMenu();
                }
                else if (acceptor.ConversationInProgress)
                {
                    ((HeartRhythmDialogueUI)DialogueManager.DialogueUI).FastForward();
                }
            }

            if (Input.GetButtonDown("Submit"))
            {
                if (acceptor.ConversationInProgress)
                {
                    ((HeartRhythmDialogueUI)DialogueManager.DialogueUI).FastForward();
                }
                else if (GameUI.Instance.uiInventory.open)
                {
                    GameUI.Instance.uiInventory.ApplySubmit();
                }
            }

            int horizontal;
            int vertical;
            switch (GameSessionManager.Instance.CurrentGameState)
            {
            case GameSessionManager.GameState.Peace
                when GameSessionManager.Instance.playState == GameSessionManager.PlayState.Basic:
                horizontal = Mathf.RoundToInt(Input.GetAxisRaw("Horizontal"));
                vertical   = Mathf.RoundToInt(Input.GetAxisRaw("Vertical"));
                break;

            case GameSessionManager.GameState.Peace
                when GameSessionManager.Instance.playState == GameSessionManager.PlayState.DanceMove:
            case GameSessionManager.GameState.Fight:
                horizontal = Input.GetButtonDown("Left")
                                                ? -1
                                                : Input.GetButtonDown("Right")
                                                        ? 1
                                                        : 0;
                vertical = Input.GetButtonDown("Down")
                                                ? -1
                                                : Input.GetButtonDown("Up")
                                                        ? 1
                                                        : 0;
                break;

            default:
                throw new ArgumentOutOfRangeException();
            }

            var movementDirection = MovementDirectionUtilities.DirectionFromInput(horizontal, vertical);
            if (movementDirection != MovementDirectionUtilities.MovementDirection.None)
            {
                if (acceptor.AcceptInput())
                {
                    if (GameLogic.Instance.inputDebugEnabled)
                    {
                        Debug.Log(
                            $"Music: {AudioManager.Instance.musicAudioSource.time}"
                            );
                    }

                    switch (GameSessionManager.Instance.CurrentGameState)
                    {
                    case GameSessionManager.GameState.Peace:
                        break;

                    case GameSessionManager.GameState.Fight:
                        acceptor.ReceivedInputThisTimeFrame = true;
                        acceptor.FirstBattleInputDone       = true;
                        break;

                    default:
                        throw new ArgumentOutOfRangeException();
                    }

                    Player.Instance.ReceiveInput(movementDirection);

                    switch (GameSessionManager.Instance.CurrentGameState)
                    {
                    case GameSessionManager.GameState.Peace:
                        break;

                    case GameSessionManager.GameState.Fight:
                        ((InGameAudioManager)AudioManager.Instance).ApplyBeat();
                        break;

                    default:
                        throw new ArgumentOutOfRangeException();
                    }
                }
                else
                {
                    if (acceptor.FirstBattleInputDone)
                    {
                        switch (GameSessionManager.Instance.CurrentGameState)
                        {
                        case GameSessionManager.GameState.Peace:
                            break;

                        case GameSessionManager.GameState.Fight:
                            if (GameLogic.Instance.inputDebugEnabled)
                            {
                                switch (acceptor.lastWrongInput)
                                {
                                case WrongInputType.InvalidInputTime:
                                    Debug.LogError("Invalid Input Time!");
                                    break;

                                case WrongInputType.AlreadyReceivedAnInput:
                                    Debug.LogError("Already Received an Input during this Beat!");
                                    break;

                                default:
                                    throw new ArgumentOutOfRangeException();
                                }
                            }

                            Player.Instance.InvalidInputTime();
                            break;

                        default:
                            throw new ArgumentOutOfRangeException();
                        }
                    }
                }
            }
            else if (Input.GetKeyDown(KeyCode.Space))
            {
                if (acceptor.AcceptInput())
                {
                    if (GameLogic.Instance.inputDebugEnabled)
                    {
                        Debug.Log(
                            $"Music: {AudioManager.Instance.musicAudioSource.time}"
                            );
                    }

                    if (GameSessionManager.Instance.playState == GameSessionManager.PlayState.DanceMove &&
                        SaveSystem.currentGameSave.globalVariables.maxDanceMoveSymbols > 2)
                    {
                        Player.Instance.EndDanceMove(true);
                    }
                }
            }
        }
    }