示例#1
0
 private void Awake()
 {
     m_Instance          = this;
     m_CurrentTime       = DateTime.Now;
     m_VirtualTime       = m_CurrentTime;
     m_CurrentJulianDate = PlanetPositionUtility.GetJulianDate(m_CurrentTime);
     m_VirtualJulianDate = m_CurrentJulianDate;
 }
示例#2
0
    public virtual CelestialVector3 CalculatePosition(double julianDate)
    {
        double radiusVector;
        double eclipticalLongitude;
        double eclipticLatitude;

        GetHeliocentricEclipticalCoordinates(julianDate, out radiusVector, out eclipticalLongitude, out eclipticLatitude);

        return(PlanetPositionUtility.GetPositionFromHeliocentricEclipticalCoordinates(radiusVector, eclipticalLongitude, eclipticLatitude));
    }
示例#3
0
    public override List <Vector3> GetOrbit(double currentJulianDate, double resolution)
    {
        double orbitalPeriodInDays = GetOrbitalPeriod();

        double julianDaysPerPosition = (orbitalPeriodInDays / resolution);

        List <Vector3> orbit = new List <Vector3>();

        // Start at 1/2 orbit in the past
        double julianDate = currentJulianDate - (orbitalPeriodInDays * 0.5);

        double radiusVector;
        double eclipticalLongitude;
        double eclipticLatitude;

        GetHeliocentricEclipticalCoordinates(julianDate, out radiusVector, out eclipticalLongitude, out eclipticLatitude);

        // In case a planet makes it in here without an orbit, abort
        if (radiusVector != 0.0f)
        {
            double initialRotation = eclipticalLongitude;
            double difference      = 0.0;
            bool   closing         = false;

            while (true)
            {
                double newDifference = Math.Abs(initialRotation - eclipticalLongitude);

                if (closing)
                {
                    if (newDifference > difference)
                    {
                        break;
                    }
                }
                else if (newDifference < difference)
                {
                    closing = true;
                }

                difference = newDifference;

                CelestialVector3 position = PlanetPositionUtility.GetPositionFromHeliocentricEclipticalCoordinates(radiusVector, eclipticalLongitude, eclipticLatitude);

                orbit.Add((Vector3)(position / GlobalConstants.CelestialUnit));

                julianDate += julianDaysPerPosition;

                GetHeliocentricEclipticalCoordinates(julianDate, out radiusVector, out eclipticalLongitude, out eclipticLatitude);
            }
        }

        return(orbit);
    }
示例#4
0
    private void Update()
    {
        if (m_Increasing || m_Decreasing)
        {
            m_PressDuration += Time.deltaTime;

            // Treat press like a single click until the button is held more than a certain duration
            if (m_PressDuration > 0.5f)
            {
                m_CurrentTimeIncrement += (long)(100 * Time.deltaTime);

                if (m_CurrentTimeIncrement > m_MaxCurrentTimeIncrement)
                {
                    m_CurrentTimeIncrement = m_MaxCurrentTimeIncrement;
                }

                long timeIncrement = m_TimeIncrementUnit * (m_CurrentTimeIncrement * m_CurrentTimeIncrement);

                m_VirtualTime = new DateTime(m_VirtualTime.Ticks + ((m_Increasing) ? timeIncrement : -timeIncrement));

                m_VirtualJulianDate = PlanetPositionUtility.GetJulianDate(m_VirtualTime);
            }
        }

        m_CurrentTime       = DateTime.Now;
        m_CurrentJulianDate = PlanetPositionUtility.GetJulianDate(m_CurrentTime);

        if (m_CurrentJulianDateText != null)
        {
            m_CurrentJulianDateText.text = m_CurrentJulianDate.ToString(".00000");
        }

        if (m_CurrentTimeText != null)
        {
            m_CurrentTimeText.text = GetTimeString(m_CurrentTime);
        }

        if (m_Synced)
        {
            m_VirtualJulianDate = m_CurrentJulianDate;
            m_VirtualTime       = m_CurrentTime;
        }

        if (m_VirtualJulianDateText != null)
        {
            m_VirtualJulianDateText.text = m_VirtualJulianDate.ToString(".00000");
        }

        if (m_VirtualTimeText != null)
        {
            m_VirtualTimeText.text = GetTimeString(m_VirtualTime);
        }
    }
示例#5
0
 public override void GetHeliocentricEclipticalCoordinates(double julianDate, out double radiusVector, out double eclipticalLongitude, out double eclipticLatitude)
 {
     PlanetPositionUtility.GetLunaHeliocentricEclipticalCoordinates(julianDate, out radiusVector, out eclipticalLongitude, out eclipticLatitude);
 }