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();
@ -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,
bool create_lod_definitions, scene::ISceneNode* parent)
bool create_lod_definitions, scene::ISceneNode* parent,
TrackObject* parent_library)
{
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 == "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")
{
@ -2016,7 +2017,7 @@ void Track::loadObjects(const XMLNode* root, const std::string& path, ModelDefin
{
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")
@ -2029,7 +2030,7 @@ void Track::loadObjects(const XMLNode* root, const std::string& path, ModelDefin
}
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")
{

View File

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

View File

@ -39,9 +39,10 @@
* \param lod_node Lod node (defaults to NULL).
*/
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
// ----------------------------------------------------------------------------
@ -63,6 +64,7 @@ TrackObject::TrackObject(const core::vector3df& xyz, const core::vector3df& hpr,
m_presentation = NULL;
m_animator = NULL;
m_physical_object = NULL;
m_parent_library = NULL;
m_interaction = interaction;
m_presentation = presentation;
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.
*/
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_hpr = core::vector3df(0,0,0);
@ -97,7 +100,7 @@ void TrackObject::init(const XMLNode &xml_node, scene::ISceneNode* parent,
m_enabled = true;
m_presentation = NULL;
m_animator = NULL;
m_parent_library = parent_library;
m_physical_object = NULL;
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")
{
m_presentation = new TrackObjectPresentationLibraryNode(xml_node, model_def_loader);
m_presentation = new TrackObjectPresentationLibraryNode(this, xml_node, model_def_loader);
}
else if (type == "sfx-emitter")
{

View File

@ -90,10 +90,17 @@ protected:
ThreeDAnimation* m_animator;
void init(const XMLNode &xml_node, scene::ISceneNode* parent, ModelDefinitionLoader& model_def_loader);
TrackObject* m_parent_library;
void init(const XMLNode &xml_node, scene::ISceneNode* parent,
ModelDefinitionLoader& model_def_loader,
TrackObject* parent_library);
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,
const core::vector3df& hpr,

View File

@ -44,11 +44,12 @@ TrackObjectManager::~TrackObjectManager()
* in the xml_node.
*/
void TrackObjectManager::add(const XMLNode &xml_node, scene::ISceneNode* parent,
ModelDefinitionLoader& model_def_loader)
ModelDefinitionLoader& model_def_loader,
TrackObject* parent_library)
{
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);
if(obj->isDriveable())
m_driveable_objects.push_back(obj);

View File

@ -57,7 +57,8 @@ public:
void reset();
void init();
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 handleExplosion(const Vec3 &pos, const PhysicalObject *mp,
bool secondary_hits=true);

View File

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

View File

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