Added: #1440 Parser skeleton for Scene
--HG-- branch : build_pipeline_v3hg/feature/build_pipeline_v3
parent
a50cbe9a5f
commit
8cacf5f386
@ -0,0 +1,179 @@
|
|||||||
|
/**
|
||||||
|
* \file scene.cpp
|
||||||
|
* \brief CScene
|
||||||
|
* \date 2012-08-18 19:25GMT
|
||||||
|
* \author Jan Boon (Kaetemi)
|
||||||
|
* CScene
|
||||||
|
*/
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Copyright (C) 2012 by authors
|
||||||
|
*
|
||||||
|
* This file is part of RYZOM CORE PIPELINE.
|
||||||
|
* RYZOM CORE PIPELINE is free software: you can redistribute it
|
||||||
|
* and/or modify it under the terms of the GNU Affero General Public
|
||||||
|
* License as published by the Free Software Foundation, either
|
||||||
|
* version 3 of the License, or (at your option) any later version.
|
||||||
|
*
|
||||||
|
* RYZOM CORE PIPELINE is distributed in the hope that it will be
|
||||||
|
* useful, but WITHOUT ANY WARRANTY; without even the implied warranty
|
||||||
|
* of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
|
* GNU Affero General Public License for more details.
|
||||||
|
*
|
||||||
|
* You should have received a copy of the GNU Affero General Public
|
||||||
|
* License along with RYZOM CORE PIPELINE. If not, see
|
||||||
|
* <http://www.gnu.org/licenses/>.
|
||||||
|
*/
|
||||||
|
|
||||||
|
#include <nel/misc/types_nl.h>
|
||||||
|
#include "scene.h"
|
||||||
|
|
||||||
|
// STL includes
|
||||||
|
|
||||||
|
// NeL includes
|
||||||
|
// #include <nel/misc/debug.h>
|
||||||
|
#include <nel/misc/ucstring.h>
|
||||||
|
|
||||||
|
// Project includes
|
||||||
|
|
||||||
|
using namespace std;
|
||||||
|
// using namespace NLMISC;
|
||||||
|
|
||||||
|
namespace PIPELINE {
|
||||||
|
namespace MAX {
|
||||||
|
|
||||||
|
////////////////////////////////////////////////////////////////////////
|
||||||
|
////////////////////////////////////////////////////////////////////////
|
||||||
|
////////////////////////////////////////////////////////////////////////
|
||||||
|
|
||||||
|
CScene::CScene()
|
||||||
|
{
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
CScene::~CScene()
|
||||||
|
{
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
std::string CScene::getClassName()
|
||||||
|
{
|
||||||
|
return "Scene";
|
||||||
|
}
|
||||||
|
|
||||||
|
void CScene::toString(std::ostream &ostream, const std::string &pad)
|
||||||
|
{
|
||||||
|
CStorageContainer::toString(ostream, pad);
|
||||||
|
}
|
||||||
|
|
||||||
|
IStorageObject *CScene::createChunkById(uint16 id, bool container)
|
||||||
|
{
|
||||||
|
if (container)
|
||||||
|
{
|
||||||
|
// Return the scene class container. There can be only one.
|
||||||
|
return new CSceneClassContainer();
|
||||||
|
}
|
||||||
|
return CStorageContainer::createChunkById(id, container);
|
||||||
|
}
|
||||||
|
|
||||||
|
void CScene::serialized(TStorageObjectContainer::iterator soit, bool container)
|
||||||
|
{
|
||||||
|
CStorageContainer::serialized(soit, container);
|
||||||
|
}
|
||||||
|
|
||||||
|
////////////////////////////////////////////////////////////////////////
|
||||||
|
////////////////////////////////////////////////////////////////////////
|
||||||
|
////////////////////////////////////////////////////////////////////////
|
||||||
|
|
||||||
|
CSceneClassContainer::CSceneClassContainer()
|
||||||
|
{
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
CSceneClassContainer::~CSceneClassContainer()
|
||||||
|
{
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
std::string CSceneClassContainer::getClassName()
|
||||||
|
{
|
||||||
|
return "SceneClassContainer";
|
||||||
|
}
|
||||||
|
|
||||||
|
void CSceneClassContainer::toString(std::ostream &ostream, const std::string &pad)
|
||||||
|
{
|
||||||
|
CStorageContainer::toString(ostream, pad);
|
||||||
|
}
|
||||||
|
|
||||||
|
IStorageObject *CSceneClassContainer::createChunkById(uint16 id, bool container)
|
||||||
|
{
|
||||||
|
if (container)
|
||||||
|
{
|
||||||
|
// TODO: Check the class registry.
|
||||||
|
// Return default unknown scene class.
|
||||||
|
return new CSceneClass();
|
||||||
|
}
|
||||||
|
return CStorageContainer::createChunkById(id, container);
|
||||||
|
}
|
||||||
|
|
||||||
|
void CSceneClassContainer::serialized(TStorageObjectContainer::iterator soit, bool container)
|
||||||
|
{
|
||||||
|
CStorageContainer::serialized(soit, container);
|
||||||
|
}
|
||||||
|
|
||||||
|
////////////////////////////////////////////////////////////////////////
|
||||||
|
////////////////////////////////////////////////////////////////////////
|
||||||
|
////////////////////////////////////////////////////////////////////////
|
||||||
|
|
||||||
|
CSceneClass::CSceneClass()
|
||||||
|
{
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
CSceneClass::~CSceneClass()
|
||||||
|
{
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
std::string CSceneClass::getClassName()
|
||||||
|
{
|
||||||
|
return getClassDesc()->getInternalName();
|
||||||
|
}
|
||||||
|
|
||||||
|
void CSceneClass::toString(std::ostream &ostream, const std::string &pad)
|
||||||
|
{
|
||||||
|
CStorageContainer::toString(ostream, pad);
|
||||||
|
}
|
||||||
|
|
||||||
|
IStorageObject *CSceneClass::createChunkById(uint16 id, bool container)
|
||||||
|
{
|
||||||
|
return CStorageContainer::createChunkById(id, container);
|
||||||
|
}
|
||||||
|
|
||||||
|
void CSceneClass::serialized(TStorageObjectContainer::iterator soit, bool container)
|
||||||
|
{
|
||||||
|
CStorageContainer::serialized(soit, container);
|
||||||
|
}
|
||||||
|
|
||||||
|
const ucchar *CSceneClass::DisplayName = ucstring("Unknown Scene Class").c_str();
|
||||||
|
const char *CSceneClass::InternalName = "SceneClass";
|
||||||
|
const NLMISC::CClassId CSceneClass::ClassId = NLMISC::CClassId::Null;
|
||||||
|
const TSClassId CSceneClass::SuperClassId = 0x0000;
|
||||||
|
|
||||||
|
namespace {
|
||||||
|
static const CSceneClassDesc<CSceneClass> SceneClassDesc;
|
||||||
|
} /* anonymous namespace */
|
||||||
|
|
||||||
|
const ISceneClassDesc *CSceneClass::getClassDesc()
|
||||||
|
{
|
||||||
|
return static_cast<const ISceneClassDesc *>(&SceneClassDesc);
|
||||||
|
}
|
||||||
|
|
||||||
|
////////////////////////////////////////////////////////////////////////
|
||||||
|
////////////////////////////////////////////////////////////////////////
|
||||||
|
////////////////////////////////////////////////////////////////////////
|
||||||
|
|
||||||
|
} /* namespace MAX */
|
||||||
|
} /* namespace PIPELINE */
|
||||||
|
|
||||||
|
/* end of file */
|
@ -0,0 +1,184 @@
|
|||||||
|
/**
|
||||||
|
* \file scene.h
|
||||||
|
* \brief CScene
|
||||||
|
* \date 2012-08-18 19:25GMT
|
||||||
|
* \author Jan Boon (Kaetemi)
|
||||||
|
* CScene
|
||||||
|
*/
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Copyright (C) 2012 by authors
|
||||||
|
*
|
||||||
|
* This file is part of RYZOM CORE PIPELINE.
|
||||||
|
* RYZOM CORE PIPELINE is free software: you can redistribute it
|
||||||
|
* and/or modify it under the terms of the GNU Affero General Public
|
||||||
|
* License as published by the Free Software Foundation, either
|
||||||
|
* version 3 of the License, or (at your option) any later version.
|
||||||
|
*
|
||||||
|
* RYZOM CORE PIPELINE is distributed in the hope that it will be
|
||||||
|
* useful, but WITHOUT ANY WARRANTY; without even the implied warranty
|
||||||
|
* of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
|
* GNU Affero General Public License for more details.
|
||||||
|
*
|
||||||
|
* You should have received a copy of the GNU Affero General Public
|
||||||
|
* License along with RYZOM CORE PIPELINE. If not, see
|
||||||
|
* <http://www.gnu.org/licenses/>.
|
||||||
|
*/
|
||||||
|
|
||||||
|
#ifndef PIPELINE_SCENE_H
|
||||||
|
#define PIPELINE_SCENE_H
|
||||||
|
#include <nel/misc/types_nl.h>
|
||||||
|
|
||||||
|
// STL includes
|
||||||
|
|
||||||
|
// NeL includes
|
||||||
|
#include <nel/misc/class_id.h>
|
||||||
|
|
||||||
|
// Project includes
|
||||||
|
#include "storage_object.h"
|
||||||
|
#include "storage_value.h"
|
||||||
|
|
||||||
|
namespace PIPELINE {
|
||||||
|
namespace MAX {
|
||||||
|
|
||||||
|
// Don't really care about superclass IDs right now, but we have to.
|
||||||
|
typedef uint32 TSClassId;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* \brief CScene
|
||||||
|
* \date 2012-08-19 19:25GMT
|
||||||
|
* \author Jan Boon (Kaetemi)
|
||||||
|
* CScene
|
||||||
|
*/
|
||||||
|
class CScene : public CStorageContainer
|
||||||
|
{
|
||||||
|
public:
|
||||||
|
CScene();
|
||||||
|
virtual ~CScene();
|
||||||
|
|
||||||
|
// inherited
|
||||||
|
virtual std::string getClassName();
|
||||||
|
virtual void toString(std::ostream &ostream, const std::string &pad = "");
|
||||||
|
|
||||||
|
protected:
|
||||||
|
virtual IStorageObject *createChunkById(uint16 id, bool container);
|
||||||
|
virtual void serialized(TStorageObjectContainer::iterator soit, bool container);
|
||||||
|
|
||||||
|
}; /* class CScene */
|
||||||
|
|
||||||
|
/**
|
||||||
|
* \brief CSceneClassContainer
|
||||||
|
* \date 2012-08-19 19:25GMT
|
||||||
|
* \author Jan Boon (Kaetemi)
|
||||||
|
* CSceneClassContainer
|
||||||
|
*/
|
||||||
|
class CSceneClassContainer : public CStorageContainer
|
||||||
|
{
|
||||||
|
public:
|
||||||
|
CSceneClassContainer();
|
||||||
|
virtual ~CSceneClassContainer();
|
||||||
|
|
||||||
|
// inherited
|
||||||
|
virtual std::string getClassName();
|
||||||
|
virtual void toString(std::ostream &ostream, const std::string &pad = "");
|
||||||
|
|
||||||
|
protected:
|
||||||
|
virtual IStorageObject *createChunkById(uint16 id, bool container);
|
||||||
|
virtual void serialized(TStorageObjectContainer::iterator soit, bool container);
|
||||||
|
|
||||||
|
}; /* class CSceneClassContainer */
|
||||||
|
|
||||||
|
class ISceneClassDesc;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* \brief CSceneClass
|
||||||
|
* \date 2012-08-19 19:25GMT
|
||||||
|
* \author Jan Boon (Kaetemi)
|
||||||
|
* CSceneClass
|
||||||
|
*/
|
||||||
|
class CSceneClass : public CStorageContainer
|
||||||
|
{
|
||||||
|
public:
|
||||||
|
CSceneClass();
|
||||||
|
virtual ~CSceneClass();
|
||||||
|
|
||||||
|
// inherited
|
||||||
|
virtual std::string getClassName();
|
||||||
|
virtual void toString(std::ostream &ostream, const std::string &pad = "");
|
||||||
|
|
||||||
|
// static const
|
||||||
|
static const ucchar *DisplayName;
|
||||||
|
static const char *InternalName;
|
||||||
|
static const NLMISC::CClassId ClassId;
|
||||||
|
static const TSClassId SuperClassId;
|
||||||
|
|
||||||
|
// virtual
|
||||||
|
virtual const ISceneClassDesc *getClassDesc();
|
||||||
|
|
||||||
|
protected:
|
||||||
|
virtual IStorageObject *createChunkById(uint16 id, bool container);
|
||||||
|
virtual void serialized(TStorageObjectContainer::iterator soit, bool container);
|
||||||
|
|
||||||
|
}; /* class CSceneClass */
|
||||||
|
|
||||||
|
/**
|
||||||
|
* \brief ISceneClassDesc
|
||||||
|
* \date 2012-08-19 19:25GMT
|
||||||
|
* \author Jan Boon (Kaetemi)
|
||||||
|
* ISceneClassDesc
|
||||||
|
*/
|
||||||
|
class ISceneClassDesc
|
||||||
|
{
|
||||||
|
public:
|
||||||
|
virtual CSceneClass *create() const = 0;
|
||||||
|
virtual void destroy(CSceneClass *sc) const = 0;
|
||||||
|
virtual const ucchar *getDisplayName() const = 0;
|
||||||
|
virtual const char *getInternalName() const = 0;
|
||||||
|
virtual NLMISC::CClassId getClassId() const = 0;
|
||||||
|
virtual TSClassId getSuperClassId() const = 0;
|
||||||
|
|
||||||
|
}; /* class ISceneClassDesc */
|
||||||
|
|
||||||
|
/**
|
||||||
|
* \brief CSceneClassDesc
|
||||||
|
* \date 2012-08-19 19:25GMT
|
||||||
|
* \author Jan Boon (Kaetemi)
|
||||||
|
* CSceneClassDesc
|
||||||
|
* Use in a cpp when registering the CClassId.
|
||||||
|
*/
|
||||||
|
template <typename T>
|
||||||
|
class CSceneClassDesc : public ISceneClassDesc
|
||||||
|
{
|
||||||
|
public:
|
||||||
|
virtual CSceneClass *create() const { return static_cast<CSceneClass *>(new T()); }
|
||||||
|
virtual void destroy(CSceneClass *sc) const { delete static_cast<T *>(sc); }
|
||||||
|
virtual const ucchar *getDisplayName() const { return T::DisplayName; }
|
||||||
|
virtual const char *getInternalName() const { return T::InternalName; }
|
||||||
|
virtual NLMISC::CClassId getClassId() const { return T::ClassId; }
|
||||||
|
virtual TSClassId getSuperClassId() const { return T::SuperClassId; }
|
||||||
|
|
||||||
|
}; /* class CSceneClassDesc */
|
||||||
|
|
||||||
|
/**
|
||||||
|
* \brief CSceneClassRegistry
|
||||||
|
* \date 2012-08-19 19:25GMT
|
||||||
|
* \author Jan Boon (Kaetemi)
|
||||||
|
* CSceneClassRegistry
|
||||||
|
*/
|
||||||
|
class CSceneClassRegistry
|
||||||
|
{
|
||||||
|
public:
|
||||||
|
void add(const NLMISC::CClassId, const ISceneClassDesc *desc);
|
||||||
|
void remove(const NLMISC::CClassId);
|
||||||
|
CSceneClass *create(const NLMISC::CClassId classid) const;
|
||||||
|
void destroy(CSceneClass *sceneClass) const;
|
||||||
|
const ISceneClassDesc *describe(const NLMISC::CClassId classid) const;
|
||||||
|
|
||||||
|
}; /* class ISceneClassConstructor */
|
||||||
|
|
||||||
|
} /* namespace MAX */
|
||||||
|
} /* namespace PIPELINE */
|
||||||
|
|
||||||
|
#endif /* #ifndef PIPELINE_SCENE_H */
|
||||||
|
|
||||||
|
/* end of file */
|
Loading…
Reference in New Issue