diff options
-rw-r--r-- | src/model/Makefile.am | 8 | ||||
-rw-r--r-- | src/model/model.h | 3 | ||||
-rw-r--r-- | src/model/tags.cc (renamed from src/model/parts.cc) | 35 | ||||
-rw-r--r-- | src/model/tags.h (renamed from src/model/parts.h) | 79 | ||||
-rw-r--r-- | src/render/particles.h | 2 |
5 files changed, 89 insertions, 38 deletions
diff --git a/src/model/Makefile.am b/src/model/Makefile.am index fe398a2..6a44471 100644 --- a/src/model/Makefile.am +++ b/src/model/Makefile.am @@ -1,12 +1,12 @@ METASOURCES = AUTO -libmodel_la_SOURCES = asefile.cc parts.cc fragment.cc mapfile.cc material.cc \ - model.cc face.cc primitives.cc quad.cc triangle.cc vertexarray.cc +libmodel_la_SOURCES = asefile.cc fragment.cc mapfile.cc material.cc \ + model.cc face.cc primitives.cc quad.cc tags.cc triangle.cc vertexarray.cc libmodel_la_LDFLAGS = -avoid-version -no-undefined -lm noinst_LTLIBRARIES = libmodel.la -noinst_HEADERS = asefile.h parts.h fragment.h mapfile.h material.h model.h face.h \ - primitives.h quad.h triangle.h vertexarray.h +noinst_HEADERS = asefile.h fragment.h mapfile.h material.h model.h face.h \ + primitives.h quad.h tags.h triangle.h vertexarray.h INCLUDES = -I$(top_srcdir)/src diff --git a/src/model/model.h b/src/model/model.h index 30714d4..c8f60f1 100644 --- a/src/model/model.h +++ b/src/model/model.h @@ -12,7 +12,8 @@ #include <map> #include "math/mathlib.h" -#include "model/parts.h" + +#include "model/tags.h" #include "model/fragment.h" /// classes representing 3D geometry diff --git a/src/model/parts.cc b/src/model/tags.cc index e71ad16..baf70a4 100644 --- a/src/model/parts.cc +++ b/src/model/tags.cc @@ -1,10 +1,10 @@ /* - model/classes.cc + model/tags.cc This file is part of the Osirion project and is distributed under the terms of the GNU General Public License version 2 */ -#include "model/parts.h" +#include "model/tags.h" namespace model { @@ -12,7 +12,7 @@ namespace model /* ---- class Light ------------------------------------------------ */ Light::Light() : - Part(), + Tag(), light_color(1.0f, 1.0f, 1.0f) { light_entity = false; @@ -29,7 +29,7 @@ Light::Light() : light_texture = 0; } -Light::Light(const Light& other) : Part(other), +Light::Light(const Light& other) : Tag(other), light_color(other.color()) { light_entity = other.entity(); @@ -65,7 +65,7 @@ Flare::~Flare() /* ---- class Particles -------------------------------------------- */ -Particles::Particles() : Part() +Particles::Particles() : Tag() { particles_entity = false; particles_engine = false; @@ -74,7 +74,7 @@ Particles::Particles() : Part() } Particles::Particles(const math::Vector3f& location) : - Part(location) + Tag(location) { } @@ -84,12 +84,12 @@ Particles::~Particles() /* ---- class Dock ------------------------------------------------- */ -Dock::Dock() : Part() +Dock::Dock() : Tag() { dock_radius = 0.01f; } -Dock::Dock(const Dock& other) : Part(other) +Dock::Dock(const Dock& other) : Tag(other) { dock_radius = other.radius(); } @@ -98,14 +98,29 @@ Dock::~Dock() { } +/* ---- class Sound ------------------------------------------------- */ + +Sound::Sound() : Tag() +{ +} + +Sound::Sound(const Sound& other) : Tag(other), + sound_name(other.name()) +{ +} + +Sound::~Sound() +{ +} + /* ---- class SubModel---------------------------------------------- */ -SubModel::SubModel() : Part() +SubModel::SubModel() : Tag() { submodel_scale = 1.0f; } -SubModel::SubModel(const SubModel& other) : Part(other), +SubModel::SubModel(const SubModel& other) : Tag(other), submodel_name(other.name()), submodel_axis(other.axis()) { diff --git a/src/model/parts.h b/src/model/tags.h index 4df4672..0c97910 100644 --- a/src/model/parts.h +++ b/src/model/tags.h @@ -4,8 +4,8 @@ the terms of the GNU General Public License version 2 */ -#ifndef __INCLUDED_MODEL_PARTS_H__ -#define __INCLUDED_MODEL_PARTS_H__ +#ifndef __INCLUDED_MODEL_TAGS_H__ +#define __INCLUDED_MODEL_TAGS_H__ #include "math/axis.h" #include "math/color.h" @@ -17,7 +17,6 @@ namespace model /* ---- globals ---------------------------------------------------- */ // FIXME this should end up in material.h - /** * @brief * culling parameter values @@ -26,31 +25,34 @@ namespace model */ enum Cull { CullNone = 0, CullBack = 1, CullFront = 2 }; -/* ---- class Part ------------------------------------------------- */ +/* ---- class Tag -------------------------------------------------- */ /** - * @brief a special part of a model + * @brief a location tag + * A location tag provides an anchor point for model extenions + * like lights, flares and sounds. */ -class Part + +class Tag { public: /** * @brief default constructor */ - inline Part() : part_location() { + inline Tag() : tag_location() { } /** * @brief copy constructor */ - inline Part(const Part& other) : part_location(other.location()) { + inline Tag(const Tag& other) : tag_location(other.location()) { } /** * @brief constructor with location * @param location location of this part within the parent model */ - inline Part(const math::Vector3f& location) : part_location(location) { + inline Tag(const math::Vector3f& location) : tag_location(location) { } /* ---- inspectors ----------------------------------------- */ @@ -59,7 +61,7 @@ public: * @brief location of this part within the parent model */ inline const math::Vector3f& location() const { - return part_location; + return tag_location; } /* ---- mutators ------------------------------------------- */ @@ -67,14 +69,14 @@ public: * @brief set the location within the parent model */ inline void set_location(const math::Vector3f& location) { - part_location.assign(location); + tag_location.assign(location); } /** * @brief set the location within the parent model */ inline void set_location(const float x, const float y, const float z) { - part_location.assign(x, y, z); + tag_location.assign(x, y, z); } /* ---- actors --------------------------------------------- */ @@ -83,17 +85,20 @@ public: * @brief mutable reference to the location of this part within the parent model */ inline math::Vector3f& get_location() { - return part_location; + return tag_location; } private: - math::Vector3f part_location; + math::Vector3f tag_location; }; /* ---- class Light ------------------------------------------------ */ -/// an exterior light -class Light : public Part +/** + * @brief an exterior light + * a tag used to attach exterior lights + */ +class Light : public Tag { public: /** @@ -253,7 +258,9 @@ private: /* ---- class Flare ------------------------------------------------ */ -/// a flare is a directional light +/** + * @brief a directional light + */ class Flare : public Light { public: @@ -299,7 +306,7 @@ private: /* ---- class Particles -------------------------------------------- */ /// a particle system -class Particles : public Part +class Particles : public Tag { public: Particles(); @@ -383,8 +390,8 @@ private: /* ---- class Dock ------------------------------------------------- */ -/// a docking location -class Dock : public Part +/// a docking location tag +class Dock : public Tag { public: Dock(); @@ -410,10 +417,38 @@ private: float dock_radius; }; +/* ---- class Sound ------------------------------------------------ */ + +/** + * @brief a sound location tag + */ +class Sound : public Tag +{ +public: + Sound(); + + Sound(const Sound& other); + + ~Sound(); + + /// name of the sound sample + inline const std::string& name() const { + return sound_name; + } + + inline void set_name(const std::string& name) { + sound_name.assign(name); + } +private: + std::string sound_name; +}; + /* ---- class SubModel --------------------------------------------- */ -/// a submodel -class SubModel : public Part +/** + * @brief a submodel tag + */ +class SubModel : public Tag { public: SubModel(); diff --git a/src/render/particles.h b/src/render/particles.h index 15e9827..5b159da 100644 --- a/src/render/particles.h +++ b/src/render/particles.h @@ -13,7 +13,7 @@ #include "math/color.h" #include "math/vector3f.h" #include "core/entity.h" -#include "model/parts.h" +#include "model/tags.h" namespace render { |