예제 #1
0
    void triangulate_wall_surfaces()
    {
        foreach (List <Cmd> wall_cmds in all_wall_cmds)
        {
            foreach (Cmd cmd in wall_cmds)
            {
                MasterSurfaceNode n00 = node_map[cmd.pos.x + 0, cmd.pos.y + 0];
                MasterSurfaceNode n01 = node_map[cmd.pos.x + 1, cmd.pos.y + 0];
                MasterSurfaceNode n10 = node_map[cmd.pos.x + 0, cmd.pos.y + 1];
                MasterSurfaceNode n11 = node_map[cmd.pos.x + 1, cmd.pos.y + 1];

                /*if (cmd.type == LINE) {
                 *      switch (cmd.dir) {
                 *              case LEFT:
                 *                      color_edges(n11.upleft, n10.upleft); break;
                 *              case UP:
                 *                      color_edges(n10.upleft, n00.upleft); break;
                 *              case RIGHT:
                 *                      color_edges(n00.upleft, n01.upleft); break;
                 *              case DOWN:
                 *                      color_edges(n01.upleft, n11.upleft); break;
                 *      }
                 * }*/
                if (cmd.type == CORNER)
                {
                    switch (cmd.dir)
                    {
                    case LEFT:
                        triangulate_corner(n01.upleft, n11.upleft, n10.upleft); break;

                    case UP:
                        triangulate_corner(n11.upleft, n10.upleft, n00.upleft); break;

                    case RIGHT:
                        triangulate_corner(n10.upleft, n00.upleft, n01.upleft); break;

                    case DOWN:
                        triangulate_corner(n00.upleft, n01.upleft, n11.upleft); break;
                    }
                }
                if (cmd.type == ALLEY)
                {
                    switch (cmd.dir)
                    {
                    case LEFT:
                        triangulate_alley(n00.middle, n00.upleft, n01.upleft, n11.upleft, n10.upleft); break;

                    case UP:
                        triangulate_alley(n00.middle, n01.upleft, n11.upleft, n10.upleft, n00.upleft); break;

                    case RIGHT:
                        triangulate_alley(n00.middle, n11.upleft, n10.upleft, n00.upleft, n01.upleft); break;

                    case DOWN:
                        triangulate_alley(n00.middle, n10.upleft, n00.upleft, n01.upleft, n11.upleft); break;
                    }
                }
            }
        }
    }
예제 #2
0
 void generate_node_map()
 {
     node_map = new MasterSurfaceNode[width + 1, height + 1];
     for (int x = 0; x < width + 1; x++)
     {
         for (int y = 0; y < height + 1; y++)
         {
             node_map[x, y] = new MasterSurfaceNode(x, y, cell_size);
         }
     }
 }