Exemplo n.º 1
0
        private int General(CountCalculator countCalculator)
        {
            var lines    = FileLines;
            var orbitals = new SortedDictionary <string, OrbitalObject>();

            foreach (var l in lines)
            {
                var split       = l.Split(')');
                var orbiteeName = split[0];
                var orbiterName = split[1];
                if (!orbitals.TryGetValue(orbiteeName, out var orbitee))
                {
                    orbitals.Add(orbiteeName, orbitee = new OrbitalObject(orbiteeName));
                }
                if (!orbitals.TryGetValue(orbiterName, out var orbiter))
                {
                    orbitals.Add(orbiterName, orbiter = new OrbitalObject(orbiterName));
                }
                orbiter.OrbitAround(orbitee);
            }
            int count = 0;

            countCalculator(ref count, orbitals);
            return(count);
        }
Exemplo n.º 2
0
        public IOrbitalBuilder Around(OrbitalObject obj1)
        {
            _orbitalObject.Orbits = obj1;
            obj1.IsOrbited        = true;

            return(this);
        }
Exemplo n.º 3
0
 public int CalculateDistanceFrom(OrbitalObject other)
 {
     distance = 0;
     directOrbit?.CalculateDistanceFrom(other, 1);
     foreach (var o in directOrbiters)
     {
         o.CalculateDistanceFrom(other, 1);
     }
     return(other.distance);
 }
Exemplo n.º 4
0
    void Update()
    {
        if (Input.GetKeyDown(KeyCode.Escape))
        {
            Application.Quit();
        }

        if (Input.GetMouseButtonDown(0))
        {
            isDragging   = true;
            clickStart   = Camera.main.ScreenToWorldPoint(Input.mousePosition);
            clickStart.z = 0;
            GameObject newObject = Instantiate(Resources.Load("Orbiter")) as GameObject;
            newObject.name = newObject.GetInstanceID().ToString();
            newObject.transform.position = clickStart;
            newObject.transform.SetParent(Container);
            //newObject.GetComponent<Renderer>().material.color = Random.ColorHSV(0, 1, 0.8f, 0.95f);
            newOrbiter = newObject.GetComponent <OrbitalObject>();
            newOrbiter.SetColor(Random.ColorHSV(0, 1, 0.8f, 0.8f));
            thrustLine.enabled = true;
            thrustLine.SetPosition(0, clickStart);
            simulatedLine.enabled = true;
            lineSimulationTimer   = 0;
        }

        if (isDragging)
        {
            clickStop   = Camera.main.ScreenToWorldPoint(Input.mousePosition);
            clickStop.z = 0;
            thrustLine.SetPosition(1, clickStop);
            thrustLine.endWidth = ((clickStart - clickStop) * 0.1f).magnitude;

            lineSimulationTimer -= Time.deltaTime;
            if (lineSimulationTimer <= 0)
            {
                lineSimulationTimer = lineSimulationInterval;
                Vector3[] simulatedPoints = OrbitalObject.Simulate(clickStart, (clickStart - clickStop) * 0.1f, 1, 100, 0);
                simulatedLine.positionCount = simulatedPoints.Length;
                simulatedLine.SetPositions(simulatedPoints);
            }
        }

        if (Input.GetMouseButtonUp(0))
        {
            newOrbiter.SetForce((clickStart - clickStop) * 0.1f);
            newOrbiter.Unfreeze();
            isDragging            = false;
            thrustLine.enabled    = false;
            simulatedLine.enabled = false;
        }
    }
Exemplo n.º 5
0
    void FixedUpdate()
    {
        SimulationTimeStep();

        var orbitalTag = GameObject.FindGameObjectsWithTag("OrbitalObject");

        foreach (var obj in orbitalTag)
        {
            OrbitalObject orbitalObject = obj.GetComponent <OrbitalObject>();
            orbitalObject.GravityCalculator(timeStep);
            orbitalObject.UpdatePosition(timeStep);
            //Debug.Log(obj);
        }
    }
Exemplo n.º 6
0
            private void CalculateDistanceFrom(OrbitalObject other, int depth)
            {
                if (distance <= depth)
                {
                    return;
                }

                distance = depth;

                if (this == other)
                {
                    return;
                }

                directOrbit?.CalculateDistanceFrom(other, depth + 1);
                foreach (var o in directOrbiters)
                {
                    o.CalculateDistanceFrom(other, depth + 1);
                }
            }
Exemplo n.º 7
0
 public void OrbitAround(OrbitalObject other)
 {
     directOrbit?.directOrbiters.Remove(this);
     directOrbit = other;
     other.directOrbiters.Add(this);
 }
Exemplo n.º 8
0
 public static int GetNumberOfOrbits(this OrbitalObject orbitalObject)
 {
     return(orbitalObject.Orbits?.GetNumberOfOrbits() + 1 ?? 0);
 }
Exemplo n.º 9
0
 public OrbitalBuilder(OrbitalMapFactory orbitalMapFactory, OrbitalObject orbitalObject)
 {
     _orbitalMapFactory = orbitalMapFactory;
     _orbitalObject     = orbitalObject;
 }