Ejemplo n.º 1
0
    // Update is called once per frame
    private void LateUpdate()
    {
        if (0 != m_PhysicalOwnerID)
        {
            Camera camera = Camera.main;
            if (camera != null)
            {
                Vector3 cameraPosition = camera.transform.position;

                UpdatePosition();

                if (m_Rebuild)
                {
                    CelestialBody physicalOwnerBody = CelestialManagerPhysical.Instance.GetCelestialBody(m_PhysicalOwnerID);

                    if (physicalOwnerBody != null)
                    {
                        CelestialPlanetoid physicalOwnerPlanetoid = physicalOwnerBody as CelestialPlanetoid;

                        if (physicalOwnerPlanetoid != null)
                        {
                            m_OrbitPositions = physicalOwnerPlanetoid.GetOrbit(CelestialTime.Instance.Current, m_ResolutionScale).ToArray();

                            m_LineRenderer.positionCount = m_OrbitPositions.Length;

                            m_LineRenderer.SetPositions(m_OrbitPositions);
                        }
                        else
                        {
                            Debug.LogError("Celestial Orbit:" + name + " failed to find planetoid version of celestial body:" + physicalOwnerBody.name);
                        }
                    }
                    else
                    {
                        Debug.LogError("Celestial Orbit:" + name + " contains an invalid owner ID");
                    }

                    m_Rebuild = false;
                }

                if (m_OrbitPositions != null && m_OrbitPositions.Length > 0)
                {
                    Vector3 localCameraPosition = cameraPosition - transform.position;

                    Vector3 closestApproximateOrbitPosition = GetClosestApproximateOrbitPosition(localCameraPosition, m_OrbitPositions);

                    float distance = (closestApproximateOrbitPosition - localCameraPosition).magnitude;

                    //Debug.Log( "CameraPosition(" + cameraPosition.ToString(".00") + ") ClosestPointOnOrbit(" + m_OrbitPositions[ closestPositionIndex ].ToString(".00") + ") Distance(" + distance.ToString(".00") + ")" );

                    float lineWidth = Mathf.Min(m_MaxWidth, Mathf.Max(m_MinWidth, ((distance - m_MinRange) / m_MaxRange) * m_MaxWidth));

                    m_LineRenderer.widthMultiplier = lineWidth;
                    m_LineRenderer.startWidth      = lineWidth;
                    m_LineRenderer.endWidth        = lineWidth;
                }
            }
        }
    }
Ejemplo n.º 2
0
    private void UpdatePosition(CelestialBody body)
    {
        CelestialVirtual virtualBody = body as CelestialVirtual;

        if (null != virtualBody)
        {
            CelestialBody celestialBody = CelestialManagerPhysical.Instance.GetCelestialBody(virtualBody.OwnerID);

            if (null != celestialBody)
            {
                CelestialPlanetoid planetoid = celestialBody as CelestialPlanetoid;

                if (null != planetoid)
                {
                    CelestialVector3 position = planetoid.CalculatePosition(CelestialTime.Instance.Current);

                    virtualBody.LocalPosition = position;

                    if (body.OrbitParentID != 0)
                    {
                        CelestialBody parentBody = GetCelestialBody(body.OrbitParentID);

                        if (parentBody != null)
                        {
                            position += parentBody.Position;
                        }
                    }

                    virtualBody.Position = position;
                }
                else
                {
                    // Set the virtual position to match the real planet's
                    virtualBody.LocalPosition = celestialBody.LocalPosition;
                    virtualBody.Position      = celestialBody.Position;
                }
            }
            else
            {
                Debug.LogWarning("Unable to update position of " + body.name);
            }
        }
    }