diff options
Diffstat (limited to 'src/client/view.cc')
-rw-r--r-- | src/client/view.cc | 58 |
1 files changed, 46 insertions, 12 deletions
diff --git a/src/client/view.cc b/src/client/view.cc index 8cf1af9..bbf9088 100644 --- a/src/client/view.cc +++ b/src/client/view.cc @@ -18,13 +18,8 @@ #include "client/input.h" #include "client/targets.h" #include "client/video.h" -#include "render/draw.h" #include "render/render.h" -#include "render/textures.h" -#include "render/camera.h" #include "core/core.h" -#include "core/stats.h" -#include "core/zone.h" #include "math/mathlib.h" #include "sys/sys.h" @@ -38,6 +33,7 @@ core::Cvar *draw_keypress = 0; core::Cvar *ui_pointercolor = 0; core::Cvar *ui_pointerhovercolor =0; + namespace view { @@ -50,6 +46,8 @@ float net_counter_time[net_counter_size]; size_t net_counter_traffic[net_counter_size]; size_t net_counter_index; +core::Zone *current_zone = 0; + void init() { draw_stats = core::Cvar::get("draw_stats", "0", core::Cvar::Archive); @@ -84,6 +82,26 @@ void shutdown() targets::shutdown(); } +void clear_zone(core::Zone *zone) +{ + for (core::Zone::Content::iterator it = zone->content().begin(); it != zone->content().end(); it++) { + core:: Entity *entity = (*it); + + if (entity->type() == core::Entity::Globe) { + core::EntityGlobe *globe = static_cast<core::EntityGlobe *>(entity); + if (globe->render_texture) { + render::Textures::unload(globe->render_texture); + globe->render_texture = 0; + } + } + } + + if (zone->sky_texture()) { + render::Textures::unload(zone->sky_texture()); + zone->set_sky_texture(0); + } +} + void draw_loader() { using namespace render; @@ -219,10 +237,12 @@ void draw_entity_offscreen_target(core::Entity *entity, bool is_active_target) glVertex3f(cx, cy-r+2, 0); render::gl::end(); - if (entity->type() == core::Entity::Controlable) { - render::gl::color(0, 1, 0, 1); + if (entity == core::localplayer()->mission_target()) { + render::gl::color(1, 0.5f, 1, 1); // FIXME mission color + } else if (entity->type() == core::Entity::Controlable) { + render::gl::color(0, 1, 0, 1); // FIXME allegiance color } else { - render::gl::color(1, 1, 1, 1); + render::gl::color(1, 1, 1, 1); // FIXME neutral color } render::gl::begin(render::gl::LineLoop); @@ -279,11 +299,14 @@ void draw_entity_target(core::Entity *entity, bool is_active_target) glVertex3f(cx, cy-r+2, 0); render::gl::end(); - if (entity->type() == core::Entity::Controlable) { - render::gl::color(0, 1, 0, 1); + if (entity == core::localplayer()->mission_target()) { + render::gl::color(1, 0.5f, 1, 1); // FIXME mission color + } else if (entity->type() == core::Entity::Controlable) { + render::gl::color(0, 1, 0, 1); // FIXME allegiance color } else { - render::gl::color(1, 1, 1, 1); + render::gl::color(1, 1, 1, 1); // FIXME neutral color } + // outer square0 render::gl::begin(render::gl::LineLoop); glVertex3f(cx+r, cy, 0); @@ -391,7 +414,9 @@ void draw_status() core::Entity *entity = (*it); if (targets::is_legal_target(entity)) { - if (entity == targets::current()) { + if (entity == core::localplayer()->mission_target()) { + draw_entity_target(entity, true); + } else if (entity == targets::current()) { draw_entity_target(entity, true); } else if (entity->type() == core::Entity::Controlable) { draw_entity_target(entity, false); @@ -716,11 +741,20 @@ void frame(float seconds) render::Stats::clear(); if (core::application()->connected() && core::game()->serverframetime()) { + + if (core::localplayer()->zone() != current_zone) { + if (current_zone) + clear_zone(current_zone); + current_zone = core::localplayer()->zone(); + } + render::draw(seconds); // draw the world targets::draw(); // validate current target, render sound if (targets::current()) // draw target docks etc draw_entity_world_target(targets::current()); + } else { + current_zone = 0; } // switch to orthographic projection to draw the GUI |