示例#1
0
        Vector3 FlightPosition(Vector3 targetPosition, float minAlt)
        {
            Vector3 forwardDirection = vesselTransform.up;
            Vector3 targetDirection  = (targetPosition - vesselTransform.position).normalized;

            if (Vector3.Dot(targetDirection, forwardDirection) < 0)
            {
                targetPosition = vesselTransform.position + Vector3.RotateTowards(Vector3.ProjectOnPlane(forwardDirection, upDirection), Vector3.ProjectOnPlane(targetDirection, upDirection), 90 * Mathf.Deg2Rad, 0).normalized *200;
            }
            float pointRadarAlt = MissileGuidance.GetRaycastRadarAltitude(targetPosition);

            if (pointRadarAlt < minAlt)
            {
                float adjustment = (minAlt - pointRadarAlt);
                debugString += "\nTarget position is below minAlt. Adjusting by " + adjustment;
                return(targetPosition + (adjustment * upDirection));
            }
            else
            {
                return(targetPosition);
            }
        }
示例#2
0
        void TakeOff(FlightCtrlState s)
        {
            threatLevel  = 1;
            debugString += "\nTaking off/Gaining altitude";

            if (vessel.Landed && vessel.srfSpeed < takeOffSpeed)
            {
                defaultOrbitCoords = VectorUtils.WorldPositionToGeoCoords(vessel.transform.position, vessel.mainBody);
                return;
            }

            steerMode = SteerModes.Aiming;

            float radarAlt = MissileGuidance.GetRadarAltitude(vessel);

            Vector3 forwardPoint = vessel.transform.position + Vector3.ProjectOnPlane(vesselTransform.up * 100, upDirection);
            float   terrainDiff  = MissileGuidance.GetRaycastRadarAltitude(forwardPoint) - radarAlt;

            terrainDiff = Mathf.Max(terrainDiff, 0);

            float rise = Mathf.Clamp((float)vessel.srfSpeed * 0.3f, 5, 100);

            if (radarAlt > 70)
            {
                vessel.ActionGroups.SetGroup(KSPActionGroup.Gear, false);
            }
            else
            {
                vessel.ActionGroups.SetGroup(KSPActionGroup.Gear, true);
            }

            FlyToPosition(s, forwardPoint + (upDirection * (rise + terrainDiff)));

            if (radarAlt > minAltitude)
            {
                startedLanded = false;
            }
        }
示例#3
0
 Vector3 GetTerrainSurfacePosition(Vector3 position)
 {
     return(position - (MissileGuidance.GetRaycastRadarAltitude(position) * upDirection));
 }