KLF.KLFVessel.setOrbitalData C# (CSharp) Method

setOrbitalData() public method

public setOrbitalData ( CelestialBody body, Vector3 local_pos, Vector3 local_vel, Vector3 local_dir ) : void
body CelestialBody
local_pos Vector3
local_vel Vector3
local_dir Vector3
return void
        public void setOrbitalData(CelestialBody body, Vector3 local_pos, Vector3 local_vel, Vector3 local_dir)
        {
            mainBody = body;

            if (mainBody != null)
            {

                localPosition = local_pos;
                translationFromBody = mainBody.transform.TransformPoint(localPosition) - mainBody.transform.position;
                localDirection = local_dir;
                localVelocity = local_vel;

                orbitValid = true;

                //Check for invalid values in the physics data
                if (!situationIsGrounded(info.situation)
                    && ((localPosition.x == 0.0f && localPosition.y == 0.0f && localPosition.z == 0.0f)
                        || (localVelocity.x == 0.0f && localVelocity.y == 0.0f && localVelocity.z == 0.0f)
                        || localPosition.magnitude > mainBody.sphereOfInfluence)
                    )
                {
                    orbitValid = false;
                }

                for (int i = 0; i < 3; i++)
                {
                    if (float.IsNaN(localPosition[i]) || float.IsInfinity(localPosition[i]))
                    {
                        orbitValid = false;
                        break;
                    }

                    if (float.IsNaN(localDirection[i]) || float.IsInfinity(localDirection[i]))
                    {
                        orbitValid = false;
                        break;
                    }

                    if (float.IsNaN(localVelocity[i]) || float.IsInfinity(localVelocity[i]))
                    {
                        orbitValid = false;
                        break;
                    }
                }

                if (!orbitValid)
                {
                    //Debug.Log("Orbit invalid: " + vesselName);
                    //Spoof some values so the game doesn't freak out
                    localPosition = new Vector3(1000.0f, 1000.0f, 1000.0f);
                    translationFromBody = localPosition;
                    localDirection = new Vector3(1.0f, 0.0f, 0.0f);
                    localVelocity = new Vector3(1000.0f, 0.0f, 0.0f);
                }

                //Calculate world-space properties
                worldDirection = mainBody.transform.TransformDirection(localDirection);
                worldVelocity = mainBody.transform.TransformDirection(localVelocity);

                //Update game object transform
                updateOrbitProperties();
                updatePosition();

            }
        }

Usage Example

Ejemplo n.º 1
0
        private void applyVesselUpdate(KLFVesselUpdate vessel_update, KLFVessel vessel)
        {
            //Find the CelestialBody that matches the one in the update
            CelestialBody update_body = null;

            if (vessel.mainBody != null && vessel.mainBody.bodyName == vessel_update.bodyName)
                update_body = vessel.mainBody; //Vessel already has the correct body
            else
            {

                //Find the celestial body in the list of bodies
                foreach (CelestialBody body in FlightGlobals.Bodies)
                {
                    if (body.bodyName == vessel_update.bodyName)
                    {
                        update_body = body;
                        break;
                    }
                }

            }

            if (update_body != null)
            {

                //Convert float arrays to Vector3s
                Vector3 pos = new Vector3(vessel_update.pos[0], vessel_update.pos[1], vessel_update.pos[2]);
                Vector3 dir = new Vector3(vessel_update.dir[0], vessel_update.dir[1], vessel_update.dir[2]);
                Vector3 vel = new Vector3(vessel_update.vel[0], vessel_update.vel[1], vessel_update.vel[2]);

                vessel.info = vessel_update;
                vessel.setOrbitalData(update_body, pos, vel, dir);

            }

            if (vessel_update.state == State.ACTIVE)
            {
                //Update the player status info
                VesselStatusInfo status = new VesselStatusInfo();
                status.info = vessel_update;
                status.ownerName = vessel_update.player;
                status.vesselName = vessel_update.name;

                if (vessel.orbitValid)
                    status.orbit = vessel.orbitRenderer.driver.orbit;

                status.lastUpdateTime = UnityEngine.Time.realtimeSinceStartup;
                status.color = KLFVessel.generateActiveColor(status.ownerName);

                if (playerStatus.ContainsKey(status.ownerName))
                    playerStatus[status.ownerName] = status;
                else
                    playerStatus.Add(status.ownerName, status);
            }
        }