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); }
public IOrbitalBuilder Around(OrbitalObject obj1) { _orbitalObject.Orbits = obj1; obj1.IsOrbited = true; return(this); }
public int CalculateDistanceFrom(OrbitalObject other) { distance = 0; directOrbit?.CalculateDistanceFrom(other, 1); foreach (var o in directOrbiters) { o.CalculateDistanceFrom(other, 1); } return(other.distance); }
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; } }
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); } }
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); } }
public void OrbitAround(OrbitalObject other) { directOrbit?.directOrbiters.Remove(this); directOrbit = other; other.directOrbiters.Add(this); }
public static int GetNumberOfOrbits(this OrbitalObject orbitalObject) { return(orbitalObject.Orbits?.GetNumberOfOrbits() + 1 ?? 0); }
public OrbitalBuilder(OrbitalMapFactory orbitalMapFactory, OrbitalObject orbitalObject) { _orbitalMapFactory = orbitalMapFactory; _orbitalObject = orbitalObject; }