void UpdateQuarkConnections() { for (int i = 0; i < blueprint.Quarks.Length; i++) { var quarkA = blueprint.Quarks[i]; var connections = new List<AtomBlueprint.Connection>(); for (int j = 0; j < blueprint.Quarks.Length; j++) { if (i == j) continue; var quarkB = blueprint.Quarks[j]; float distance = Vector3.Distance(quarkA.Position, quarkB.Position); bool isConnected = !Mathf.Approximately(quarkA.Position.x, quarkB.Position.x) && Mathf.Approximately(distance, snap.x * 2f); if (!isConnected) continue; var connection = new AtomBlueprint.Connection { Index = j }; GetSegments(quarkA.Position, quarkB.Position, out connection.SegmentA, out connection.SegmentB); connections.Add(connection); } quarkA.Connections = connections.ToArray(); blueprint.Quarks[i] = quarkA; } }
void UpdateElectronConnections() { if (blueprint.Quarks.Length == 0) return; for (int i = 0; i < blueprint.Electrons.Length; i++) { var electron = blueprint.Electrons[i]; var quarkIndex = blueprint.Quarks.FindSmallestIndex((quarkA, quarkB) => Vector3.Distance(electron.Position, quarkA.Position).CompareTo(Vector3.Distance(electron.Position, quarkB.Position))); var connection = new AtomBlueprint.Connection { Index = quarkIndex, }; GetSegments(electron.Position, blueprint.Quarks[quarkIndex].Position, out connection.SegmentA, out connection.SegmentB); electron.Connection = connection; blueprint.Electrons[i] = electron; } }
bool FindConnection(PolygonSegment segment, AtomBlueprint.Quark quark, out AtomBlueprint.Connection connection) { for (int i = 0; i < quark.Connections.Length; i++) { connection = quark.Connections[i]; if (connection.SegmentA == segment.Index) return true; } connection = new AtomBlueprint.Connection(); return false; }