Exemplo n.º 1
0
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");
}
Exemplo n.º 2
0
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);
}