diff options
Diffstat (limited to 'src/render')
-rw-r--r-- | src/render/draw.cc | 69 |
1 files changed, 39 insertions, 30 deletions
diff --git a/src/render/draw.cc b/src/render/draw.cc index c0e21cc..1017746 100644 --- a/src/render/draw.cc +++ b/src/render/draw.cc @@ -57,6 +57,10 @@ inline bool test_drawfx_distance(core::Entity *entity) return ((entity->entity_renderstate & core::Entity::InCloseRange) == core::Entity::InCloseRange); } +// function to test flags +inline bool flag_is_set(unsigned int spawnflags, unsigned int flag) { + return ((spawnflags & flag) == flag); +} /* ----- Default Entity shapes ------------------------------------- */ @@ -202,15 +206,6 @@ void draw_model_engines(core::EntityControlable *entity) } -void draw_model_radius(core::Entity *entity) -{ - - math::Color color = entity->color(); - color.a = 0.25f; - - draw_sphere(color, entity->model()->radius()); -} - void draw_model_shield(core::EntityControlable *entity) { // shield rotation @@ -286,7 +281,16 @@ void pass_visibility() // entities within drawdistance entity->entity_renderstate = core::Entity::InRange; } - } + + } else if ((entity->type() == core::Entity::Globe) && flag_is_set(entity->flags(), core::Entity::Bright)) { + // bright globes set level light + GLfloat light_position[4]; + for (size_t i=0; i <3; i++) + light_position[i] = entity->location()[i]; + light_position[3] = 1.0f; + + glLightfv(GL_LIGHT0, GL_POSITION, light_position); + } } } @@ -303,20 +307,21 @@ void draw_pass_default() gl::translate(entity->location()); gl::multmatrix(entity->axis()); - if ((entity->flags() & core::Entity::Bright) == core::Entity::Bright) + if (flag_is_set(entity->flags(), core::Entity::Bright)) { gl::disable(GL_LIGHTING); + } switch(entity->shape()) { case core::Entity::Sphere: draw_entity_sphere(entity); break; - + case core::Entity::Diamond: - + case core::Entity::Axis: draw_entity_axis(entity); break; - + case core::Entity::Cube: default: @@ -324,8 +329,10 @@ void draw_pass_default() break; } - if ((entity->flags() & core::Entity::Bright) == core::Entity::Bright) - gl::enable(GL_LIGHTING); + if (flag_is_set(entity->flags(), core::Entity::Bright)) { + gl::enable(GL_LIGHTING); + } + gl::pop(); } } @@ -370,8 +377,8 @@ void draw_pass_model_evertex() } } -/* Draw model shields and engines */ -void draw_pass_model_fx() { +/* Draw model shields */ +void draw_pass_model_shields() { for (std::map<unsigned int, core::Entity *>::iterator it=core::Entity::registry.begin(); it != core::Entity::registry.end(); it++) { @@ -385,7 +392,6 @@ void draw_pass_model_fx() { gl::translate(entity->location()); gl::multmatrix(entity->axis()); -// draw_model_engines((core::EntityControlable *)entity); draw_model_shield((core::EntityControlable *)entity); gl::pop(); } @@ -394,8 +400,8 @@ void draw_pass_model_fx() { } } -/* draw model lights */ -void draw_pass_model_lights() +/* draw model lights and engines */ +void draw_pass_model_fx() { float t; @@ -429,7 +435,12 @@ void draw_pass_model_lights() gl::begin(gl::Quads); } - math::Color color((*lit)->color()); + math::Color color; + if ((*lit)->entity()) { + color.assign(entity->color()); + } else { + color.assign((*lit)->color()); + } color.a = 0.8; gl::color(color); @@ -491,21 +502,20 @@ void draw_pass_model_lights() gl::disable(GL_TEXTURE_2D); } -void draw_pass_model_radius() +void draw_pass_model_corona() { if (!(r_radius && r_radius->value())) return; for (std::map<unsigned int, core::Entity *>::iterator it=core::Entity::registry.begin(); it != core::Entity::registry.end(); it++) { - core::Entity *entity = (*it).second; if (test_draw_distance(entity)) { gl::push(); gl::translate(entity->location()); - - draw_model_radius(entity); - + math::Color color = entity->color(); + color.a = 0.25f; + draw_sphere(color, entity->model()->radius()); gl::pop(); } } @@ -603,13 +613,12 @@ void draw(math::Axis const &axis, math::Vector3f const &eye, math::Vector3f cons draw_pass_spacegrid(); // draw the blue spacegrid - draw_pass_model_fx(); // draw entity shield and engines - draw_pass_model_lights(); // draw entity lights + draw_pass_model_fx(); // draw entity lights and engines gl::enable(GL_LIGHTING); gl::enable(GL_RESCALE_NORMAL); - draw_pass_model_radius(); //draw entity radius + draw_pass_model_corona(); // draw entity radius and star corona glDisableClientState(GL_VERTEX_ARRAY); glDisableClientState(GL_NORMAL_ARRAY); |