int mouseover_minimap_handler(window_info * win, int mx, int my, Uint32 flags) { if(is_within_radius(mx,my-ELW_TITLE_HEIGHT,float_minimap_size/2,float_minimap_size/2,float_minimap_size/2) || ((mx > win->len_x/2-32) && (mx < win->len_x/2+32+ELW_TITLE_HEIGHT) && (my >= 0) && (my <= 2*ELW_TITLE_HEIGHT))) { elwin_mouse=CURSOR_ARROW; enable_controls = 1; return 1; } else return 0; }
int click_minimap_handler(window_info * win, int mx, int my, Uint32 flags) { int close_button_x = win->len_x/2 + 32 - 1; if(left_click) { //check for close button click if((mx >=close_button_x) && (mx <=close_button_x + ELW_TITLE_HEIGHT) && (my <= ELW_TITLE_HEIGHT)) { hide_window(minimap_win); return 1; } else if(my >= ELW_TITLE_HEIGHT) { //check if the click is in the round area if(is_within_radius(mx,my-ELW_TITLE_HEIGHT,float_minimap_size/2,float_minimap_size/2,float_minimap_size/2)) { minimap_walkto(mx, win->len_y - my); return 1; } } // title bar? else if ((mx > win->len_x/2-32) && (mx < win->len_x/2+32) && (my >= 0) && (my <= 2*ELW_TITLE_HEIGHT)) return 1; } else if((flags & ELW_WHEEL) && is_within_radius(mx,my-ELW_TITLE_HEIGHT,float_minimap_size/2,float_minimap_size/2,float_minimap_size/2)) { if(flags & ELW_WHEEL_UP) increase_zoom(); else decrease_zoom(); return 1; } return 0; }
int keypress_minimap_handler (window_info *win, int mx, int my, Uint32 key, Uint32 unikey, Uint16 mods) { if (is_within_radius(mx,my-ELW_TITLE_HEIGHT,float_minimap_size/2,float_minimap_size/2,float_minimap_size/2)) { if((key == SDLK_KP_PLUS) || (key == SDLK_PAGEUP)) { increase_zoom(); return 1; } else if ((key == SDLK_KP_MINUS) || (key == SDLK_PAGEDOWN)) { decrease_zoom(); return 1; } } return 0; }
static __inline__ void draw_actor_points(float zoom_multip, float px, float py) { float size_x = float_minimap_size / (tile_map_size_x * 6); float size_y = float_minimap_size / (tile_map_size_y * 6); actor *a; int i; float x, y; glPushMatrix(); glDisable(GL_TEXTURE_2D); //display the actors glEnable( GL_POINT_SMOOTH ); glEnable( GL_BLEND ); glBlendFunc( GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA ); glPointSize(8); rotate_actor_points(zoom_multip,px,py); glBegin(GL_POINTS); for (i = 0; i < max_actors; i++) { if (actors_list[i]) { a = actors_list[i]; if (a->attached_actor != -1 && a->actor_id == -1) continue; x = a->x_tile_pos * size_x; y = float_minimap_size - (a->y_tile_pos * size_y); glColor3f(0.0f,0.0f,0.0f); glVertex2f(x+2*zoom_multip, y+2*zoom_multip); if (a->kind_of_actor == NPC) elglColourN("minimap.npc"); else if(a->actor_id == yourself) elglColourN("minimap.yourself"); else if(a->is_enhanced_model && (a->kind_of_actor == PKABLE_HUMAN || a->kind_of_actor == PKABLE_COMPUTER_CONTROLLED)) elglColourN("minimap.pkable"); else if(a->is_enhanced_model && is_in_buddylist(a->actor_name)) elglColourN("minimap.buddy"); else if (is_color ((unsigned char)a->actor_name[0])) { if(a->is_enhanced_model && is_in_buddylist(a->actor_name)) elglColourN("minimap.buddy"); else { // Use the colour of their name. This gives purple bots, green demigods, etc. int color = from_color_char (a->actor_name[0]); glColor3ub (colors_list[color].r1, colors_list[color].g1, colors_list[color].b1); } } else if(!a->is_enhanced_model) { if (a->dead) elglColourN("minimap.deadcreature"); else // alive elglColourN("minimap.creature"); } else elglColourN("minimap.otherplayer"); // Draw it! glVertex2f(x, y); } } // mines for (i = 0; i < NUM_MINES; i++) { mine *m = &mine_list[i]; if (m->obj_3d_id != -1) { x = m->x * size_x; y = float_minimap_size - (m->y * size_y); if(is_within_radius(x,y,px,py,zoom_multip*(minimap_size/2-15))) { elglColourN("minimap.mine"); glVertex2f(x, y); } } } glEnd();//GL_POINTS glDisable(GL_BLEND); glDisable(GL_POINT_SMOOTH); glPopMatrix(); if (pf_follow_path) { x = pf_dst_tile->x * size_x; y = float_minimap_size - (pf_dst_tile->y * size_y); if (x != px || y != py) { float diff = 6.0f*zoom_multip; if(is_within_radius(x,y,px,py,zoom_multip*(minimap_size/2-15))) { glPushMatrix(); glDisable(GL_TEXTURE_2D); rotate_actor_points(zoom_multip,px,py); glBegin(GL_LINES); glColor3f(1.0f,0.0f,1.0f); //purple glVertex2f(x-diff, y-diff); glVertex2f(x+diff, y+diff); glVertex2f(x-diff, y+diff); glVertex2f(x+diff, y-diff); glEnd();//GL_LINES glPopMatrix(); } } } //draw map markings for(i=0;i<max_mark;i++){ if(!marks[i].server_side) continue; x= marks[i].x*size_x; y= float_minimap_size-(marks[i].y*size_y); if (x != px || y != py) { float diff = 4.0f*zoom_multip; if(is_within_radius(x,y,px,py,zoom_multip*(minimap_size/2-15))) { glPushMatrix(); glDisable(GL_TEXTURE_2D); rotate_actor_points(zoom_multip,px,py); glBegin(GL_LINES); elglColourN("minimap.servermark"); glVertex2f(x-diff, y-diff); glVertex2f(x+diff, y+diff); glVertex2f(x-diff, y+diff); glVertex2f(x+diff, y-diff); glEnd();//GL_LINES glPopMatrix(); } } } glColor4f(1.0f,1.0f,1.0f,1.0f); glEnable(GL_TEXTURE_2D); }