void draw_string_small_shadowed(int x, int y,const unsigned char * our_string,int max_lines, float fr, float fg, float fb, float br, float bg, float bb) { int px,py; //set shadow colour glColor4f(br, bg, bb, 0.25f); for(px=-1;px<2;px++) for(py=-1;py<2;py++) if(px!=0 || py!=0) draw_string_small(x+px, y+py, our_string, max_lines); //set foreground colour glColor4f(fr, fg, fb, 1.0f); draw_string_small(x, y, our_string, max_lines); }
void draw_stat_final(int len, int x, int y, const unsigned char * name, const char * value) { char str[80]; safe_snprintf(str,sizeof(str),"%-15s %s",name,value); draw_string_small(x, y, (unsigned char*)str, 1); }
int display_emotes_handler(window_info *win){ int i,pos; actor *act = get_actor_ptr_from_id(yourself); static int last_pos=0; //check if vbar has been moved pos=vscrollbar_get_pos(emotes_win, EMOTES_SCROLLBAR_ITEMS); if(pos!=last_pos){ last_pos=pos; update_selectables(); } //draw texts glEnable(GL_TEXTURE_2D); SET_COLOR(c_orange1); draw_string_small(20, 15, (unsigned char*)"Categories",1); draw_string_small(20, emotes_rect_y+30+5, (unsigned char*)"Emotes",1); for(i=0;i<EMOTES_CATEGORIES;i++){ if(cur_cat==i) SET_COLOR(c_blue2); else glColor3f(1.0f, 1.0f, 1.0f); draw_string_small(23, 32+13*i, (unsigned char*)emote_cats[i],1); } for(i=0;i<EMOTES_SHOWN;i++){ if(emote_sel[cur_cat]==selectables[i]) SET_COLOR(c_blue2); else glColor3f(1.0f, 1.0f, 1.0f); if(cur_cat&&act&&selectables[i]==act->poses[cur_cat-1]) SET_COLOR(c_green1); if(selectables[i]) draw_string_small(23, 30+emotes_rect_y+20+1+13*i, (unsigned char*)selectables[i]->name,1); } glColor3f(0.77f, 0.57f, 0.39f); //do grids glDisable(GL_TEXTURE_2D); rendergrid(1, 1, 20, 30, emotes_rect_x, emotes_rect_y); rendergrid(1, 1, 20, 30+emotes_rect_y+20, emotes_rect_x2, emotes_rect_y2); glEnable(GL_TEXTURE_2D); //draw description if(emote_sel[cur_cat]){ draw_string_small(20, emotes_menu_y_len-36, emote_str1,2); draw_string_small(20, emotes_menu_y_len-36+16, emote_str2,1); } #ifdef OPENGL_TRACE CHECK_GL_ERRORS(); #endif //OPENGL_TRACE return 1; }
void draw_box(char * name, int x, int y, int w, int h, int rad) { int l=0; if(name){ l=(w-10-(get_string_width((unsigned char*)name)*8.0f/12.0f))/2.0f; draw_string_small(x+l+5, y-6, (unsigned char*)name, 1); } glDisable(GL_TEXTURE_2D); if(l>0){ glBegin(GL_LINE_STRIP); glVertex2i(x+l, y); draw_circle_ext(x, y, rad, 5, 90, 180); draw_circle_ext(x, y+h-2*rad, rad, 5, 180, 270); draw_circle_ext(x+w-2*rad, y+h-2*rad, rad, 5, 270, 360); draw_circle_ext(x+w-2*rad, y, rad, 5, 0, 90); glVertex2i(x+w-l, y); glEnd(); } else if(l<0){ glBegin(GL_LINE_STRIP); glVertex2i(x+l, y); draw_circle_ext(x+rad, y+h-rad, rad, 5, 180, 270); draw_circle_ext(x+w-2*rad, y+h-rad, rad, 5, 270, 360); glVertex2i(x+w-l, y); glEnd(); } else { glBegin(GL_LINE_LOOP); draw_circle_ext(x+rad, y, rad, 5, 90, 180); draw_circle_ext(x+rad, y+h-rad, rad, 5, 180, 270); draw_circle_ext(x+w-2*rad, y+h-rad, rad, 5, 270, 360); draw_circle_ext(x+w-2*rad, y, rad, 5, 0, 90); glEnd(); } glEnable(GL_TEXTURE_2D); #ifdef OPENGL_TRACE CHECK_GL_ERRORS(); #endif //OPENGL_TRACE }
int display_help_handler(window_info *win) { _Text *t=Page[helppage].T.Next; _Image *i=Page[helppage].I.Next; int j; j=vscrollbar_get_pos(help_win,0); while(t) { int ylen=(t->size)?18:15; int xlen=strlen(t->text)*((t->size)?11:8); if((t->y-j > 0) && (t->y-j < help_menu_y_len-20 )) { if(t->ref) { //draw a line glColor3f(0.5,0.5,0.5); glDisable(GL_TEXTURE_2D); glBegin(GL_LINES); glVertex3i(t->x+4,t->y+ylen-j,0); glVertex3i(t->x+4+xlen-8,t->y+ylen-j,0); glEnd(); glEnable(GL_TEXTURE_2D); #ifdef OPENGL_TRACE CHECK_GL_ERRORS(); #endif //OPENGL_TRACE } if(t->size) { if(t->ref && mouse_x>(t->x+win->cur_x) && mouse_x<(t->x+xlen+win->cur_x) && mouse_y>(t->y+win->cur_y-j) && mouse_y<(t->y+ylen+win->cur_y-j)) glColor3f(0.3,0.6,1.0); else glColor3f(t->r,t->g,t->b); draw_string(t->x,t->y-j,(unsigned char*)t->text,1); } else { if(t->ref && mouse_x>(t->x+win->cur_x) && mouse_x<(t->x+xlen+win->cur_x) && mouse_y>(t->y+win->cur_y-j) && mouse_y<(t->y+ylen+win->cur_y-j)) glColor3f(0.3,0.6,1.0); else glColor3f(t->r,t->g,t->b); draw_string_small(t->x,t->y-j,(unsigned char*)t->text,1); } } t=t->Next; } glColor3f(1.0f,1.0f,1.0f); while(i) { if((i->y-j > 0) && (i->yend-j < help_menu_y_len-40 )) { if(i->mouseover==1) { i=i->Next; continue; } if(mouse_x>(i->x+win->cur_x) && mouse_x<(win->cur_x+i->xend) && mouse_y>(i->y+win->cur_y-j) && mouse_y<(win->cur_y+i->yend-j)) { if(i->Next!=NULL) { if(i->Next->mouseover==1) i=i->Next; } } #ifdef NEW_TEXTURES bind_texture(i->id); #else /* NEW_TEXTURES */ get_and_set_texture_id(i->id); #endif /* NEW_TEXTURES */ glBegin(GL_QUADS); draw_2d_thing(i->u, i->v, i->uend, i->vend,i->x, i->y-j,i->xend,i->yend-j); glEnd(); } i=i->Next; } return 1; }
int display_small_text_window_handler(window_info * win) { if(small_text_buffer[0])draw_string_small(10, 10, small_text_buffer, 18); return 1; }
int display_session_handler(window_info *win) { int i, x, y, timediff; char buffer[128]; x = 10; y = 21; timediff = 0; glColor3f(1.0f, 1.0f, 1.0f); safe_snprintf(buffer, sizeof(buffer), "%-20s%-17s%-17s%-17s", "Skill", "Total Exp", "Max Exp", "Last Exp" ); draw_string_small(x, y, (unsigned char*)buffer, 1); glDisable(GL_TEXTURE_2D); glColor3f(newcol_r, newcol_g, newcol_b); glBegin(GL_LINES); glVertex3i(0, 37, 0); glVertex3i(win->len_x, 37, 0); glEnd(); glEnable(GL_TEXTURE_2D); glColor3f(1.0f, 1.0f, 1.0f); y = 55; for (i=0; i<NUM_SKILLS; i++) { if ((last_mouse_click_y >= y) && (last_mouse_click_y < y+16)) elglColourN("global.mouseselected"); else if ((last_mouse_over_y >= y) && (last_mouse_over_y < y+16)) elglColourN("global.mousehighlight"); else glColor3f(1.0f, 1.0f, 1.0f); safe_snprintf(buffer, sizeof(buffer), "%-20s%-17u%-17u%-17u", statsinfo[i].skillnames->name, *(statsinfo[i].exp) - session_exp[i], max_exp[i], last_exp[i]); draw_string_small(x, y, (unsigned char*)buffer, 1); y += 16; } y += 16; glColor3f(1.0f, 1.0f, 1.0f); draw_string_small(x, y, (unsigned char*)"Session Time", 1); timediff = cur_time - session_start_time; safe_snprintf(buffer, sizeof(buffer), "%02d:%02d:%02d", timediff/3600000, (timediff/60000)%60, (timediff/1000)%60); draw_string_small(x + 200, y, (unsigned char*)buffer, 1); y += 16; draw_string_small(x, y, (unsigned char*)"Exp/Min", 1); if(timediff<=0){ timediff=1; } safe_snprintf(buffer, sizeof(buffer), "%2.2f", (float)(*(statsinfo[SI_ALL].exp) - session_exp[SI_ALL])/((float)timediff/60000.0f)); draw_string_small(x + 200, y, (unsigned char*)buffer, 1); if (show_reset_help) { show_help(session_reset_help, 0, win->len_y+10); show_reset_help = 0; } #ifdef OPENGL_TRACE CHECK_GL_ERRORS(); #endif //OPENGL_TRACE return 1; }
int display_session_handler(window_info *win) { int x, y, timediff; char buffer[80]; player_attribs cur_stats = your_info; x = 10; y = 21; timediff = 0; glColor3f(1.0f, 1.0f, 1.0f); draw_string_small(x, y, (unsigned char*)"Skill", 1); glColor3f(1.0f, 1.0f, 1.0f); draw_string_small(x + 200, y, (unsigned char*)"Experience Gain", 1); glDisable(GL_TEXTURE_2D); glColor3f(0.77f, 0.57f, 0.39f); glBegin(GL_LINES); glVertex3i(0, 37, 0); glVertex3i(win->len_x, 37, 0); glEnd(); glEnable(GL_TEXTURE_2D); glColor3f(1.0f, 1.0f, 1.0f); y = 55; draw_string_small(x, y, attributes.attack_skill.name , 1); safe_snprintf(buffer, sizeof(buffer), "%d", cur_stats.attack_exp - session_stats.attack_exp); draw_string_small(x + 200, y, (unsigned char*)buffer, 1); y += 16; draw_string_small(x, y, attributes.defense_skill.name , 1); safe_snprintf(buffer, sizeof(buffer), "%d", cur_stats.defense_exp - session_stats.defense_exp); draw_string_small(x + 200, y, (unsigned char*)buffer, 1); y += 16; draw_string_small(x, y, attributes.harvesting_skill.name , 1); safe_snprintf(buffer, sizeof(buffer), "%d", cur_stats.harvesting_exp - session_stats.harvesting_exp); draw_string_small(x + 200, y, (unsigned char*)buffer, 1); y += 16; draw_string_small(x, y, attributes.alchemy_skill.name , 1); safe_snprintf(buffer, sizeof(buffer), "%d", cur_stats.alchemy_exp - session_stats.alchemy_exp); draw_string_small(x + 200, y, (unsigned char*)buffer, 1); y += 16; draw_string_small(x, y, attributes.magic_skill.name , 1); safe_snprintf(buffer, sizeof(buffer), "%d", cur_stats.magic_exp - session_stats.magic_exp); draw_string_small(x + 200, y, (unsigned char*)buffer, 1); y += 16; draw_string_small(x, y, attributes.potion_skill.name , 1); safe_snprintf(buffer, sizeof(buffer), "%d", cur_stats.potion_exp - session_stats.potion_exp); draw_string_small(x + 200, y, (unsigned char*)buffer, 1); y += 16; draw_string_small(x, y, attributes.summoning_skill.name , 1); safe_snprintf(buffer, sizeof(buffer), "%d", cur_stats.summoning_exp - session_stats.summoning_exp); draw_string_small(x + 200, y, (unsigned char*)buffer, 1); y += 16; draw_string_small(x, y, attributes.manufacturing_skill.name , 1); safe_snprintf(buffer, sizeof(buffer), "%d", cur_stats.manufacturing_exp - session_stats.manufacturing_exp); draw_string_small(x + 200, y, (unsigned char*)buffer, 1); y += 16; draw_string_small(x, y, attributes.crafting_skill.name , 1); safe_snprintf(buffer, sizeof(buffer), "%d", cur_stats.crafting_exp - session_stats.crafting_exp); draw_string_small(x + 200, y, (unsigned char*)buffer, 1); y += 16; draw_string_small(x, y, attributes.engineering_skill.name , 1); safe_snprintf(buffer, sizeof(buffer), "%d", cur_stats.engineering_exp - session_stats.engineering_exp); draw_string_small(x + 200, y, (unsigned char*)buffer, 1); y += 16; draw_string_small(x, y, attributes.tailoring_skill.name , 1); safe_snprintf(buffer, sizeof(buffer), "%d", cur_stats.tailoring_exp - session_stats.tailoring_exp); draw_string_small(x + 200, y, (unsigned char*)buffer, 1); y += 16; draw_string_small(x, y, attributes.ranging_skill.name , 1); safe_snprintf(buffer, sizeof(buffer), "%d", get_session_exp_ranging()); draw_string_small(x + 200, y, (unsigned char*)buffer, 1); y += 16; draw_string_small(x, y, attributes.overall_skill.name , 1); safe_snprintf(buffer, sizeof(buffer), "%d", cur_stats.overall_exp - session_stats.overall_exp); draw_string_small(x + 200, y, (unsigned char*)buffer, 1); y += 32; draw_string_small(x, y, (unsigned char*)"Session Time", 1); timediff = cur_time - session_start_time; safe_snprintf(buffer, sizeof(buffer), "%02d:%02d:%02d", timediff/3600000, (timediff/60000)%60, (timediff/1000)%60); draw_string_small(x + 200, y, (unsigned char*)buffer, 1); y += 16; draw_string_small(x, y, (unsigned char*)"Exp/Min", 1); if(timediff<=0){ timediff=1; } safe_snprintf(buffer, sizeof(buffer), "%2.2f", (float)(cur_stats.overall_exp - session_stats.overall_exp)/((float)timediff/60000.0f)); draw_string_small(x + 200, y, (unsigned char*)buffer, 1); if (show_reset_help) { show_help(session_reset_help, 0, win->len_y+10); show_reset_help = 0; } #ifdef OPENGL_TRACE CHECK_GL_ERRORS(); #endif //OPENGL_TRACE return 1; }
int display_manufacture_handler(window_info *win) { Uint8 str[80]; int i; //dirty hack for opacity //if manufacture_win is opaque then recipe_win should be and viceversa if (recipes_shown) win->opaque=windows_list.window[recipe_win].opaque; else windows_list.window[recipe_win].opaque=win->opaque; glColor3f(0.77f,0.57f,0.39f); glEnable(GL_TEXTURE_2D); glColor3f(1.0f,1.0f,1.0f); //ok, now let's draw the objects... for(i=35;i>=0;i--){ if(manufacture_list[i].quantity > 0) { int x_start,y_start; //get the x and y x_start=33*(i%12)+1; y_start=33*(i/12); draw_item(manufacture_list[i].image_id,x_start,y_start,33); safe_snprintf((char *)str, sizeof(str), "%i",manufacture_list[i].quantity); draw_string_small_shadowed(x_start, (i&1)?(y_start+17):(y_start+7), (unsigned char*)str, 1,1.0f,1.0f,1.0f, 0.0f, 0.0f, 0.0f); } } //ok, now let's draw the mixed objects draw_production_pipe(2,manufacture_menu_y_len-37, -1); //now, draw the inventory text, if any. if (last_items_string_id != inventory_item_string_id) { put_small_text_in_box((unsigned char*)inventory_item_string, strlen(inventory_item_string), win->len_x-8, items_string); last_items_string_id = inventory_item_string_id; } draw_string_small(4,manufacture_menu_y_len-85,(unsigned char *)items_string,4); // Render the grid *after* the images. It seems impossible to code // it such that images are rendered exactly within the boxes on all // cards glDisable(GL_TEXTURE_2D); glColor3f(0.77f,0.57f,0.39f); //draw the grid rendergrid(12,3,0,0,33,33); //Draw the bottom grid - NOT NEEDED, DONE IN draw_production_pipe //rendergrid(6,1,0, manufacture_menu_y_len-37, 33, 33); //Draw recipe control buttons draw_recipe_controls(); glEnable(GL_TEXTURE_2D); #ifdef OPENGL_TRACE CHECK_GL_ERRORS(); #endif //OPENGL_TRACE return 1; }
int display_options_handler(window_info *win) { int i = 0, y[2], x[2]; option_struct * cur; x[0]=8; x[1]=188; y[0]=35; y[1]=35; get_and_set_texture_id(icons_text); glBegin(GL_QUADS); for(;i<options.no;i++) { cur=options.option[i]; if (cur->type!=NONE) { if (*(cur->data_1)>0) { if ( (cur->type==OPTION && *(cur->data_2)) || (cur->type==VIDEO_MODE && video_modes[*(cur->data_2)-1].selected) ) { draw_2d_thing(lit_gem_u_start, lit_gem_v_start, lit_gem_u_end, lit_gem_v_end, x[cur->column], y[cur->column], x[cur->column]+30, y[cur->column?1:0]+16); } else { draw_2d_thing(unlit_gem_u_start, unlit_gem_v_start, unlit_gem_u_end, unlit_gem_v_end, x[cur->column], y[cur->column], x[cur->column]+30, y[cur->column]+16); } } else { draw_2d_thing(broken_gem_u_start,broken_gem_v_start,broken_gem_u_end,broken_gem_v_end, x[cur->column], y[cur->column], x[cur->column]+30, y[cur->column]+16); } } y[cur->column]+=20; } glEnd(); draw_string(55,10,opt_strings.str,1);//Options draw_string(225,10,opt_strings.desc,1);//Video mode x[0]=45; x[1]=225; y[0]=35; y[1]=35; for(i=0;i<options.no;i++) { cur=options.option[i]; if(cur->type!=NONE) { draw_string(x[cur->column],y[cur->column],cur->name,1); } y[cur->column]+=20; } glColor4f(0.0f, 1.0f, 0.0f, 0.0f); glDisable(GL_TEXTURE_2D); glBegin(GL_LINES); glVertex3i(0, win->len_y-40,0); glVertex3i(win->len_x, win->len_y-40,0); glEnd(); glEnable(GL_TEXTURE_2D); draw_string_small(4,win->len_y-35,options_help_text,2); return 1; }
int display_stats_handler(window_info *win) { player_attribs cur_stats = your_info; char str[10]; int x,y; x=5; y=5; draw_string_small(x,y,attributes.base,1); y+=14; draw_stat(24,x,y,&(cur_stats.phy),&(attributes.phy)); y+=14; draw_stat(24,x,y,&(cur_stats.coo),&(attributes.coo)); y+=14; draw_stat(24,x,y,&(cur_stats.rea),&(attributes.rea)); y+=14; draw_stat(24,x,y,&(cur_stats.wil),&(attributes.wil)); y+=14; draw_stat(24,x,y,&(cur_stats.ins),&(attributes.ins)); y+=14; draw_stat(24,x,y,&(cur_stats.vit),&(attributes.vit)); //cross attributes glColor3f(1.0f,1.0f,0.0f); y+=20; draw_string_small(x,y,attributes.cross,1); y+=14; draw_statf(24,x,y,&(cur_stats.might),&(attributes.might)); y+=14; draw_statf(24,x,y,&(cur_stats.matter),&(attributes.matter)); y+=14; draw_statf(24,x,y,&(cur_stats.tough),&(attributes.tough)); y+=14; draw_statf(24,x,y,&(cur_stats.charm),&(attributes.charm)); y+=14; draw_statf(24,x,y,&(cur_stats.react),&(attributes.react)); y+=14; draw_statf(24,x,y,&(cur_stats.perc),&(attributes.perc)); y+=14; draw_statf(24,x,y,&(cur_stats.ration),&(attributes.ration)); y+=14; draw_statf(24,x,y,&(cur_stats.dext),&(attributes.dext)); y+=14; draw_statf(24,x,y,&(cur_stats.eth),&(attributes.eth)); glColor3f(0.5f,0.5f,1.0f); y+=14; // blank lines for spacing y+=14; // blank lines for spacing //other attribs y+=20; safe_snprintf(str, sizeof(str), "%i",cur_stats.food_level); draw_stat_final(24,x,y,attributes.food.name,str); y+=14; draw_stat(24,x,y,&(cur_stats.material_points),&(attributes.material_points)); y+=14; draw_stat(24,x,y,&(cur_stats.ethereal_points),&(attributes.ethereal_points)); y+=14; draw_stat(24,x,y,&(cur_stats.action_points),&(attributes.action_points)); //other info safe_snprintf(str, sizeof(str), "%i",cur_stats.overall_skill.base-cur_stats.overall_skill.cur); draw_stat_final(24,205,y,attributes.pickpoints,str); //nexuses here glColor3f(1.0f,1.0f,1.0f); x+=200; y=5; draw_string_small(x,y,attributes.nexus,1); y+=14; draw_stat(24,x,y,&(cur_stats.human_nex),&(attributes.human_nex)); y+=14; draw_stat(24,x,y,&(cur_stats.animal_nex),&(attributes.animal_nex)); y+=14; draw_stat(24,x,y,&(cur_stats.vegetal_nex),&(attributes.vegetal_nex)); y+=14; draw_stat(24,x,y,&(cur_stats.inorganic_nex),&(attributes.inorganic_nex)); y+=14; draw_stat(24,x,y,&(cur_stats.artificial_nex),&(attributes.artificial_nex)); y+=14; draw_stat(24,x,y,&(cur_stats.magic_nex),&(attributes.magic_nex)); y+=20; //skills glColor3f(1.0f,0.5f,0.2f); draw_string_small(x,y,attributes.skills,1); y+=14; check_grid_x_left=x; check_grid_y_top=y; statsinfo[0].is_selected==1?glColor3f(1.0f,0.5f,0.5f):glColor3f(1.0f,0.5f,0.2f); draw_skill(46,x,y,&(cur_stats.attack_skill),&(attributes.attack_skill),cur_stats.attack_exp,cur_stats.attack_exp_next_lev); y+=14; statsinfo[1].is_selected==1?glColor3f(1.0f,0.5f,0.5f):glColor3f(1.0f,0.5f,0.2f); draw_skill(46,x,y,&(cur_stats.defense_skill),&(attributes.defense_skill),cur_stats.defense_exp,cur_stats.defense_exp_next_lev); y+=14; statsinfo[2].is_selected==1?glColor3f(1.0f,0.5f,0.5f):glColor3f(1.0f,0.5f,0.2f); draw_skill(46,x,y,&(cur_stats.harvesting_skill),&(attributes.harvesting_skill),cur_stats.harvesting_exp,cur_stats.harvesting_exp_next_lev); y+=14; statsinfo[3].is_selected==1?glColor3f(1.0f,0.5f,0.5f):glColor3f(1.0f,0.5f,0.2f); draw_skill(46,x,y,&(cur_stats.alchemy_skill),&(attributes.alchemy_skill),cur_stats.alchemy_exp,cur_stats.alchemy_exp_next_lev); y+=14; statsinfo[4].is_selected==1?glColor3f(1.0f,0.5f,0.5f):glColor3f(1.0f,0.5f,0.2f); draw_skill(46,x,y,&(cur_stats.magic_skill),&(attributes.magic_skill),cur_stats.magic_exp,cur_stats.magic_exp_next_lev); y+=14; statsinfo[5].is_selected==1?glColor3f(1.0f,0.5f,0.5f):glColor3f(1.0f,0.5f,0.2f); draw_skill(46,x,y,&(cur_stats.potion_skill),&(attributes.potion_skill),cur_stats.potion_exp,cur_stats.potion_exp_next_lev); y+=14; statsinfo[6].is_selected==1?glColor3f(1.0f,0.5f,0.5f):glColor3f(1.0f,0.5f,0.2f); draw_skill(46,x,y,&(cur_stats.summoning_skill),&(attributes.summoning_skill),cur_stats.summoning_exp,cur_stats.summoning_exp_next_lev); y+=14; statsinfo[7].is_selected==1?glColor3f(1.0f,0.5f,0.5f):glColor3f(1.0f,0.5f,0.2f); draw_skill(46,x,y,&(cur_stats.manufacturing_skill),&(attributes.manufacturing_skill),cur_stats.manufacturing_exp,cur_stats.manufacturing_exp_next_lev); y+=14; statsinfo[8].is_selected==1?glColor3f(1.0f,0.5f,0.5f):glColor3f(1.0f,0.5f,0.2f); draw_skill(46,x,y,&(cur_stats.crafting_skill),&(attributes.crafting_skill),cur_stats.crafting_exp,cur_stats.crafting_exp_next_lev); y+=14; statsinfo[9].is_selected==1?glColor3f(1.0f,0.5f,0.5f):glColor3f(1.0f,0.5f,0.2f); draw_skill(46,x,y,&(cur_stats.engineering_skill),&(attributes.engineering_skill),cur_stats.engineering_exp,cur_stats.engineering_exp_next_lev); y+=14; statsinfo[10].is_selected==1?glColor3f(1.0f,0.5f,0.5f):glColor3f(1.0f,0.5f,0.2f); draw_skill(46,x,y,&(cur_stats.tailoring_skill),&(attributes.tailoring_skill),cur_stats.tailoring_exp,cur_stats.tailoring_exp_next_lev); y+=14; statsinfo[11].is_selected==1?glColor3f(1.0f,0.5f,0.5f):glColor3f(1.0f,0.5f,0.2f); draw_skill(46,x,y,&(cur_stats.ranging_skill),&(attributes.ranging_skill),cur_stats.ranging_exp,cur_stats.ranging_exp_next_lev); y+=14; statsinfo[12].is_selected==1?glColor3f(1.0f,0.5f,0.5f):glColor3f(1.0f,0.5f,0.2f); draw_skill(46,x,y,&(cur_stats.overall_skill),&(attributes.overall_skill),cur_stats.overall_exp,cur_stats.overall_exp_next_lev); return 1; }
int display_encyclopedia_handler(window_info *win) { _Text *t=Page[currentpage].T.Next; _Image *i=Page[currentpage].I.Next; int j; j=vscrollbar_get_pos(encyclopedia_win, encyclopedia_scroll_id); while(t) { int ylen=(t->size)?18:15; int xlen=strlen(t->text)*((t->size)?11:8); // Bounds Check the Text if((t->y-j > 0) && (t->y-j < encyclopedia_menu_y_len-20 )) { if(t->ref) { //draw a line glColor3f(0.5,0.5,0.5); glDisable(GL_TEXTURE_2D); glBegin(GL_LINES); glVertex3i(t->x+4,t->y+ylen-j,0); glVertex3i(t->x+4+xlen-8,t->y+ylen-j,0); glEnd(); glEnable(GL_TEXTURE_2D); #ifdef OPENGL_TRACE CHECK_GL_ERRORS(); #endif //OPENGL_TRACE } if(t->size) { if(t->ref && mouse_x>(t->x+win->cur_x) && mouse_x<(t->x+xlen+win->cur_x) && mouse_y>(t->y+win->cur_y-j) && mouse_y<(t->y+ylen+win->cur_y-j)) glColor3f(0.3,0.6,1.0); else glColor3f(t->r,t->g,t->b); draw_string(t->x,t->y-j,(unsigned char*)t->text,1); } else { if(t->ref && mouse_x>(t->x+win->cur_x) && mouse_x<(t->x+xlen+win->cur_x) && mouse_y>(t->y+win->cur_y-j) && mouse_y<(t->y+ylen+win->cur_y-j)) glColor3f(0.3,0.6,1.0); else glColor3f(t->r,t->g,t->b); draw_string_small(t->x,t->y-j,(unsigned char*)t->text,1); } } // No next line? if(!t->Next) break; t=t->Next; } glColor3f(1.0f,1.0f,1.0f); while(i){ // Bounds Check the Text if((i->y-j > 0) && (i->yend-j < encyclopedia_menu_y_len-40 )) { if(i->mouseover==1) { i=i->Next; continue; } if(mouse_x>(i->x+win->cur_x) && mouse_x<(win->cur_x+i->xend) && mouse_y>(i->y+win->cur_y-j) && mouse_y<(win->cur_y-j+i->yend)) { if(i->Next!=NULL) { if(i->Next->mouseover==1) i=i->Next; } } #ifdef NEW_TEXTURES bind_texture(i->id); #else /* NEW_TEXTURES */ get_and_set_texture_id(i->id); #endif /* NEW_TEXTURES */ glBegin(GL_QUADS); draw_2d_thing(i->u, i->v, i->uend, i->vend,i->x, i->y-j,i->xend,i->yend-j); glEnd(); } i=i->Next; } #ifdef ENCYCL_NAVIGATION if (repeat_search && last_search != NULL) { find_page(last_search, NULL); repeat_search = 0; } if (show_cm_help) { show_help(cm_encycl_help_str, 0, win->len_y+10); show_cm_help = 0; } #endif return 1; }
int draw_window_title(window_info *win) { float u_first_start= (float)31/255; float u_first_end= 0; #ifdef NEW_TEXTURES float v_first_start = (float)160/255; float v_first_end = (float)175/255; #else /* NEW_TEXTURES */ float v_first_start= 1.0f-(float)160/255; float v_first_end= 1.0f-(float)175/255; #endif /* NEW_TEXTURES */ float u_middle_start= (float)32/255; float u_middle_end= (float)63/255; #ifdef NEW_TEXTURES float v_middle_start = (float)160/255; float v_middle_end = (float)175/255; #else /* NEW_TEXTURES */ float v_middle_start= 1.0f-(float)160/255; float v_middle_end= 1.0f-(float)175/255; #endif /* NEW_TEXTURES */ float u_last_start= 0; float u_last_end= (float)31/255; #ifdef NEW_TEXTURES float v_last_start = (float)160/255; float v_last_end = (float)175/255; #else /* NEW_TEXTURES */ float v_last_start= 1.0f-(float)160/255; float v_last_end= 1.0f-(float)175/255; #endif /* NEW_TEXTURES */ if((win->flags&ELW_TITLE_BAR) == ELW_TITLE_NONE) return 0; glColor3f(1.0f,1.0f,1.0f); //ok, now draw that shit... #ifdef NEW_TEXTURES bind_texture(icons_text); #else /* NEW_TEXTURES */ get_and_set_texture_id(icons_text); #endif /* NEW_TEXTURES */ glEnable(GL_ALPHA_TEST); glAlphaFunc(GL_GREATER,0.03f); glBegin(GL_QUADS); glTexCoord2f(u_first_end, v_first_start); glVertex3i(0, -ELW_TITLE_HEIGHT, 0); glTexCoord2f(u_first_end, v_first_end); glVertex3i(0, 0, 0); glTexCoord2f(u_first_start, v_first_end); glVertex3i(32, 0, 0); glTexCoord2f(u_first_start, v_first_start); glVertex3i(32, -ELW_TITLE_HEIGHT, 0); // draw one streched out cell to the proper size glTexCoord2f(u_middle_end, v_middle_start); glVertex3i(32, -ELW_TITLE_HEIGHT, 0); glTexCoord2f(u_middle_end, v_middle_end); glVertex3i(32, 0, 0); glTexCoord2f(u_middle_start, v_middle_end); glVertex3i(win->len_x-32, 0, 0); glTexCoord2f(u_middle_start, v_middle_start); glVertex3i(win->len_x-32, -ELW_TITLE_HEIGHT, 0); glTexCoord2f(u_last_end, v_last_start); glVertex3i(win->len_x-32, -ELW_TITLE_HEIGHT, 0); glTexCoord2f(u_last_end, v_last_end); glVertex3i(win->len_x-32, 0, 0); glTexCoord2f(u_last_start, v_last_end); glVertex3i(win->len_x, 0, 0); glTexCoord2f(u_last_start, v_last_start); glVertex3i(win->len_x, -ELW_TITLE_HEIGHT, 0); glEnd(); glDisable(GL_ALPHA_TEST); // draw the name of the window if(win->flags&ELW_TITLE_NAME) { int len; const unsigned char* name = (const unsigned char*) win->window_name; glEnable(GL_TEXTURE_2D); glColor3f(win->border_color[0],win->border_color[1],win->border_color[2]); // center text len = (get_string_width (name) * 8) / 12; draw_string_small((win->len_x-len)/2, -ELW_TITLE_HEIGHT, name, 1); } return 1; }
int display_storage_handler(window_info * win) { int i; int n=0; int pos; have_storage_list = 0; //We visited storage, so we may have changed something glColor3f(0.77f, 0.57f, 0.39f); glEnable(GL_TEXTURE_2D); for(i=pos=vscrollbar_get_pos(storage_win,STORAGE_SCROLLBAR_CATEGORIES); i<no_storage_categories && storage_categories[i].id!=-1 && i<pos+STORAGE_CATEGORIES_DISPLAY; i++,n++){ draw_string_small(20, 20+n*13, (unsigned char*)storage_categories[i].name,1); } if(storage_text[0]){ if (strcmp(storage_text, last_storage_text) != 0) { safe_strncpy(last_storage_text, storage_text, sizeof(last_storage_text)); put_small_text_in_box ((Uint8 *)storage_text, strlen(storage_text), win->len_x - 18*2, wrapped_storage_text); } draw_string_small(18, 220, (unsigned char*)wrapped_storage_text, 2); } glColor3f(1.0f,1.0f,1.0f); for(i=pos=6*vscrollbar_get_pos(storage_win, STORAGE_SCROLLBAR_ITEMS); i<pos+36 && i<no_storage;i++){ GLfloat u_start, v_start, u_end, v_end; int x_start, x_end, y_start, y_end; int cur_item; GLuint this_texture; if(!storage_items[i].quantity)continue; cur_item=storage_items[i].image_id%25; #ifdef NEW_TEXTURES get_item_uv(cur_item, &u_start, &v_start, &u_end, &v_end); #else /* NEW_TEXTURES */ u_start=0.2f*(cur_item%5); u_end=u_start+(float)50/255; v_start=(1.0f+((float)50/255)/255.0f)-((float)50/255*(cur_item/5)); v_end=v_start-(float)50/255; #endif /* NEW_TEXTURES */ this_texture=get_items_texture(storage_items[i].image_id/25); #ifdef NEW_TEXTURES if (this_texture != -1) { bind_texture(this_texture); } #else /* NEW_TEXTURES */ if(this_texture!=-1) get_and_set_texture_id(this_texture); #endif /* NEW_TEXTURES */ x_start=(i%6)*32+161; x_end=x_start+31; y_start=((i-pos)/6)*32+10; y_end=y_start+31; glBegin(GL_QUADS); draw_2d_thing(u_start,v_start,u_end,v_end,x_start,y_start,x_end,y_end); glEnd(); } if(cur_item_over!=-1 && mouse_in_window(win->window_id, mouse_x, mouse_y) == 1){ char str[20]; Uint16 item_id = storage_items[cur_item_over].id; int image_id = storage_items[cur_item_over].image_id; if (show_item_desc_text && item_info_available() && (get_item_count(item_id, image_id) == 1)) show_help(get_item_description(item_id, image_id), 0, win->len_y + 10); if (active_storage_item!=storage_items[cur_item_over].pos) { safe_snprintf(str, sizeof(str), "%d",storage_items[cur_item_over].quantity); show_help(str,mouse_x-win->pos_x-(strlen(str)/2)*8,mouse_y-win->pos_y-14); } } // Render the grid *after* the images. It seems impossible to code // it such that images are rendered exactly within the boxes on all // cards glDisable(GL_TEXTURE_2D); glColor3f(0.77f, 0.57f, 0.39f); glBegin(GL_LINE_LOOP); glVertex2i(10, 10); glVertex2i(10, 202); glVertex2i(130, 202); glVertex2i(130, 10); glEnd(); glBegin(GL_LINE_LOOP); glVertex2i(10, 212); glVertex2i(10, 262); glVertex2i(392, 262); glVertex2i(392, 212); glEnd(); if (view_only_storage) { Uint32 currentticktime = SDL_GetTicks(); if (currentticktime < drop_fail_time) drop_fail_time = 0; /* trap wrap */ if ((currentticktime - drop_fail_time) < 250) glColor3f(0.8f,0.2f,0.2f); /* flash red if tried to drop into */ else glColor3f(0.37f, 0.37f, 0.39f); /* otherwise draw greyed out */ } rendergrid(6, 6, 160, 10, 32, 32); glEnable(GL_TEXTURE_2D); glColor3f(1.0f,1.0f,1.0f); if(active_storage_item >= 0) { /* Draw the active item's quantity on top of everything else. */ for(i = pos = 6*vscrollbar_get_pos(storage_win, STORAGE_SCROLLBAR_ITEMS); i < pos+36 && i < no_storage; i++) { if(storage_items[i].pos == active_storage_item) { if (storage_items[i].quantity) { char str[20]; int x = (i%6)*32+161; safe_snprintf(str, sizeof(str), "%d", storage_items[i].quantity); if(x > 353) { x = 321; } show_help(str, x, ((i-pos)/6)*32+18); } break; } } } #ifdef OPENGL_TRACE CHECK_GL_ERRORS(); #endif //OPENGL_TRACE return 1; }
int display_ground_items_handler(window_info *win) { char str[80]; char my_str[10]; int i; static Uint8 resizing = 0; int yoffset = get_window_scroll_pos(win->window_id); /* if resizing wait until we stop */ if (win->resized) resizing = 1; /* once we stop, snap the window to the new grid size */ else if (resizing) { int new_width = (ground_items_grid_cols+1)*GRIDSIZE; int new_rows = (win->len_y+GRIDSIZE/2)/GRIDSIZE; int max_rows = (ITEMS_PER_BAG + ground_items_grid_cols - 1) / ground_items_grid_cols; resizing = 0; resize_window (win->window_id, new_width, ((new_rows > max_rows) ?max_rows :new_rows)*GRIDSIZE); yoffset = get_window_scroll_pos(win->window_id); } glEnable(GL_TEXTURE_2D); // write "get all" in the "get all" box :) strap_word(get_all_str,my_str); glColor3f(0.77f,0.57f,0.39f); draw_string_small(win->len_x-(GRIDSIZE-5), ELW_BOX_SIZE+3+yoffset, (unsigned char*)my_str, 2); glColor3f(1.0f,1.0f,1.0f); //ok, now let's draw the objects... for(i=ITEMS_PER_BAG-1; i>=0; --i) { if(ground_item_list[i].quantity > 0) { float u_start,v_start,u_end,v_end; int this_texture,cur_item,cur_pos; int x_start,x_end,y_start,y_end; //get the UV coordinates. cur_item=ground_item_list[i].image_id%25; #ifdef NEW_TEXTURES get_item_uv(cur_item, &u_start, &v_start, &u_end, &v_end); #else /* NEW_TEXTURES */ u_start=0.2f*(cur_item%5); u_end=u_start+(float)50/256; v_start=(1.0f+((float)50/256)/256.0f)-((float)50/256*(cur_item/5)); v_end=v_start-(float)50/256; #endif /* NEW_TEXTURES */ //get the x and y cur_pos=i; x_start=GRIDSIZE*(cur_pos%ground_items_grid_cols)+1; x_end=x_start+32; y_start=GRIDSIZE*(cur_pos/ground_items_grid_cols); y_end=y_start+32; //get the texture this item belongs to this_texture=get_items_texture(ground_item_list[i].image_id/25); #ifdef NEW_TEXTURES bind_texture(this_texture); #else /* NEW_TEXTURES */ get_and_set_texture_id(this_texture); #endif /* NEW_TEXTURES */ glBegin(GL_QUADS); draw_2d_thing(u_start,v_start,u_end,v_end,x_start,y_start,x_end,y_end); glEnd(); safe_snprintf(str,sizeof(str),"%i",ground_item_list[i].quantity); draw_string_small_shadowed(x_start,y_end-(i&1?22:12),(unsigned char*)str,1,1.0f,1.0f,1.0f,0.0f,0.0f,0.0f); } } // Render the grid *after* the images. It seems impossible to code // it such that images are rendered exactly within the boxes on all // cards glDisable(GL_TEXTURE_2D); glColor3f(0.77f,0.57f,0.39f); /* if a full grid render in one go */ if (ground_items_grid_cols*ground_items_grid_rows == ITEMS_PER_BAG) rendergrid(ground_items_grid_cols,ground_items_grid_rows,0,0,GRIDSIZE,GRIDSIZE); /* otherwise don't render the extra slots */ else { int remainder = ITEMS_PER_BAG - (ground_items_grid_cols*(ground_items_grid_rows-1)); rendergrid(ground_items_grid_cols,ground_items_grid_rows-1,0,0,GRIDSIZE,GRIDSIZE); rendergrid(remainder, 1, 0, GRIDSIZE*(ground_items_grid_rows-1), GRIDSIZE, GRIDSIZE); } glBegin(GL_LINE_LOOP); // draw the "get all" box glVertex2i(win->len_x, ELW_BOX_SIZE+yoffset); glVertex2i(win->len_x-GRIDSIZE, ELW_BOX_SIZE+yoffset); glVertex2i(win->len_x-GRIDSIZE, ELW_BOX_SIZE+GRIDSIZE+yoffset); glVertex2i(win->len_x, ELW_BOX_SIZE+GRIDSIZE+yoffset); glEnd(); glEnable(GL_TEXTURE_2D); #ifdef OPENGL_TRACE CHECK_GL_ERRORS(); #endif //OPENGL_TRACE return 1; }
// Draw the item list window // int List_Window::draw(window_info *win) { Vars::lists()->check_and_timed_save(false); // if resizing wait until we stop if (win->resized) resizing = true; // once we stop, snap the window size to fix nicely else if (resizing) { calc_num_show_names(win->len_y); resizing = false; resize_window (win->window_id, get_size_x(), get_size_y()); } // check if we need to change the number of grid rows shown int new_num_grid_rows = min_grid_rows(); if (Vars::lists()->valid_active_list()) new_num_grid_rows = std::max(static_cast<size_t>(new_num_grid_rows), (Vars::lists()->get_list().get_num_items() +5) / 6); if (num_grid_rows != new_num_grid_rows) { num_grid_rows = new_num_grid_rows; resized_name_panel(win); } glEnable(GL_TEXTURE_2D); // draw the images if (Vars::lists()->valid_active_list()) { glColor3f(1.0f,1.0f,1.0f); for(size_t i=0; i<Vars::lists()->get_list().get_num_items() && i<static_cast<size_t>(6*num_grid_rows); i++) { int x_start, y_start; x_start = get_grid_size() * (i%6) + 1; y_start = get_grid_size() * (i/6); draw_item(Vars::lists()->get_list().get_image_id(i), x_start, y_start, get_grid_size()); } } size_t help_lines_shown = 0; // Display any name search text if (strlen(filter)) { if (SDL_GetTicks() > (last_key_time+5000)) { filter[0] = '\0'; last_key_time = 0; } else { std::string tmp = std::string(item_list_find_str) + std::string("[") + std::string(filter) + std::string("]"); show_help(tmp.c_str(), 0, static_cast<int>(0.5 + win->len_y + 10 + SMALL_FONT_Y_LEN * help_lines_shown++)); } } // draw mouse over window help text if (show_help_text) { if (!resizing) for (size_t i=0; i<help_str.size(); ++i) show_help(help_str[i], 0, static_cast<int>(0.5 + win->len_y + 10 + SMALL_FONT_Y_LEN * help_lines_shown++)); help_str.clear(); } glDisable(GL_TEXTURE_2D); // draw the item grid glColor3f(0.77f,0.57f,0.39f); rendergrid(6, num_grid_rows, 0, 0, get_grid_size(), get_grid_size()); // if an object is selected, draw a green grid around it if (Vars::lists()->valid_active_list() && (quantities.selected == ITEM_EDIT_QUANT) && (selected_item_number < Vars::lists()->get_list().get_num_items())) { int x_start = selected_item_number%6 * get_grid_size(); int y_start = static_cast<int>(selected_item_number/6) * get_grid_size(); if ((SDL_GetTicks() - il_pickup_fail_time) < 250) glColor3f(0.8f,0.2f,0.2f); else glColor3f(0.0f, 1.0f, 0.3f); rendergrid(1, 1, x_start, y_start, get_grid_size(), get_grid_size()); rendergrid(1, 1, x_start-1, y_start-1, get_grid_size()+2, get_grid_size()+2); } glEnable(GL_TEXTURE_2D); // draw the quantities over everything else so they always show if (Vars::lists()->valid_active_list()) { glColor3f(1.0f,1.0f,1.0f); char str[80]; for(size_t i=0; i<Vars::lists()->get_list().get_num_items() && i<static_cast<size_t>(6*num_grid_rows); i++) { int x_start, y_start, y_end; x_start = get_grid_size() * (i%6) + 1; y_start = get_grid_size() * (i/6); y_end = y_start + get_grid_size() - 1; safe_snprintf(str, sizeof(str), "%i", Vars::lists()->get_list().get_quantity(i)); draw_string_small_shadowed(x_start, (i&1)?(y_end-15):(y_end-27), (unsigned char*)str, 1,1.0f,1.0f,1.0f, 0.0f, 0.0f, 0.0f); } } // Drawn the new list button (+) with highlight when mouse over if (mouse_over_add_button) glColor3f(0.99f,0.77f,0.55f); else glColor3f(0.77f,0.57f,0.39f); draw_string_zoomed(add_button_x, add_button_y, (unsigned const char*)"+", 1, 2.0); // draw the item list names glColor3f(1.0f,1.0f,1.0f); int pos_y = get_grid_size()*num_grid_rows + get_list_gap(); int num_shown = 0; const int top_entry = vscrollbar_get_pos (win_id, names_scroll_id); const std::vector<List> lists = Vars::lists()->get_lists(); const int hl_width = static_cast<int>(win->len_x-ELW_BOX_SIZE-3); const int hl_height = static_cast<int>(names_list_height + get_list_gap()); const size_t disp_chars = static_cast<size_t>((win->len_x-ELW_BOX_SIZE-2*get_list_gap()) / SMALL_FONT_X_LEN); for (size_t i = top_entry; i<lists.size() && num_shown<num_show_names_list; ++i) { if (i==Vars::lists()->get_active()) draw_highlight(1, static_cast<int>(pos_y-get_list_gap()/2), hl_width, hl_height, 1); else if (i==name_under_mouse) draw_highlight(1, static_cast<int>(pos_y-get_list_gap()/2), hl_width, hl_height, 0); glColor3f(1.0f,1.0f,1.0f); if (lists[i].get_name().size() > disp_chars) { std::string todisp = lists[i].get_name().substr(0,disp_chars); draw_string_small(get_list_gap(), pos_y, reinterpret_cast<const unsigned char*>(todisp.c_str()), 1); if (i==name_under_mouse) show_help(lists[i].get_name().c_str(), 0, static_cast<int>(0.5 + win->len_y + 10 + SMALL_FONT_Y_LEN * help_lines_shown)); } else draw_string_small(get_list_gap(), pos_y, reinterpret_cast<const unsigned char*>(lists[i].get_name().c_str()), 1); pos_y += static_cast<int>(names_list_height + get_list_gap()); num_shown++; } if (clicked && (name_under_mouse < lists.size())) { do_click_sound(); Vars::lists()->set_active(name_under_mouse); } if (clicked && mouse_over_add_button) { do_click_sound(); new_or_rename_list(true); } name_under_mouse = static_cast<size_t>(-1); mouse_over_add_button = clicked = false; #ifdef OPENGL_TRACE CHECK_GL_ERRORS(); #endif //OPENGL_TRACE return 1; }