From 62e480c2d887aae67add7ee7aed68463be897811 Mon Sep 17 00:00:00 2001 From: Stijn Buys Date: Sat, 20 Dec 2008 14:52:10 +0000 Subject: map targetting --- src/client/map.cc | 104 ++++++++++++++++++++++++++++++++++-------------------- 1 file changed, 66 insertions(+), 38 deletions(-) (limited to 'src/client/map.cc') diff --git a/src/client/map.cc b/src/client/map.cc index 1183457..4613ab7 100644 --- a/src/client/map.cc +++ b/src/client/map.cc @@ -8,6 +8,7 @@ #include "core/application.h" #include "client/map.h" #include "client/targets.h" +#include "client/input.h" #include "ui/paint.h" #include "render/gl.h" #include "render/textures.h" @@ -26,6 +27,13 @@ Map::~Map() { } +void Map::hide() +{ + ui::Widget::hide(); + map_hover = 0; + +} + void Map::toggle() { if (visible()) @@ -45,6 +53,7 @@ void Map::draw() math::Vector2f v(global_location()); v.x += margin; v.y += margin; + map_hover = 0; if (h > s ) { v.y += (h-s) * 0.5f; @@ -76,7 +85,9 @@ void Map::draw() core::Zone *zone = core::localplayer()->zone(); - const float r = 24.0f; + const math::Vector2f cursor(input::mouse_position_x(), input::mouse_position_y()); + + const float r = 12.0f; float scale = 2048.0f; scale *= 2; @@ -86,9 +97,11 @@ void Map::draw() for (core::Zone::Content::iterator it = zone->content().begin(); it != zone->content().end(); it++) { core::Entity *entity = (*it); - bool draw_icon = false; + bool has_icon = false; + bool draw_icon = true; + if ((entity->model()) || (entity->type() == core::Entity::Globe)) { - draw_icon = true; + has_icon = true; if ((entity->type() == core::Entity::Dynamic) || (entity->type() == core::Entity::Controlable)) { core::EntityDynamic *ed = dynamic_cast(entity); @@ -110,52 +123,67 @@ void Map::draw() } } - if (draw_icon) { - if (entity->type() == core::Entity::Globe) { - if ((entity->flags() & core::Entity::Bright) == core::Entity::Bright) { - if (texture_current != texture_bright) { - gl::end(); - texture_current = render::Textures::bind(texture_bright); - gl::begin(gl::Quads); + if (has_icon) { + math::Vector2f l(v); + l.x -= s / scale * entity->location().y; + l.y -= s / scale * entity->location().x; + + if (math::distancesquared(cursor, l) < (r*r)) { + map_hover = entity->id(); + } + + if (draw_icon) { + if (entity->type() == core::Entity::Globe) { + if ((entity->flags() & core::Entity::Bright) == core::Entity::Bright) { + if (texture_current != texture_bright) { + gl::end(); + texture_current = render::Textures::bind(texture_bright); + gl::begin(gl::Quads); + } + } else { + if (texture_current != texture_globe) { + gl::end(); + texture_current = render::Textures::bind(texture_globe); + gl::begin(gl::Quads); + } } } else { - if (texture_current != texture_globe) { + if (texture_current != texture_entity) { gl::end(); - texture_current = render::Textures::bind(texture_globe); + texture_current = render::Textures::bind(texture_entity); gl::begin(gl::Quads); } } - } else { - if (texture_current != texture_entity) { - gl::end(); - texture_current = render::Textures::bind(texture_entity); - gl::begin(gl::Quads); - } - } + - math::Vector2f l(v); - l.x -= s / scale * entity->location().y; - l.y -= s / scale * entity->location().x; - - math::Color color(entity->color()); - color.a = 1.0f; - gl::color(color); - glTexCoord2f(0.0f, 0.0f); - gl::vertex(l.x, l.y); - - glTexCoord2f(1.0f, 0.0f); - gl::vertex(l.x+r, l.y); - - glTexCoord2f(1.0f, 1.0f); - gl::vertex(l.x+r, l.y+r); - - glTexCoord2f(0.0f, 1.0f); - gl::vertex(l.x, l.y+r); - + math::Color color(entity->color()); + color.a = 1.0f; + gl::color(color); + glTexCoord2f(0.0f, 0.0f); + gl::vertex(l.x-r, l.y-r); + + glTexCoord2f(1.0f, 0.0f); + gl::vertex(l.x+r, l.y-r); + + glTexCoord2f(1.0f, 1.0f); + gl::vertex(l.x+r, l.y+r); + + glTexCoord2f(0.0f, 1.0f); + gl::vertex(l.x-r, l.y+r); + } } } gl::end(); gl::disable(GL_TEXTURE_2D); } +bool Map::on_keypress(const int key, const unsigned int modifier) +{ + if ((hover()) && (key == 512 + SDL_BUTTON_LEFT)) { + targets::select_target(hover()); + return true; + } + + return false; +} } \ No newline at end of file -- cgit v1.2.3