// 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; } } } }
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); } } }