Merge remote-tracking branch 'origin/master' into refactor_shaders

This commit is contained in:
hiker 2015-06-05 09:13:27 +10:00
commit 9531f0b3a4
8 changed files with 41 additions and 22 deletions

View File

@ -1787,7 +1787,7 @@ void Track::loadTrackModel(bool reverse_track, unsigned int mode_id)
} }
} }
loadObjects(root, path, model_def_loader, true, NULL); loadObjects(root, path, model_def_loader, true, NULL, NULL);
model_def_loader.cleanLibraryNodesAfterLoad(); model_def_loader.cleanLibraryNodesAfterLoad();
@ -1958,7 +1958,8 @@ void Track::loadTrackModel(bool reverse_track, unsigned int mode_id)
//----------------------------------------------------------------------------- //-----------------------------------------------------------------------------
void Track::loadObjects(const XMLNode* root, const std::string& path, ModelDefinitionLoader& model_def_loader, void Track::loadObjects(const XMLNode* root, const std::string& path, ModelDefinitionLoader& model_def_loader,
bool create_lod_definitions, scene::ISceneNode* parent) bool create_lod_definitions, scene::ISceneNode* parent,
TrackObject* parent_library)
{ {
unsigned int start_position_counter = 0; unsigned int start_position_counter = 0;
@ -1972,7 +1973,7 @@ void Track::loadObjects(const XMLNode* root, const std::string& path, ModelDefin
if (name == "track" || name == "default-start") continue; if (name == "track" || name == "default-start") continue;
if (name == "object" || name == "library") if (name == "object" || name == "library")
{ {
m_track_object_manager->add(*node, parent, model_def_loader); m_track_object_manager->add(*node, parent, model_def_loader, parent_library);
} }
else if (name == "water") else if (name == "water")
{ {
@ -2016,7 +2017,7 @@ void Track::loadObjects(const XMLNode* root, const std::string& path, ModelDefin
{ {
if (UserConfigParams::m_graphical_effects) if (UserConfigParams::m_graphical_effects)
{ {
m_track_object_manager->add(*node, parent, model_def_loader); m_track_object_manager->add(*node, parent, model_def_loader, parent_library);
} }
} }
else if (name == "sky-dome" || name == "sky-box" || name == "sky-color") else if (name == "sky-dome" || name == "sky-box" || name == "sky-color")
@ -2029,7 +2030,7 @@ void Track::loadObjects(const XMLNode* root, const std::string& path, ModelDefin
} }
else if (name == "light") else if (name == "light")
{ {
m_track_object_manager->add(*node, parent, model_def_loader); m_track_object_manager->add(*node, parent, model_def_loader, parent_library);
} }
else if (name == "weather") else if (name == "weather")
{ {

View File

@ -60,6 +60,8 @@ class TrackObjectManager;
class TriangleMesh; class TriangleMesh;
class World; class World;
class XMLNode; class XMLNode;
class TrackObject;
namespace Scripting namespace Scripting
{ {
class ScriptEngine; class ScriptEngine;
@ -481,8 +483,9 @@ public:
/** Returns true if this track has easter eggs. */ /** Returns true if this track has easter eggs. */
bool hasEasterEggs() const { return m_has_easter_eggs; } bool hasEasterEggs() const { return m_has_easter_eggs; }
// ------------------------------------------------------------------------ // ------------------------------------------------------------------------
void loadObjects(const XMLNode* root, const std::string& path, ModelDefinitionLoader& lod_loader, void loadObjects(const XMLNode* root, const std::string& path,
bool create_lod_definitions, scene::ISceneNode* parent); ModelDefinitionLoader& lod_loader, bool create_lod_definitions,
scene::ISceneNode* parent, TrackObject* parent_library);
// ------------------------------------------------------------------------ // ------------------------------------------------------------------------
bool isSoccer () const { return m_is_soccer; } bool isSoccer () const { return m_is_soccer; }
// ------------------------------------------------------------------------ // ------------------------------------------------------------------------

View File

@ -39,9 +39,10 @@
* \param lod_node Lod node (defaults to NULL). * \param lod_node Lod node (defaults to NULL).
*/ */
TrackObject::TrackObject(const XMLNode &xml_node, scene::ISceneNode* parent, TrackObject::TrackObject(const XMLNode &xml_node, scene::ISceneNode* parent,
ModelDefinitionLoader& model_def_loader) ModelDefinitionLoader& model_def_loader,
TrackObject* parent_library)
{ {
init(xml_node, parent, model_def_loader); init(xml_node, parent, model_def_loader, parent_library);
} // TrackObject } // TrackObject
// ---------------------------------------------------------------------------- // ----------------------------------------------------------------------------
@ -63,6 +64,7 @@ TrackObject::TrackObject(const core::vector3df& xyz, const core::vector3df& hpr,
m_presentation = NULL; m_presentation = NULL;
m_animator = NULL; m_animator = NULL;
m_physical_object = NULL; m_physical_object = NULL;
m_parent_library = NULL;
m_interaction = interaction; m_interaction = interaction;
m_presentation = presentation; m_presentation = presentation;
m_is_driveable = false; m_is_driveable = false;
@ -89,7 +91,8 @@ TrackObject::TrackObject(const core::vector3df& xyz, const core::vector3df& hpr,
* \param model_def_loader Used to load level-of-detail nodes. * \param model_def_loader Used to load level-of-detail nodes.
*/ */
void TrackObject::init(const XMLNode &xml_node, scene::ISceneNode* parent, void TrackObject::init(const XMLNode &xml_node, scene::ISceneNode* parent,
ModelDefinitionLoader& model_def_loader) ModelDefinitionLoader& model_def_loader,
TrackObject* parent_library)
{ {
m_init_xyz = core::vector3df(0,0,0); m_init_xyz = core::vector3df(0,0,0);
m_init_hpr = core::vector3df(0,0,0); m_init_hpr = core::vector3df(0,0,0);
@ -97,7 +100,7 @@ void TrackObject::init(const XMLNode &xml_node, scene::ISceneNode* parent,
m_enabled = true; m_enabled = true;
m_presentation = NULL; m_presentation = NULL;
m_animator = NULL; m_animator = NULL;
m_parent_library = parent_library;
m_physical_object = NULL; m_physical_object = NULL;
xml_node.get("id", &m_id ); xml_node.get("id", &m_id );
@ -141,7 +144,7 @@ void TrackObject::init(const XMLNode &xml_node, scene::ISceneNode* parent,
} }
else if (xml_node.getName() == "library") else if (xml_node.getName() == "library")
{ {
m_presentation = new TrackObjectPresentationLibraryNode(xml_node, model_def_loader); m_presentation = new TrackObjectPresentationLibraryNode(this, xml_node, model_def_loader);
} }
else if (type == "sfx-emitter") else if (type == "sfx-emitter")
{ {

View File

@ -89,11 +89,18 @@ protected:
PhysicalObject* m_physical_object; PhysicalObject* m_physical_object;
ThreeDAnimation* m_animator; ThreeDAnimation* m_animator;
TrackObject* m_parent_library;
void init(const XMLNode &xml_node, scene::ISceneNode* parent, ModelDefinitionLoader& model_def_loader); void init(const XMLNode &xml_node, scene::ISceneNode* parent,
ModelDefinitionLoader& model_def_loader,
TrackObject* parent_library);
public: public:
TrackObject(const XMLNode &xml_node, scene::ISceneNode* parent, ModelDefinitionLoader& model_def_loader); TrackObject(const XMLNode &xml_node,
scene::ISceneNode* parent,
ModelDefinitionLoader& model_def_loader,
TrackObject* parent_library);
TrackObject(const core::vector3df& xyz, TrackObject(const core::vector3df& xyz,
const core::vector3df& hpr, const core::vector3df& hpr,

View File

@ -44,11 +44,12 @@ TrackObjectManager::~TrackObjectManager()
* in the xml_node. * in the xml_node.
*/ */
void TrackObjectManager::add(const XMLNode &xml_node, scene::ISceneNode* parent, void TrackObjectManager::add(const XMLNode &xml_node, scene::ISceneNode* parent,
ModelDefinitionLoader& model_def_loader) ModelDefinitionLoader& model_def_loader,
TrackObject* parent_library)
{ {
try try
{ {
TrackObject *obj = new TrackObject(xml_node, parent, model_def_loader); TrackObject *obj = new TrackObject(xml_node, parent, model_def_loader, parent_library);
m_all_objects.push_back(obj); m_all_objects.push_back(obj);
if(obj->isDriveable()) if(obj->isDriveable())
m_driveable_objects.push_back(obj); m_driveable_objects.push_back(obj);

View File

@ -57,7 +57,8 @@ public:
void reset(); void reset();
void init(); void init();
void add(const XMLNode &xml_node, scene::ISceneNode* parent, void add(const XMLNode &xml_node, scene::ISceneNode* parent,
ModelDefinitionLoader& model_def_loader); ModelDefinitionLoader& model_def_loader,
TrackObject* parent_library);
void update(float dt); void update(float dt);
void handleExplosion(const Vec3 &pos, const PhysicalObject *mp, void handleExplosion(const Vec3 &pos, const PhysicalObject *mp,
bool secondary_hits=true); bool secondary_hits=true);

View File

@ -157,9 +157,10 @@ TrackObjectPresentationEmpty::~TrackObjectPresentationEmpty()
// ---------------------------------------------------------------------------- // ----------------------------------------------------------------------------
TrackObjectPresentationLibraryNode::TrackObjectPresentationLibraryNode( TrackObjectPresentationLibraryNode::TrackObjectPresentationLibraryNode(
const XMLNode& xml_node, TrackObject* parent,
ModelDefinitionLoader& model_def_loader) const XMLNode& xml_node,
: TrackObjectPresentationSceneNode(xml_node) ModelDefinitionLoader& model_def_loader)
: TrackObjectPresentationSceneNode(xml_node)
{ {
std::string name; std::string name;
xml_node.get("name", &name); xml_node.get("name", &name);
@ -243,7 +244,7 @@ TrackObjectPresentationLibraryNode::TrackObjectPresentationLibraryNode(
assert(libroot != NULL); assert(libroot != NULL);
World::getWorld()->getTrack()->loadObjects(libroot, lib_path, model_def_loader, World::getWorld()->getTrack()->loadObjects(libroot, lib_path, model_def_loader,
create_lod_definitions, m_node); create_lod_definitions, m_node, parent);
} // TrackObjectPresentationLibraryNode } // TrackObjectPresentationLibraryNode
// ---------------------------------------------------------------------------- // ----------------------------------------------------------------------------

View File

@ -38,6 +38,7 @@ class ThreeDAnimation;
class ModelDefinitionLoader; class ModelDefinitionLoader;
class STKInstancedSceneNode; class STKInstancedSceneNode;
class XMLNode; class XMLNode;
class TrackObject;
namespace irr namespace irr
{ {
@ -170,7 +171,8 @@ public:
class TrackObjectPresentationLibraryNode : public TrackObjectPresentationSceneNode class TrackObjectPresentationLibraryNode : public TrackObjectPresentationSceneNode
{ {
public: public:
TrackObjectPresentationLibraryNode(const XMLNode& xml_node, TrackObjectPresentationLibraryNode(TrackObject* parent,
const XMLNode& xml_node,
ModelDefinitionLoader& model_def_loader); ModelDefinitionLoader& model_def_loader);
virtual ~TrackObjectPresentationLibraryNode(); virtual ~TrackObjectPresentationLibraryNode();
}; // TrackObjectPresentationLibraryNode }; // TrackObjectPresentationLibraryNode