Exemplo n.º 1
0
        public static void AssignCircuitIdsToNonGates(RectList rects, List <List <int> > touchGraph, List <List <int> > circuitIds)
        {
            int circuitId = 0;
            var listid    = 0;

            foreach (List <int> list in touchGraph)
            {
                circuitIds.Add(new List <int>());
                if (list.Count > 0)
                {
                    if (rects.GetRect(list[0]).Properties.PhysicsId >= (byte)PhysicsType.GateNot)
                    {
                    }
                    else
                    {
                        //Make sure that we don't assign circuitid 0 if circuit type
                        if (rects.GetRect(list[0]).Properties.PhysicsId > 0 && circuitId == 0)
                        {
                            circuitId = 1;
                        }
                        circuitIds[listid].Add(circuitId);
                        circuitId++;
                    }
                }
                listid++;
            }
        }
Exemplo n.º 2
0
        public static bool HasPathConstrained(RectList rects, bool[,] graph, int i, int j, int depth)
        {
            if (depth > 6)
            {
                return(false);
            }

            Rect rect1 = rects.GetRect(i);
            Rect rect2 = rects.GetRect(j);

            if (!DirectLinkingType((PhysicsType)rect1.Properties.PhysicsId, (PhysicsType)rect2.Properties.PhysicsId))
            {
                return(false);
            }

            if (graph[i, j]) //direct path
            {
                return(true);
            }

            //If didn't find, then recurse
            for (int q = 0; q < graph.GetLength(0); q++)
            {
                if (graph[i, q])
                {
                    if (HasPathConstrained(rects, graph, q, j, depth + 1))
                    {
                        return(true);
                    }
                }
            }

            return(false);
        }
Exemplo n.º 3
0
 public static void DisplayAdjacencyGraph(RectList rects, bool[,] graph)
 {
     Console.WriteLine("Adjacency graph:");
     for (int i = 0; i < rects.Count; i++)
     {
         Console.Write(i + "=" + rects.GetRect(i).Properties.PhysicsId + "\t: ");
         for (int j = 0; j < rects.Count; j++)
         {
             if (graph[i, j])
             {
                 Console.Write(j + "=" + rects.GetRect(j).Properties.PhysicsId + " ");
             }
         }
         Console.WriteLine();
     }
 }
Exemplo n.º 4
0
        public static void AssignCircuitIdsToRects(RectList rects, List <List <int> > touchGraph, List <List <int> > circuitIds)
        {
            int listid = 0;

            foreach (List <int> list in touchGraph)
            {
                foreach (int id in list)
                {
                    if (circuitIds[listid][0] > 0)
                    {
                        rects.GetRect(id).Properties.CircuitIds = new List <int>();
                        foreach (int cid in circuitIds[listid])
                        {
                            rects.GetRect(id).Properties.CircuitIds.Add(cid);
                        }
                    }
                }
                listid++;
            }
        }
Exemplo n.º 5
0
        public static List <List <int> > CreateTouchGraphFromRects(RectList rects)
        {
            var touchGraph = new List <List <int> > {
                new List <int>()
            };

            for (int i = 0; i < rects.Count; i++)
            {
                if (rects.GetRect(i).Properties.PhysicsId == 0)
                {
                    touchGraph[0].Add(i);
                }
            }
            return(touchGraph);
        }
Exemplo n.º 6
0
        //True if same
        public bool IsEqualTo(RectList rects)
        {
            if (rects == null || rects.Count != Count)
            {
                return(false);
            }

            for (int i = 0; i < Count; i++)
            {
                Rect rect1 = rects.GetRect(i);
                Rect rect2 = Rects[i];

                if (rect1.IsEqualTo(rect2) == false)
                {
                    return(false);
                }
            }
            return(true);
        }
Exemplo n.º 7
0
        public static void AssignCircuitIdsToGates(bool[,] graph, RectList rects, List <List <int> > touchGraph, List <List <int> > circuitIds)
        {
            int listid = 0;

            foreach (List <int> list in touchGraph)
            {
                if (list.Count > 0 && rects.GetRect(list[0]).Properties.PhysicsId >= (byte)PhysicsType.GateNot)
                {
                    Console.WriteLine("GATE " + listid);
                    int id = list[0];

                    for (int i = 0; i < graph.GetLength(0); i++)
                    {
                        if (graph[id, i])
                        {
                            int cid = FindCircuitIdFor(i, touchGraph, circuitIds);
                            Console.WriteLine(" connects to " + i + " cid=" + cid);
                            circuitIds[listid].Add(cid);
                        }
                    }
                }
                listid++;
            }
        }
