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
parent31959bc355c471c573828bf63932850e46c4b5bc (diff)
more entity updates
Diffstat (limited to 'src/client')
-rw-r--r--src/client/draw.cc124
-rw-r--r--src/client/draw.h6
-rw-r--r--src/client/view.cc59
3 files changed, 116 insertions, 73 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();
}
}
diff --git a/src/client/draw.h b/src/client/draw.h
index d019216..a0e65eb 100644
--- a/src/client/draw.h
+++ b/src/client/draw.h
@@ -9,12 +9,6 @@
namespace client
{
-/// draw a star
-void draw_star(game::Star *star, float elapsed);
-
-/// draw a ship
-void draw_ship(game::Ship *ship, float elapsed);
-
/// draw the world
void draw_world(float elapsed);
diff --git a/src/client/view.cc b/src/client/view.cc
index 4627d26..b6ef28a 100644
--- a/src/client/view.cc
+++ b/src/client/view.cc
@@ -10,6 +10,7 @@
#include "client/video.h"
#include "client/draw.h"
#include "render/render.h"
+#include "core/core.h"
#include "game/game.h"
#include "sys/sys.h"
#include "math/mathlib.h"
@@ -61,54 +62,6 @@ void reset()
gl::disable(GL_CULL_FACE);
}
-void draw_background(float elapsed)
-{
- using namespace render::gl;
-
- // galactic axis
- begin(Lines);
- color(0.9f, 0.5f, 0.0f);
- vertex(-2,0,0);
- color(1.0f, 1.0f, 0.0f);
- vertex(2,0,0);
-
- vertex(0,0,-0.5);
- vertex(0,0,0.5);
-
- vertex(0,1.0f,0);
- vertex(0,-1, 0);
- end();
-
- 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_loader()
{
using namespace render;
@@ -161,7 +114,7 @@ void draw_status()
status << " time " << std::setfill('0') << std::setw(2) << minutes << ":" << std::setfill('0') << std::setw(2) << seconds;
status << " fps " << std::setw(4) << fps;
- draw_text(0, 4, status);
+ draw_text(CHARWIDTH, 4, status);
// print the version number in the upper right corner
gl::color(0.0f, 1.0f, 0.0f, 1.0f);
@@ -204,14 +157,11 @@ void frame(float seconds)
gl::enable(GL_DEPTH_TEST); // enable depth buffer writing
gl::enable(GL_CULL_FACE); // enable culling
+ gl::enable(GL_BLEND); // enable alpha blending
draw_world(seconds); // draw the world
gl::disable(GL_CULL_FACE); // disable culling
- gl::enable(GL_BLEND); // enable alpha blending
-
- draw_background(seconds); // draw the spacegrid
-
gl::disable(GL_DEPTH_TEST); // disable depth buffer writing
}
@@ -234,8 +184,9 @@ void frame(float seconds)
// draw the status line
draw_status();
-
+
gl::disable(GL_BLEND);
+
}
} //namespace view