public void Step(int maxSteps)
        {
            step += 1;
            var newPosition       = unityAgent.transform.localPosition;
            var newRotation       = unityAgent.body.rotation.eulerAngles;
            var newVelocity       = unityAgent.body.velocity;
            var newTargetPosition = target.localPosition;
            var isInsideArea      = FlyingArea.IsInsideArea(area);

            agent = FlyingAgent.Update(agent, newPosition, newTargetPosition, newRotation, velocity: newVelocity,
                                       speed: moveSpeed);
            area = FlyingArea.Update(area, agent, newTargetPosition, isInsideArea);

            if (!isInsideArea)
            {
                AgentOutsideArea(maxSteps);
            }
            if (isInsideArea)
            {
                AgentInsideArea(maxSteps);
            }
            if (AgentOutOfBounds())
            {
                AgentFail();
            }
            if (step > maxSteps)
            {
                TimeUp();
            }

            AgentStep(maxSteps);
        }
Example #2
0
        public void FlyingArea_Position_Into()
        {
            var fArea = new FlyingArea(5, 5);

            Enumerable.Range(1, 5).ToList().ForEach(r =>
            {
                fArea.PositionIntoFlyingArea(new Position(r, r, CardinalDirection.E));
            });
        }
Example #3
0
        public void inside_area()
        {
            var target = new Vector3(0, 3, 0);
            var agent  = FlyingAgent.Create(position: new Vector3(0, 2.999f, 0));
            var area   = FlyingArea.Create(agent, target);

            var result = FlyingArea.IsInsideArea(area);

            Assert.IsTrue(result);
        }
        private void Initialize()
        {
            step = 0;
            stepsInsideTarget = 0;
            levelParameters   = LevelParameters.Create(100, 30f, 1f);

            var initialPosition = spawnPosition.localPosition;
            var targetPosition  = target.localPosition;

            agent = FlyingAgent.Create(initialPosition, target: targetPosition, speed: moveSpeed);
            area  = FlyingArea.Create(agent, targetPosition, doneReward: 2f, failReward: -2f);
            ResetUnityEntities(initialPosition, targetPosition);
        }
        private void Reset(bool changeTargetPosition = false)
        {
            step = 0;
            stepsInsideTarget = 0;
            var initialPosition     = spawnPosition.localPosition;
            var targetLocalPosition = target.localPosition;
            var targetPosition      = changeTargetPosition
                ? GenerateNewTargetPosition(initialPosition)
                : targetLocalPosition;

            agent = FlyingAgent.Update(agent, initialPosition, targetPosition);
            area  = FlyingArea.Update(area, agent, targetPosition);
            ResetUnityEntities(initialPosition, targetPosition);
        }
Example #6
0
        /// <summary>
        /// Method to obtain all drones and its movements.
        /// </summary>
        /// <param name="flyingArea">Flying Area. Format: Width Height</param>
        /// <param name="dronesParameters">Drones initial position and movements. Format of each element: InitialPosition|Movements
        ///     - InitialPosition: XAxis YAxis Direction
        ///     - Movements: List of Movements
        ///     - Example: 5 5 S|LMMRM
        /// </param>
        /// <returns></returns>
        public static List <DronInit> ParseDronesParameters(string flyingArea, List <string> dronesParameters)
        {
            List <DronInit> dronsToMove = new List <DronInit>();

            // Get Flying Area
            string[] flyingAreaArray = flyingArea.Split(" ");
            int      width           = Int32.Parse(flyingAreaArray[0]);
            int      height          = Int32.Parse(flyingAreaArray[1]);

            FlyingArea FlyingArea = new FlyingArea(width, height);

            // Get Drones. Start position and list of movements
            foreach (string droneParameter in dronesParameters)
            {
                string[] dronesParametersArray = droneParameter.Split("|");

                string[]  startPositionArray = dronesParametersArray[0].Split(" ");
                int       xAxis = Int32.Parse(startPositionArray[0]);
                int       yAxis = Int32.Parse(startPositionArray[1]);
                Direction dir   = Utils.DirectionMapper(startPositionArray[2]);

                Dron dron = new Dron(FlyingArea, xAxis, yAxis, dir);

                string          movements  = dronesParametersArray[1];
                List <Movement> lMovements = new List <Movement>();

                foreach (char character in movements)
                {
                    lMovements.Add(Utils.MovementMapper(character));
                }

                DronInit dronInit = new DronInit(dron, lMovements);
                dronsToMove.Add(dronInit);
            }

            return(dronsToMove);
        }
Example #7
0
        public void FlyingArea_Position_Out_XY()
        {
            var fArea = new FlyingArea(5, 5);

            fArea.PositionIntoFlyingArea(new Position(6, 6, CardinalDirection.E));
        }
Example #8
0
 public void Setup()
 {
     // Define flying area for testing purpose
     flyingArea = new FlyingArea(6, 6);
 }