Exemplo n.º 8
0
        //Deserialized SerializedRects back to set of rectangles(RectList)
        public static RectList SerializedRectsToRects(SerializedRects serializedRects)
        {
            RectList rects     = new RectList();
            char     state     = ' ';
            byte     shapeId   = 0;
            byte     textureId = 0;
            ulong    rgba      = 0;
            byte     groupId   = 0;
            ulong    worldid   = 0;
            string   serial    = serializedRects.SerializedData;
            char     mode      = CharRects3D;


            for (int i = 0; i < serial.Length; i++)
            {
                if (serial[i] == CharRects2D)
                {
                    mode = CharRects2D; state = CharRgba;
                }
                if (serial[i] == CharRgba)
                {
                    mode = CharRects3D; state = CharRgba;
                }
                if (serial[i] == CharGroup)
                {
                    state = CharGroup;
                }
                if (serial[i] == CharLimit255)
                {
                    state = CharLimit255;
                }
                if (serial[i] == CharCircuit)
                {
                    state = CharCircuit;
                }
                if (serial[i] == CharWorld)
                {
                    state = CharWorld;
                }
                switch (state)
                {
                case CharGroup:
                {
                    groupId = Transcode64.From64(serial[++i]);
                    state   = mode;
                    break;
                }

                case CharRgba:    //Reading RGBA palette
                {
                    i++;
                    int r = Transcode64.From64(serial[i++]);
                    int g = Transcode64.From64(serial[i++]);
                    int b = Transcode64.From64(serial[i++]);
                    int a = Transcode64.From64(serial[i++]);

                    rgba      = Transcode64.RecodeRgbatoUlong((byte)r, (byte)g, (byte)b, (byte)a);
                    shapeId   = Transcode64.From64(serial[i++]);
                    textureId = Transcode64.From64(serial[i]);
                    state     = mode;

                    break;
                }

                case CharRects2D:    //Reading emergents
                {
                    Rect rect = new Rect();
                    rect.Pt1[0] = Transcode64.From64(serial[i++]);
                    rect.Pt1[2] = Transcode64.From64(serial[i++]);

                    rect.Pt2[0] = Transcode64.From64(serial[i++]);
                    rect.Pt2[2] = Transcode64.From64(serial[i]);

                    //Convert from inclusve
                    rect.Pt2[0]++;
                    rect.Pt2[2]++;

                    rect.Properties.Rgba      = rgba;
                    rect.Properties.ShapeId   = shapeId;
                    rect.Properties.TextureId = textureId;
                    rect.Properties.GroupId   = groupId;
                    rect.Properties.WorldId   = worldid;
                    rects.AddRect(rect);
                    break;
                }

                case CharRects3D:    //Reading emergents
                {
                    Rect rect = new Rect();
                    rect.Pt1[0] = Transcode64.From64(serial[i++]);
                    rect.Pt1[1] = Transcode64.From64(serial[i++]);
                    rect.Pt1[2] = Transcode64.From64(serial[i++]);

                    rect.Pt2[0] = Transcode64.From64(serial[i++]);
                    rect.Pt2[1] = Transcode64.From64(serial[i++]);
                    rect.Pt2[2] = Transcode64.From64(serial[i]);

                    //Convert from inclusve
                    rect.Pt2[0]++;
                    rect.Pt2[1]++;
                    rect.Pt2[2]++;

                    rect.Properties.Rgba      = rgba;
                    rect.Properties.ShapeId   = shapeId;
                    rect.Properties.TextureId = textureId;
                    rect.Properties.GroupId   = groupId;
                    rect.Properties.WorldId   = worldid;
                    rects.AddRect(rect);
                    break;
                }

                case CharCircuit:
                {
                    i++;
                    byte pid = Transcode64.From64(serial[i++]);      //physics id
                    byte cid = Transcode64.From64(serial[i]);        //circuit id
                    if (rects.GetRect(rects.Count - 1).Properties.CircuitIds == null)
                    {
                        rects.GetRect(rects.Count - 1).Properties.CircuitIds = new List <int>();
                    }

                    rects.GetRect(rects.Count - 1).Properties.PhysicsId = pid;
                    rects.GetRect(rects.Count - 1).Properties.CircuitIds.Add(cid);
                    state = mode;
                    break;
                }

                case CharWorld:    //Reading World ID
                {
                    i++;
                    int v4 = Transcode64.From64(serial[i++]);
                    int v3 = Transcode64.From64(serial[i++]);
                    int v2 = Transcode64.From64(serial[i++]);
                    int v1 = Transcode64.From64(serial[i++]);

                    worldid = (ulong)((v4 << 24) | (v3 << 16) | (v2 << 8) | v1);
                    state   = mode;

                    break;
                }
                }
            }
            GridConverter.BuildCircuit(rects, false);
            return(rects);
        }