Example #1
0
    private void Initialize()
    {
        allBodies      = FindObjectsOfType <AstronomicalObject>();
        allDebugBodies = new DebugBody[allBodies.Length];

        for (uint i = 0; i < allBodies.Length; ++i)
        {
            allDebugBodies[i] = new DebugBody(allBodies[i]);
        }
    }
Example #2
0
    public void UpdateDebugBodyVelocity(DebugBody body, DebugBody other)
    {
        if (body == other)
        {
            return;
        }

        // calculating the force to get the current velocity of the body.
        // G(m1m2/r2)
        Vector3 distance     = other.position - body.position;
        Vector3 acceleration = Universe.GravitationalConstant * distance.normalized * other.mass / distance.sqrMagnitude;

        body.velocity += acceleration * timeSpeed;
    }
Example #3
0
    public void UpdateDebugBodyPosition(DebugBody body, Vector3[] currentOrbitPositions, uint iteration)
    {
        Vector3 previousPosition = body.position;
        Vector3 newPosition      = body.position + body.velocity * timeSpeed;

        body.position = newPosition;

        // When drawing debug lines we can compare
        // orbits from all objects or relative to only one body.
        if (relativeBody && relativeBody != body.reference)
        {
            newPosition -= allDebugBodies[relativeBodyIndex].position - relativeBodyInitialPosition;
        }
        else if (relativeBody == body.reference)
        {
            newPosition = relativeBodyInitialPosition;
        }

        // updating the next point to draw.
        currentOrbitPositions[iteration] = newPosition;
    }