Exemplo n.º 1
0
    public Vessel.State GoOnRails(CelestialBodyData initialPlanet, bool reCenter)
    {
        if (reCenter)
        {
            this.partsManager.ReCenter();
        }
        Double3 getGlobalPosition = this.GetGlobalPosition;
        Double3 getGlobalVelocity = this.GetGlobalVelocity;

        this.partsManager.rb2d.bodyType = RigidbodyType2D.Static;
        foreach (EngineModule current in this.partsManager.engineModules)
        {
            current.nozzleMove.SetTargetTime(0f);
            current.UpdateEngineThrottle(this.throttle);
        }
        this.stationaryData.posToPlane = getGlobalPosition;
        this.stationaryData.planet     = initialPlanet;
        if (Math.Abs(getGlobalVelocity.x) < 0.3 && Math.Abs(getGlobalVelocity.y) < 0.3)
        {
            this.orbits.Clear();
            this.mapIcon.localPosition = (this.stationaryData.posToPlane / 10000.0).toVector3;
            return(Vessel.State.Stationary);
        }
        this.orbits = Orbit.CalculateOrbits(getGlobalPosition, getGlobalVelocity, initialPlanet);
        if (double.IsNaN(this.orbits[0].meanMotion))
        {
            MonoBehaviour.print("Cannot orbit NaN, went stationary instead");
            this.orbits.Clear();
            this.mapIcon.localPosition = (this.stationaryData.posToPlane / 10000.0).toVector3;
            return(Vessel.State.Stationary);
        }
        this.CheckOrbitArchivments(this.orbits[0]);
        return(Vessel.State.OnRails);
    }
Exemplo n.º 2
0
    private static Vessel LoadVessel(GameSaving.VesselSave vesselToLoad)
    {
        List <Part> list = new List <Part>(GameSaving.LoadParts(vesselToLoad));

        Part[] loadedParts = list.ToArray();
        GameSaving.LoadPartsData(vesselToLoad, loadedParts);
        list.Remove(null);
        Orientation.ApplyOrientation(list[0].transform, list[0].orientation);
        Vessel vessel = Vessel.CreateVessel(list[0].GetComponent <Part>(), Vector2.zero, vesselToLoad.angularVelocity, vesselToLoad.throttle, vesselToLoad.vesselArchivments, Ref.map.mapRefs[Ref.GetPlanetByName(vesselToLoad.adress)].holder);

        for (int i = 0; i < vessel.partsManager.parts.Count; i++)
        {
            if (vessel.partsManager.parts[i] != null)
            {
                vessel.partsManager.parts[i].UpdateConnected();
            }
        }
        vessel.partsManager.UpdateCenterOfMass();
        vessel.partsManager.ReCenter();
        vessel.transform.position    = (vesselToLoad.globalPosition - Ref.positionOffset).toVector2;
        vessel.transform.eulerAngles = new Vector3(0f, 0f, vesselToLoad.rotation);
        if (vesselToLoad.state == Vessel.State.RealTime)
        {
            vessel.partsManager.rb2d.velocity = (vesselToLoad.globalVelocity - Ref.velocityOffset).toVector2;
        }
        else if (vesselToLoad.state == Vessel.State.OnRails || vesselToLoad.state == Vessel.State.OnRailsUnloaded)
        {
            vessel.orbits = Orbit.CalculateOrbits(vesselToLoad.globalPosition, vesselToLoad.globalVelocity, Ref.GetPlanetByName(vesselToLoad.adress));
            vessel.partsManager.rb2d.bodyType = RigidbodyType2D.Static;
            vessel.state = Vessel.State.OnRails;
            if (vessel.state == Vessel.State.OnRailsUnloaded)
            {
                vessel.SetVesselState(Vessel.ToState.ToUnloaded);
            }
            if (double.IsNaN(vessel.orbits[0].meanMotion))
            {
                MonoBehaviour.print("Cannot orbit NaN, went stationary instead");
                vessel.orbits.Clear();
                vessel.stationaryData.posToPlane = vesselToLoad.globalPosition;
                vessel.stationaryData.planet     = Ref.GetPlanetByName(vesselToLoad.adress);
                vessel.state = Vessel.State.Stationary;
                vessel.SetVesselState(Vessel.ToState.ToUnloaded);
                vessel.mapIcon.localPosition = (vessel.stationaryData.posToPlane / 10000.0).toVector3;
            }
        }
        else
        {
            vessel.stationaryData.posToPlane = vesselToLoad.globalPosition;
            vessel.stationaryData.planet     = Ref.GetPlanetByName(vesselToLoad.adress);
            vessel.state = Vessel.State.Stationary;
            if (vesselToLoad.state == Vessel.State.StationaryUnloaded)
            {
                vessel.SetVesselState(Vessel.ToState.ToUnloaded);
            }
            vessel.mapIcon.localPosition = (vessel.stationaryData.posToPlane / 10000.0).toVector3;
        }
        vessel.mapIcon.rotation = vessel.partsManager.parts[0].transform.rotation;
        vessel.RCS = vesselToLoad.RCS;
        return(vessel);
    }
