public bool calculateCourse(Course course, out CourseCorrection courseCorrection) { Ray ray = new Ray(course.currentLocation, course.direction); RaycastHit raycastHit; Int32 obstacles = Obstacle.layerMask; Int32 vehicles = Vehicle.layerMask; bool hasRaycastHit = Physics.Raycast(ray, out raycastHit, course.distance, obstacles); // Debug.Assert(hasRaycastHit, course.ToString()); if (hasRaycastHit) { Vector3 hitPoint = raycastHit.point; Collider collider = raycastHit.collider; float radiusDistance = Vector3.Distance(hitPoint, collider.transform.position); GameObject gameObject = collider.gameObject; courseCorrection = new CourseCorrection(gameObject, radiusDistance); switch (collider.tag.ToString()) { case "SpaceShip": Debug.Log("Should course correct for Spaceship"); courseCorrection.avoidanceType = CourseCorrection.AvoidanceType.Vehicle; courseCorrection.vehicleType = Vehicle.Type.SpaceShip; break; case "Torpedo": Debug.Log("Should course correct for Torpedo"); courseCorrection.avoidanceType = CourseCorrection.AvoidanceType.Weapon; courseCorrection.weaponType = Weapon.Type.Torpedo; break; case "Planet": Debug.Log("Should course correct for Planet"); courseCorrection.avoidanceType = CourseCorrection.AvoidanceType.Obstacle; courseCorrection.obstacleType = Obstacle.Type.Planet; break; default: Debug.Log("Should course correct for Unknown collider"); courseCorrection.avoidanceType = CourseCorrection.AvoidanceType.Unknown; courseCorrection.obstacleType = Obstacle.Type.Unknown; break; } Debug.Log("Course correction =" + courseCorrection.ToString()); return(true); } else { // No vehicles or obstacles, no need to correct course courseCorrection = new CourseCorrection(); return(false); } }
public DeorbitBurn(MechJebCore core) : base(core) { doAfterExecution = new CourseCorrection(core); }