void drawtiles(Map m, unsigned char *buf, Sensor s, mapVec pos, mapVec size) { int index=0; unsigned char tileIndex; unsigned char flags; int drawX, drawY; Volume vol = sensor_volume(s); mapVec borig, bsz; volume_swept_bounds(vol, &borig, &bsz); mapVec msz = map_size(m); float ystart = CLIP(pos.y, 0, msz.y); float xstart = CLIP(pos.x, 0, msz.x); float yend = CLIP(pos.y+size.y, 0, msz.y); float xend = CLIP(pos.x+size.x, 0, msz.x); int z = CLIP(pos.z, 0, msz.z); //note: different from test.c version for(int y = ystart; y < yend; y++) { for(int x = xstart; x < xend; x++) { index = tile_index(x, y, z, msz, borig, bsz); flags = buf[index]; TCOD_console_print_left(NULL, 0, 18, TCOD_BKGND_NONE, "%i, %i, %i", map_item_lit(flags), map_item_in_volume(flags), map_item_los(flags)); tileIndex = map_tile_at(m, x, y, z); drawX = x*2+z*((msz.x*2)+1); drawY = y; //TCOD_console_print_left(NULL, drawX, drawY, TCOD_BKGND_NONE, "%i", index); if(map_item_visible(flags)) { //visible and lit and in volume TCOD_console_print_left(NULL, drawX, drawY, TCOD_BKGND_NONE, "%i", tileIndex); } // else if(!map_item_lit(flags) && map_item_in_volume(flags) && map_item_los(flags)) { // //not lit and viewable // TCOD_console_print_left(NULL, drawX, drawY, TCOD_BKGND_NONE, "_"); // } // else if(!map_item_lit(flags) && map_item_in_volume(flags) && !map_item_los(flags)) { // //not lit and not los // TCOD_console_print_left(NULL, drawX, drawY, TCOD_BKGND_NONE, ","); // } // else if(!map_item_lit(flags) && !map_item_in_volume(flags) && map_item_los(flags)) { // //not lit and not in vol // TCOD_console_print_left(NULL, drawX, drawY, TCOD_BKGND_NONE, "d"); // } // else if(map_item_lit(flags) && !map_item_in_volume(flags) && map_item_los(flags)) { // //lit and in los, but not in vol // TCOD_console_print_left(NULL, drawX, drawY, TCOD_BKGND_NONE, "a"); // } // else if(map_item_lit(flags) && map_item_in_volume(flags) && !map_item_los(flags)) { // //lit and in vol, but not in los // TCOD_console_print_left(NULL, drawX, drawY, TCOD_BKGND_NONE, "b"); // } // else if(map_item_lit(flags) && !map_item_in_volume(flags) && !map_item_los(flags)) { // //lit and not in vol or los (or los wasn't checked) // TCOD_console_print_left(NULL, drawX, drawY, TCOD_BKGND_NONE, "."); // } // else if(!map_item_lit(flags) && !map_item_in_volume(flags) && !map_item_los(flags)) { // //not lit, in vol, or in los // TCOD_console_print_left(NULL, drawX, drawY, TCOD_BKGND_NONE, "x"); // } } } }
Sensor sensor_init(Sensor s, char *id, Volume volume, void *context) { s->id = strdup(id); s->volume = volume; volume_swept_bounds(s->volume, &(s->borig), &(s->bsz)); s->vistiles = calloc(s->bsz.x*s->bsz.y*s->bsz.z, sizeof(perception)); s->visObjects = TCOD_list_new(); s->oldVisObjects = TCOD_list_new(); s->stimuli = TCOD_list_new(); s->context = context; return s; }
void sensor_set_position(Sensor s, mapVec p) { volume_set_position(s->volume, p); volume_swept_bounds(s->volume, &(s->borig), NULL); }