Exemplo n.º 3
0
    public static List <Orbit> CalculateOrbits(Double3 posIn, Double3 velIn, CelestialBodyData initialPlanet)
    {
        List <Orbit> list = new List <Orbit>();

        if (double.IsNaN(posIn.x * velIn.y - posIn.y * velIn.x))
        {
            return(list);
        }
        list.Add(new Orbit(posIn, velIn, Ref.controller.globalTime, initialPlanet, null));
        return(Orbit.CalculateOrbits(list));
    }
Exemplo n.º 4
0
    private static Vessel LoadVessel(GameSaving.VesselSave vesselToLoad)
    {
        Part[] array  = GameSaving.LoadParts(vesselToLoad);
        Vessel vessel = Vessel.CreateVessel(array[0].GetComponent <Part>(), Vector2.zero, vesselToLoad.angularVelocity, vesselToLoad.throttle, vesselToLoad.vesselArchivments, Ref.GetPlanetByName(vesselToLoad.adress).mapRefs.holder);

        vessel.partsManager.UpdateCenterOfMass();
        vessel.partsManager.ReCenter();
        vessel.transform.position    = (vesselToLoad.globalPosition - Ref.positionOffset).toVector2;
        vessel.transform.eulerAngles = new Vector3(0f, 0f, vesselToLoad.rotation);
        if (vesselToLoad.state == Vessel.State.RealTime)
        {
            vessel.partsManager.rb2d.velocity = (vesselToLoad.globalVelocity - Ref.velocityOffset).toVector2;
        }
        else if (vesselToLoad.state == Vessel.State.OnRails || vesselToLoad.state == Vessel.State.OnRailsUnloaded)
        {
            vessel.orbits = Orbit.CalculateOrbits(vesselToLoad.globalPosition, vesselToLoad.globalVelocity, Ref.GetPlanetByName(vesselToLoad.adress));
            vessel.partsManager.rb2d.bodyType = RigidbodyType2D.Static;
            vessel.state = Vessel.State.OnRails;
            if (vessel.state == Vessel.State.OnRailsUnloaded)
            {
                vessel.SetVesselState(Vessel.ToState.ToUnloaded);
            }
            if (double.IsNaN(vessel.orbits[0].meanMotion))
            {
                MonoBehaviour.print("Cannot orbit NaN, went stationary instead");
                vessel.orbits.Clear();
                vessel.stationaryData.posToPlane = vesselToLoad.globalPosition;
                vessel.stationaryData.planet     = Ref.GetPlanetByName(vesselToLoad.adress);
                vessel.state = Vessel.State.Stationary;
                vessel.SetVesselState(Vessel.ToState.ToUnloaded);
                vessel.mapIcon.localPosition = (vessel.stationaryData.posToPlane / 10000.0).toVector3;
            }
        }
        else
        {
            vessel.stationaryData.posToPlane = vesselToLoad.globalPosition;
            vessel.stationaryData.planet     = Ref.GetPlanetByName(vesselToLoad.adress);
            vessel.state = Vessel.State.Stationary;
            if (vesselToLoad.state == Vessel.State.StationaryUnloaded)
            {
                vessel.SetVesselState(Vessel.ToState.ToUnloaded);
            }
            vessel.mapIcon.localPosition = (vessel.stationaryData.posToPlane / 10000.0).toVector3;
        }
        GameSaving.LoadPartsData(vesselToLoad, array);
        vessel.mapIcon.rotation = vessel.partsManager.parts[0].transform.rotation;
        return(vessel);
    }
