예제 #1
0
                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);
                    }
                }
예제 #2
0
 public DeorbitBurn(MechJebCore core) : base(core)
 {
     doAfterExecution = new CourseCorrection(core);
 }