Project::OSiRiON - Git repositories
Project::OSiRiON
News . About . Screenshots . Downloads . Forum . Wiki . Tracker . Git
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorStijn Buys <ingar@osirion.org>2012-10-07 21:46:02 +0000
committerStijn Buys <ingar@osirion.org>2012-10-07 21:46:02 +0000
commit60b0e02ab6b8910b3870d16a6eef9d67c6a6f34e (patch)
tree8702424723a66ad2d65298d63160ef25ef83898e /src/client/mapwindow.cc
parente065de3bf7f15b895c7a22e9fdbf8125c94406b3 (diff)
Add galactic map, make it possible to other zones on the map.
Diffstat (limited to 'src/client/mapwindow.cc')
-rw-r--r--src/client/mapwindow.cc265
1 files changed, 192 insertions, 73 deletions
diff --git a/src/client/mapwindow.cc b/src/client/mapwindow.cc
index ed88f88..1c429dd 100644
--- a/src/client/mapwindow.cc
+++ b/src/client/mapwindow.cc
@@ -41,14 +41,24 @@ MapWindow::MapWindow(ui::Widget *parent) : ui::Window(parent)
mapwindow_mapwidget = new MapWidget(this);
mapwindow_mapwidget->set_background(false);
mapwindow_mapwidget->set_border(false);
-
- // map label (map widget child)
- mapwindow_maplabel = new ui::Label(mapwindow_mapwidget);
+
+ // galaxy map widget
+ mapwindow_galaxymapwidget = new GalaxyMapWidget(this);
+ mapwindow_galaxymapwidget->set_background(false);
+ mapwindow_galaxymapwidget->set_border(false);
+ mapwindow_galaxymapwidget->hide();
+
+ // map label
+ mapwindow_maplabel = new ui::Label(this);
mapwindow_maplabel->set_label("maplabel");
mapwindow_maplabel->set_background(false);
mapwindow_maplabel->set_border(false);
mapwindow_maplabel->set_alignment(ui::AlignCenter);
+ // map buttons
+ mapwindow_zonebutton = new ui::IconButton(this, "bitmaps/icons/button_map");
+ mapwindow_galaxybutton = new ui::IconButton(this, "bitmaps/icons/button_galaxy");
+
// modelview
mapwindow_modelview = new ui::ModelView(this);
mapwindow_modelview->set_label("modelview");
@@ -56,7 +66,7 @@ MapWindow::MapWindow(ui::Widget *parent) : ui::Window(parent)
mapwindow_modelview->set_border(false);
// target title (modelview child)
- mapwindow_targetlabel = new ui::Label(mapwindow_modelview);
+ mapwindow_targetlabel = new ui::Label(this);
mapwindow_targetlabel->set_label("targetlabel");
mapwindow_targetlabel->set_background(false);
mapwindow_targetlabel->set_border(false);
@@ -68,7 +78,6 @@ MapWindow::MapWindow(ui::Widget *parent) : ui::Window(parent)
mapwindow_scrollpane->set_border(false);
mapwindow_scrollpane->set_alignment(ui::AlignTop);
- set_target(0);
hide();
}
@@ -79,17 +88,32 @@ MapWindow::~MapWindow()
void MapWindow::hide()
{
ui::Window::hide();
- mapwindow_target = 0;
}
void MapWindow::show()
{
ui::Window::show();
+
+ // show map widget
+ mapwindow_mode = ShowZone;
+ mapwindow_galaxymapwidget->hide();
+ mapwindow_mapwidget->show();
+ mapwindow_mapwidget->set_zone(core::localplayer()->zone());
+ mapwindow_maplabel->set_text(mapwindow_mapwidget->zone()->name());
+
+ // use current HUD target as default selection
if (core::localplayer()->view()) {
- set_target(core::localplayer()->view());
+ mapwindow_mapwidget->set_target(core::localplayer()->view());
} else {
- set_target(targets::current());
+ mapwindow_mapwidget->set_target(targets::current());
}
+
+ // show target or zone info
+ if (mapwindow_mapwidget->target()) {
+ show_entity_info(mapwindow_mapwidget->target());
+ } else {
+ show_zone_info(mapwindow_mapwidget->zone());
+ }
}
void MapWindow::toggle()
@@ -103,6 +127,7 @@ void MapWindow::toggle()
void MapWindow::resize()
{
const float padding = ui::root()->font_large()->height();
+ const float icon_size = 24.0f; // small icons
// resize title label
mapwindow_titlelabel->set_size(width() - padding * 2.0f, mapwindow_titlelabel->font()->height());
@@ -112,32 +137,46 @@ void MapWindow::resize()
mapwindow_closebutton->set_size(mapwindow_titlelabel->font()->height(), mapwindow_titlelabel->font()->height());
mapwindow_closebutton->set_location(mapwindow_titlelabel->width() - mapwindow_closebutton->width(), 0);
- // resize map widget
- mapwindow_mapwidget->set_size((width() - padding * 3.0f) * 0.5f, height() - mapwindow_titlelabel->bottom() - padding * 2.0f );
- mapwindow_mapwidget->set_location(padding, mapwindow_titlelabel->bottom() + padding);
+ // resize map label
+ mapwindow_maplabel->set_size((width() - padding * 3.0f) * 0.5f, padding );
+ mapwindow_maplabel->set_location(padding, mapwindow_titlelabel->bottom() + padding);
- // resize map label (map widget child)
- mapwindow_maplabel->set_size(mapwindow_mapwidget->width(), mapwindow_maplabel->font()->height());
- mapwindow_maplabel->set_location(0, 0);
+ // resize zone map widget
+ mapwindow_mapwidget->set_size(mapwindow_maplabel->width(), mapwindow_zonebutton->top() - mapwindow_maplabel->bottom() - 2.0f * padding);
+ mapwindow_mapwidget->set_location(mapwindow_maplabel->left(), mapwindow_maplabel->bottom() + padding);
- // resize target modelview
- mapwindow_modelview->set_size(width() - mapwindow_mapwidget->right() - padding * 2.0f, (height() - mapwindow_titlelabel->bottom() - padding * 3.0f) * 0.5f);
- mapwindow_modelview->set_location(mapwindow_mapwidget->right() + padding, mapwindow_titlelabel->bottom() + padding);
+ // set galaxy map size equal to zone map size
+ mapwindow_galaxymapwidget->set_geometry(mapwindow_mapwidget->location(), mapwindow_mapwidget->size());
- // resize target label (modelview child)
- mapwindow_targetlabel->set_size(mapwindow_modelview->width(), mapwindow_targetlabel->font()->height());
- mapwindow_targetlabel->set_location(0, 0);
+ // resize map buttons
+ float l = (mapwindow_mapwidget->width() - math::min(mapwindow_mapwidget->width(), mapwindow_mapwidget->height())) * 0.5f;
+
+ mapwindow_zonebutton->set_size(icon_size, icon_size);
+ mapwindow_zonebutton->set_location(mapwindow_maplabel->left() + l, height() - padding - mapwindow_zonebutton->height());
+
+ mapwindow_galaxybutton->set_size(icon_size, icon_size);
+ mapwindow_galaxybutton->set_location(mapwindow_maplabel->right() - l - mapwindow_galaxybutton->width(),
+ height() - padding - mapwindow_galaxybutton->height());
- // resize target infopane text
- mapwindow_scrollpane->set_size(width() - mapwindow_mapwidget->right() - padding * 2.0f, height() - mapwindow_modelview->bottom() - padding * 2.0f);
- mapwindow_scrollpane->set_location(mapwindow_mapwidget->right() + padding, mapwindow_modelview->bottom() + padding);
+ // resize target label
+ mapwindow_targetlabel->set_size(width() - mapwindow_mapwidget->right() - padding * 2.0f, padding);
+ mapwindow_targetlabel->set_location(mapwindow_maplabel->right() + padding, mapwindow_maplabel->top());
+
+ // resize target modelview
+ mapwindow_modelview->set_size(mapwindow_targetlabel->width(), (height() - mapwindow_targetlabel->bottom() - padding * 3.0f) * 0.5f);
+ mapwindow_modelview->set_location(mapwindow_mapwidget->right() + padding, mapwindow_targetlabel->bottom() + padding);
+
+ // resize target infopane text
+ mapwindow_scrollpane->set_size(mapwindow_modelview->size());
+ mapwindow_scrollpane->set_location(mapwindow_modelview->left(), mapwindow_modelview->bottom() + padding);
}
void MapWindow::draw()
{
ui::Window::draw();
+ /*
// make sure the target still exists
mapwindow_target = core::localplayer()->zone()->find_entity(mapwindow_target);
@@ -145,90 +184,109 @@ void MapWindow::draw()
mapwindow_mapwidget->set_target(mapwindow_target);
mapwindow_maplabel->set_text(core::localplayer()->zone()->name());
- if (mapwindow_target && mapwindow_target->info()) {
- if (mapwindow_infotimestamp != mapwindow_target->info()->timestamp()) {
+ */
+ if (mapwindow_inforecord) {
+ if (mapwindow_infotimestamp != mapwindow_inforecord->timestamp()) {
// update info
- set_target(mapwindow_target);
+ set_info(mapwindow_inforecord);
}
}
+
}
-void MapWindow::set_target(const core::Entity *entity) {
-
- mapwindow_target = entity;
+void MapWindow::set_info(const core::Info *info)
+{
+ mapwindow_inforecord = 0;
mapwindow_infotimestamp = 0;
- mapwindow_inforecord = 0;
mapwindow_infotext.clear();
- if (mapwindow_target) {
- // set title label to target name
- mapwindow_targetlabel->set_text(mapwindow_target->name());
+ if (info) {
+ mapwindow_inforecord = core::game()->request_info(info->id());
+ }
+
+ if (mapwindow_inforecord) {
+ for (core::Info::Text::const_iterator it = mapwindow_inforecord->text().begin(); it != mapwindow_inforecord->text().end(); it++) {
+ mapwindow_infotext.push_back((*it));
+ }
+ mapwindow_infotimestamp = mapwindow_inforecord->timestamp();
+ } else {
+ mapwindow_infotext.push_back("Information is not available");
+ mapwindow_infotimestamp = 0;
+ }
+}
+
+void MapWindow::show_entity_info(const core::Entity *entity)
+{
- if (mapwindow_target->info())
- mapwindow_inforecord = core::game()->request_info(mapwindow_target->info()->id());
- else
- mapwindow_inforecord = 0;
-
- if (mapwindow_inforecord) {
- for (core::Info::Text::const_iterator it = mapwindow_inforecord->text().begin(); it != mapwindow_inforecord->text().end(); it++) {
- mapwindow_infotext.push_back((*it));
- }
- mapwindow_infotimestamp = mapwindow_inforecord->timestamp();
- } else {
- mapwindow_infotext.push_back("Information is not available");
- mapwindow_infotimestamp = 0;
- }
-
- if (mapwindow_target->model()) {
+ if (core::localplayer()->zone() == entity->zone()) {
+ targets::set_target(entity);
+ }
+
+ if (entity) {
+ if (entity->model()) {
mapwindow_modelview->set_mode(ui::ModelView::Model);
- mapwindow_modelview->set_modelname(mapwindow_target->model()->name());
- mapwindow_modelview->set_colors(mapwindow_target->color(), mapwindow_target->color_second());
+ mapwindow_modelview->set_modelname(entity->model()->name());
+ mapwindow_modelview->set_colors(entity->color(), entity->color_second());
mapwindow_modelview->set_zoom(2.5f);
mapwindow_modelview->set_radius(2.0f);
- } else if (mapwindow_target->type() == core::Entity::Globe) {
+ } else if (entity->type() == core::Entity::Globe) {
mapwindow_modelview->set_mode(ui::ModelView::Globe);
- const core::EntityGlobe *globe = static_cast<const core::EntityGlobe *>(mapwindow_target);
- mapwindow_modelview->set_colors(mapwindow_target->color(), mapwindow_target->color_second());
+ const core::EntityGlobe *globe = static_cast<const core::EntityGlobe *>(entity);
+ mapwindow_modelview->set_colors(globe->color(), globe->color_second());
mapwindow_modelview->set_globetexturename(
globe->texturename(),
globe->flag_is_set(core::Entity::Bright),
globe->coronaname()
);
mapwindow_modelview->set_zoom(2.5f);
- if (globe->flag_is_set(core::Entity::Bright))
+ if (globe->flag_is_set(core::Entity::Bright)) {
mapwindow_modelview->set_radius(0.5f);
- else
+ } else {
mapwindow_modelview->set_radius(1.0f);
+ }
} else {
- mapwindow_modelview->set_mode(ui::ModelView::Model);
- const std::string empty;
- mapwindow_modelview->set_modelname(empty);
+ mapwindow_modelview->clear();
}
+ mapwindow_targetlabel->set_text(entity->name());
+
+ set_info(entity->info());
mapwindow_modelview->show();
- mapwindow_scrollpane->show();
} else {
-
- mapwindow_modelview->hide();
- mapwindow_scrollpane->hide();
+ set_info(0);
+ mapwindow_infotext.clear();
+ mapwindow_targetlabel->clear();
+ mapwindow_modelview->clear();
}
}
-bool MapWindow::on_keypress(const int key, const unsigned int modifier)
+void MapWindow::show_zone_info(const core::Zone *zone)
{
- if (key == 512 + SDL_BUTTON_LEFT) {
- if (mapwindow_mapwidget->has_mouse_focus() && mapwindow_mapwidget->hover()) {
- core::Entity *target = core::localplayer()->zone()->find_entity(mapwindow_mapwidget->hover());
- if (targets::is_valid_map_target(target)) {
- set_target(target);
- targets::set_target(mapwindow_target);
- }
+ if (zone) {
+ set_info(zone->info());
+
+ switch (mapwindow_mode) {
+ case ShowZone:
+ mapwindow_targetlabel->clear();
+ break;
+
+ case ShowWorld:
+ mapwindow_targetlabel->set_text(zone->name());
+ break;
}
- return true;
+ } else {
+ set_info(0);
+ mapwindow_infotext.clear();
+ mapwindow_targetlabel->clear();
+ }
+ mapwindow_modelview->clear();
+}
- } else if (key == SDLK_ESCAPE) {
+bool MapWindow::on_keypress(const int key, const unsigned int modifier)
+{
+ if (key == SDLK_ESCAPE) {
if (visible()) {
hide();
return true;
@@ -243,6 +301,67 @@ bool MapWindow::on_emit(ui::Widget *sender, const ui::Widget::Event event, void
if (sender == mapwindow_closebutton) {
if (event == ui::Widget::EventButtonClicked) {
hide();
+ }
+ return true;
+
+ } else if (sender == mapwindow_mapwidget) {
+ if (event == ui::Widget::EventClicked) {
+ if (mapwindow_mapwidget->target()) {
+ show_entity_info(mapwindow_mapwidget->target());
+ } else {
+ show_zone_info(mapwindow_mapwidget->zone());
+ }
+ return true;
+ }
+
+ } else if (sender == mapwindow_galaxymapwidget) {
+ if (event == ui::Widget::EventClicked) {
+ show_zone_info(mapwindow_galaxymapwidget->zone());
+ return true;
+ } else if (event == ui::Widget::EventDoubleClicked) {
+ if (mapwindow_galaxymapwidget->zone()) {
+ mapwindow_mode = ShowZone;
+ mapwindow_galaxymapwidget->hide();
+ mapwindow_mapwidget->set_zone(mapwindow_galaxymapwidget->zone());
+ mapwindow_mapwidget->show();
+ mapwindow_maplabel->set_text(mapwindow_mapwidget->zone()->name());
+ show_zone_info(mapwindow_mapwidget->zone());
+ }
+ return true;
+ }
+
+ } else if (sender == mapwindow_zonebutton) {
+ if (event == ui::Widget::EventButtonClicked) {
+ if (mapwindow_mode == ShowZone) {
+ mapwindow_mapwidget->set_target(0);
+ show_zone_info(mapwindow_mapwidget->zone());
+ } else {
+ mapwindow_mode = ShowZone;
+ if (mapwindow_galaxymapwidget->zone()) {
+ mapwindow_mapwidget->set_zone(mapwindow_galaxymapwidget->zone());
+ } else {
+ mapwindow_mapwidget->set_zone(core::localplayer()->zone());
+ }
+ mapwindow_mapwidget->show();
+ mapwindow_galaxymapwidget->hide();
+ mapwindow_maplabel->set_text(mapwindow_mapwidget->zone()->name());
+ }
+ return true;
+ }
+
+ } else if (sender == mapwindow_galaxybutton) {
+ if (event == ui::Widget::EventButtonClicked) {
+ if (mapwindow_mode == ShowWorld) {
+ mapwindow_galaxymapwidget->set_zone(0);
+ show_zone_info(0);
+ } else {
+ mapwindow_mode = ShowWorld;
+ mapwindow_mapwidget->hide();
+ mapwindow_galaxymapwidget->show();
+ mapwindow_galaxymapwidget->set_zone(mapwindow_mapwidget->zone());
+ show_zone_info(mapwindow_galaxymapwidget->zone());
+ mapwindow_maplabel->set_text("Starsystems");
+ }
return true;
}
}