Exemplo n.º 5
0
 private List <Orbit> GetVesselOrbits(Vessel vessel)
 {
     if (vessel == null)
     {
         return(new List <Orbit>());
     }
     if (vessel.state == Vessel.State.RealTime)
     {
         Double3 velIn = Ref.velocityOffset + vessel.partsManager.rb2d.velocity;
         if (velIn.sqrMagnitude2d > 4.0)
         {
             return(Orbit.CalculateOrbits(vessel.GetGlobalPosition, velIn, Ref.controller.loadedPlanet));
         }
     }
     return(vessel.orbits);
 }
Exemplo n.º 6
0
    private List <Orbit> UpdateRealtimeVesselOrbitLines(Vessel vessel)
    {
        if (vessel == null || vessel.partsManager.rb2d == null)
        {
            return(new List <Orbit>());
        }
        Double3 velIn = Ref.velocityOffset + vessel.partsManager.rb2d.velocity;

        if (velIn.sqrMagnitude2d > 2.0)
        {
            List <Orbit> list = Orbit.CalculateOrbits(vessel.GetGlobalPosition, velIn, Ref.controller.loadedPlanet);
            this.UpdateVesselOrbitLines(list, false);
            return(list);
        }
        return(new List <Orbit>());
    }
Exemplo n.º 7
0
    private void EnterNextOrbit()
    {
        if (this.orbits[0].orbitType == Orbit.Type.Escape)
        {
            this.AddArchivment("Escaped " + this.orbits[0].planet.bodyName + " sphere of influence.");
        }
        else if (this.orbits[0].orbitType == Orbit.Type.Encounter)
        {
            this.AddArchivment("Entered " + this.orbits[0].nextPlanet.bodyName + " sphere of influence.");
        }
        this.orbits.RemoveAt(0);
        this.orbits = Orbit.CalculateOrbits(this.orbits);
        Double3 posOut = this.orbits[0].GetPosOut(Ref.controller.globalTime);

        this.mapIcon.parent = Ref.map.mapRefs[this.orbits[0].planet].holder;
        if (Ref.mainVessel == this)
        {
            Ref.planetManager.SwitchLocation(this.orbits[0].planet, posOut, true, false, 0.0);
        }
    }
