diff options
Diffstat (limited to 'src')
-rw-r--r-- | src/Makefile.am | 14 | ||||
-rw-r--r-- | src/core/entity.cc | 5 | ||||
-rw-r--r-- | src/render/camera.cc | 14 | ||||
-rw-r--r-- | src/render/draw.cc | 76 |
4 files changed, 91 insertions, 18 deletions
diff --git a/src/Makefile.am b/src/Makefile.am index 9c55179..3f82bdd 100644 --- a/src/Makefile.am +++ b/src/Makefile.am @@ -6,17 +6,16 @@ SUFFIXES = .rc if BUILD_CLIENT MAYBE_CLIENT_SUBDIRS = audio render client - MAYBE_CLIENT_PROGRAMS = osirion endif SUBDIRS = sys math auxiliary filesystem model core server $(MAYBE_CLIENT_SUBDIRS) game noinst_HEADERS = config.h -if BUILD_CLIENT -bin_PROGRAMS = osiriond osirion -else +if BUILD_DEDICATED bin_PROGRAMS = osiriond +else +bin_PROGRAMS = osiriond osirion endif # dedicated server @@ -36,11 +35,8 @@ osiriond_LDADD = $(top_builddir)/src/auxiliary/libauxiliary.la \ osirion_SOURCES = osirion.cc EXTRA_osirion_SOURCES = osirion-res.rc osirion_DEPENDENCIES = $(ICON_CLIENT) \ - $(top_builddir)/src/auxiliary/libauxiliary.la $(top_builddir)/src/client/libclient.la \ - $(top_builddir)/src/core/libcore.la $(top_builddir)/src/filesystem/libfilesystem.la \ - $(top_builddir)/src/game/libgame.la $(top_builddir)/src/math/libmath.la \ - $(top_builddir)/src/model/libmodel.la $(top_builddir)/src/audio/libaudio.la \ - $(top_builddir)/src/render/librender.la $(top_builddir)/src/sys/libsys.la + $(top_builddir)/src/audio/libaudio.la $(top_builddir)/src/render/librender.la \ + $(top_builddir)/src/client/libclient.la osirion_CFLAGS = $(LIBSDL_CFLAGS) $(GL_CFLAGS) $(GLUT_CFLAGS) osirion_LDADD = $(top_builddir)/src/game/libgame.la \ $(top_builddir)/src/client/libclient.la $(top_builddir)/src/audio/libaudio.la \ diff --git a/src/core/entity.cc b/src/core/entity.cc index e9985c3..db40f76 100644 --- a/src/core/entity.cc +++ b/src/core/entity.cc @@ -114,15 +114,16 @@ Entity::Entity(std::istream & is) is >> entity_flags; is >> entity_location; is >> entity_color; + is >> s; // shape + entity_shape = (Shape) s; + is >> entity_radius; is >> entity_axis[0]; is >> entity_axis[1]; entity_axis[2] = math::crossproduct(entity_axis.forward(), entity_axis.left()); - entity_shape = (Shape) s ; - char c; // read label while ( (is.get(c)) && (c != '"')); diff --git a/src/render/camera.cc b/src/render/camera.cc index 7f1f307..5a6607f 100644 --- a/src/render/camera.cc +++ b/src/render/camera.cc @@ -286,12 +286,18 @@ void Camera::draw(float seconds) camera_axis.change_pitch(pitch_current); } else if (mode() == Cockpit) { + camera_axis.assign(target_axis); - if (core::localcontrol()->state() && core::localcontrol()->model()) - camera_target += (core::localcontrol()->model()->maxbbox().x+0.05) * - core::localcontrol()->state()->axis().forward(); - + if (core::localcontrol()->state()) { + if (core::localcontrol()->model()) { + camera_target += (core::localcontrol()->model()->maxbbox().x+0.05) * + core::localcontrol()->state()->axis().forward(); + } else { + camera_target += (core::localcontrol()->radius() + 0.05) * + core::localcontrol()->state()->axis().forward(); + } + } distance = 0.0f; } } diff --git a/src/render/draw.cc b/src/render/draw.cc index 448b2ce..1091d8c 100644 --- a/src/render/draw.cc +++ b/src/render/draw.cc @@ -91,7 +91,7 @@ void draw_entity_sphere(core::Entity *entity) void draw_entity_cube(core::Entity *entity) { - float radius = entity->radius()/2; + float radius = entity->radius(); gl::scale(radius, radius, radius); gl::color(entity->color()); @@ -139,6 +139,72 @@ void draw_entity_cube(core::Entity *entity) gl::end(); } +void draw_entity_diamond(core::Entity *entity) +{ + float radius = entity->radius()/2; + + gl::color(entity->color()); + + gl::begin(gl::TriangleFan ); + gl::normal(0, 0 , 1); + gl::vertex(0, 0, radius); + + gl::normal(1, 0 ,0); + gl::vertex(radius, 0.0f, 0.0f); + gl::normal(0, 1, 0); + gl::vertex(0.0f, radius, 0.0f); + gl::normal(-1, 0 ,0); + gl::vertex(-radius, 0.0f, 0.0f); + gl::normal(0, -1, 0); + gl::vertex(0.0f, -radius, 0.0f); + gl::normal(1, 0 ,0); + gl::vertex(radius, 0.0f, 0.0f); + + gl::end(); + + gl::begin(gl::TriangleFan); + gl::normal(0, 0 , -1); + gl::vertex(0, 0, -radius); + + gl::normal(1, 0, 0); + gl::vertex(radius, 0.0f, 0.0f); + + gl::normal(0, -1, 0); + gl::vertex(0.0f, -radius, 0.0f); + + gl::normal(-1, 0 ,0); + gl::vertex(-radius, 0.0f, 0.0f); + + gl::normal(0, 1, 0); + gl::vertex(0.0f, radius, 0.0f); + + gl::normal(1, 0 ,0); + gl::vertex(radius, 0.0f, 0.0f); + + gl::end(); + + gl::begin(gl::Lines); + + gl::vertex(radius, 0, 0); + gl::vertex(2* radius, 0, 0); + + gl::vertex(0, radius, 0); + gl::vertex(0, 2* radius, 0); + + gl::vertex(0, 0, radius); + gl::vertex(0, 0, 2 * radius); + + gl::vertex(-radius, 0, 0); + gl::vertex(-2 * radius, 0, 0); + + gl::vertex(0, -radius, 0); + gl::vertex(0, -2 * radius, 0); + + gl::vertex(0, 0, -radius); + gl::vertex(0, 0, -2 * radius); + + gl::end(); +} void draw_entity_axis(core::Entity *entity) { @@ -225,6 +291,7 @@ void pass_prepare(float seconds) if (!entity->model()) { entity->entity_modelname.clear(); + entity->entity_radius = 0.25; } else { // set entity radius to model radius entity->entity_radius = entity->entity_model->radius(); @@ -343,13 +410,16 @@ void draw_pass_default() gl::disable(GL_LIGHTING); } - switch(entity->shape()) { + switch(entity->shape()) { + case core::Entity::Sphere: draw_entity_sphere(entity); break; case core::Entity::Diamond: - + draw_entity_diamond(entity); + break; + case core::Entity::Axis: draw_entity_axis(entity); break; |