Animation tree implemented
This commit is contained in:
@@ -1,6 +1,6 @@
|
||||
project(sceneloader)
|
||||
add_library(sceneloader loader.cpp)
|
||||
target_include_directories(sceneloader PUBLIC .)
|
||||
target_link_libraries(sceneloader PUBLIC OgreMain PRIVATE pugixml)
|
||||
target_link_libraries(sceneloader PUBLIC OgreMain PRIVATE pugixml GameData)
|
||||
target_link_libraries(sceneloader PUBLIC OgreTerrain)
|
||||
|
||||
|
||||
@@ -3,6 +3,8 @@
|
||||
#include <OgreTerrain.h>
|
||||
#include <OgreTerrainGroup.h>
|
||||
#include <pugixml.hpp>
|
||||
#include "GameData.h"
|
||||
#include "EventTriggerModule.h"
|
||||
#include "loader.h"
|
||||
|
||||
using namespace Ogre;
|
||||
@@ -120,35 +122,6 @@ static ColourValue parseColour(pugi::xml_node &XMLNode)
|
||||
1);
|
||||
}
|
||||
|
||||
struct SceneCodec : public Codec {
|
||||
String magicNumberToFileExt(const char *magicNumberPtr,
|
||||
size_t maxbytes) const override
|
||||
{
|
||||
return "";
|
||||
}
|
||||
String getType() const override
|
||||
{
|
||||
return "scene";
|
||||
}
|
||||
void decode(const DataStreamPtr &stream,
|
||||
const Any &output) const override
|
||||
{
|
||||
DataStreamPtr _stream(stream);
|
||||
SceneLoader loader;
|
||||
loader.load(_stream,
|
||||
ResourceGroupManager::getSingleton()
|
||||
.getWorldResourceGroupName(),
|
||||
any_cast<SceneNode *>(output), 0);
|
||||
}
|
||||
|
||||
void encodeToFile(const Any &input,
|
||||
const String &outFileName) const override
|
||||
{
|
||||
SceneLoader loader;
|
||||
loader.exportScene(any_cast<SceneNode *>(input), outFileName);
|
||||
}
|
||||
};
|
||||
|
||||
SceneLoader::SceneLoader()
|
||||
: mSceneMgr(0)
|
||||
, mBackgroundColour(ColourValue::Black)
|
||||
@@ -160,12 +133,12 @@ SceneLoader::~SceneLoader()
|
||||
}
|
||||
|
||||
void SceneLoader::load(DataStreamPtr &stream, const String &groupName,
|
||||
SceneNode *rootNode, int counter)
|
||||
SceneNode *rootNode, flecs::entity e)
|
||||
{
|
||||
m_sGroupName = groupName;
|
||||
mSceneMgr = rootNode->getCreator();
|
||||
mNamePrefix = rootNode->getName();
|
||||
this->counter = counter;
|
||||
this->counter = (int)e.raw_id();
|
||||
if (counter >= 0) {
|
||||
if (mNamePrefix.length() > 0)
|
||||
mNamePrefix += "/";
|
||||
@@ -173,6 +146,7 @@ void SceneLoader::load(DataStreamPtr &stream, const String &groupName,
|
||||
}
|
||||
if (mNamePrefix.length() > 0)
|
||||
mNamePrefix += "/";
|
||||
base_e = e;
|
||||
|
||||
pugi::xml_document XMLDoc; // character type defaults to char
|
||||
|
||||
@@ -571,6 +545,23 @@ void SceneLoader::processNode(pugi::xml_node &XMLNode, SceneNode *pParent)
|
||||
// Process node animations (?)
|
||||
if (auto pElement = XMLNode.child("animations"))
|
||||
processNodeAnimations(pElement, pNode);
|
||||
Ogre::Any triggerAny =
|
||||
pNode->getUserObjectBindings().getUserAny("trigger");
|
||||
if (triggerAny.has_value()) {
|
||||
flecs::entity e = ECS::get().entity().child_of(base_e);
|
||||
Ogre::String event = Ogre::any_cast<Ogre::String>(triggerAny);
|
||||
float h = 2.0f, r = 3.0f;
|
||||
Ogre::Any anyh = pNode->getUserObjectBindings().getUserAny(
|
||||
"trigger_height");
|
||||
if (anyh.has_value())
|
||||
h = Ogre::any_cast<float>(anyh);
|
||||
Ogre::Any anyr = pNode->getUserObjectBindings().getUserAny(
|
||||
"trigger_radius");
|
||||
if (anyr.has_value())
|
||||
r = Ogre::any_cast<float>(anyr);
|
||||
e.set<ECS::EventTrigger>(
|
||||
{ pNode, Ogre::Vector3(0, 0, 0), h, r, event });
|
||||
}
|
||||
}
|
||||
|
||||
void SceneLoader::processLookTarget(pugi::xml_node &XMLNode, SceneNode *pParent)
|
||||
|
||||
@@ -6,6 +6,7 @@
|
||||
#include <OgreString.h>
|
||||
#include <OgrePlugin.h>
|
||||
#include <OgreCodec.h>
|
||||
#include <flecs.h>
|
||||
|
||||
class SceneLoader {
|
||||
public:
|
||||
@@ -13,7 +14,7 @@ public:
|
||||
virtual ~SceneLoader();
|
||||
|
||||
void load(Ogre::DataStreamPtr &stream, const Ogre::String &groupName,
|
||||
Ogre::SceneNode *rootNode, int counter);
|
||||
Ogre::SceneNode *rootNode, flecs::entity e);
|
||||
|
||||
void exportScene(Ogre::SceneNode *rootNode,
|
||||
const Ogre::String &outFileName);
|
||||
@@ -74,6 +75,7 @@ protected:
|
||||
Ogre::ColourValue mBackgroundColour;
|
||||
Ogre::String mNamePrefix;
|
||||
int counter;
|
||||
flecs::entity base_e;
|
||||
};
|
||||
|
||||
#endif
|
||||
|
||||
Reference in New Issue
Block a user