IEnumerator MoveToPointOverSpeed(Vector3 endPoint, float _speed)
    {
        Vector2 dir = (transform.position - endPoint).normalized;

        while (rBody.position != (Vector2)endPoint)
        {
            rBody.position = Vector2.MoveTowards(rBody.position, endPoint, _speed * Time.fixedDeltaTime);
            yield return(new WaitForFixedUpdate());
        }

        if (detectedObjectInstance != null)
        {
            Interactable _interactable = detectedObjectInstance.GetComponent <Interactable>();            // If we are interacting with a interactable object.
            if (_interactable != null)
            {
                _interactable.Interact();
            }

            LittleTurtle littleTurtle = detectedObjectInstance.GetComponent <LittleTurtle>();
            if (littleTurtle != null)
            {
                littleTurtle.ApplyKnockback();
                detectedObjectInstance = null;
            }
        }

        yield return(StartCoroutine(MoveToPlayerOverSpeed()));        // Return to player.
    }
Example #2
0
 /// <summary>
 /// Method to check if the turtle's status has changed to a final state.
 /// </summary>
 /// <param name="littleTurtle">Our brave little turtle <see cref="LittleTurtle"/>.</param>
 /// <returns></returns>
 private static bool CheckForStillInDanger(LittleTurtle littleTurtle)
 {
     if (littleTurtle.Status == TurtleStatus.Alive)
     {
         return(true);
     }
     else
     {
         return(false);
     }
 }
Example #3
0
 /// <summary>
 /// Method to check if the position of the turtle matches a mine's position.
 /// </summary>
 /// <param name="littleTurtle">Our brave little turtle <see cref="LittleTurtle"/></param>
 /// <param name="mines">The collection of mines <see cref="Mine"/></param>
 /// <returns></returns>
 private static bool CheckForMine(LittleTurtle littleTurtle, List <Mine> mines)
 {
     if (mines.Select(x => x.Position).Contains(littleTurtle.CurrentPosition))
     {
         littleTurtle.Status = TurtleStatus.Dead;
         return(true);
     }
     else
     {
         return(false);
     }
 }
Example #4
0
 /// <summary>
 /// Method to check if the current position of the turtle matches the exit position.
 /// </summary>
 /// <param name="littleTurtle">Our brave little turtle <see cref="LittleTurtle"/></param>
 /// <param name="exitPoint">The exit point.</param>
 /// <returns></returns>
 private static bool CheckForEscape(LittleTurtle littleTurtle, ExitPoint exitPoint)
 {
     if (exitPoint.Position.Equals(littleTurtle.CurrentPosition))
     {
         littleTurtle.Status = TurtleStatus.Escaped;
         return(true);
     }
     else
     {
         return(false);
     }
 }
Example #5
0
        static void Main(string[] args)
        {
            GameSettings gameSettings = ReadGameSettingsFile(args[0]);
            var          littleTurtle = new LittleTurtle(gameSettings.StartingPoint.Position, gameSettings.Direction);

            /// This is the game loop.
            /// Each line in the moves file represents a sequence of moves.
            /// Empty line are skipped.
            using (var file = File.OpenText($"{args[1]}.csv"))
            {
                int seqCount = 0;
                while (!file.EndOfStream)
                {
                    var line = file.ReadLine();
                    if (string.IsNullOrEmpty(line))
                    {
                        continue;
                    }

                    seqCount++;
                    var operations = line.Split(',');

                    foreach (var operation in operations)
                    {
                        littleTurtle.PerformOperation(operation);

                        if (CheckForMine(littleTurtle, gameSettings.Mines))
                        {
                            Console.WriteLine($"Sequence {seqCount}: Mine Hit!");
                            break;
                        }
                        else if (CheckForEscape(littleTurtle, gameSettings.ExitPoint))
                        {
                            Console.WriteLine($"Sequence {seqCount}: Success!");
                            break;
                        }
                        else if (CheckForOutOfBounds(littleTurtle, gameSettings.BoardSize))
                        {
                            Console.WriteLine($"Sequence {seqCount}: Turtle has moved off the board and is now lost forever!");
                            break;
                        }
                    }

                    if (CheckForStillInDanger(littleTurtle))
                    {
                        Console.WriteLine($"Sequence {seqCount}: Still in danger!");
                    }

                    littleTurtle.Reset();
                }
            }
        }
Example #6
0
 /// <summary>
 /// Method to check if the little turtle has moved outside the bounds of the game board
 /// and updates the turtle's status.
 /// </summary>
 /// <param name="littleTurtle">Our brave little turtle <see cref="LittleTurtle"/>.</param>
 /// <param name="boardSize">The board size.</param>
 /// <returns></returns>
 private static bool CheckForOutOfBounds(LittleTurtle littleTurtle, BoardSize boardSize)
 {
     if (littleTurtle.CurrentPosition.X < 0 ||
         littleTurtle.CurrentPosition.Y < 0 ||
         littleTurtle.CurrentPosition.X >= boardSize.Length ||
         littleTurtle.CurrentPosition.Y >= boardSize.Width)
     {
         littleTurtle.Status = TurtleStatus.Lost;
         return(true);
     }
     else
     {
         return(false);
     }
 }
    private void OnSceneGUI()
    {
        base.OnInspectorGUI();
        LittleTurtle turtle = (LittleTurtle)target;

        // Draw flee threshold
        float fleeThresold = turtle.FleeThreshold;

        Handles.color = Color.blue;
        Handles.DrawWireDisc(turtle.transform.position, new Vector3(0f, 0f, 1f), fleeThresold);

        // Draw flee threshold
        float fleeDestinationSearchRadius = turtle.PickFleeDestinationRadius;

        Handles.color = Color.green;
        Handles.DrawWireDisc(turtle.transform.position, new Vector3(0f, 0f, 1f), fleeDestinationSearchRadius);

        // Draw flee threshold
        float knockbackRadius = turtle.DefensiveKnockbackRadius;

        Handles.color = Color.white;
        Handles.DrawWireDisc(turtle.transform.position, new Vector3(0f, 0f, 1f), knockbackRadius);
    }