//draws a NUM_MIX_SLOTSx1 grid of items+grid static int draw_production_pipe(window_info *win, int x, int y, int recipe_num){ int i,ofs,valid; Uint8 str[80]; item *the_list; //if recipe_num is negative we draw the current manufacture_list, else a recipe if (recipe_num<0) { the_list=manufacture_list; ofs=MIX_SLOT_OFFSET; valid=1; } else { the_list=recipes_store[recipe_num].items; ofs=0; valid=recipes_store[recipe_num].status; } glEnable(GL_TEXTURE_2D); //ok, now let's draw the mixed objects for(i=ofs;i<NUM_MIX_SLOTS+ofs;i++) { glColor3f(1.0f,1.0f,1.0f); if(the_list[i].quantity > 0){ int x_start,y_start; int use_large = (mouse_over_pipe_pos == i-ofs) && enlarge_text(); int y_offset = SLOT_SIZE - ((use_large) ?win->default_font_len_y :win->small_font_len_y); //get the x and y x_start=x+SLOT_SIZE*(i%NUM_MIX_SLOTS)+1; y_start=y; draw_item(the_list[i].image_id,x_start,y_start,SLOT_SIZE); safe_snprintf((char *)str, sizeof(str), "%i", the_list[i].quantity); if (use_large) draw_string_shadowed_zoomed(x_start, y_start+y_offset, (unsigned char*)str, 1, 1.0f, 1.0f, 1.0f, 0.0f, 0.0f, 0.0f, win->current_scale); else draw_string_small_shadowed_zoomed(x_start, y_start+y_offset, (unsigned char*)str, 1, 1.0f, 1.0f, 1.0f, 0.0f, 0.0f, 0.0f, win->current_scale); if (!valid) gray_out(x_start,y_start,SLOT_SIZE); } } glDisable(GL_TEXTURE_2D); //draw the grid, in red if selected if (recipe_num==cur_recipe) glColor3f(1.0f,0.0f,0.0f); else glColor3f(0.77f,0.57f,0.39f); rendergrid(NUM_MIX_SLOTS,1,x, y, SLOT_SIZE, SLOT_SIZE); glEnable(GL_TEXTURE_2D); return 1; }
//draws a 6x1 grid of items+grid int draw_production_pipe(int x, int y, int recipe_num){ int i,ofs,valid; Uint8 str[80]; item *the_list; //if recipe_num is negative we draw the current manufacture_list, else a recipe if (recipe_num<0) { the_list=manufacture_list; ofs=36; valid=1; } else { the_list=recipes[recipe_num]; ofs=0; valid=recipe_status[recipe_num]; } glEnable(GL_TEXTURE_2D); //ok, now let's draw the mixed objects for(i=ofs;i<6+ofs;i++) { glColor3f(1.0f,1.0f,1.0f); if(the_list[i].quantity > 0){ int x_start,y_start; //get the x and y x_start=x+33*(i%6)+1; y_start=y; draw_item(the_list[i].image_id,x_start,y_start,33); safe_snprintf((char *)str, sizeof(str), "%i", the_list[i].quantity); draw_string_small_shadowed(x_start,y_start+17,str,1,1.0f,1.0f,1.0f,0.0f,0.0f,0.0f); if (!valid) gray_out(x_start,y_start,33); } } glDisable(GL_TEXTURE_2D); //draw the grid, in red if selected if (recipe_num==cur_recipe) glColor3f(1.0f,0.0f,0.0f); else glColor3f(0.77f,0.57f,0.39f); rendergrid(6,1,x, y, 33, 33); glEnable(GL_TEXTURE_2D); return 1; }
int display_storage_handler(window_info * win) { int i; int n=0; int pos; int help_text_line = 0; have_storage_list = 0; //We visited storage, so we may have changed something glColor3f(newcol_r, newcol_g, newcol_b); 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 (!disable_storage_filter && filter_item_text_size && storage_items_filter[i]) gray_out(x_start,y_start,32); } 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 + (help_text_line++) * SMALL_FONT_Y_LEN); if (active_storage_item!=storage_items[cur_item_over].pos) { safe_snprintf(str, sizeof(str), "%d",storage_items[cur_item_over].quantity); if ((SDL_GetModState() & (KMOD_CTRL|KMOD_ALT))) show_sized_help(str, mouse_x-win->pos_x-(strlen(str)/2)*DEFAULT_FONT_X_LEN,mouse_y-win->pos_y-DEFAULT_FONT_Y_LEN-1, 1); else 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(newcol_r, newcol_g, newcol_b); 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.77f); /* 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; } if ((mouse_in_window(win->window_id, mouse_x, mouse_y) == 1) && (SDL_GetModState() & (KMOD_CTRL|KMOD_ALT))) show_sized_help(str, x, ((i-pos)/6)*32+18, 1); else show_help(str, x, ((i-pos)/6)*32+18); } break; } } } if (!disable_storage_filter && !mouse_over_titlebar) { if(filter_item_text_size > 0) { static char tmp[50]; safe_snprintf(tmp, sizeof(tmp), "%s[%s]", storage_filter_prompt_str, filter_item_text); show_help(tmp, 0, win->len_y + 10 + (help_text_line++) * SMALL_FONT_Y_LEN); } else if (show_help_text && mouse_over_storage) show_help(storage_filter_help_str, 0, win->len_y + 10 + (help_text_line++) * SMALL_FONT_Y_LEN); } mouse_over_storage = mouse_over_titlebar = 0; #ifdef OPENGL_TRACE CHECK_GL_ERRORS(); #endif //OPENGL_TRACE return 1; }