Exemplo n.º 8
0
    private void Update()
    {
        this.CheckLoadDistance();
        Double3 @double = this.GetGlobalPosition;
        bool    flag    = this.state == Vessel.State.RealTime;

        if (flag)
        {
            @double = Ref.positionOffset + this.partsManager.rb2d.worldCenterOfMass;
            if (Time.time > this.archivmentCheckTime)
            {
                this.archivmentCheckTime = Time.time + 1f;
                this.CheckForArchivments();
                this.CheckOrbitArchivments(new Orbit(@double, this.GetGlobalVelocity, Ref.controller.loadedPlanet));
            }


            bool flag3 = this.OnSurface && !this.castedHook;
            if (flag3)
            {
                new MyVesselLandedHook(this, Ref.controller.loadedPlanet.parentBody).executeDefault();
                this.castedHook = true;
            }
            else
            {
                bool flag4 = !this.OnSurface && this.castedHook;
                if (flag4)
                {
                    this.castedHook = false;
                }
            }


            if (@double.sqrMagnitude2d > Ref.controller.loadedPlanet.orbitData.SOI * Ref.controller.loadedPlanet.orbitData.SOI)
            {
                this.AddArchivment("Escaped " + Ref.controller.loadedPlanet.bodyName + " sphere of influence");
                CelestialBodyData parentBody = Ref.controller.loadedPlanet.parentBody;
                this.mapIcon.parent = Ref.map.mapRefs[parentBody].holder;
                if (Ref.mainVessel == this)
                {
                    Ref.controller.EnterTimeWarpMode();
                    this.EnterNextOrbit();
                    Ref.controller.ExitTimeWarpMode();
                    @double = this.GetGlobalPosition;
                }
                else
                {
                    this.partsManager.ReCenter();
                    Double3 posIn = Ref.controller.loadedPlanet.GetPosOut(Ref.controller.globalTime) + @double;
                    Double3 velIn = Ref.controller.loadedPlanet.GetVelOut(Ref.controller.globalTime) + this.GetGlobalVelocity;
                    this.partsManager.rb2d.bodyType = RigidbodyType2D.Static;
                    this.partsManager.rb2d.gameObject.SetActive(false);
                    this.orbits = Orbit.CalculateOrbits(posIn, velIn, parentBody);
                    this.state  = Vessel.State.OnRailsUnloaded;
                }
            }
            foreach (CelestialBodyData celestialBodyData in Ref.controller.loadedPlanet.satellites)
            {
                Double3 double2 = @double - celestialBodyData.GetPosOut(Ref.controller.globalTime);
                if (double2.sqrMagnitude2d < celestialBodyData.orbitData.SOI * celestialBodyData.orbitData.SOI)
                {
                    this.AddArchivment("Entered " + celestialBodyData.bodyName + " sphere of influence");
                    this.mapIcon.parent = Ref.map.mapRefs[celestialBodyData].holder;
                    Double3 posIn2 = double2;
                    Double3 velIn2 = this.GetGlobalVelocity - celestialBodyData.GetVelOut(Ref.controller.globalTime);
                    if (Ref.mainVessel == this)
                    {
                        Ref.controller.EnterTimeWarpMode();
                        this.EnterNextOrbit();
                        Ref.controller.ExitTimeWarpMode();
                        @double = this.GetGlobalPosition;
                    }
                    else
                    {
                        this.partsManager.ReCenter();
                        this.partsManager.rb2d.bodyType = RigidbodyType2D.Static;
                        this.partsManager.rb2d.gameObject.SetActive(false);
                        this.orbits = Orbit.CalculateOrbits(posIn2, velIn2, celestialBodyData);
                        this.state  = Vessel.State.OnRailsUnloaded;
                    }
                }
            }
            if (Ref.mapView)
            {
                this.mapIcon.localPosition = (@double / 10000.0).toVector3;
                this.mapIcon.localRotation = this.partsManager.parts[0].transform.rotation;
            }
        }
        else if (this.state == Vessel.State.OnRails || this.state == Vessel.State.OnRailsUnloaded)
        {
            if (this.orbits[0].orbitEndTime < Ref.controller.globalTime)
            {
                this.EnterNextOrbit();
                @double = this.GetGlobalPosition;
            }
            if (this.orbits[0].calculatePassesTime != double.PositiveInfinity && Ref.controller.globalTime > this.orbits[0].calculatePassesTime - this.orbits[0]._period * 0.9 && this.orbits[0].UpdatePass())
            {
                this.orbits = Orbit.CalculateOrbits(this.orbits);
            }
            if (Ref.mapView)
            {
                this.mapIcon.localPosition = (@double / 10000.0).toVector3;
            }
            else if (this.state == Vessel.State.OnRails)
            {
                base.transform.position = (@double - Ref.positionOffset).toVector3;
            }
            if (Ref.mainVessel != this && @double.magnitude2d - this.orbits[0].planet.radius < this.orbits[0].planet.GetTerrainSampleAtAngle(Math.Atan2(@double.y, @double.x) * 57.2958))
            {
                this.DestroyVessel();
            }
        }
    }