public (GameTile.CantMoveReason, Unit) CanWalkOnTileInDirection(Vector2Int position, MovementDirectionUtilities.MovementDirection direction) { var endPosition = position + MovementDirectionUtilities.VectorFromDirection(direction); return(CanWalk(endPosition)); }
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)); } }
protected Coroutine Move(MovementDirectionUtilities.MovementDirection movementDirection, bool force = false) { if (movementDirection != MovementDirectionUtilities.MovementDirection.None) { return(Move(currentPosition + MovementDirectionUtilities.VectorFromDirection(movementDirection), force)); } return(null); }
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(); } }
public MovementDirectionUtilities.MovementDirection GetNextMovementDirection(Vector2Int currentPosition) { var nextMoveLocation = GetNextMoveLocation(currentPosition); return(MovementDirectionUtilities.DirectionFromDifference(currentPosition, nextMoveLocation)); }
public GameTile GetTileInDirection(Vector2Int position, MovementDirectionUtilities.MovementDirection direction) { var vectorFromDirection = MovementDirectionUtilities.VectorFromDirection(direction); return(GameSessionManager.Instance.currentSceneObjects.currentWorld.GetTile(position + vectorFromDirection)); }
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); } } } } }