/// <summary> /// Enter an arena and go to a specified location /// </summary> /// <param name="arena">Arena to enter</param> /// <param name="x">X coordinate (latitude)</param> /// <param name="y">Y coordinate (longitude)</param> /// <param name="direction"></param> /// <returns>True if arena entered successfully, otherwise false</returns> public bool EnterArena(IArena arena, uint x, uint y, DroneDirection direction) { if (arena == null || x > arena.UpperLatitude || y > arena.UpperLongitude) { return false; } this.Arena = arena; this.Latitude = x; this.Longitude = y; this.Direction = direction; return true; }
// Update is called once per frame void FixedUpdate() { nextWaypoint = currentWaypoint + 1; //figure out drone's current direction if (waypoints[nextWaypoint].x < 0) { currentDirection = DroneDirection.LEFT; } else if (waypoints[nextWaypoint].x > 0) { currentDirection = DroneDirection.RIGHT; } else if (waypoints[nextWaypoint].y > 0) { currentDirection = DroneDirection.UP; } else if (waypoints[nextWaypoint].y < 0) { currentDirection = DroneDirection.DOWN; } //move the drone... transform.position = Vector3.Lerp (transform.position, transform.position + waypoints[nextWaypoint], speed * Time.deltaTime); if (currentDirection == DroneDirection.LEFT && transform.position.x - startPosition.x < waypoints[nextWaypoint].x - currentRelativePosition.x) { NextWaypoint(); } if (currentDirection == DroneDirection.RIGHT && transform.position.x - startPosition.x > waypoints[nextWaypoint].x - currentRelativePosition.x) { NextWaypoint(); } if (currentDirection == DroneDirection.UP && transform.position.y - startPosition.y > waypoints[nextWaypoint].y - currentRelativePosition.y) { NextWaypoint(); } if (currentDirection == DroneDirection.DOWN && transform.position.y - startPosition.y < waypoints[nextWaypoint].y - currentRelativePosition.y) { NextWaypoint(); } }
void NextWaypoint() { currentDirection = DroneDirection.UNASSIGNED; if (currentWaypoint < waypoints.Length - 2) { currentWaypoint++; //update position variable relative to waypoints: currentRelativePosition = new Vector3( currentRelativePosition.x - waypoints[currentWaypoint].x, currentRelativePosition.y - waypoints[currentWaypoint].y, 0); } else { currentWaypoint = 0; //cyclical loop //update position variable relative to waypoints: currentRelativePosition = new Vector3(0, 0, 0); } }
public override GameObject CreateDroneInstance(DroneFactory factory, bool isAdded, Area area, StartPositionDelegate posDelegate = null) { Vector3 pos; if (posDelegate != null) { pos = posDelegate(Size, area); } else { pos = isAdded ? DroneStartPosition.GetRandomCorner(Size, area) : DroneStartPosition.GetRandomPosition(Size, area); } var newDrone = Object.Instantiate(factory.SetDroneType[DroneType], pos, Quaternion.Euler(0, _startDirection + DroneDirection.RandomDirection(_restrictedZone, _coneRange), 0), factory.transform); return(newDrone); }
private string BuildCommand(uint lat, uint lng, DroneDirection direction) { string stringDirection; switch (direction) { case DroneDirection.North: stringDirection = "N"; break; case DroneDirection.South: stringDirection = "S"; break; case DroneDirection.East: stringDirection = "E"; break; default: stringDirection = "W"; break; } return string.Format("{0} {1} {2}", lat, lng, stringDirection); }
private void SetDirection(DroneDirection direction) { this.drone.EnterArena(this.arena.Object, 0, 0, direction); }