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); }
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)); }); }
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); }
/// <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); }
public void FlyingArea_Position_Out_XY() { var fArea = new FlyingArea(5, 5); fArea.PositionIntoFlyingArea(new Position(6, 6, CardinalDirection.E)); }
public void Setup() { // Define flying area for testing purpose flyingArea = new FlyingArea(6, 6); }