private Vector2 GetNextPosition(Vector2 currentPosition, TraversalManager.TraversalMove move = TraversalManager.TraversalMove.NONE) { var nextPosition = currentPosition; switch (move) { case TraversalManager.TraversalMove.Up: nextPosition = new Vector2(currentPosition.x, currentPosition.y - 1); break; case TraversalManager.TraversalMove.Right: nextPosition = new Vector2(currentPosition.x + 1, currentPosition.y); break; case TraversalManager.TraversalMove.Down: nextPosition = new Vector2(currentPosition.x, currentPosition.y + 1); break; case TraversalManager.TraversalMove.Left: nextPosition = new Vector2(currentPosition.x - 1, currentPosition.y); break; } return(nextPosition); }
public void UI_RegisterTraversalMove(string traversalMoveInput) { TraversalManager.TraversalMove traversalMove = TraversalManager.TraversalMove.NONE; switch (traversalMoveInput) { case "Up": traversalMove = TraversalManager.TraversalMove.Up; break; case "Right": traversalMove = TraversalManager.TraversalMove.Right; break; case "Down": traversalMove = TraversalManager.TraversalMove.Down; break; case "Left": traversalMove = TraversalManager.TraversalMove.Left; break; } TraversalManager.Instance.RegisterTraversalMove(traversalMove); }
public override Node Resolve(Node currentTraversalNode, Node nextTraversalNode, TraversalManager.TraversalMove direction) { if (direction == Direction) { return(nextTraversalNode); } return(null); }
public override Node Resolve(Node currentTraversalNode, Node nextTraversalNode, TraversalManager.TraversalMove direction) { if (_currentHealth <= 0) { return(nextTraversalNode); } _currentHealth--; return(currentTraversalNode); }
private string GetElement(int x, int y, TraversalManager.TraversalMove move = TraversalManager.TraversalMove.NONE) { var position = GetNextPosition(new Vector2(x, y), move); if ((int)position.x + (int)position.y * EditableLevel.KWidth >= Elements.Length || (int)position.x + (int)position.y * EditableLevel.KWidth < 0) { return(string.Empty); } return(Elements[(int)position.x + (int)position.y * EditableLevel.KWidth]); }
public override Node Resolve(Node currentTraversalNode, Node nextTraversalNode, TraversalManager.TraversalMove direction) { var playerCollectables = MainManager.Instance.Player.GetCollectables(); var collectedKeys = 0; for (var i = 0; i < playerCollectables.Length; i++) { var key = playerCollectables[i].GetComponent <Key>(); if (key != null && key.Color == Color) { collectedKeys++; } } return(collectedKeys >= _keysToUnlock ? nextTraversalNode: null); }
public Node Traverse(TraversalManager.TraversalMove traversalMove, Node currentTraversalNode) { var obstacle = getObstacle(); var nextTraversalNode = (Node)null; switch (traversalMove) { case TraversalManager.TraversalMove.Up: nextTraversalNode = UpNode; break; case TraversalManager.TraversalMove.Right: nextTraversalNode = RightNode; break; case TraversalManager.TraversalMove.Down: nextTraversalNode = DownNode; break; case TraversalManager.TraversalMove.Left: nextTraversalNode = LeftNode; break; } if (obstacle != null) { var obstacleResolution = obstacle.Resolve(currentTraversalNode, nextTraversalNode, traversalMove); nextTraversalNode = obstacleResolution; if (obstacleResolution != null) { obstacle.HandleResolution(); } } return(nextTraversalNode); }
private string GetElement(Vector2 vector, TraversalManager.TraversalMove move = TraversalManager.TraversalMove.NONE) { return(GetElement(vector.x, vector.y, move)); }
private string GetElement(float x, float y, TraversalManager.TraversalMove move = TraversalManager.TraversalMove.NONE) { return(GetElement((int)x, (int)y, move)); }
private bool TryTraverse(Vector2 currentPosition, TraversalManager.TraversalMove move) { var currentElement = GetElement(currentPosition); var nextElement = GetElement(currentPosition, move); var nextPosition = GetNextPosition(currentPosition, move); if (VisitedElements.Contains(nextPosition) || string.IsNullOrEmpty(nextElement)) { return(false); } switch (move) { case TraversalManager.TraversalMove.Up: case TraversalManager.TraversalMove.Down: if (currentElement.Contains(EditableLevel.KNode) && (!nextElement.Contains(EditableLevel.KPath) || !nextElement.Contains(EditableLevel.KVertical)) || currentElement.Contains(EditableLevel.KHorizontal)) { return(false); } break; case TraversalManager.TraversalMove.Left: case TraversalManager.TraversalMove.Right: if (currentElement.Contains(EditableLevel.KNode) && (!nextElement.Contains(EditableLevel.KPath) || !nextElement.Contains(EditableLevel.KHorizontal)) || currentElement.Contains(EditableLevel.KVertical)) { return(false); } break; } // Obstacles if (currentElement.Contains(EditableLevel.KPath)) { if (currentElement.Contains(EditableLevel.KSlide)) { if (currentElement.Contains(EditableLevel.KDirectionUp) && move != TraversalManager.TraversalMove.Up || currentElement.Contains(EditableLevel.KDirectionRight) && move != TraversalManager.TraversalMove.Right || currentElement.Contains(EditableLevel.KDirectionDown) && move != TraversalManager.TraversalMove.Down || currentElement.Contains(EditableLevel.KDirectionLeft) && move != TraversalManager.TraversalMove.Left) { return(false); } } if (currentElement.Contains(EditableLevel.KCrack)) { SetElement((int)currentPosition.x, (int)currentPosition.y, string.Empty); } if (currentElement.Contains(EditableLevel.KWall)) { RemoveFromElement((int)currentPosition.x, (int)currentPosition.y, EditableLevel.KWall); } if (currentElement.Contains(EditableLevel.KLock)) { var unlocked = false; var lockColor = string.Empty; for (var i = 0; i < EditableLevel.Colors.Length; i++) { if (currentElement.Contains(EditableLevel.Colors[i])) { lockColor = EditableLevel.Colors[i]; break; } } for (var i = 0; i < Elements.Length; i++) { if (Elements[i] != null && Elements[i].Contains(EditableLevel.KKey)) { var keyColor = string.Empty; for (var j = 0; j < EditableLevel.Colors.Length; j++) { if (Elements[i].Contains(EditableLevel.Colors[j])) { keyColor = EditableLevel.Colors[j]; if (lockColor == keyColor) { return(false); } } } } } for (var i = 0; i < CollectedCollectables.Count; i++) { if (CollectedCollectables[i].Contains(EditableLevel.KKey)) { var keyColor = string.Empty; for (var j = 0; j < EditableLevel.Colors.Length; j++) { if (CollectedCollectables[i].Contains(EditableLevel.Colors[j])) { keyColor = EditableLevel.Colors[j]; if (lockColor == keyColor) { unlocked = true; } } } } } if (unlocked) { RemoveFromElement((int)currentPosition.x, (int)currentPosition.y, EditableLevel.KLock); } else { return(false); } } } return(true); }
public abstract Node Resolve(Node currentTraversalNode, Node nextTraversalNode, TraversalManager.TraversalMove direction);