7 extern int view_width, view_height;
8 extern float view_panx, view_pany, view_zoom;
11 struct level *create_level(int xsz, int ysz)
15 if(!(lvl = malloc(sizeof *lvl))) {
18 if(!(lvl->cells = calloc(xsz * ysz, sizeof *lvl->cells))) {
27 void free_level(struct level *lvl)
35 static void draw_cell(struct level *lvl, struct cell *cell)
38 float x, y, xsz, ysz, sz;
39 static const float colors[][3] = {{0, 0, 0}, {0.6, 0.6, 0.6}, {0.4, 0.2, 0.1}};
41 xsz = view_zoom * view_width / lvl->width;
42 ysz = view_zoom * view_height / lvl->height;
43 sz = xsz > ysz ? ysz : xsz;
45 cidx = cell - lvl->cells;
46 row = cidx / lvl->width;
47 col = cidx % lvl->width;
49 x = col * sz - view_panx;
50 y = row * sz - view_pany;
54 glVertex2f(x + sz, y);
55 glVertex2f(x + sz, y + sz);
56 glVertex2f(x, y + sz);
62 glColor3fv(colors[cell->type]);
64 glVertex2f(x + sz, y);
65 glVertex2f(x + sz, y + sz);
66 glVertex2f(x, y + sz);
69 void draw_level(struct level *lvl)
76 for(i=0; i<lvl->height; i++) {
77 for(j=0; j<lvl->width; j++) {
78 draw_cell(lvl, cell++);