Exemple #1
0
 private void resetWarpParameters()
 {
     warpDistance          = 0;
     maxWarpSpeed          = 0;
     warpSpeed             = 0;
     effectiveWarpCapacity = 0;
     hasExceededLightSpeed = false;
     FlightInputHandler.state.mainThrottle = 0;
     circularizationState = WBICircularizationStates.doNotCircularize;
 }
Exemple #2
0
        /*
         * keep this for the jump engine
         * public Vector3 getVesselDimensions()
         * {
         *  Bounds bounds;
         *  List<Bounds> boundsList = new List<Bounds>();
         *  Bounds[] renderBounds;
         *  int count = this.part.vessel.parts.Count;
         *  Part firstPart = this.part.vessel.parts[0];
         *  Part vesselPart;
         *
         *  for (int index = 0; index < count; index++)
         *  {
         *      vesselPart = this.part.vessel.parts[index];
         *      renderBounds = PartGeometryUtil.GetPartRendererBounds(vesselPart);
         *      for (int boundsIndex = 0; boundsIndex < renderBounds.Length; boundsIndex++)
         *      {
         *          bounds = renderBounds[boundsIndex];
         *          bounds.size *= vesselPart.boundsMultiplier;
         *          bounds.Expand(vesselPart.GetModuleSize(bounds.size, ModifierStagingSituation.CURRENT));
         *          boundsList.Add(bounds);
         *      }
         *  }
         *  return PartGeometryUtil.MergeBounds(boundsList.ToArray(), firstPart.transform.root).size;
         * }
         */

        private bool orbitCircularized()
        {
            double elapsedTime = Planetarium.GetUniversalTime() - circularizeStartTime;

            if (BlueshiftScenario.autoCircularize &&
                circularizationState == WBICircularizationStates.needsCircularization &&
                FlightInputHandler.state.mainThrottle <= 0 &&
                elapsedTime >= BlueshiftScenario.autoCircularizationDelay
                )
            {
                // We don't circularize if the ship is orbiting a star or we're in interstellar space.
                if (BlueshiftScenario.shared.IsAStar(this.part.vessel.mainBody) || BlueshiftScenario.shared.IsInInterstellarSpace(this.part.vessel))
                {
                    circularizationState = WBICircularizationStates.doNotCircularize;
                    return(false);
                }

                // It costs resources to circularize. Make sure we can.
                if (BlueshiftScenario.circularizationResourceDef != null && BlueshiftScenario.circularizationCostPerTonne > 0)
                {
                    double amount, maxAmount = 0;
                    double resourceCost = this.part.vessel.GetTotalMass() * BlueshiftScenario.circularizationCostPerTonne;

                    this.part.GetConnectedResourceTotals(BlueshiftScenario.circularizationResourceDef.id, out amount, out maxAmount);
                    if (amount < resourceCost)
                    {
                        circularizationState = WBICircularizationStates.doNotCircularize;
                        return(false);
                    }

                    amount = this.part.RequestResource(BlueshiftScenario.circularizationResourceDef.id, resourceCost);
                }

                // Get current orbit.
                Orbit       orbit          = this.part.vessel.orbitDriver.orbit;
                double      altitude       = this.part.vessel.altitude;
                double      planetRadius   = this.part.vessel.mainBody.Radius;
                int         planetIndex    = this.part.vessel.mainBody.flightGlobalsIndex;
                double      currentTime    = Planetarium.GetUniversalTime();
                Orbit       circlularOrbit = new Orbit(orbit.inclination, 0, planetRadius + altitude, 0, 0, 0, currentTime, this.part.vessel.mainBody);
                Orbit.State state;

                // Adjust the state vectors. This will shift the vessel's position, but the ship would've shifted around during normal gravity braking anyway.
                circlularOrbit.GetOrbitalStateVectorsAtUT(currentTime, out state);
                circlularOrbit.UpdateFromFixedVectors(orbit.pos, state.vel, this.part.vessel.mainBody.referenceBody, currentTime + 0.02);
                FlightGlobals.fetch.SetShipOrbit(planetIndex, 0, planetRadius + altitude, circlularOrbit.inclination, circlularOrbit.LAN, circlularOrbit.meanAnomaly, circlularOrbit.argumentOfPeriapsis, circlularOrbit.ObT);

                ScreenMessages.PostScreenMessage(kOrbitCircularized, kMessageDuration, ScreenMessageStyle.UPPER_LEFT);
                circularizationState = WBICircularizationStates.hasBeenCircularized;
                return(true);
            }

            return(false);
        }
Exemple #3
0
        private void updatePreconditionStates()
        {
            isInSpace         = IsInSpace();
            meetsWarpAltitude = MeetsWarpAltitude();
            hasWarpCapacity   = HasWarpCapacity();

            if (throttleLevel <= 0f)
            {
                // Setup the auto-circularization timer if the autoCircularize game setting is enabled.
                if (BlueshiftScenario.autoCircularize &&
                    circularizationState != WBICircularizationStates.hasBeenCircularized &&
                    circularizationState != WBICircularizationStates.doNotCircularize &&
                    circularizationState != WBICircularizationStates.needsCircularization
                    )
                {
                    circularizationState = WBICircularizationStates.needsCircularization;
                    circularizeStartTime = Planetarium.GetUniversalTime();
                }
            }
            else
            {
                circularizationState = WBICircularizationStates.canBeCircularized;
            }
        }