예제 #1
0
    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;
        }
    }
예제 #2
0
    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;
        }
    }
예제 #3
0
    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;
    }