void WorldSegment::drawAllBlocks(){ if(!loaded) return; // x,y,z print pricess ALLEGRO_BITMAP * temp = al_get_target_bitmap(); int32_t vsxmax = sizex-1; int32_t vsymax = sizey-1; int32_t vszmax = sizez-1; // grabbing one tile +z more than we should for tile rules //al_hold_bitmap_drawing(true); for(int32_t vsz=0; vsz < vszmax; vsz++) { if(config.showRenderStatus) SetTitle("Stonesense - Drawing Terrain, Level %d/%d", (vsz+1), vszmax); if(config.fogenable && config.foga) { if(!fog) { fog = al_create_bitmap(al_get_bitmap_width(temp), al_get_bitmap_height(temp)); al_set_target_bitmap(fog); al_clear_to_color(premultiply(al_map_rgba_f(config.fogr, config.fogg, config.fogb, config.foga))); al_set_target_bitmap(temp); } if(!((al_get_bitmap_width(fog) == al_get_bitmap_width(temp)) && (al_get_bitmap_height(fog) == al_get_bitmap_height(temp)))) { al_destroy_bitmap(fog); fog = al_create_bitmap(al_get_bitmap_width(temp), al_get_bitmap_height(temp)); al_set_target_bitmap(fog); al_clear_to_color(al_map_rgba_f(config.fogr*config.foga, config.fogg*config.foga, config.fogb*config.foga, config.foga)); al_set_target_bitmap(temp); } al_draw_bitmap(fog, 0, 0, 0); } if(vsz == vszmax-1) { if (config.show_osd) DrawCurrentLevelOutline(true); } if(config.dayNightCycle) al_hold_bitmap_drawing(true); for(int32_t vsx=1; vsx < vsxmax; vsx++) { for(int32_t vsy=1; vsy < vsymax; vsy++) { Block *b = getBlockLocal(vsx,vsy,vsz); if (b==NULL || (b->tileShapeBasic!=tiletype_shape_basic::Floor && b->tileShapeBasic!=tiletype_shape_basic::Ramp && b->tileShapeBasic==tiletype_shape_basic::Wall)) { Block* bLow = getBlockLocal(vsx,vsy,vsz-1); if (bLow != NULL) { bLow->DrawRamptops(); } } if (b) { b->Draw(); //while(!key[KEY_SPACE]) ; //rest(100); } } } al_hold_bitmap_drawing(false); al_hold_bitmap_drawing(true); for(int32_t vsx=1; vsx < vsxmax; vsx++) { for(int32_t vsy=1; vsy < vsymax; vsy++) { Block *b = getBlockLocal(vsx,vsy,vsz); if (b) { b->Drawcreaturetext(); //while(!key[KEY_SPACE]) ; //rest(100); } } } al_hold_bitmap_drawing(false); } if(config.showRenderStatus) SetTitle("Stonesense"); }
void WorldSegment::DrawAllTiles() { if(!loaded) { return; } if(ssConfig.fogenable) { ALLEGRO_BITMAP* temp = al_get_target_bitmap(); if(!fog) { fog = al_create_bitmap(ssState.ScreenW, ssState.ScreenH); al_set_target_bitmap(fog); al_clear_to_color(premultiply(ssConfig.fogcol)); al_set_target_bitmap(temp); } if(!((al_get_bitmap_width(fog) == ssState.ScreenW) && (al_get_bitmap_height(fog) == ssState.ScreenH))) { al_destroy_bitmap(fog); fog = al_create_bitmap(ssState.ScreenW, ssState.ScreenH); al_set_target_bitmap(fog); al_clear_to_color(premultiply(ssConfig.fogcol)); al_set_target_bitmap(temp); } } if (ssConfig.show_osd) { DrawCurrentLevelOutline(true); } if(todraw.size()>0) { al_hold_bitmap_drawing(true); for(int i=0; i<todraw.size(); i++) { if(i%ssConfig.bitmapHolds==0) { al_hold_bitmap_drawing(false); al_hold_bitmap_drawing(true); } switch(todraw[i].type) { case TintedScaledBitmap: al_draw_tinted_scaled_bitmap( (ALLEGRO_BITMAP*) todraw[i].drawobject, todraw[i].tint, todraw[i].sx, todraw[i].sy, todraw[i].sw, todraw[i].sh, todraw[i].dx, todraw[i].dy, todraw[i].dw, todraw[i].dh, todraw[i].flags ); break; case CreatureText: DrawCreatureText( todraw[i].dx, todraw[i].dy, (SS_Unit*) todraw[i].drawobject ); break; } } } if (ssConfig.show_osd) { DrawCurrentLevelOutline(false); } al_hold_bitmap_drawing(false); al_hold_bitmap_drawing(true); }