diff options
| author | Magnus Auvinen <magnus.auvinen@gmail.com> | 2007-07-24 22:53:43 +0000 |
|---|---|---|
| committer | Magnus Auvinen <magnus.auvinen@gmail.com> | 2007-07-24 22:53:43 +0000 |
| commit | 5bd2c434f63ff4a039e854d647f02ef660c544d1 (patch) | |
| tree | 3fe99b2e4a7cf5e80243bde4583e10c5650ed913 /src/game/client | |
| parent | 4b098f7711e7cb96eef6797787e3f2f2b4cbb867 (diff) | |
| download | zcatch-5bd2c434f63ff4a039e854d647f02ef660c544d1.tar.gz zcatch-5bd2c434f63ff4a039e854d647f02ef660c544d1.zip | |
epic commit. removed tga support, removed BGR support. fixed one config for editor, server and client, optimized tilemap rendering (this needs some cleanup), added tools to fix alpha outline quirk and glitches in the tilemap reindering
Diffstat (limited to 'src/game/client')
| -rw-r--r-- | src/game/client/game_client.cpp | 18 | ||||
| -rw-r--r-- | src/game/client/mapres_tilemap.cpp | 110 | ||||
| -rw-r--r-- | src/game/client/menu.cpp | 14 |
3 files changed, 81 insertions, 61 deletions
diff --git a/src/game/client/game_client.cpp b/src/game/client/game_client.cpp index f253909f..c34e81ce 100644 --- a/src/game/client/game_client.cpp +++ b/src/game/client/game_client.cpp @@ -1239,7 +1239,23 @@ void modc_render() gfx_clear(0.65f,0.78f,0.9f); // draw the sun - render_sun(local_player_pos.x*0.5f, local_player_pos.y*0.5f); + render_sun(20+screen_x*0.6f, 20+screen_y*0.6f); + + + static vec2 cloud_pos[6] = {vec2(0,0),vec2(0,200),vec2(0,400)}; + static float cloud_speed[6] = {30, 20, 10}; + static int cloud_images[6] = {IMAGE_CLOUD_1, IMAGE_CLOUD_2, IMAGE_CLOUD_3}; + + for(int i = 0; i < 3; i++) + { + float parallax_amount = 0.55f; + gfx_texture_set(data->images[cloud_images[i]].id); + gfx_quads_begin(); + gfx_quads_drawTL((cloud_pos[i].x+fmod(client_localtime()*cloud_speed[i]+i*100.0f, 1000.0f))+screen_x*parallax_amount, + cloud_pos[i].y+screen_y*parallax_amount, 300, 300); + gfx_quads_end(); + } + // draw backdrop gfx_texture_set(data->images[IMAGE_BACKDROP].id); diff --git a/src/game/client/mapres_tilemap.cpp b/src/game/client/mapres_tilemap.cpp index 6038e67c..197a1a8b 100644 --- a/src/game/client/mapres_tilemap.cpp +++ b/src/game/client/mapres_tilemap.cpp @@ -5,8 +5,12 @@ #include <baselib/opengl.h> +bool must_init = true; +void *batches[32] = {0}; + int tilemap_init() { + must_init = true; return 0; } @@ -14,8 +18,7 @@ void tilemap_render(float scale, int fg) { if(!map_is_loaded()) return; - - + float screen_x0, screen_y0, screen_x1, screen_y1; gfx_getscreen(&screen_x0, &screen_y0, &screen_x1, &screen_y1); @@ -23,12 +26,6 @@ void tilemap_render(float scale, int fg) int start, num; map_get_type(MAPRES_TILEMAP, &start, &num); - glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR); - glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR); - glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_REPEAT); - glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_REPEAT); - - // render tilemaps int passed_main = 0; for(int t = 0; t < num; t++) @@ -42,58 +39,69 @@ void tilemap_render(float scale, int fg) if((fg && passed_main) || (!fg && !passed_main)) { gfx_texture_set(img_get(tmap->image)); - gfx_quads_begin(); - float frac = (1.0f/1024.0f);//2.0f; //2.0f; - float texsize = 1024.0f; - float nudge = 0.5f/texsize; + glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR); - int startx = (int)(screen_x0/scale) - 1; - int endx = (int)(screen_x1/scale) + 1; - int starty = (int)(screen_y0/scale) - 1; - int endy = (int)(screen_y1/scale) + 1; - for(int y = starty; y < endy; y++) - for(int x = startx; x < endx; x++) - { - int mx = x; - int my = y; - if(mx<0) mx = 0; - if(mx>=tmap->width) mx = tmap->width-1; - if(my<0) my = 0; - if(my>=tmap->height) my = tmap->height-1; - - int c = mx + my*tmap->width; - - unsigned char d = data[c*2]; - if(d) + if(!batches[t]) + { + gfx_quads_begin(); + + float frac = (1.0f/1024.0f);//2.0f; //2.0f; + float texsize = 1024.0f; + float nudge = 0.5f/texsize; + float s = 1.0f; + + for(int y = 0; y < tmap->height; y++) + for(int x = 0; x < tmap->width; x++) { - //gfx_quads_setsubset( - // (d%16)/16.0f*s+frac, - // (d/16)/16.0f*s+frac, - // ((d%16)/16.0f+1.0f/16.0f)*s-frac, - // ((d/16)/16.0f+1.0f/16.0f)*s-frac); + int mx = x; + int my = y; + if(mx<0) mx = 0; + if(mx>=tmap->width) mx = tmap->width-1; + if(my<0) my = 0; + if(my>=tmap->height) my = tmap->height-1; + + int c = mx + my*tmap->width; - int tx = d%16; - int ty = d/16; - int px0 = tx*(1024/16); - int py0 = ty*(1024/16); - int px1 = (tx+1)*(1024/16)-1; - int py1 = (ty+1)*(1024/16)-1; - gfx_quads_setsubset( - nudge + px0/texsize+frac, - nudge + py0/texsize+frac, - nudge + px1/texsize-frac, - nudge + py1/texsize-frac); + unsigned char d = data[c*2]; + if(d) + { + /* + gfx_quads_setsubset( + (d%16)/16.0f*s+frac, + (d/16)/16.0f*s+frac, + ((d%16)/16.0f+1.0f/16.0f)*s-frac, + ((d/16)/16.0f+1.0f/16.0f)*s-frac); + */ + + int tx = d%16; + int ty = d/16; + int px0 = tx*(1024/16); + int py0 = ty*(1024/16); + int px1 = (tx+1)*(1024/16)-1; + int py1 = (ty+1)*(1024/16)-1; + float z = -5.0f; + + gfx_quads_setsubset( + nudge + px0/texsize+frac, + nudge + py0/texsize+frac, + nudge + px1/texsize-frac, + nudge + py1/texsize-frac); - gfx_quads_drawTL(x*scale, y*scale, scale, scale); + gfx_quads_drawTL(x*scale, y*scale, scale, scale); + } } - } + + //gfx_quads_end(); + batches[t] = gfx_quads_create_batch(); + } - gfx_quads_end(); + gfx_quads_draw_batch(batches[t]); + //glCallList(lists_start+t); } } - glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR); - glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR_MIPMAP_LINEAR); + //glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR); + //glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR_MIPMAP_LINEAR); } diff --git a/src/game/client/menu.cpp b/src/game/client/menu.cpp index 373da6e6..9143594e 100644 --- a/src/game/client/menu.cpp +++ b/src/game/client/menu.cpp @@ -43,7 +43,7 @@ enum gui_tileset_enum int gui_tileset_texture; int cursor_texture; -int cloud1_texture, cloud2_texture, cloud3_texture; +//int cloud1_texture, cloud2_texture, cloud3_texture; int menu_background_texture; int butterflies_texture; @@ -159,7 +159,7 @@ void draw_background(float t) render_sun(170, 170); - gfx_texture_set(cloud1_texture); + gfx_texture_set(data->images[IMAGE_CLOUD_1].id); gfx_quads_begin(); gfx_quads_setcolor(1,1,1,1); gfx_quads_setsubset( @@ -170,7 +170,7 @@ void draw_background(float t) gfx_quads_drawTL(3500 - fmod(t * 20 + 2000, 4524), 0, 512, 512); gfx_quads_end(); - gfx_texture_set(cloud2_texture); + gfx_texture_set(data->images[IMAGE_CLOUD_2].id); gfx_quads_begin(); gfx_quads_setcolor(1,1,1,1); gfx_quads_setsubset( @@ -181,7 +181,7 @@ void draw_background(float t) gfx_quads_drawTL(3000 - fmod(t * 50 + 1000, 4024), 150, 512, 512); gfx_quads_end(); - gfx_texture_set(cloud3_texture); + gfx_texture_set(data->images[IMAGE_CLOUD_3].id); gfx_quads_begin(); gfx_quads_setcolor(1,1,1,1); gfx_quads_setsubset( @@ -704,7 +704,6 @@ static int main_render() if (!inited) { inited = true; - client_serverbrowse_refresh(0); } @@ -914,7 +913,7 @@ static int settings_render() if (ui_do_button(&save_button, "Save", 0, 482, 490, 128, 48, draw_teewars_button)) { config = config_copy; - config_save("teewars.cfg"); + config_save("default.cfg"); screen = SCREEN_MAIN; } @@ -1143,9 +1142,6 @@ void modmenu_init() gui_tileset_texture = gfx_load_texture("data/gui/gui_widgets.png"); teewars_banner_texture = gfx_load_texture("data/gui_logo.png"); cursor_texture = gfx_load_texture("data/gui/cursor.png"); - cloud1_texture = gfx_load_texture("data/cloud-1.png"); - cloud2_texture = gfx_load_texture("data/cloud-2.png"); - cloud3_texture = gfx_load_texture("data/cloud-3.png"); menu_background_texture = gfx_load_texture("data/menu_background.png"); butterflies_texture = gfx_load_texture("data/menu_butterfly.png"); |