// Called from the main thread 500 ms timer - implement the timer // void Hud_Timer::update(void) { if (running && use_tick) { if (mode_coundown) { if ((--current_value) == 0) do_alert1_sound(); } else current_value++; if (current_value > max_value) current_value = 0; else if (current_value < 0) current_value = 0; } use_tick = !use_tick; }
// Start the process of picking up the specified item from a specified category. // If the category is already selected, try picking up the item now, otherwise // set the requird category, the pick will continue when the category is availble. // void pickup_storage_item(int image_id, Uint16 item_id, int cat_id) { if ((storage_win<0) || (find_category(cat_id) == -1)) { do_alert1_sound(); item_lists_reset_pickup_fail_time(); return; } wanted_category = find_category(cat_id); wanted_image_id = image_id; wanted_item_id = item_id; if (selected_category == wanted_category) { select_item(wanted_image_id, wanted_item_id); wanted_category = -1; } else move_to_category(wanted_category); }
// Look though the category for the selected item, pick it up if found. // static void select_item(int image_id, Uint16 item_id) { int i; int found_at = -1; for (i=0; i<no_storage; i++) { if ((item_id != unset_item_uid) && (storage_items[i].id != unset_item_uid) && (storage_items[i].quantity > 0)) { if (storage_items[i].id == item_id) { found_at = i; break; } } else if ((storage_items[i].image_id == image_id) && (storage_items[i].quantity > 0)) { found_at = i; break; } } if (found_at < 0) { do_alert1_sound(); item_lists_reset_pickup_fail_time(); } else { active_storage_item=storage_items[found_at].pos; if (!view_only_storage) { storage_item_dragged=found_at; do_drag_item_sound(); } else { do_click_sound(); } } }
int click_storage_handler(window_info * win, int mx, int my, Uint32 flags) { if(flags&ELW_WHEEL_UP) { if(mx>10 && mx<130) { vscrollbar_scroll_up(storage_win, STORAGE_SCROLLBAR_CATEGORIES); } else if(mx>150 && mx<352){ vscrollbar_scroll_up(storage_win, STORAGE_SCROLLBAR_ITEMS); } } else if(flags&ELW_WHEEL_DOWN) { if(mx>10 && mx<130) { vscrollbar_scroll_down(storage_win, STORAGE_SCROLLBAR_CATEGORIES); } else if(mx>150 && mx<352){ vscrollbar_scroll_down(storage_win, STORAGE_SCROLLBAR_ITEMS); } } else if ( (flags & ELW_MOUSE_BUTTON) == 0) { return 0; } else { if(my>10 && my<202){ if(mx>10 && mx<130){ int cat=-1; cat=(my-20)/13 + vscrollbar_get_pos(storage_win, STORAGE_SCROLLBAR_CATEGORIES); move_to_category(cat); do_click_sound(); } else if(mx>150 && mx<352){ if(view_only_storage && item_dragged!=-1 && left_click){ drop_fail_time = SDL_GetTicks(); do_alert1_sound(); } else if(!view_only_storage && item_dragged!=-1 && left_click){ Uint8 str[6]; str[0]=DEPOSITE_ITEM; str[1]=item_list[item_dragged].pos; *((Uint32*)(str+2))=SDL_SwapLE32(item_quantity); my_tcp_send(my_socket, str, 6); do_drop_item_sound(); if(item_list[item_dragged].quantity<=item_quantity) item_dragged=-1;//Stop dragging this item... } else if(right_click || (view_only_storage && left_click)){ storage_item_dragged=-1; item_dragged=-1; if(cur_item_over!=-1) { Uint8 str[3]; str[0]=LOOK_AT_STORAGE_ITEM; *((Uint16*)(str+1))=SDL_SwapLE16(storage_items[cur_item_over].pos); my_tcp_send(my_socket, str, 3); active_storage_item=storage_items[cur_item_over].pos; do_click_sound(); } } else if(!view_only_storage && cur_item_over!=-1){ storage_item_dragged=cur_item_over; active_storage_item=storage_items[cur_item_over].pos; do_drag_item_sound(); } } } } return 1; }
// Handle mouse clicks in the window // int List_Window::click(window_info *win, int mx, int my, Uint32 flags) { if (my < 0) // don't respond here to title bar being clicked return 0; if (flags & ELW_LEFT_MOUSE) clicked = true; if (!Vars::lists()->valid_active_list()) return 1; // hide and clear any quantity input widow Vars::quantity_input()->close(); size_t last_selected = selected_item_number; size_t num_items = Vars::lists()->get_list().get_num_items(); bool was_dragging = ((storage_item_dragged != -1) || (item_dragged != -1)); size_t over_item_number = Vars::win()->get_item_number(mx, my); // If dragging item and ctrl+left-click on window, add item to list if ((flags & ELW_LEFT_MOUSE) && (flags & ELW_CTRL) && was_dragging) { if (storage_item_dragged != -1) Vars::lists()->add_item(over_item_number, storage_items[storage_item_dragged].image_id, storage_items[storage_item_dragged].id, item_quantity); else if (item_dragged != -1) Vars::lists()->add_item(over_item_number, item_list[item_dragged].image_id, item_list[item_dragged].id, item_quantity); return 1; } // ctrl+right-click on a selected item opens the edit menu if ((flags & ELW_RIGHT_MOUSE) && (flags & ELW_CTRL) && (over_item_number<num_items)) { cm_show_direct(Vars::win()->get_grid_cm(), win->window_id, -1); storage_item_dragged = item_dragged = -1; return 1; } restore_inventory_quantity(); // wheel mouse up/down scrolls if ((flags & ELW_WHEEL_UP ) || (flags & ELW_WHEEL_DOWN )) { // change the active list if (my<get_grid_size()*num_grid_rows) { if (flags & ELW_WHEEL_UP) Vars::lists()->change_active(-1); else if (flags & ELW_WHEEL_DOWN) Vars::lists()->change_active(1); make_active_visable(); } // scroll the names else { if (flags&ELW_WHEEL_UP) vscrollbar_scroll_up(win->window_id, names_scroll_id); else if(flags&ELW_WHEEL_DOWN) vscrollbar_scroll_down(win->window_id, names_scroll_id); } return 1; } // see if we can use the item quantity or take items from storage if ((flags & ELW_RIGHT_MOUSE) || (flags & ELW_LEFT_MOUSE)) { if ((over_item_number!=last_selected) && (over_item_number < num_items)) { selected_item_number = over_item_number; last_quantity_selected = quantities.selected; quantities.selected = ITEM_EDIT_QUANT; item_quantity = quantities.quantity[ITEM_EDIT_QUANT].val = Vars::lists()->get_list().get_quantity(selected_item_number); if (flags & ELW_RIGHT_MOUSE) do_click_sound(); if (flags & ELW_LEFT_MOUSE) { // randomly close the window if (!(SDL_GetTicks() & 63)) { hide_window(Vars::win()->get_id()); set_shown_string(c_red2, item_list_magic_str); return 0; } storage_item_dragged = item_dragged = -1; int image_id = Vars::lists()->get_list().get_image_id(selected_item_number); Uint16 item_id = Vars::lists()->get_list().get_item_id(selected_item_number); int cat_id = Vars::cat_maps()->get_cat(image_id, item_id); if (cat_id != -1) pickup_storage_item(image_id, item_id, cat_id); else { do_alert1_sound(); il_pickup_fail_time = SDL_GetTicks(); static bool first_fail = true; if (first_fail) { first_fail = false; LOG_TO_CONSOLE(c_red1, item_list_learn_cat_str); } } } } else storage_item_dragged = item_dragged = -1; } return 1; }