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>2008-02-10 17:54:53 +0000
committerStijn Buys <ingar@osirion.org>2008-02-10 17:54:53 +0000
commit825d5a44bd312772c53fdaa8924e4009cfb320a3 (patch)
treea222232dee96bfe391eba819b1a18693db5bb3a4 /src/client/draw.cc
parent31959bc355c471c573828bf63932850e46c4b5bc (diff)
more entity updates
Diffstat (limited to 'src/client/draw.cc')
-rw-r--r--src/client/draw.cc124
1 files changed, 111 insertions, 13 deletions
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<core::Entity *>::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();
}
}