int font_set_load(FONT_SET *font_set, const char *font_filename, const char *text_texture_filename, const char *outline_texture_filename, const char * ft_font_filename, int fonts, ...) { int i; va_list va; font_set->font_count = fonts; va_start(va, fonts); for (i = 0; i < fonts; i++) { int size; char composed_font_filename[256]; char composed_text_texture_filename[256]; char composed_outline_texture_filename[256]; FONT *font = &font_set->fonts[i]; size = va_arg(va, int); str_format(composed_font_filename, sizeof(composed_font_filename), font_filename, size); str_format(composed_text_texture_filename, sizeof(composed_text_texture_filename), text_texture_filename, size); str_format(composed_outline_texture_filename, sizeof(composed_outline_texture_filename), outline_texture_filename, size); if (font_load(font, composed_font_filename)) { dbg_msg("font/loading", "failed loading font %s.", composed_font_filename); va_end(va); return -1; } font->size = size; font->text_texture = gfx_load_texture(composed_text_texture_filename, IMG_ALPHA, TEXLOAD_NORESAMPLE); font->outline_texture = gfx_load_texture(composed_outline_texture_filename, IMG_ALPHA, TEXLOAD_NORESAMPLE); } va_end(va); FreeTypeTextRenderer.Init(); CFont * ft_font = FreeTypeTextRenderer.LoadFont(ft_font_filename); if (!ft_font) { dbg_msg("font/loading", "failed loading freetype font %s.", ft_font_filename); return -1; } else { FreeTypeTextRenderer.SetDefaultFont(ft_font); } /*font_set->ft_font = ft_font_load(ft_font_filename); if (!font_set->ft_font) { dbg_msg("font/loading", "failed loading freetype font %s.", ft_font_filename); return -1; }*/ return 0; }
void MENUS::render_background() { //gfx_clear(1,1,1); //render_sunrays(0,0); if(texture_blob == -1) texture_blob = gfx_load_texture("blob.png", IMG_AUTO, 0); float sw = 300*gfx_screenaspect(); float sh = 300; gfx_mapscreen(0, 0, sw, sh); RECT s = *ui_screen(); // render background color gfx_texture_set(-1); gfx_quads_begin(); //vec4 bottom(gui_color.r*0.3f, gui_color.g*0.3f, gui_color.b*0.3f, 1.0f); //vec4 bottom(0, 0, 0, 1.0f); vec4 bottom(gui_color.r, gui_color.g, gui_color.b, 1.0f); vec4 top(gui_color.r, gui_color.g, gui_color.b, 1.0f); gfx_setcolorvertex(0, top.r, top.g, top.b, top.a); gfx_setcolorvertex(1, top.r, top.g, top.b, top.a); gfx_setcolorvertex(2, bottom.r, bottom.g, bottom.b, bottom.a); gfx_setcolorvertex(3, bottom.r, bottom.g, bottom.b, bottom.a); gfx_quads_drawTL(0, 0, sw, sh); gfx_quads_end(); // render the tiles gfx_texture_set(-1); gfx_quads_begin(); float size = 15.0f; float offset_time = fmod(client_localtime()*0.15f, 2.0f); for(int y = -2; y < (int)(sw/size); y++) for(int x = -2; x < (int)(sh/size); x++) { gfx_setcolor(0,0,0,0.045f); gfx_quads_drawTL((x-offset_time)*size*2+(y&1)*size, (y+offset_time)*size, size, size); } gfx_quads_end(); // render border fade gfx_texture_set(texture_blob); gfx_quads_begin(); gfx_setcolor(0,0,0,0.5f); gfx_quads_drawTL(-100, -100, sw+200, sh+200); gfx_quads_end(); // restore screen {RECT screen = *ui_screen(); gfx_mapscreen(screen.x, screen.y, screen.w, screen.h);} }
void GAMECLIENT::on_init() { // init all components for(int i = 0; i < all.num; i++) all.components[i]->on_init(); // setup item sizes for(int i = 0; i < NUM_NETOBJTYPES; i++) snap_set_staticsize(i, netobj_get_size(i)); // load default font static FONT_SET default_font; int64 start = time_get(); int before = gfx_memory_usage(); font_set_load(&default_font, "fonts/default_font%d.tfnt", "fonts/default_font%d.png", "fonts/default_font%d_b.png", 14, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 36); dbg_msg("font", "gfx memory used for font textures: %d", gfx_memory_usage()-before); gfx_text_set_default_font(&default_font); config.cl_threadsoundloading = 0; // setup load amount load_total = data->num_images; load_current = 0; if(!config.cl_threadsoundloading) load_total += data->num_sounds; // load textures for(int i = 0; i < data->num_images; i++) { gameclient.menus->render_loading(load_current/load_total); data->images[i].id = gfx_load_texture(data->images[i].filename, IMG_AUTO, 0); load_current++; } ::skins.init(); if ( config.cl_threadsoundloading ) thread_create( load_sounds_thread, 0 ); else load_sounds_thread( (void*)1 ); for(int i = 0; i < all.num; i++) all.components[i]->on_reset(); int64 end = time_get(); dbg_msg("", "%f.2ms", ((end-start)*1000)/(float)time_freq()); servermode = SERVERMODE_PURE; }
void GAMECLIENT::on_init() { ///--- Added by Tigra average_prediction_offset = -1; gameclient.prediction_offset_summ = 0; gameclient.prediction_offset_count = 0; ///--- // init all components for(int i = 0; i < all.num; i++) all.components[i]->on_init(); // setup item sizes for(int i = 0; i < NUM_NETOBJTYPES; i++) snap_set_staticsize(i, netobj_get_size(i)); // load default font static FONT_SET default_font; int64 start = time_get(); int before = gfx_memory_usage(); font_set_load(&default_font, "fonts/default_font%d.tfnt", "fonts/default_font%d.png", "fonts/default_font%d_b.png", 14, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 36); dbg_msg("font", "gfx memory used for font textures: %d", gfx_memory_usage()-before); gfx_text_set_default_font(&default_font); config.cl_threadsoundloading = 0; // setup load amount load_total = data->num_images; load_current = 0; if(!config.cl_threadsoundloading) load_total += data->num_sounds; // load textures for(int i = 0; i < data->num_images; i++) { gameclient.menus->render_loading(load_current/load_total); data->images[i].id = gfx_load_texture(data->images[i].filename, IMG_AUTO, 0); load_current++; } ::skins.init(); if(config.cl_threadsoundloading) thread_create(load_sounds_thread, 0); else load_sounds_thread((void*)1); for(int i = 0; i < all.num; i++) all.components[i]->on_reset(); int64 end = time_get(); dbg_msg("", "%f.2ms", ((end-start)*1000)/(float)time_freq()); servermode = SERVERMODE_PURE; // Teecomp grayscale flags gfx_unload_texture(data->images[IMAGE_GAME_GRAY].id); // Already loaded with full color, unload data->images[IMAGE_GAME_GRAY].id = -1; IMAGE_INFO info; if(!gfx_load_png(&info, data->images[IMAGE_GAME_GRAY].filename)) return; unsigned char *d = (unsigned char *)info.data; int step = info.format == IMG_RGBA ? 4 : 3; for(int i=0; i < info.width*info.height; i++) { int v = (d[i*step]+d[i*step+1]+d[i*step+2])/3; d[i*step] = v; d[i*step+1] = v; d[i*step+2] = v; } int freq[256]; int org_weight; int new_weight; int flag_x = 384; int flag_y = 256; int flag_w = 128; int flag_h = 256; int pitch = info.width*4; for(int f=0; f<2; f++) { org_weight = 0; new_weight = 192; for(int i=0; i<256; i++) freq[i] = 0; // find most common frequence for(int y=flag_y; y<flag_y+flag_h; y++) for(int x=flag_x+flag_w*f; x<flag_x+flag_w*(1+f); x++) { if(d[y*pitch+x*4+3] > 128) freq[d[y*pitch+x*4]]++; } for(int i = 1; i < 256; i++) { if(freq[org_weight] < freq[i]) org_weight = i; } // reorder int inv_org_weight = 255-org_weight; int inv_new_weight = 255-new_weight; for(int y=flag_y; y<flag_y+flag_h; y++) for(int x=flag_x+flag_w*f; x<flag_x+flag_w*(1+f); x++) { int v = d[y*pitch+x*4]; if(v <= org_weight*1.25f) // modified for contrast v = (int)(((v/(float)org_weight) * new_weight)); else v = (int)(((v-org_weight)/(float)inv_org_weight)*inv_new_weight + new_weight); d[y*pitch+x*4] = v; d[y*pitch+x*4+1] = v; d[y*pitch+x*4+2] = v; } } data->images[IMAGE_GAME_GRAY].id = gfx_load_texture_raw(info.width, info.height, info.format, info.data, info.format, 0); mem_free(info.data); }