From 825d5a44bd312772c53fdaa8924e4009cfb320a3 Mon Sep 17 00:00:00 2001 From: Stijn Buys Date: Sun, 10 Feb 2008 17:54:53 +0000 Subject: more entity updates --- src/client/draw.cc | 124 +++++++++++++++++++++++++++++++++++++++++++++++------ 1 file changed, 111 insertions(+), 13 deletions(-) (limited to 'src/client/draw.cc') diff --git a/src/client/draw.cc b/src/client/draw.cc index f907267..1e3e5b0 100644 --- a/src/client/draw.cc +++ b/src/client/draw.cc @@ -9,20 +9,75 @@ #include "render/sphere.h" #include "render/box.h" #include "client/client.h" +#include "client/camera.h" #include "client/draw.h" namespace client { render::Sphere sphere(math::Vector3f(0,0,0),1); +render::Box cube(math::Vector3f(0.5f, 0.5f, 0.5f), math::Vector3f(-0.5f, -0.5f, -0.5f)); -void draw_star(game::Star *star, float elapsed) +void draw_entity_sphere(core::Entity *entity) { - render::gl::color(star->color); - sphere.radius = star->radius; + render::gl::color(entity->base_color); + sphere.radius = entity->base_radius; sphere.draw(); } +void draw_entity_cube(core::Entity *entity) +{ + cube.topcolor = entity->base_color; + cube.bottomcolor = entity->base_color * 0.7f; + cube.radius = entity->base_radius; + cube.draw(); +} + + +void draw_entity_diamond(core::Entity *entity) +{ + using namespace render; + float r = entity->base_radius; + gl::begin(gl::Lines); + gl::color(1.0f, 0.0f, 0.0f); + gl::vertex(r,0.0f,0.0f); + gl::color(entity->base_color); + gl::vertex(-r,0.0f,0.0f); + + gl::vertex(0.0f,0.0f,r/2); + gl::vertex(0.0f,0.0f,-r/2); + + gl::vertex(0.0f,r,0.0f); + gl::vertex(0.0f,-r, 0.0f); + gl::end(); +} + +// draw an entity of type core::entity::Default +void draw_entity_default(core::Entity *entity) +{ + render::gl::push(); + render::gl::translate(entity->location); + + switch(entity->base_shape) { + case core::entity::Sphere: + draw_entity_sphere(entity); + break; + + case core::entity::Diamond: + draw_entity_diamond(entity); + break; + + case core::entity::Cube: + + default: + draw_entity_cube(entity); + break; + } + + render::gl::pop(); +} + + math::Vector3f v0(1.0f, -1.0f, -1.0f); math::Vector3f v1(1.0f, 1.0f, -1.0f); math::Vector3f v2(1.0f, 1.0f, 1.0f); @@ -82,11 +137,7 @@ void draw_ship(game::Ship *ship, float elapsed) // shield rotation gl::rotate(angle, 0.0f, 1.0f, 0.0f ); - angle += 180.0f * elapsed; - if( angle > 360.0f ) { - angle -= 360.0f; - } - + // draw the shield gl::color(Color(0.0f, 1.0f ,0.0f , 0.5f)); @@ -107,9 +158,59 @@ void draw_ship(game::Ship *ship, float elapsed) gl::end(); } +void draw_spacegrid() +{ + using namespace render::gl; + + translate(camera::target); + + int gridsize = 32; + float s = 1.0f / gridsize; + float y = -4.0f; + + float dx = camera::target.x - floorf(camera::target.x); + float dz = camera::target.z - floorf(camera::target.z); + + color(0,0, 1.0f); + begin(Lines); + for (int i=-gridsize; i <= gridsize; i++) { + color(0,0, 0, 0); + vertex(i-dx, y, -gridsize-dz); + color(0,0, (gridsize-abs(i))*s, (gridsize-abs(i))*s); + vertex(i-dx, y, -dz); + vertex(i-dx, y, -dz); + color(0,0, 0, 0); + vertex(i-dx, y, gridsize-dz); + + vertex(-gridsize-dx, y, i-dz); + color(0,0, (gridsize-abs(i))*s, (gridsize-abs(i))*s); + vertex(-dx, y, i-dz); + vertex(-dx, y, i-dz); + color(0,0, 0, 0); + vertex(gridsize-dx, y, i-dz); + } + end(); +} + void draw_world(float elapsed) { + angle += 180.0f * elapsed; + if( angle > 360.0f ) { + angle -= 360.0f; + } + + // draw entities using namespace render; + std::vector::iterator it; + for (it=core::entity::registry.begin(); it != core::entity::registry.end(); it++) { + switch ( (*it)->type) { + case core::entity::Default: + draw_entity_default((*it)); + break; + default: + break; + } + } // draw the ship gl::push(); @@ -118,11 +219,8 @@ void draw_world(float elapsed) draw_ship(game.ship, elapsed); gl::pop(); - // draw the star - gl::push(); - gl::translate(game.star->location); - draw_star(game.star, elapsed); - gl::pop(); + // draw the background grid + draw_spacegrid(); } } -- cgit v1.2.3