int main(int argc, char **argv) { DARNIT_TILESHEET *ts; DARNIT_TILEMAP *tm; int i, t; d_init("orthotest", "orthotest", NULL); ts = d_render_tilesheet_load("grid.png", 24, 24, DARNIT_PFORMAT_RGB5A1); tm = d_tilemap_new(0xFFF, ts, 0xFFF, 10, 18); for (i = 0; i < 180; i++) tm->data[i] = 1; d_tilemap_recalc(tm); d_tilemap_camera_move(tm, -1, 0); t = d_time_get(); for (i = 0;; i++) { fprintf(stderr, "Moving camera %i\n", -i / 30); d_tilemap_camera_move(tm, 0, -i / 30); d_render_begin(); d_tilemap_draw(tm); d_render_end(); d_loop(); } d_quit(); }
int main(int argc, char **argv) { DARNIT_TILEMAP *tm; DARNIT_TILESHEET *ts; int i, j; d_init("isotest", "isotest", NULL); ts = d_render_tilesheet_isom_load("isosheet.png", 64, 64, DARNIT_PFORMAT_RGB5A1); tm = d_tilemap_isom_new(0, ts, 0xFF, 32, 16, 32); d_render_blend_enable(); d_tilemap_recalc(tm); for (i = 0;; i++) { j = i % 1200; if (j > 600) j = j + (2*(j - 600)) * -1; j *= -1; j += 300; d_tilemap_camera_move(tm, 0, 0); d_render_begin(); d_render_blend_enable(); d_tilemap_draw(tm); d_render_end(); d_loop(); } d_quit(); }
void map_clear_fow() { unsigned int *d=map->layer[map->layers-1].tilemap->data; int w=map->layer[map->layers-1].tilemap->w; int h=map->layer[map->layers-1].tilemap->h; int i; for(i=0; i<w*h; i++) { d[i]&=~0xFFF; } d_tilemap_recalc(map->layer[map->layers-1].tilemap); }
DARNIT_MAP *map_new_palette(unsigned int width, unsigned int height, DARNIT_TILESHEET *ts) { int i; int tile_w, tile_h; DARNIT_MAP *d_map=NULL; DARNIT_MAP_LAYER *layer=NULL; if(!(ts&&(d_map=malloc(sizeof(DARNIT_MAP)))&&(layer=malloc(sizeof(DARNIT_MAP_LAYER))))) { free(d_map); free(layer); return NULL; } d_map->layer=layer; *((unsigned int *) &d_map->layers)=1; d_map->object=NULL; *((unsigned int *) &d_map->objects)=0; d_map->prop=NULL; d_map->stringdata=NULL; d_map->stringrefs=NULL; d_render_tilesheet_geometrics(ts, NULL, NULL, &tile_w, &tile_h); /*This is needed to at least null all tilemaps so we can free them i one fails*/ if(!(layer->tilemap=d_tilemap_new(0xFFF, ts, 0xFFF, width, height))) { free(d_map); free(layer); return NULL; } for(i=0; i<width*height; i++) layer->tilemap->data[i]=0; d_tilemap_recalc(layer->tilemap); layer->ts=ts; layer->offset_x=0; layer->offset_y=0; layer->tile_w=tile_w; layer->tile_h=tile_h; d_map_camera_move(d_map, 0, 0); return d_map; }
MAP *map_new(unsigned int width, unsigned int height, unsigned int terrain_layers, DARNIT_TILESHEET *ts) { int i, j; int tile_w, tile_h; int fail=0; DARNIT_MAP *d_map=NULL; DARNIT_MAP_LAYER *layer=NULL; MAP *map; DARNIT_FILE *f_ts; if(!(map=malloc(sizeof(MAP)))) return NULL; if(!(ts&&terrain_layers&&(d_map=malloc(sizeof(DARNIT_MAP)))&&(layer=malloc((terrain_layers+2)*sizeof(DARNIT_MAP_LAYER))))) { free(d_map); free(layer); return NULL; } d_map->layer=layer; *((unsigned int *) &d_map->layers)=terrain_layers+2; d_map->object=NULL; *((unsigned int *) &d_map->objects)=0; d_map->prop=NULL; d_map->stringdata=NULL; d_map->stringrefs=NULL; d_render_tilesheet_geometrics(ts, NULL, NULL, &tile_w, &tile_h); for(i=0; i<terrain_layers+2; i++) { /*This is needed to at least null all tilemaps so we can free them i one fails*/ if(!(fail|=!(layer[i].tilemap=d_tilemap_new(0xFFF, ts, 0xFFF, width, height)))) { for(j=0; j<width*height; j++) layer[i].tilemap->data[j]=i==terrain_layers+1?1:144*(!i); d_tilemap_recalc(layer[i].tilemap); } layer[i].ts=ts; layer[i].offset_x=0; layer[i].offset_y=0; layer[i].tile_w=tile_w; layer[i].tile_h=tile_h; } if(fail) { for(i=0; i<terrain_layers+2; i++) d_tilemap_free(layer[i].tilemap); free(d_map); free(layer); return NULL; } d_map_camera_move(d_map, 0, 0); map->map=d_map; map->stringtable=malloc(sizeof(MAP_PROPERTY)); map->stringtable->key="tileset"; map->stringtable->value="mapdata/default.png"; map->stringtable->next=NULL; map->w=width*tile_w; map->h=height*tile_h; sprintf(map->sizestring, "%ix%i", width, height); map_prop_set_or_add(map, "size", map->sizestring); if(!(f_ts=d_file_open("res/default.png", "rb"))) { map->tilesheet=NULL; map_close(map); return NULL; } d_file_seek(f_ts, 0, SEEK_END); map->tilesheet_size=d_file_tell(f_ts); map->tilesheet=malloc(map->tilesheet_size); d_file_seek(f_ts, 0, SEEK_SET); d_file_read(map->tilesheet, map->tilesheet_size, f_ts); d_file_close(f_ts); return map; }