From: <pa...@us...> - 2008-08-20 09:20:00
|
Revision: 776 http://opde.svn.sourceforge.net/opde/?rev=776&view=rev Author: patryn Date: 2008-08-20 09:20:07 +0000 (Wed, 20 Aug 2008) Log Message: ----------- Load earth.mis as the default mission for SS2. Modified Paths: -------------- trunk/installer/opde-sample.cfg trunk/src/main/GameStateManager.cpp Modified: trunk/installer/opde-sample.cfg =================================================================== --- trunk/installer/opde-sample.cfg 2008-08-20 08:56:47 UTC (rev 775) +++ trunk/installer/opde-sample.cfg 2008-08-20 09:20:07 UTC (rev 776) @@ -1,2 +1,2 @@ -mission=miss1.mis +;mission=miss1.mis region_size=100 Modified: trunk/src/main/GameStateManager.cpp =================================================================== --- trunk/src/main/GameStateManager.cpp 2008-08-20 08:56:47 UTC (rev 775) +++ trunk/src/main/GameStateManager.cpp 2008-08-20 09:20:07 UTC (rev 776) @@ -17,6 +17,8 @@ * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA * + * $Id$ + * *****************************************************************************/ #include "GameStateManager.h" @@ -190,7 +192,12 @@ if (!mConfigService->hasParam("mission")) // Failback - mConfigService->setParam("mission", "miss1.mis"); + { + if((mGameType == "SS2") || (mGameType == "ss2")) + mConfigService->setParam("mission", "earth.mis"); + else + mConfigService->setParam("mission", "miss1.mis"); + } // TODO: Remove this temporary nonsense. In fact. Remove the whole class this method is in! GamePlayState* ps = new GamePlayState(); This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <vo...@us...> - 2008-08-21 19:22:56
|
Revision: 802 http://opde.svn.sourceforge.net/opde/?rev=802&view=rev Author: volca Date: 2008-08-21 19:23:07 +0000 (Thu, 21 Aug 2008) Log Message: ----------- OpdePyLib introduced Modified Paths: -------------- trunk/proto/python/CMakeLists.txt trunk/src/bindings/CMakeLists.txt Modified: trunk/proto/python/CMakeLists.txt =================================================================== --- trunk/proto/python/CMakeLists.txt 2008-08-20 23:05:08 UTC (rev 801) +++ trunk/proto/python/CMakeLists.txt 2008-08-21 19:23:07 UTC (rev 802) @@ -48,9 +48,6 @@ target_link_libraries(pytest - ${OPDE_BASE_LIBRARIES} - ${OPDE_SERVICE_LIBRARIES} - ${OIS_LIBRARIES} - OpdePythonBindings - ${LIB_ADDITION_CUSTOM_IMAGE} + OpdeLib + OpdePyLib ) Modified: trunk/src/bindings/CMakeLists.txt =================================================================== --- trunk/src/bindings/CMakeLists.txt 2008-08-20 23:05:08 UTC (rev 801) +++ trunk/src/bindings/CMakeLists.txt 2008-08-21 19:23:07 UTC (rev 802) @@ -18,7 +18,7 @@ ) -add_library(OpdePythonBindings +add_library(OpdePyLib SHARED bindings.cpp bindings.h ServiceBinder.cpp @@ -54,6 +54,7 @@ ObjectServiceBinder.h ) -target_link_libraries(OpdePythonBindings +target_link_libraries(OpdePyLib + ${PYTHON_LIBRARIES} OpdeLib ) This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <vo...@us...> - 2008-08-21 19:27:22
|
Revision: 803 http://opde.svn.sourceforge.net/opde/?rev=803&view=rev Author: volca Date: 2008-08-21 19:27:23 +0000 (Thu, 21 Aug 2008) Log Message: ----------- * Wall for gcc * warning fixes Modified Paths: -------------- trunk/CMakeLists.txt trunk/src/base/BitArray.h trunk/src/base/Dark/utils.h trunk/src/base/Iterator.h trunk/src/base/NonCopyable.h trunk/src/base/PrioritizedMessageSource.h trunk/src/base/SharedPtr.h trunk/src/base/StringTokenizer.h trunk/src/base/console/ConsoleBackend.cpp trunk/src/base/console/ConsoleCommandListener.h trunk/src/base/dyntype/DTypeDef.cpp trunk/src/base/dyntype/DTypeDef.h trunk/src/base/file/File.cpp trunk/src/base/file/FileGroup.cpp trunk/src/base/file/darkdb.h trunk/src/base/loaders/ManualBinFileLoader.cpp trunk/src/bindings/bindings.h trunk/src/main/GameState.cpp trunk/src/main/GameState.h trunk/src/main/GameStateManager.cpp trunk/src/main/PLDefScriptCompiler.cpp trunk/src/scenemanager/DarkBspNode.cpp trunk/src/scenemanager/DarkCamera.cpp trunk/src/scenemanager/DarkGeometry.cpp trunk/src/services/binary/BinaryService.cpp trunk/src/services/inherit/InheritCommon.h trunk/src/services/inherit/InheritService.cpp trunk/src/services/input/InputService.cpp trunk/src/services/input/InputService.h trunk/src/services/link/LinkCommon.h trunk/src/services/link/Relation.cpp trunk/src/services/loop/LoopService.cpp trunk/src/services/loop/LoopService.h trunk/src/services/object/ObjectService.cpp trunk/src/services/property/PropertyCommon.h trunk/src/services/property/PropertyGroup.cpp trunk/src/services/property/PropertyStorage.cpp trunk/src/services/property/PropertyStorage.h trunk/src/services/render/MaterialInstance.h trunk/src/services/render/RenderService.cpp trunk/src/services/render/SubEntityMaterialInstance.h trunk/src/services/script/ScriptService.h trunk/src/services/worldrep/WRCell.cpp trunk/src/services/worldrep/WorldRepService.cpp Modified: trunk/CMakeLists.txt =================================================================== --- trunk/CMakeLists.txt 2008-08-21 19:23:07 UTC (rev 802) +++ trunk/CMakeLists.txt 2008-08-21 19:27:23 UTC (rev 803) @@ -84,6 +84,10 @@ SET(CMAKE_CXX_FLAGS_DEBUG "-g -O3 ${PROFILER}") SET(CMAKE_CXX_FLAGS_DISTRIBUTION "-O3") SET(CMAKE_C_FLAGS_DISTRIBUTION "-O3") + + # extra warnings, but no unused params (too common) + ADD_DEFINITIONS(-Wall) + # -Wextra -Wno-unused-parameter ENDIF(CMAKE_COMPILER_IS_GNUCXX) # -fPIC for 64bit IA (x86_64 that is) Modified: trunk/src/base/BitArray.h =================================================================== --- trunk/src/base/BitArray.h 2008-08-21 19:23:07 UTC (rev 802) +++ trunk/src/base/BitArray.h 2008-08-21 19:27:23 UTC (rev 803) @@ -40,7 +40,7 @@ class BitArray { public: /// constructs a new empty bitarray - BitArray() : mArray(NULL), mMinIDX(0), mMaxIDX(-1), mByteSize(0) {}; + BitArray() : mArray(NULL), mByteSize(0), mMinIDX(0), mMaxIDX(-1) {}; /// constructs a new bitarray with a specified min and max boundaries (all values false) BitArray(int min, int max) : mMinIDX(min), mMaxIDX(max) { Modified: trunk/src/base/Dark/utils.h =================================================================== --- trunk/src/base/Dark/utils.h 2008-08-21 19:23:07 UTC (rev 802) +++ trunk/src/base/Dark/utils.h 2008-08-21 19:27:23 UTC (rev 803) @@ -52,7 +52,7 @@ #endif // Till we get rid of the headers - Stop warnings about the zero sized arrays -#pragma warning (disable : 4200) +// Dark headers are not used anymore - // #pragma warning (disable : 4200) } Modified: trunk/src/base/Iterator.h =================================================================== --- trunk/src/base/Iterator.h 2008-08-21 19:23:07 UTC (rev 802) +++ trunk/src/base/Iterator.h 2008-08-21 19:27:23 UTC (rev 803) @@ -27,6 +27,7 @@ /** A java-like iterator approach */ template <typename T> class Iterator { public: + virtual ~Iterator(void) {}; virtual T& next() = 0; virtual bool end() const = 0; }; @@ -35,6 +36,7 @@ /** A const, java-like iterator approach */ template <typename T> class ConstIterator { public: + virtual ~ConstIterator(void) {}; virtual const T& next() = 0; virtual bool end() const = 0; }; Modified: trunk/src/base/NonCopyable.h =================================================================== --- trunk/src/base/NonCopyable.h 2008-08-21 19:23:07 UTC (rev 802) +++ trunk/src/base/NonCopyable.h 2008-08-21 19:27:23 UTC (rev 803) @@ -32,8 +32,8 @@ NonCopyable() {}; private: - NonCopyable(const NonCopyable& b) {}; - void operator =(const NonCopyable& b) {}; + NonCopyable(const NonCopyable& b); + void operator =(const NonCopyable& b); }; } Modified: trunk/src/base/PrioritizedMessageSource.h =================================================================== --- trunk/src/base/PrioritizedMessageSource.h 2008-08-21 19:23:07 UTC (rev 802) +++ trunk/src/base/PrioritizedMessageSource.h 2008-08-21 19:27:23 UTC (rev 803) @@ -33,6 +33,8 @@ */ template <typename M> class PrioritizedMessageSource { public: + virtual ~PrioritizedMessageSource() {}; + typedef int Priority; typedef Callback< M > Listener; Modified: trunk/src/base/SharedPtr.h =================================================================== --- trunk/src/base/SharedPtr.h 2008-08-21 19:23:07 UTC (rev 802) +++ trunk/src/base/SharedPtr.h 2008-08-21 19:27:23 UTC (rev 803) @@ -35,9 +35,9 @@ template < typename U > friend class shared_ptr; protected: + T* mPtr; unsigned int* mReferences; - T* mPtr; - + void release() { if (mReferences) { if (--(*mReferences) == 0) { @@ -62,7 +62,7 @@ } /// NULL ctor - shared_ptr() : mReferences(NULL), mPtr(NULL) { }; + shared_ptr() : mPtr(NULL), mReferences(NULL) { }; /// Copy constructor shared_ptr(const shared_ptr& b) : mPtr(b.mPtr), mReferences(b.mReferences) { Modified: trunk/src/base/StringTokenizer.h =================================================================== --- trunk/src/base/StringTokenizer.h 2008-08-21 19:23:07 UTC (rev 802) +++ trunk/src/base/StringTokenizer.h 2008-08-21 19:27:23 UTC (rev 803) @@ -120,7 +120,7 @@ }; public: - WhitespaceStringTokenizer(const std::string& src, bool ignoreQuotes = true) : mStr(src), mIgnoreQuotes(ignoreQuotes) { + WhitespaceStringTokenizer(const std::string& src, bool ignoreQuotes = true) : mIgnoreQuotes(ignoreQuotes), mStr(src) { mCurPos = mStr.begin(); }; Modified: trunk/src/base/console/ConsoleBackend.cpp =================================================================== --- trunk/src/base/console/ConsoleBackend.cpp 2008-08-21 19:23:07 UTC (rev 802) +++ trunk/src/base/console/ConsoleBackend.cpp 2008-08-21 19:27:23 UTC (rev 803) @@ -18,7 +18,7 @@ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA * * - * $Id:$ + * $Id$ * *****************************************************************************/ @@ -32,7 +32,7 @@ template<> ConsoleBackend* Singleton<ConsoleBackend>::ms_Singleton = 0; - ConsoleBackend::ConsoleBackend(unsigned int text_history) : mTextHistory(text_history), mCommandMap(), mCompletionMap() { + ConsoleBackend::ConsoleBackend(unsigned int text_history) : mCommandMap(), mCompletionMap(), mTextHistory(text_history) { mCommandMap.clear(); mCompletionMap.clear(); mMessages.clear(); @@ -132,7 +132,7 @@ } void ConsoleBackend::messageLogged( const String& message, LogMessageLevel lml, bool maskDebug, const String &logName ) { - if (lml = LML_CRITICAL) + if (lml == LML_CRITICAL) addText("OgreLog: (" + logName + ") : " + message); } Modified: trunk/src/base/console/ConsoleCommandListener.h =================================================================== --- trunk/src/base/console/ConsoleCommandListener.h 2008-08-21 19:23:07 UTC (rev 802) +++ trunk/src/base/console/ConsoleCommandListener.h 2008-08-21 19:27:23 UTC (rev 803) @@ -32,6 +32,8 @@ /** Please override with a method that will handle the command */ virtual void commandExecuted(std::string command, std::string parameters) = 0; + virtual ~ConsoleCommandListener(void) {}; + // Just a thought: Would be possible to put "command?" and execute, and if the consoleBackend would detect a '?' at the end of command, would call this method instead of the commandExecuted // And should result in a small explanation... // void helpWanted(std::string command) = 0; Modified: trunk/src/base/dyntype/DTypeDef.cpp =================================================================== --- trunk/src/base/dyntype/DTypeDef.cpp 2008-08-21 19:23:07 UTC (rev 802) +++ trunk/src/base/dyntype/DTypeDef.cpp 2008-08-21 19:27:23 UTC (rev 803) @@ -100,7 +100,7 @@ //------------------------------------ DEnum::EnumFieldList DEnum::getFieldList(const DVariant& val) const { - uint uval; + uint uval = 0; if (mBitField) { // is it convertible to the uint? If not, this will throw an exception, so it's alright @@ -151,7 +151,7 @@ public: /// Constructor DTPrivateSimple(const DVariant::Type& type, size_t size, const DEnumPtr& _enum) : DTPrivateBase(NT_SIMPLE), - mType(type), mEnum(_enum), mSize(size) { + mType(type), mSize(size), mEnum(_enum) { }; /// Destructor @@ -191,13 +191,15 @@ bool mUnioned; /// Array type constructor. Constructs an array type - DTPrivateStructured(const DTypeDefPtr& type, size_t size) : DTPrivateBase(NT_ARRAY), mArraySize(size), mSubTypes(), mUnioned(false) { + DTPrivateStructured(const DTypeDefPtr& type, size_t size) : DTPrivateBase(NT_ARRAY), mSubTypes(), mArraySize(size), mUnioned(false) { mSubTypes.push_back(type); } /// Struct/Union constructor - DTPrivateStructured(const DTypeDefVector& types, bool unioned) : DTPrivateBase(NT_STRUCT), mArraySize(0), - mSubTypes(types), mUnioned(unioned) { + DTPrivateStructured(const DTypeDefVector& types, bool unioned) : DTPrivateBase(NT_STRUCT), + mSubTypes(types), + mArraySize(0), + mUnioned(unioned) { } /// Destructor @@ -586,7 +588,6 @@ //------------------------------------ DVariant DTypeDef::_get(char* ptr) { // Based on the type of the data and size, construct the Variant and return - int sz = mPriv->size(); // TODO: Big/Little endian fixes if (mPriv->type() == DVariant::DV_BOOL) { @@ -816,8 +817,6 @@ // Still not there, but close m.ToEulerAnglesZYX(z, y, x); - int16_t rot = *reinterpret_cast<int16_t*>(ptr); - writeLE<int16_t>(vptr , static_cast<int16_t>(x.valueRadians() * 32768 / Math::PI)); writeLE<int16_t>(vptr + 1, static_cast<int16_t>(y.valueRadians() * 32768 / Math::PI)); writeLE<int16_t>(vptr + 2, static_cast<int16_t>(z.valueRadians() * 32768 / Math::PI)); Modified: trunk/src/base/dyntype/DTypeDef.h =================================================================== --- trunk/src/base/dyntype/DTypeDef.h 2008-08-21 19:23:07 UTC (rev 802) +++ trunk/src/base/dyntype/DTypeDef.h 2008-08-21 19:27:23 UTC (rev 803) @@ -328,22 +328,13 @@ Fields mFields; FieldMap mFieldMap; - - private: - // Hidden copy constructor - DTypeDef(const DTypeDef &b) : mDefVal(0) {}; - - // Hidden default constructor - DTypeDef() : mDefVal(0) {}; - - DTypeDef& operator =(const DTypeDef &b) {}; }; /** DTypeDef 'variable'. Ugly and a bit outdated concept that should be got rid off soon. */ class DType { public: /** Copy constructor. Copies the data and the type definition from another DType instance */ - DType(const DType& b, bool useCache = false) : mCache(), mUseCache(useCache) { + DType(const DType& b, bool useCache = false) : mUseCache(useCache), mCache() { char* odata = mData; int sz = b.size(); @@ -447,12 +438,12 @@ /** Deserializer. Reads the type data into this instance * @param file The file pointer to read from */ - void read(FilePtr& file, size_t _size) { + void read(FilePtr& file, int _size) { delete[] mData; if (mType->size() < 0) { // dyn. size. we have to use the size // Size always has to be at least 4 bytes - assert(_size >= sizeof(uint32_t)); + assert(_size >= 4); mData = new char[_size]; Modified: trunk/src/base/file/File.cpp =================================================================== --- trunk/src/base/file/File.cpp 2008-08-21 19:23:07 UTC (rev 802) +++ trunk/src/base/file/File.cpp 2008-08-21 19:27:23 UTC (rev 803) @@ -396,7 +396,7 @@ /*--------------------- MemoryFile ---------------------*/ /*------------------------------------------------------*/ MemoryFile::MemoryFile(const std::string& name, AccessMode mode) : File(name, mode), mPages(), - mSize(0), mEof(true), mFilePos(0) { + mSize(0), mFilePos(0), mEof(true) { } //------------------------------------ Modified: trunk/src/base/file/FileGroup.cpp =================================================================== --- trunk/src/base/file/FileGroup.cpp 2008-08-21 19:23:07 UTC (rev 802) +++ trunk/src/base/file/FileGroup.cpp 2008-08-21 19:27:23 UTC (rev 803) @@ -72,7 +72,11 @@ mSrcFile->seek(0); // read the header - mSrcFile->readStruct(&mHeader, DarkDBHeader_Format, sizeof(DarkDBHeader)); + mSrcFile->readElem(&mHeader.inv_offset, 4); + mSrcFile->readElem(&mHeader.zero, 4); + mSrcFile->readElem(&mHeader.one, 4); + mSrcFile->read(&mHeader.zeros, 256); + mSrcFile->readElem(&mHeader.dead_beef, 4); // Sanity check if (mHeader.dead_beef != 0x0EFBEADDE) // Little endian encoded. would be 0xDEADBEEF on big-endian, etc. @@ -240,7 +244,11 @@ mHeader.dead_beef = 0x0EFBEADDE; // --- Let's write the header - dest->writeStruct(&mHeader, DarkDBHeader_Format, sizeof(DarkDBHeader)); + mSrcFile->writeElem(&mHeader.inv_offset, 4); + mSrcFile->writeElem(&mHeader.zero, 4); + mSrcFile->writeElem(&mHeader.one, 4); + mSrcFile->write(&mHeader.zeros, 256); + mSrcFile->writeElem(&mHeader.dead_beef, 4); it = mFiles.begin(); Modified: trunk/src/base/file/darkdb.h =================================================================== --- trunk/src/base/file/darkdb.h 2008-08-21 19:23:07 UTC (rev 802) +++ trunk/src/base/file/darkdb.h 2008-08-21 19:27:23 UTC (rev 803) @@ -30,9 +30,8 @@ namespace Opde { /* - * Header for Dark-engine Database. + * Header of Dark Engine's tag-file database. */ - static const char *DarkDBHeader_Format = "3i256ci"; typedef struct DarkDBHeader { uint32_t inv_offset; // Offset to inventory TOC from top of header Modified: trunk/src/base/loaders/ManualBinFileLoader.cpp =================================================================== --- trunk/src/base/loaders/ManualBinFileLoader.cpp 2008-08-21 19:23:07 UTC (rev 802) +++ trunk/src/base/loaders/ManualBinFileLoader.cpp 2008-08-21 19:27:23 UTC (rev 803) @@ -59,11 +59,11 @@ CalSkeletonLoader(const std::string& name, const std::string& group, Resource* resource) : mFileName(name), mGroup(group), + mResource(resource), + mFile(NULL), mTorsos(NULL), - mLimbs(NULL), - mFile(NULL), - mSkeleton(NULL), - mResource(resource) {}; + mLimbs(NULL), + mSkeleton(NULL) {}; ~CalSkeletonLoader() { delete[] mTorsos; @@ -220,16 +220,17 @@ class SubMeshFiller { public: SubMeshFiller(SubMesh* sm, size_t nvert, Vertex* vertices, size_t nnorms, Vertex* normals, size_t nlights, ObjLight* lights, size_t nuvs, UVMap* uvs, bool useuvmap) : - mSubMesh(sm), mVertices(vertices), mNormals(normals), mUVs(uvs), mUseUV(useuvmap), mBuilt(false), + mSubMesh(sm), + mSkeleton(NULL), + mLights(lights), mNumVerts(nvert), + mNumNorms(nnorms), mNumLights(nlights), - mLights(lights), - mNumNorms(nnorms), mNumUVs(nuvs) { }; @@ -615,9 +616,10 @@ class DarkBINFileLoader { public: DarkBINFileLoader(Mesh* mesh, const Opde::FilePtr& file, unsigned int version) : + mVersion(version), mMesh(mesh), - mFile(file), - mVersion(version) {}; + mFile(file) { + }; protected: unsigned int mVersion; @@ -637,11 +639,11 @@ mMaterialsExtra(NULL), mVHots(NULL), mVertices(NULL), + mLights(NULL), mUVs(NULL), mSubObjects(NULL), - mLights(NULL), + mNumUVs(0), mNumNorms(0), - mNumUVs(0), mNumLights(0) { if ((mVersion != 3) && (mVersion != 4)) @@ -1509,8 +1511,8 @@ mVertices(NULL), mNormals(NULL), mUVs(NULL), - mCalLoader(NULL), mTriangles(NULL), + mCalLoader(NULL), mVertexJointMap(NULL) { if (mVersion > 2 || mVersion < 1) Modified: trunk/src/bindings/bindings.h =================================================================== --- trunk/src/bindings/bindings.h 2008-08-21 19:23:07 UTC (rev 802) +++ trunk/src/bindings/bindings.h 2008-08-21 19:27:23 UTC (rev 803) @@ -40,8 +40,8 @@ }; template<typename T> struct TypeInfo : public TypeInfoBase { + char* typeName; VariableType type; - char* typeName; TypeInfo() : typeName("invalid"), type(VT_INVALID) {}; @@ -53,8 +53,8 @@ template<> struct TypeInfo<bool> { + char* typeName; VariableType type; - char* typeName; TypeInfo() : typeName("bool"), type(VT_BOOL) {}; @@ -68,8 +68,8 @@ }; template<> struct TypeInfo<int> { - VariableType type; char* typeName; + VariableType type; TypeInfo() : typeName("int"), type(VT_INT) {}; @@ -79,8 +79,8 @@ }; template<> struct TypeInfo<long> { + char* typeName; VariableType type; - char* typeName; TypeInfo() : typeName("long"), type(VT_LONG) {}; @@ -91,8 +91,8 @@ template<> struct TypeInfo<float> { + char* typeName; VariableType type; - char* typeName; TypeInfo() : typeName("float"), type(VT_FLOAT) {}; @@ -102,9 +102,9 @@ }; template<> struct TypeInfo<std::string> { + char* typeName; VariableType type; - char* typeName; - + TypeInfo() : typeName("std::string"), type(VT_STRING) {}; PyObject* toPyObject(const std::string& val) const { @@ -118,8 +118,8 @@ // DVariant type info template<> struct TypeInfo<DVariant> { + char* typeName; VariableType type; - char* typeName; TypeInfo() : typeName("DVariant"), type(VT_CUSTOM_TYPE) {}; Modified: trunk/src/main/GameState.cpp =================================================================== --- trunk/src/main/GameState.cpp 2008-08-21 19:23:07 UTC (rev 802) +++ trunk/src/main/GameState.cpp 2008-08-21 19:27:23 UTC (rev 803) @@ -28,6 +28,9 @@ } + GameState::~GameState() { + } + void GameState::pushState(GameState* state) { GameStateManager::getSingleton().pushState(state); } Modified: trunk/src/main/GameState.h =================================================================== --- trunk/src/main/GameState.h 2008-08-21 19:23:07 UTC (rev 802) +++ trunk/src/main/GameState.h 2008-08-21 19:27:23 UTC (rev 803) @@ -40,6 +40,9 @@ /** Constructor */ GameState(); + /** Destructor */ + virtual ~GameState(); + //---------- Events from StateManager for particular events /** Do a state startup. Called if the state becomes the new active game state (added to the state stack) */ virtual void start() = 0; Modified: trunk/src/main/GameStateManager.cpp =================================================================== --- trunk/src/main/GameStateManager.cpp 2008-08-21 19:23:07 UTC (rev 802) +++ trunk/src/main/GameStateManager.cpp 2008-08-21 19:27:23 UTC (rev 803) @@ -61,8 +61,8 @@ GameStateManager::GameStateManager(std::string GameType) : mStateStack(), mTerminate(false), + mLogger(NULL), mRoot(NULL), - mLogger(NULL), mStdLog(NULL), mConsoleBackend(NULL), mServiceMgr(NULL), Modified: trunk/src/main/PLDefScriptCompiler.cpp =================================================================== --- trunk/src/main/PLDefScriptCompiler.cpp 2008-08-21 19:23:07 UTC (rev 802) +++ trunk/src/main/PLDefScriptCompiler.cpp 2008-08-21 19:27:23 UTC (rev 803) @@ -336,7 +336,6 @@ //----------------------------------------------------------------------- void PLDefScriptCompiler::parseVersion(void) { int vid = getCurrentTokenID(); - ID_D_VER ? true : false; // now read next two tokens, and set the resulting version numbers String svmaj = getNextTokenLabel(); Modified: trunk/src/scenemanager/DarkBspNode.cpp =================================================================== --- trunk/src/scenemanager/DarkBspNode.cpp 2008-08-21 19:23:07 UTC (rev 802) +++ trunk/src/scenemanager/DarkBspNode.cpp 2008-08-21 19:27:23 UTC (rev 803) @@ -36,7 +36,7 @@ namespace Ogre { //----------------------------------------------------------------------- - BspNode::BspNode(SceneManager* owner, int id, int leafID, bool isLeaf) : mViewRect(PortalRect::EMPTY), mID(id), mLeafID(leafID) { + BspNode::BspNode(SceneManager* owner, int id, int leafID, bool isLeaf) : mID(id), mLeafID(leafID), mViewRect(PortalRect::EMPTY) { mOwner = owner; mIsLeaf = isLeaf; Modified: trunk/src/scenemanager/DarkCamera.cpp =================================================================== --- trunk/src/scenemanager/DarkCamera.cpp 2008-08-21 19:23:07 UTC (rev 802) +++ trunk/src/scenemanager/DarkCamera.cpp 2008-08-21 19:27:23 UTC (rev 803) @@ -145,7 +145,7 @@ if (cell == NULL) break; // no more cells to process - /**/ + */ cell = cell_queue[finishedCells++]; currentPos = finishedCells; Modified: trunk/src/scenemanager/DarkGeometry.cpp =================================================================== --- trunk/src/scenemanager/DarkGeometry.cpp 2008-08-21 19:23:07 UTC (rev 802) +++ trunk/src/scenemanager/DarkGeometry.cpp 2008-08-21 19:27:23 UTC (rev 803) @@ -160,7 +160,7 @@ // -------------------------------------------------------------------------- // ------------------------- DarkSubGeometry -------------------------------- // -------------------------------------------------------------------------- - DarkSubGeometry::DarkSubGeometry(const MaterialPtr& material, uint8 renderQueueID) : mMaterial(material), mRenderQueueID(renderQueueID), mBuilt(false), m16BitIndices(false) { + DarkSubGeometry::DarkSubGeometry(const MaterialPtr& material, uint8 renderQueueID) : m16BitIndices(false), mMaterial(material), mRenderQueueID(renderQueueID), mBuilt(false) { // Vertex data. For now, those are per-subgeom. Can be changed later (I'm trying to get 16-bit indices if possible) mRenderOp.vertexData = new VertexData(); @@ -507,7 +507,7 @@ // ----------------------------------------------------------------------- // ------------------------- DarkFragment -------------------------------- // ----------------------------------------------------------------------- - DarkFragment::DarkFragment(DarkSubGeometry* owner) : mOwner(owner), mCurrent(NULL), mBuilt(false), mIndexList(NULL), mIdxCount(0) { + DarkFragment::DarkFragment(DarkSubGeometry* owner) : mOwner(owner), mCurrent(NULL), mBuilt(false), mIdxCount(0), mIndexList(NULL) { mBuilder = new DarkFragmentBuilder(); } Modified: trunk/src/services/binary/BinaryService.cpp =================================================================== --- trunk/src/services/binary/BinaryService.cpp 2008-08-21 19:23:07 UTC (rev 802) +++ trunk/src/services/binary/BinaryService.cpp 2008-08-21 19:27:23 UTC (rev 803) @@ -36,7 +36,7 @@ /*------------------------------------------------------*/ /*-------------------- BinaryService -------------------*/ /*------------------------------------------------------*/ - BinaryService::BinaryService(ServiceManager* manager, const std::string& name) : mTypeGroups(), mEnumGroups(), Service(manager, name) { + BinaryService::BinaryService(ServiceManager* manager, const std::string& name) : Service(manager, name), mTypeGroups(), mEnumGroups() { Opde::ConsoleBackend::getSingleton().registerCommandListener("dtdesc", dynamic_cast<ConsoleCommandListener*>(this)); Opde::ConsoleBackend::getSingleton().setCommandHint("dtdesc", "Describe a dynamic type (param : dtype path)"); }; Modified: trunk/src/services/inherit/InheritCommon.h =================================================================== --- trunk/src/services/inherit/InheritCommon.h 2008-08-21 19:23:07 UTC (rev 802) +++ trunk/src/services/inherit/InheritCommon.h 2008-08-21 19:27:23 UTC (rev 803) @@ -61,6 +61,9 @@ * This means that all the objects that are changed by the inheritance modification can be notified through the listener */ class Inheritor : public MessageSource<InheritValueChangeMsg> { public: + /// default destructor + virtual ~Inheritor() {}; + /** Returns true if the objID has true 'implements' record */ virtual bool getImplements(int objID) const = 0; @@ -132,6 +135,8 @@ class InheritorFactory { public: InheritorFactory() {}; + + virtual ~InheritorFactory() {}; virtual std::string getName() const = 0; Modified: trunk/src/services/inherit/InheritService.cpp =================================================================== --- trunk/src/services/inherit/InheritService.cpp 2008-08-21 19:23:07 UTC (rev 802) +++ trunk/src/services/inherit/InheritService.cpp 2008-08-21 19:27:23 UTC (rev 803) @@ -52,7 +52,7 @@ class SimpleInheritQueryResult : public InheritQueryResult { public: - SimpleInheritQueryResult(const InheritService::InheritLinkMap& linkmap) : mLinkMap(linkmap), InheritQueryResult() { + SimpleInheritQueryResult(const InheritService::InheritLinkMap& linkmap) : InheritQueryResult(), mLinkMap(linkmap) { mIter = mLinkMap.begin(); } @@ -172,7 +172,7 @@ // Read the link source, destination and priority // Get the priority of the link - unsigned int priority; + unsigned int priority = 0; if (msg.change != LNK_REMOVED) // Do not waste time if the link is removed priority = mMetaPropRelation->getLinkField(msg.linkID, "priority").toUInt(); // Hardcoded! Could be parametrized @@ -201,7 +201,6 @@ // Remove the link _removeLink(l); - } } Modified: trunk/src/services/input/InputService.cpp =================================================================== --- trunk/src/services/input/InputService.cpp 2008-08-21 19:23:07 UTC (rev 802) +++ trunk/src/services/input/InputService.cpp 2008-08-21 19:27:23 UTC (rev 803) @@ -42,9 +42,9 @@ /*-----------------------------------------------------*/ InputService::InputService(ServiceManager *manager, const std::string& name) : Service(manager, name), + mDirectListener(NULL), mMouse(NULL), mKeyboard(NULL), - mDirectListener(NULL), mInputMode(IM_MAPPED) { // Loop client definition Modified: trunk/src/services/input/InputService.h =================================================================== --- trunk/src/services/input/InputService.h 2008-08-21 19:23:07 UTC (rev 802) +++ trunk/src/services/input/InputService.h 2008-08-21 19:27:23 UTC (rev 803) @@ -94,6 +94,8 @@ /// Listener for the direct - unfiltered events. Typically one per application (GUIService for example) class DirectInputListener { public: + virtual ~DirectInputListener() {}; + virtual bool keyPressed( const OIS::KeyEvent &e ) = 0; virtual bool keyReleased( const OIS::KeyEvent &e ) = 0; Modified: trunk/src/services/link/LinkCommon.h =================================================================== --- trunk/src/services/link/LinkCommon.h 2008-08-21 19:23:07 UTC (rev 802) +++ trunk/src/services/link/LinkCommon.h 2008-08-21 19:27:23 UTC (rev 803) @@ -74,16 +74,16 @@ public: /// Constructor - Creates empty data defined by default values in type - LinkData(link_id_t id, const DTypeDefPtr& type, bool useCache = false) : mID(id), DType(type, useCache) { }; + LinkData(link_id_t id, const DTypeDefPtr& type, bool useCache = false) : DType(type, useCache), mID(id) { }; /// Constructor - Loads data from FilePtr - LinkData(link_id_t id, const DTypeDefPtr& type, FilePtr file, int _size, bool useCache = false) : mID(id), DType(type,file,_size, useCache) { }; + LinkData(link_id_t id, const DTypeDefPtr& type, FilePtr file, int _size, bool useCache = false) : DType(type,file,_size, useCache), mID(id) { }; /// Constructor - copies the data from another DType instance - LinkData(link_id_t id, const DType& type, bool useCache = false) : mID(id), DType(type, useCache) {}; + LinkData(link_id_t id, const DType& type, bool useCache = false) : DType(type, useCache), mID(id) {}; /// Constructor - copies the data from DTypePtr instance - LinkData(link_id_t id, const DTypePtr& type, bool useCache = false) : mID(id), DType(*type, useCache) {}; + LinkData(link_id_t id, const DTypePtr& type, bool useCache = false) : DType(*type, useCache), mID(id) {}; /// Destructor - Deletes the data ~LinkData() { }; Modified: trunk/src/services/link/Relation.cpp =================================================================== --- trunk/src/services/link/Relation.cpp 2008-08-21 19:23:07 UTC (rev 802) +++ trunk/src/services/link/Relation.cpp 2008-08-21 19:27:23 UTC (rev 803) @@ -150,7 +150,7 @@ // if the chunk LD exists, and contains at least the data size, load the data size, and set to load data as well bool load_data = false; - size_t dsize = 0; + int dsize = 0; if (fldata->size() > sizeof(uint32_t)) { fldata->readElem(&dsize, sizeof(uint32_t)); Modified: trunk/src/services/loop/LoopService.cpp =================================================================== --- trunk/src/services/loop/LoopService.cpp 2008-08-21 19:23:07 UTC (rev 802) +++ trunk/src/services/loop/LoopService.cpp 2008-08-21 19:27:23 UTC (rev 803) @@ -104,6 +104,9 @@ /*---------------------------------------------------*/ /*-------------------- LoopClient -------------------*/ /*---------------------------------------------------*/ + LoopClient::~LoopClient() { + } + void LoopClient::loopModeStarted(const LoopModeDefinition& loopMode) { } Modified: trunk/src/services/loop/LoopService.h =================================================================== --- trunk/src/services/loop/LoopService.h 2008-08-21 19:23:07 UTC (rev 802) +++ trunk/src/services/loop/LoopService.h 2008-08-21 19:27:23 UTC (rev 803) @@ -90,6 +90,9 @@ protected: friend class LoopService; friend class LoopMode; + + /// default destructor + virtual ~LoopClient(); /** Loop mode started event. Called on the start of the frame, if a loop mode changed and * this client is a listener of the new loop mode Modified: trunk/src/services/object/ObjectService.cpp =================================================================== --- trunk/src/services/object/ObjectService.cpp 2008-08-21 19:23:07 UTC (rev 802) +++ trunk/src/services/object/ObjectService.cpp 2008-08-21 19:27:23 UTC (rev 803) @@ -41,12 +41,12 @@ /*-------------------- ObjectService -------------------*/ /*------------------------------------------------------*/ ObjectService::ObjectService(ServiceManager *manager, const std::string& name) : Service(manager, name), + mAllocatedObjects(-6144, 2048), mDatabaseService(NULL), mObjVecVerMaj(0), // Seems to be the same for all versions mObjVecVerMin(2), mSceneMgr(NULL), - mSymNameStorage(NULL), - mAllocatedObjects(-6144, 2048) { + mSymNameStorage(NULL) { } @@ -305,8 +305,6 @@ int32_t minID, maxID; - bool archetypeOnly = (loadMask==0x01); - FilePtr f = db->getFile("ObjVec"); // Load min and max Modified: trunk/src/services/property/PropertyCommon.h =================================================================== --- trunk/src/services/property/PropertyCommon.h 2008-08-21 19:23:07 UTC (rev 802) +++ trunk/src/services/property/PropertyCommon.h 2008-08-21 19:27:23 UTC (rev 803) @@ -36,7 +36,7 @@ public: /** Constructor. Constructs new data buffer, filled with zeros */ - PropertyData(int id, const DTypeDefPtr& type, bool useCache = false) : mID(id), DType(type, useCache) { }; + PropertyData(int id, const DTypeDefPtr& type, bool useCache = false) : DType(type, useCache), mID(id) {}; /** Constructor - loads data from FilePtr * @param id The object ID @@ -44,17 +44,17 @@ * @param file The File pointer (FilePtr) to load data from * @param _size the size of the data to be loaded * */ - PropertyData(int id, const DTypeDefPtr& type, FilePtr file, int _size, bool useCache = false) : mID(id), DType(type, file, _size, useCache) { }; + PropertyData(int id, const DTypeDefPtr& type, FilePtr file, int _size, bool useCache = false) : DType(type, file, _size, useCache), mID(id) { }; /** Constructor - takes object id and data instance * @param id The object ID * @param data The Data instance to copy the data from */ - PropertyData(int id, const DTypePtr& data, bool useCache = false) : mID(id), DType(*data, useCache) { }; + PropertyData(int id, const DTypePtr& data, bool useCache = false) : DType(*data, useCache), mID(id) { }; /** PropertyData cloning constructor * @param id The object ID * @param data The Data instance to copy the data from */ - PropertyData(int id, const PropertyData& data, bool useCache = false) : mID(id), DType(data, useCache) { }; + PropertyData(int id, const PropertyData& data, bool useCache = false) : DType(data, useCache), mID(id) { }; /** Destructor */ ~PropertyData() { }; Modified: trunk/src/services/property/PropertyGroup.cpp =================================================================== --- trunk/src/services/property/PropertyGroup.cpp 2008-08-21 19:23:07 UTC (rev 802) +++ trunk/src/services/property/PropertyGroup.cpp 2008-08-21 19:27:23 UTC (rev 803) @@ -32,12 +32,12 @@ // -------------------------------------------------------------------------- PropertyGroup::PropertyGroup(PropertyService* owner, const std::string& name, const std::string& chunk_name, const DataStoragePtr& storage, std::string inheritorName) : - mOwner(owner), mName(name), mChunkName(chunk_name), mVerMaj(1), mVerMin(1), mPropertyStorage(NULL), + mOwner(owner), mBuiltin(false) { // Find the inheritor by the name, and assign too Modified: trunk/src/services/property/PropertyStorage.cpp =================================================================== --- trunk/src/services/property/PropertyStorage.cpp 2008-08-21 19:23:07 UTC (rev 802) +++ trunk/src/services/property/PropertyStorage.cpp 2008-08-21 19:27:23 UTC (rev 803) @@ -74,8 +74,6 @@ mTypeDef(type), mUseDataCache(useDataCache), mFieldDesc(type) { - - } // -------------------------------------------------------------------------- Modified: trunk/src/services/property/PropertyStorage.h =================================================================== --- trunk/src/services/property/PropertyStorage.h 2008-08-21 19:23:07 UTC (rev 802) +++ trunk/src/services/property/PropertyStorage.h 2008-08-21 19:27:23 UTC (rev 803) @@ -38,6 +38,8 @@ */ class DataStorage { public: + virtual ~DataStorage() {}; + /** Creates a default-value data for object numbered objID * @param objID The object ID * @return true if creation wen't ok, false if something went wrong (object already has the data attached) Modified: trunk/src/services/render/MaterialInstance.h =================================================================== --- trunk/src/services/render/MaterialInstance.h 2008-08-21 19:23:07 UTC (rev 802) +++ trunk/src/services/render/MaterialInstance.h 2008-08-21 19:27:23 UTC (rev 803) @@ -57,7 +57,7 @@ /** Destructor. * @note Destroys the copy material if needed. */ - ~MaterialInstance (); + virtual ~MaterialInstance (); /** Sets the blending method to use to adjust transparency. * @param sbt The SceneBlendType desired. */ Modified: trunk/src/services/render/RenderService.cpp =================================================================== --- trunk/src/services/render/RenderService.cpp 2008-08-21 19:23:07 UTC (rev 802) +++ trunk/src/services/render/RenderService.cpp 2008-08-21 19:27:23 UTC (rev 803) @@ -67,8 +67,8 @@ RenderService::RenderService(ServiceManager *manager, const std::string& name) : Service(manager, name), mSceneMgr(NULL), mRoot(NULL), + mRenderWindow(NULL), mDarkSMFactory(NULL), - mRenderWindow(NULL), mLoopService(NULL), mDefaultCamera(NULL), mEditorMode(false) { @@ -431,6 +431,7 @@ case PROP_REMOVED: removeLight(msg.objectID); + } } Modified: trunk/src/services/render/SubEntityMaterialInstance.h =================================================================== --- trunk/src/services/render/SubEntityMaterialInstance.h 2008-08-21 19:23:07 UTC (rev 802) +++ trunk/src/services/render/SubEntityMaterialInstance.h 2008-08-21 19:27:23 UTC (rev 803) @@ -32,7 +32,7 @@ /** Destructor. * @note Destroys the copy material if needed. */ - ~SubEntityMaterialInstance (); + virtual ~SubEntityMaterialInstance (); /** Changes this SubEntity material and does any needed operations to keep the previous * material instance parameters (transparency and such). * @param name Name of the new material. Modified: trunk/src/services/script/ScriptService.h =================================================================== --- trunk/src/services/script/ScriptService.h 2008-08-21 19:23:07 UTC (rev 802) +++ trunk/src/services/script/ScriptService.h 2008-08-21 19:27:23 UTC (rev 803) @@ -56,6 +56,8 @@ class ObjectScriptModule { public: ObjectScriptModule(std::string& name); + + virtual ~ObjectScriptModule(); /// Returns true if this module handles a certain script type named name virtual bool handlesScript(std::string& name); Modified: trunk/src/services/worldrep/WRCell.cpp =================================================================== --- trunk/src/services/worldrep/WRCell.cpp 2008-08-21 19:23:07 UTC (rev 802) +++ trunk/src/services/worldrep/WRCell.cpp 2008-08-21 19:27:23 UTC (rev 803) @@ -798,10 +798,9 @@ assert(loaded); assert(atlased); - int portalStart = header.num_polygons - header.num_portals; - // Contains material name -> polygon list std::map<std::string, std::vector<int> > matToPolys; + // polygon index to txt Dimensions std::map<int, std::pair<uint,uint> > polyToDim; @@ -919,8 +918,6 @@ assert(loaded); assert(atlased); - int portalStart = header.num_polygons - header.num_portals; - // Contains material name -> polygon list std::map<std::string, std::vector<int> > matToPolys; // polygon index to txt Dimensions Modified: trunk/src/services/worldrep/WorldRepService.cpp =================================================================== --- trunk/src/services/worldrep/WorldRepService.cpp 2008-08-21 19:23:07 UTC (rev 802) +++ trunk/src/services/worldrep/WorldRepService.cpp 2008-08-21 19:27:23 UTC (rev 803) @@ -225,8 +225,6 @@ wr_hdr_t header; wrChunk->read(&header, sizeof(wr_hdr_t)); - SceneNode *rootSceneNode = mSceneMgr->getRootSceneNode(); - // If there is some scene already, clear it // clearData(); This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <pa...@us...> - 2008-08-22 01:01:12
|
Revision: 804 http://opde.svn.sourceforge.net/opde/?rev=804&view=rev Author: patryn Date: 2008-08-22 01:01:21 +0000 (Fri, 22 Aug 2008) Log Message: ----------- Fixed a destructor that was defined twice. Fixed a non-void function that was not returning anything. Fixed some minor warnings. Some minor clean ups. Added some $Id$ keywords. Modified Paths: -------------- trunk/proto/PHYS_SYSTEM/readphs.cpp trunk/src/base/Dark/DarkDBDefs.h trunk/src/base/PrioritizedMessageSource.h trunk/src/main/Opde.cpp trunk/src/main/OpdeDocGen.cpp Modified: trunk/proto/PHYS_SYSTEM/readphs.cpp =================================================================== --- trunk/proto/PHYS_SYSTEM/readphs.cpp 2008-08-21 19:27:23 UTC (rev 803) +++ trunk/proto/PHYS_SYSTEM/readphs.cpp 2008-08-22 01:01:21 UTC (rev 804) @@ -350,7 +350,7 @@ case 2: case 4: // The radiuses are repeated for all the sub-objects - for (int n = 0; n < submodel_count; n++) { + for (unsigned int n = 0; n < submodel_count; n++) { float radius; fread(&radius,4,1,f); printf("\tSphere %d - Radius %8.2g\n", n, radius); @@ -453,10 +453,10 @@ int total_subobjdata = 0; printf("\tSubobj Counts : "); - for (int n = 0; n < num_subobjs; n++) { + for (unsigned int n = 0; n < num_subobjs; n++) { printf("%d", subobj_counts[n]); total_subobjdata += subobj_counts[n]; - if (n < num_subobjs-1) + if (n < num_subobjs - 1) printf(", "); } printf("\n"); @@ -478,15 +478,15 @@ // This looks rope related // Spring tension, spring damping that is printf("\t Spring connection of sub-objects (%d) : \n", num_subobjs); - for (int n = 0; n < num_subobjs; n++) { + for (unsigned int n = 0; n < num_subobjs; n++) { printf("\t\t %d : ", n); // float x; - fread(&x,1,4,f); + fread(&x, 1, 4, f); printf("[Spring Tension] %8.2g ", x); - fread(&x,1,4,f); + fread(&x, 1, 4, f); printf("[Spring Damping] %8.2g ", x); // @@ -536,10 +536,10 @@ /* The last sub-object is set to the center of the Collision Volume. */ - for (int n = 0; n < num_subobjs + 1; n++) { + for (unsigned int n = 0; n < num_subobjs + 1; n++) { // printf("\t SUBOBJ[%4d] : ",n); readStruct("FFFLFFFFXFFFFFLFXX", f);printf("\n"); // printf("\t SUBOBJ[%4d] : ",n); readStruct("FFFXXXFFXXXFFFXXXX", f);printf("\n"); - printf("\t SUBOBJ[%4d] :\n",n); readSubObject(f); + printf("\t SUBOBJ[%4d] :\n", n); readSubObject(f); } @@ -548,14 +548,14 @@ // Sub Object direction Vectors (translations from the center) fpos(f); - for (int n = 0; n < num_subobjs; n++) { + for (unsigned int n = 0; n < num_subobjs; n++) { printf("\tSubObj Translation vec. [%6d] : ", n); readVector3(f); } fpos(f); // Count of the velocity descriptions... I have to look for the right place to cut the following structures. Velocity for example is defined twice... uint32 vel_counts; - fread(&vel_counts,1,4,f); + fread(&vel_counts, 1, 4, f); printf("\tVel. counts : %d\n", vel_counts); fpos(f); @@ -612,7 +612,7 @@ // Dunno if this condition is right. count_submodels > 1 didn't work well if (vel_counts >= 2) { // should be while sub model number >0 maybe - for (int a = 0; a < count_submodels; a++) { + for (unsigned int a = 0; a < count_submodels; a++) { fpos(f); // Something like a signature (54 18 BE 01) @@ -620,7 +620,7 @@ // Subobject index uint32 subobj_idx; - fread(&subobj_idx,1,4,f); + fread(&subobj_idx, 1, 4, f); printf("\tSubobject index : %d\n", subobj_idx); // Now follow 108 bytes (27 longs) @@ -828,9 +828,9 @@ fread(&obj_count,sizeof(obj_count),1,f); printf("Group %d object count : %d\n", group, obj_count); - for (int n = 0; n < obj_count; n++) { + for (unsigned int n = 0; n < obj_count; n++) { if (!readObjectPhys(f, n, hdr.phys_version)) { - fprintf(stderr,"Error encountered, ending readout\n"); + fprintf(stderr, "Error encountered, ending readout\n"); break; } } @@ -841,7 +841,7 @@ // something here I think. Can be the 4. list of objects, or something else.... dunno. uint32 len; - fread(&len,sizeof(len),1,f); + fread(&len, sizeof(len), 1, f); printf("Extra data count : %d\n", len); fpos(f); Modified: trunk/src/base/Dark/DarkDBDefs.h =================================================================== --- trunk/src/base/Dark/DarkDBDefs.h 2008-08-21 19:27:23 UTC (rev 803) +++ trunk/src/base/Dark/DarkDBDefs.h 2008-08-22 01:01:21 UTC (rev 804) @@ -18,6 +18,8 @@ * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA * + * $Id$ + * *****************************************************************************/ /*********************************************************** Modified: trunk/src/base/PrioritizedMessageSource.h =================================================================== --- trunk/src/base/PrioritizedMessageSource.h 2008-08-21 19:27:23 UTC (rev 803) +++ trunk/src/base/PrioritizedMessageSource.h 2008-08-22 01:01:21 UTC (rev 804) @@ -17,6 +17,8 @@ * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA * + * $Id$ + * *****************************************************************************/ #ifndef __PRIORITIZEDMESSAGESOURCE_H @@ -29,11 +31,11 @@ namespace Opde { /** Prioritized Message Source - a message source doing callbacks in a deterministic order - * M stands for the message type sended + * M stands for the message type sent */ template <typename M> class PrioritizedMessageSource { public: - virtual ~PrioritizedMessageSource() {}; + //virtual ~PrioritizedMessageSource() {}; typedef int Priority; Modified: trunk/src/main/Opde.cpp =================================================================== --- trunk/src/main/Opde.cpp 2008-08-21 19:27:23 UTC (rev 803) +++ trunk/src/main/Opde.cpp 2008-08-22 01:01:21 UTC (rev 804) @@ -17,6 +17,8 @@ * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA * + * $Id$ + * *****************************************************************************/ #include "GameStateManager.h" Modified: trunk/src/main/OpdeDocGen.cpp =================================================================== --- trunk/src/main/OpdeDocGen.cpp 2008-08-21 19:27:23 UTC (rev 803) +++ trunk/src/main/OpdeDocGen.cpp 2008-08-22 01:01:21 UTC (rev 804) @@ -17,6 +17,8 @@ * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA * + * $Id$ + * *****************************************************************************/ #include "GameStateManager.h" @@ -74,7 +76,7 @@ return true; } - bool initialize(void) { + void initialize(void) { // parse the config file. Load the dtype scripts // this is done automatically by adding the resource locations // then bootstrapping This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <vo...@us...> - 2008-09-10 20:11:31
|
Revision: 834 http://opde.svn.sourceforge.net/opde/?rev=834&view=rev Author: volca Date: 2008-09-10 20:11:24 +0000 (Wed, 10 Sep 2008) Log Message: ----------- MSVC Compatibility fixes (targetted at OpdeLib.dll) * OPDELIB_EXPORT macro introduced that controls the dll exportation visibility * Compilation fixed to the stage it builds, but does not run (singleton instance sharing issue) * some minor formatting fixes (I really need to switch on tab display in C::B) * Warning fixes, possibly Modified Paths: -------------- trunk/config.h.cmake trunk/proto/CMakeLists.txt trunk/src/base/BitArray.h trunk/src/base/CMakeLists.txt trunk/src/base/Callback.h trunk/src/base/Iterator.h trunk/src/base/MessageSource.h trunk/src/base/NonCopyable.h trunk/src/base/OpdeException.h trunk/src/base/OpdeSingleton.h trunk/src/base/PrioritizedMessageSource.h trunk/src/base/RefCounted.h trunk/src/base/SharedPtr.h trunk/src/base/StringTokenizer.h trunk/src/base/console/CMakeLists.txt trunk/src/base/console/ConsoleBackend.cpp trunk/src/base/console/ConsoleBackend.h trunk/src/base/console/ConsoleCommandListener.h trunk/src/base/console/ConsoleFrontend.cpp trunk/src/base/console/ConsoleFrontend.h trunk/src/base/dyntype/DTypeDef.cpp trunk/src/base/dyntype/DTypeDef.h trunk/src/base/dyntype/DVariant.h trunk/src/base/file/File.h trunk/src/base/file/FileGroup.h trunk/src/base/loaders/ManualBinFileLoader.cpp trunk/src/base/loaders/ManualBinFileLoader.h trunk/src/base/loaders/ManualFonFileLoader.h trunk/src/base/logger/OgreOpdeLogConnector.h trunk/src/base/logger/filelog.h trunk/src/base/logger/logger.cpp trunk/src/base/logger/logger.h trunk/src/base/logger/stdlog.h trunk/src/base/servicemanager/CMakeLists.txt trunk/src/base/servicemanager/OpdeService.cpp trunk/src/base/servicemanager/OpdeService.h trunk/src/base/servicemanager/OpdeServiceFactory.h trunk/src/base/servicemanager/OpdeServiceManager.cpp trunk/src/base/servicemanager/OpdeServiceManager.h trunk/src/main/CMakeLists.txt trunk/src/main/CustomImageCodec.h trunk/src/main/DTypeScriptCompiler.h trunk/src/main/DTypeScriptLoader.h trunk/src/main/GameLoadState.cpp trunk/src/main/GameLoadState.h trunk/src/main/GamePlayState.cpp trunk/src/main/GamePlayState.h trunk/src/main/GameState.cpp trunk/src/main/GameState.h trunk/src/main/GameStateManager.cpp trunk/src/main/GameStateManager.h trunk/src/main/Opde.cpp trunk/src/main/OpdeDocGen.cpp trunk/src/main/PLDefScriptCompiler.cpp trunk/src/main/PLDefScriptCompiler.h trunk/src/main/PLDefScriptLoader.cpp trunk/src/main/PLDefScriptLoader.h trunk/src/main/Root.cpp trunk/src/main/Root.h trunk/src/scenemanager/DarkBspNode.h trunk/src/scenemanager/DarkBspPrerequisites.h trunk/src/scenemanager/DarkBspTree.h trunk/src/scenemanager/DarkCamera.h trunk/src/scenemanager/DarkConvexPolygon.h trunk/src/scenemanager/DarkGeometry.h trunk/src/scenemanager/DarkLight.h trunk/src/scenemanager/DarkPortal.h trunk/src/scenemanager/DarkPortalFrustum.h trunk/src/scenemanager/DarkSceneManager.h trunk/src/scenemanager/DarkSceneNode.h trunk/src/services/binary/BinaryService.h trunk/src/services/binary/CMakeLists.txt trunk/src/services/config/CMakeLists.txt trunk/src/services/config/ConfigService.h trunk/src/services/database/CMakeLists.txt trunk/src/services/database/DatabaseService.h trunk/src/services/game/CMakeLists.txt trunk/src/services/game/GameService.h trunk/src/services/gui/CMakeLists.txt trunk/src/services/gui/GUIService.h trunk/src/services/inherit/CMakeLists.txt trunk/src/services/inherit/InheritService.h trunk/src/services/input/CMakeLists.txt trunk/src/services/link/CMakeLists.txt trunk/src/services/link/LinkService.h trunk/src/services/link/Relation.h trunk/src/services/loop/CMakeLists.txt trunk/src/services/loop/LoopService.h trunk/src/services/object/ObjectService.h trunk/src/services/property/CMakeLists.txt trunk/src/services/property/PropertyGroup.h trunk/src/services/property/PropertyService.h trunk/src/services/property/PropertyStorage.h trunk/src/services/render/CMakeLists.txt trunk/src/services/render/RenderService.h trunk/src/services/script/CMakeLists.txt trunk/src/services/script/ScriptService.cpp trunk/src/services/script/ScriptService.h trunk/src/services/worldrep/CMakeLists.txt trunk/src/services/worldrep/WRCell.h trunk/src/services/worldrep/WRTypes.h trunk/src/services/worldrep/WorldRepService.h Added Paths: ----------- trunk/src/base/console/ConsoleCommandListener.cpp Modified: trunk/config.h.cmake =================================================================== --- trunk/config.h.cmake 2008-09-10 20:00:08 UTC (rev 833) +++ trunk/config.h.cmake 2008-09-10 20:11:24 UTC (rev 834) @@ -1,17 +1,36 @@ -#ifndef _CONFIG_H -#define _CONFIG_H - -#cmakedefine HAVE_INTTYPES_H 1 - -#cmakedefine OPDE_DEBUG -#cmakedefine __STATIC_GEOMETRY -#cmakedefine CUSTOM_IMAGE_HOOKS -#cmakedefine PYTHON_SUPPORT - -#define OPDE_VER_MAJOR ${OPDE_VER_MAJOR} -#define OPDE_VER_MINOR ${OPDE_VER_MINOR} -#define OPDE_VER_PATCH ${OPDE_VER_PATCH} - -#cmakedefine __OPDE_BIG_ENDIAN ${BIG_ENDIAN} - -#endif +#ifndef _CONFIG_H +#define _CONFIG_H + +#cmakedefine HAVE_INTTYPES_H 1 + +#cmakedefine OPDE_DEBUG +#cmakedefine __STATIC_GEOMETRY +#cmakedefine CUSTOM_IMAGE_HOOKS +#cmakedefine PYTHON_SUPPORT + +#define OPDE_VER_MAJOR ${OPDE_VER_MAJOR} +#define OPDE_VER_MINOR ${OPDE_VER_MINOR} +#define OPDE_VER_PATCH ${OPDE_VER_PATCH} + +#cmakedefine __OPDE_BIG_ENDIAN ${BIG_ENDIAN} + +// DLL export/import stuff for OpdeLib +// If the build target is OpdeLib, the OpdeLib_EXPORTS is defined, +// otherwise it is not. Trouble is we need it unset for all library targets, +// so that all the static libs build and can be linked together. +// We also want OPDELIB_EXPORT to be dllimport for executables +// Thus, we define our own macros in the CMakeLists.txt files that define the +// contents of the OPDELIB_EXPORT +#if defined (_WIN32) // It is said that mingw also tolerates __declspec + #if defined(OPDELIB_DLL_TARGET) + #define OPDELIB_EXPORT __declspec(dllexport) + #elif defined(OPDE_EXE_TARGET) + #define OPDELIB_EXPORT __declspec(dllimport) + #else + #define OPDELIB_EXPORT + #endif /* OpdeLib_EXPORTS */ +#else /* defined (_WIN32) */ + #define OPDELIB_EXPORT +#endif + +#endif Modified: trunk/proto/CMakeLists.txt =================================================================== --- trunk/proto/CMakeLists.txt 2008-09-10 20:00:08 UTC (rev 833) +++ trunk/proto/CMakeLists.txt 2008-09-10 20:11:24 UTC (rev 834) @@ -1,8 +1,4 @@ -# $Id$ - -add_subdirectory(PHYS_SYSTEM) - -if(PYTHON_SUPPORT) - add_subdirectory(python) -endif(PYTHON_SUPPORT) - +# $Id$ + +add_subdirectory(PHYS_SYSTEM) +add_subdirectory(python) Modified: trunk/src/base/BitArray.h =================================================================== --- trunk/src/base/BitArray.h 2008-09-10 20:00:08 UTC (rev 833) +++ trunk/src/base/BitArray.h 2008-09-10 20:11:24 UTC (rev 834) @@ -25,6 +25,8 @@ #ifndef __BITARRAY_H #define __BITARRAY_H +#include "config.h" + #include "OpdeException.h" namespace Opde { Modified: trunk/src/base/CMakeLists.txt =================================================================== --- trunk/src/base/CMakeLists.txt 2008-09-10 20:00:08 UTC (rev 833) +++ trunk/src/base/CMakeLists.txt 2008-09-10 20:11:24 UTC (rev 834) @@ -1,14 +1,16 @@ -add_subdirectory(logger) -add_subdirectory(console) -add_subdirectory(servicemanager) -# add_subdirectory(gui) -add_subdirectory(file) -add_subdirectory(dyntype) -# Commented for now. In progress - not compilable -add_subdirectory(loaders) - -FILE(GLOB OPDE_BASE_HEADERS *.h) - -add_library ( OpdeBase OpdeException.cpp RefCounted.cpp - ${OPDE_BASE_HEADERS} -) +add_subdirectory(logger) +add_subdirectory(console) +add_subdirectory(servicemanager) +add_subdirectory(file) +add_subdirectory(dyntype) +add_subdirectory(loaders) + +FILE(GLOB OPDE_BASE_HEADERS *.h) + +include_directories( + ${OPDE_BINARY_DIR} +) + +add_library ( OpdeBase OpdeException.cpp RefCounted.cpp + ${OPDE_BASE_HEADERS} +) Modified: trunk/src/base/Callback.h =================================================================== --- trunk/src/base/Callback.h 2008-09-10 20:00:08 UTC (rev 833) +++ trunk/src/base/Callback.h 2008-09-10 20:11:24 UTC (rev 834) @@ -1,58 +1,60 @@ -/****************************************************************************** - * - * This file is part of openDarkEngine project - * Copyright (C) 2005-2006 openDarkEngine team - * - * This program is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation; either version 2 of the License, or - * (at your option) any later version. - * - * This program 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 General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA - * - * - * $Id$ - * - *****************************************************************************/ - -#ifndef __CALLBACK_H -#define __CALLBACK_H - -namespace Opde { - - /** An abstract callback functor definition. */ - template <class M> class Callback { - public: - virtual void operator ()(const M& msg) = 0; - - virtual ~Callback() {}; - }; - - /** A callback definition for a class method. One parameter callback implementation. - * The template parameter I is the instance class */ - template <class MSG, class I> class ClassCallback : public Callback<MSG> { - public: - typedef void (I::*Method)(const MSG& msg); - - ClassCallback(I* instance, Method method) : mInstance(instance), mMethod(method) {}; - - virtual ~ClassCallback() {}; - - virtual void operator ()(const MSG& msg) { - (*mInstance.*mMethod)(msg); - } - - protected: - I* mInstance; - Method mMethod; - }; -} - -#endif +/****************************************************************************** + * + * This file is part of openDarkEngine project + * Copyright (C) 2005-2006 openDarkEngine team + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * This program 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 General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + * + * + * $Id$ + * + *****************************************************************************/ + +#ifndef __CALLBACK_H +#define __CALLBACK_H + +#include "config.h" + +namespace Opde { + + /** An abstract callback functor definition. */ + template <class M> class Callback { + public: + virtual void operator ()(const M& msg) = 0; + + virtual ~Callback() {}; + }; + + /** A callback definition for a class method. One parameter callback implementation. + * The template parameter I is the instance class */ + template <class MSG, class I> class ClassCallback : public Callback<MSG> { + public: + typedef void (I::*Method)(const MSG& msg); + + ClassCallback(I* instance, Method method) : mInstance(instance), mMethod(method) {}; + + virtual ~ClassCallback() {}; + + virtual void operator ()(const MSG& msg) { + (*mInstance.*mMethod)(msg); + } + + protected: + I* mInstance; + Method mMethod; + }; +} + +#endif Modified: trunk/src/base/Iterator.h =================================================================== --- trunk/src/base/Iterator.h 2008-09-10 20:00:08 UTC (rev 833) +++ trunk/src/base/Iterator.h 2008-09-10 20:11:24 UTC (rev 834) @@ -1,83 +1,88 @@ -/****************************************************************************** - * - * This file is part of openDarkEngine project - * Copyright (C) 2005-2006 openDarkEngine team - * - * This program is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation; either version 2 of the License, or - * (at your option) any later version. - * - * This program 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 General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA - * - *****************************************************************************/ - -#ifndef __ITERATOR_H -#define __ITERATOR_H - -namespace Opde { - - /** A java-like iterator approach */ - template <typename T> class Iterator { - public: - virtual ~Iterator(void) {}; - virtual T& next() = 0; - virtual bool end() const = 0; - }; - - - /** A const, java-like iterator approach */ - template <typename T> class ConstIterator { - public: - virtual ~ConstIterator(void) {}; - virtual const T& next() = 0; - virtual bool end() const = 0; - }; - - /// Class representing a const string iterator - typedef ConstIterator< std::string > StringIterator; - - /// Shared pointer instance to const string iterator - typedef shared_ptr< StringIterator > StringIteratorPtr; - - /// Class representing a const int iterator - typedef ConstIterator< int > IntIterator; - - /// Shared pointer instance to const int iterator - typedef shared_ptr< IntIterator > IntIteratorPtr; - - /// Map key iterator - template<class C, typename T> class MapKeyIterator : public ConstIterator<T> { - public: - MapKeyIterator(const C& map) : mMap(map) { - mIter = mMap.begin(); - } - - const T& next() { - assert(!end()); - - const int& val = mIter->first; - - ++mIter; - - return val; - }; - - bool end() const { - return mIter == mMap.end(); - }; - - protected: - const C& mMap; - typename C::const_iterator mIter; - }; -} - -#endif +/****************************************************************************** + * + * This file is part of openDarkEngine project + * Copyright (C) 2005-2006 openDarkEngine team + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * This program 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 General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + * + * + * $Id$ + * + *****************************************************************************/ + +#ifndef __ITERATOR_H +#define __ITERATOR_H + +#include "config.h" + +namespace Opde { + + /** A java-like iterator approach */ + template <typename T> class Iterator { + public: + virtual ~Iterator(void) {}; + virtual T& next() = 0; + virtual bool end() const = 0; + }; + + + /** A const, java-like iterator approach */ + template <typename T> class ConstIterator { + public: + virtual ~ConstIterator(void) {}; + virtual const T& next() = 0; + virtual bool end() const = 0; + }; + + /// Class representing a const string iterator + typedef ConstIterator< std::string > StringIterator; + + /// Shared pointer instance to const string iterator + typedef shared_ptr< StringIterator > StringIteratorPtr; + + /// Class representing a const int iterator + typedef ConstIterator< int > IntIterator; + + /// Shared pointer instance to const int iterator + typedef shared_ptr< IntIterator > IntIteratorPtr; + + /// Map key iterator + template<class C, typename T> class MapKeyIterator : public ConstIterator<T> { + public: + MapKeyIterator(const C& map) : mMap(map) { + mIter = mMap.begin(); + } + + const T& next() { + assert(!end()); + + const int& val = mIter->first; + + ++mIter; + + return val; + }; + + bool end() const { + return mIter == mMap.end(); + }; + + protected: + const C& mMap; + typename C::const_iterator mIter; + }; +} + +#endif Modified: trunk/src/base/MessageSource.h =================================================================== --- trunk/src/base/MessageSource.h 2008-09-10 20:00:08 UTC (rev 833) +++ trunk/src/base/MessageSource.h 2008-09-10 20:11:24 UTC (rev 834) @@ -1,85 +1,87 @@ -/****************************************************************************** - * - * This file is part of openDarkEngine project - * Copyright (C) 2005-2006 openDarkEngine team - * - * This program is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation; either version 2 of the License, or - * (at your option) any later version. - * - * This program 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 General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA - * - *****************************************************************************/ - -#ifndef __MESSAGESOURCE_H -#define __MESSAGESOURCE_H - -#include "SharedPtr.h" -#include "Callback.h" - -namespace Opde { - - /** Message Source - a message sending class template. - * M stands for the message type sended - */ - template <typename M> class MessageSource { - public: - typedef size_t ListenerID; - typedef Callback<M> Listener; - typedef shared_ptr< Listener > ListenerPtr; - - protected: - ListenerID mCurrent; - - /// A set of listeners - typedef typename std::map< ListenerID, ListenerPtr > Listeners; - - /// Listeners for the link changes - Listeners mListeners; - - /// Sends a message to all listeners - void broadcastMessage(const M& msg) { - typename Listeners::iterator it = mListeners.begin(); - - for (; it != mListeners.end(); ++it) { - // Use the callback functor to fire the callback - (*it->second)(msg); - } - } - - public: - MessageSource() : mCurrent(0) {}; - ~MessageSource() { mListeners.clear(); }; - - /** Registers a listener. - * @param listener A pointer to L - * @return ID of the listener to be used for unregisterListener call - */ - ListenerID registerListener(const ListenerPtr& listener) { - mListeners.insert(std::make_pair(mCurrent, listener)); - return mCurrent++; - } - - /** Unregisters a listener. - * @param listener ID returned by the registerListener call - */ - void unregisterListener(ListenerID id) { - typename Listeners::iterator it = mListeners.find(id); - - if (it != mListeners.end()) { - mListeners.erase(it); - } - } - }; - -} - -#endif +/****************************************************************************** + * + * This file is part of openDarkEngine project + * Copyright (C) 2005-2006 openDarkEngine team + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * This program 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 General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + * + *****************************************************************************/ + +#ifndef __MESSAGESOURCE_H +#define __MESSAGESOURCE_H + +#include "config.h" + +#include "SharedPtr.h" +#include "Callback.h" + +namespace Opde { + + /** Message Source - a message sending class template. + * M stands for the message type sended + */ + template <typename M> class MessageSource { + public: + typedef size_t ListenerID; + typedef Callback<M> Listener; + typedef shared_ptr< Listener > ListenerPtr; + + protected: + ListenerID mCurrent; + + /// A set of listeners + typedef typename std::map< ListenerID, ListenerPtr > Listeners; + + /// Listeners for the link changes + Listeners mListeners; + + /// Sends a message to all listeners + void broadcastMessage(const M& msg) { + typename Listeners::iterator it = mListeners.begin(); + + for (; it != mListeners.end(); ++it) { + // Use the callback functor to fire the callback + (*it->second)(msg); + } + } + + public: + MessageSource() : mCurrent(0) {}; + ~MessageSource() { mListeners.clear(); }; + + /** Registers a listener. + * @param listener A pointer to L + * @return ID of the listener to be used for unregisterListener call + */ + ListenerID registerListener(const ListenerPtr& listener) { + mListeners.insert(std::make_pair(mCurrent, listener)); + return mCurrent++; + } + + /** Unregisters a listener. + * @param listener ID returned by the registerListener call + */ + void unregisterListener(ListenerID id) { + typename Listeners::iterator it = mListeners.find(id); + + if (it != mListeners.end()) { + mListeners.erase(it); + } + } + }; + +} + +#endif Modified: trunk/src/base/NonCopyable.h =================================================================== --- trunk/src/base/NonCopyable.h 2008-09-10 20:00:08 UTC (rev 833) +++ trunk/src/base/NonCopyable.h 2008-09-10 20:11:24 UTC (rev 834) @@ -1,41 +1,46 @@ -/****************************************************************************** - * - * This file is part of openDarkEngine project - * Copyright (C) 2005-2006 openDarkEngine team - * - * This program is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation; either version 2 of the License, or - * (at your option) any later version. - * - * This program 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 General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA - * - *****************************************************************************/ - -#ifndef __OPDENONCOPYABLE_H -#define __OPDENONCOPYABLE_H - -#include <cassert> - -namespace Opde { - - /// Non copyable class. Inherit to make class not copyable - class NonCopyable { - public: - NonCopyable() {}; - - private: - NonCopyable(const NonCopyable& b); - void operator =(const NonCopyable& b); - }; - -} - -#endif +/****************************************************************************** + * + * This file is part of openDarkEngine project + * Copyright (C) 2005-2006 openDarkEngine team + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * This program 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 General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + * + * + * $Id$ + * + *****************************************************************************/ + +#ifndef __OPDENONCOPYABLE_H +#define __OPDENONCOPYABLE_H + +#include "config.h" + +#include <cassert> + +namespace Opde { + + /// Non copyable class. Inherit to make class not copyable + class NonCopyable { + public: + NonCopyable() {}; + + private: + NonCopyable(const NonCopyable& b); + void operator =(const NonCopyable& b); + }; + +} + +#endif Modified: trunk/src/base/OpdeException.h =================================================================== --- trunk/src/base/OpdeException.h 2008-09-10 20:00:08 UTC (rev 833) +++ trunk/src/base/OpdeException.h 2008-09-10 20:11:24 UTC (rev 834) @@ -1,63 +1,65 @@ -/****************************************************************************** - * - * This file is part of openDarkEngine project - * Copyright (C) 2005-2006 openDarkEngine team - * - * This program is free software; you can redistribute it and/or modify it under - * the terms of the GNU Lesser General Public License as published by the Free Software - * Foundation; either version 2 of the License, or (at your option) any later - * version. - * - * This program 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 Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public License along with - * this program; if not, write to the Free Software Foundation, Inc., 59 Temple - * Place - Suite 330, Boston, MA 02111-1307, USA, or go to - * http://www.gnu.org/copyleft/lesser.txt. - * - * - * $Id$ - * - *****************************************************************************/ - - -#ifndef __OPDEEXCEPTION_H -#define __OPDEEXCEPTION_H - -#include <stdexcept> -#include <string> - -namespace Opde { - - /** A usage - simplifying macro */ - #define OPDE_EXCEPT(desc, src) throw( Opde::BasicException(desc, src, __FILE__, __LINE__) ) - - /** @brief A standard OPDE exception - * - * This is a basic OPDE exception. Based largely on the Ogre's exception code - * For simple usage, use the OPDE_EXCEPT macro */ - class BasicException : public std::exception { - protected: - std::string description; - std::string source; - std::string fileName; - - std::string details; // Cached version of the exception data - long lineNum; - public: - /** Constructor. */ - BasicException(const std::string& desc, const std::string& src, char* file = NULL, long line = -1); - - ~BasicException() throw(); - - /** Gets the details about the exception that happened */ - const std::string& getDetails(); - - - }; - -} - -#endif +/****************************************************************************** + * + * This file is part of openDarkEngine project + * Copyright (C) 2005-2006 openDarkEngine team + * + * This program is free software; you can redistribute it and/or modify it under + * the terms of the GNU Lesser General Public License as published by the Free Software + * Foundation; either version 2 of the License, or (at your option) any later + * version. + * + * This program 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 Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License along with + * this program; if not, write to the Free Software Foundation, Inc., 59 Temple + * Place - Suite 330, Boston, MA 02111-1307, USA, or go to + * http://www.gnu.org/copyleft/lesser.txt. + * + * + * $Id$ + * + *****************************************************************************/ + + +#ifndef __OPDEEXCEPTION_H +#define __OPDEEXCEPTION_H + +#include "config.h" + +#include <stdexcept> +#include <string> + +namespace Opde { + + /** A usage - simplifying macro */ + #define OPDE_EXCEPT(desc, src) throw( Opde::BasicException(desc, src, __FILE__, __LINE__) ) + + /** @brief A standard OPDE exception + * + * This is a basic OPDE exception. Based largely on the Ogre's exception code + * For simple usage, use the OPDE_EXCEPT macro */ + class BasicException : public std::exception { + protected: + std::string description; + std::string source; + std::string fileName; + + std::string details; // Cached version of the exception data + long lineNum; + public: + /** Constructor. */ + BasicException(const std::string& desc, const std::string& src, char* file = NULL, long line = -1); + + ~BasicException() throw(); + + /** Gets the details about the exception that happened */ + const std::string& getDetails(); + + + }; + +} + +#endif Modified: trunk/src/base/OpdeSingleton.h =================================================================== --- trunk/src/base/OpdeSingleton.h 2008-09-10 20:00:08 UTC (rev 833) +++ trunk/src/base/OpdeSingleton.h 2008-09-10 20:11:24 UTC (rev 834) @@ -1,55 +1,67 @@ -/****************************************************************************** - * - * This file is part of openDarkEngine project - * Copyright (C) 2005-2006 openDarkEngine team - * - * This program is free software; you can redistribute it and/or modify it under - * the terms of the GNU Lesser General Public License as published by the Free Software - * Foundation; either version 2 of the License, or (at your option) any later - * version. - * - * This program 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 Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public License along with - * this program; if not, write to the Free Software Foundation, Inc., 59 Temple - * Place - Suite 330, Boston, MA 02111-1307, USA, or go to - * http://www.gnu.org/copyleft/lesser.txt. - *****************************************************************************/ - -// A copy of Ogre::Singleton. LGPL - -#ifndef __OPDESINGLETON_H -#define __OPDESINGLETON_H - -#include <cassert> - -namespace Opde { - - // Just a copy of Ogre's singleton impl, before writing something on our own. Thanks OGRE people! - template <typename T> class Singleton { - protected: - static T* ms_Singleton; - - public: - Singleton( void ) { - assert( !ms_Singleton ); - #if defined( _MSC_VER ) && _MSC_VER < 1200 - int offset = (int)(T*)1 - (int)(Singleton <T>*)(T*)1; - ms_Singleton = (T*)((int)this + offset); - #else - ms_Singleton = static_cast< T* >( this ); - #endif - } - ~Singleton( void ) - { assert( ms_Singleton ); ms_Singleton = 0; } - static T& getSingleton( void ) - { assert( ms_Singleton ); return ( *ms_Singleton ); } - static T* getSingletonPtr( void ) - { return ms_Singleton; } - }; - -} - -#endif +/****************************************************************************** + * + * This file is part of openDarkEngine project + * Copyright (C) 2005-2006 openDarkEngine team + * + * This program is free software; you can redistribute it and/or modify it under + * the terms of the GNU Lesser General Public License as published by the Free Software + * Foundation; either version 2 of the License, or (at your option) any later + * version. + * + * This program 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 Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License along with + * this program; if not, write to the Free Software Foundation, Inc., 59 Temple + * Place - Suite 330, Boston, MA 02111-1307, USA, or go to + * http://www.gnu.org/copyleft/lesser.txt. + *****************************************************************************/ + +// A copy of Ogre::Singleton. LGPL + +#ifndef __OPDESINGLETON_H +#define __OPDESINGLETON_H + +#include "config.h" + +#include <cassert> + +namespace Opde { + + // Just a copy of Ogre's singleton impl, before writing something on our own. Thanks OGRE people! + template <typename T> class Singleton { + protected: + static T* ms_Singleton; + + public: + Singleton( void ) { + assert( !ms_Singleton ); + #if defined( _MSC_VER ) && _MSC_VER < 1200 + int offset = (int)(T*)1 - (int)(Singleton <T>*)(T*)1; + ms_Singleton = (T*)((int)this + offset); + #else + ms_Singleton = static_cast< T* >( this ); + #endif + } + + ~Singleton( void ) { + assert( ms_Singleton ); + ms_Singleton = 0; + } + + /* Let the ancestor implement these methods. They are dangerous here because of the DLL boundaries + static T& getSingleton( void ) { + assert( ms_Singleton ); + return ( *ms_Singleton ); + } + + static T* getSingletonPtr( void ) { + return ms_Singleton; + } + */ + }; + +} + +#endif Modified: trunk/src/base/PrioritizedMessageSource.h =================================================================== --- trunk/src/base/PrioritizedMessageSource.h 2008-09-10 20:00:08 UTC (rev 833) +++ trunk/src/base/PrioritizedMessageSource.h 2008-09-10 20:11:24 UTC (rev 834) @@ -1,97 +1,99 @@ -/****************************************************************************** - * - * This file is part of openDarkEngine project - * Copyright (C) 2005-2006 openDarkEngine team - * - * This program is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation; either version 2 of the License, or - * (at your option) any later version. - * - * This program 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 General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA - * - * $Id$ - * - *****************************************************************************/ - -#ifndef __PRIORITIZEDMESSAGESOURCE_H -#define __PRIORITIZEDMESSAGESOURCE_H - -#include <map> -#include "SharedPtr.h" -#include "Callback.h" - -namespace Opde { - - /** Prioritized Message Source - a message source doing callbacks in a deterministic order - * M stands for the message type sent - */ - template <typename M> class PrioritizedMessageSource { - public: - //virtual ~PrioritizedMessageSource() {}; - - typedef int Priority; - - typedef Callback< M > Listener; - typedef shared_ptr< Listener > ListenerPtr; - - protected: - /// A set of listeners - typedef typename std::multimap< int, ListenerPtr > Listeners; - - /// Listeners for the link changes - Listeners mListeners; - - /// Sends a message to all listeners - virtual void broadcastMessage(const M& msg) { - typename Listeners::iterator it = mListeners.begin(); - - for (; it != mListeners.end(); ++it) { - // Use the callback functor to fire the callback - (*it->second)(msg); - } - } - - public: - PrioritizedMessageSource() {}; - virtual ~PrioritizedMessageSource() { mListeners.clear(); }; - - /** Registers a listener. - * @param listener A pointer to L - * @note The same pointer has to be supplied to the unregisterListener in order to succeed with unregistration - */ - void registerListener(const ListenerPtr& listener, Priority priority) { - mListeners.insert(std::make_pair(priority, listener)); - } - - /** Unregisters a listener. - * @param listener ID returned by the registerListener call - * @note The pointer has to be the same as the one supplied to the registerListener - */ - void unregisterListener(const ListenerPtr& listener) { - // If priority was a member of Callback, then this would be find(prio); - typename Listeners::iterator it = mListeners.begin(); - - while (it != mListeners.end()) { - - if (it->second == listener) { - typename Listeners::iterator rem = it++; - mListeners.erase(rem); - } else { - it++; - } - - } - } - }; - -} - -#endif +/****************************************************************************** + * + * This file is part of openDarkEngine project + * Copyright (C) 2005-2006 openDarkEngine team + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * This program 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 General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + * + * $Id$ + * + *****************************************************************************/ + +#ifndef __PRIORITIZEDMESSAGESOURCE_H +#define __PRIORITIZEDMESSAGESOURCE_H + +#include "config.h" + +#include <map> +#include "SharedPtr.h" +#include "Callback.h" + +namespace Opde { + + /** Prioritized Message Source - a message source doing callbacks in a deterministic order + * M stands for the message type sent + */ + template <typename M> class OPDELIB_EXPORT PrioritizedMessageSource { + public: + //virtual ~PrioritizedMessageSource() {}; + + typedef int Priority; + + typedef Callback< M > Listener; + typedef shared_ptr< Listener > ListenerPtr; + + protected: + /// A set of listeners + typedef typename std::multimap< int, ListenerPtr > Listeners; + + /// Listeners for the link changes + Listeners mListeners; + + /// Sends a message to all listeners + virtual void broadcastMessage(const M& msg) { + typename Listeners::iterator it = mListeners.begin(); + + for (; it != mListeners.end(); ++it) { + // Use the callback functor to fire the callback + (*it->second)(msg); + } + } + + public: + PrioritizedMessageSource() {}; + virtual ~PrioritizedMessageSource() { mListeners.clear(); }; + + /** Registers a listener. + * @param listener A pointer to L + * @note The same pointer has to be supplied to the unregisterListener in order to succeed with unregistration + */ + void registerListener(const ListenerPtr& listener, Priority priority) { + mListeners.insert(std::make_pair(priority, listener)); + } + + /** Unregisters a listener. + * @param listener ID returned by the registerListener call + * @note The pointer has to be the same as the one supplied to the registerListener + */ + void unregisterListener(const ListenerPtr& listener) { + // If priority was a member of Callback, then this would be find(prio); + typename Listeners::iterator it = mListeners.begin(); + + while (it != mListeners.end()) { + + if (it->second == listener) { + typename Listeners::iterator rem = it++; + mListeners.erase(rem); + } else { + it++; + } + + } + } + }; + +} + +#endif Modified: trunk/src/base/RefCounted.h =================================================================== --- trunk/src/base/RefCounted.h 2008-09-10 20:00:08 UTC (rev 833) +++ trunk/src/base/RefCounted.h 2008-09-10 20:11:24 UTC (rev 834) @@ -1,69 +1,75 @@ -/****************************************************************************** - * - * This file is part of openDarkEngine project - * Copyright (C) 2005-2006 openDarkEngine team - * - * This program is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation; either version 2 of the License, or - * (at your option) any later version. - * - * This program 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 General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA - * - *****************************************************************************/ - -#ifndef __REFCOUNTED_H -#define __REFCOUNTED_H - -namespace Opde { - - // TODO: Make this atomic - /** Reference counter. A base class for all classes using reference counting approach. - * The addRef() method should be called every time a copy of the pointer to ref. counted class is made. - * a release() should be called when throwing the pointer away. - * @note : the counter is intialized to 0, because some classes can allow changes of a certain type only on non-referenced instances, do not forget to call the addRef as soon as finished - * @todo make the addref and release atomic operations (couldn't hurt, and is a must if we're gonna do multithreaded app) - * - * <b>Usage example</b><br> - * <code> - * // First, I create some class which is reference counted<br> - * RefCClass* test = new RefCClass();<br> - * // now use the field definition as you like<br> - * //....<br> - * // and release after being finished<br> - *<br> - * test->release();<br> - * </code>*/ - class RefCounted { - protected: - int mReferences; - public: - /** Constructs the RefCounted instance with the reference count of 0 */ - RefCounted(); - - /** Adds one reference to the instance */ - void addRef(); - - /** Releases one reference to the instance. If the reference count is 0, deletes itself */ - void release(); - - /** Returns true if the instance is referenced. */ - bool isRef() const; - - /** reference count getter */ - inline int getRefCount() { return mReferences; }; - - /** Destructor. */ - virtual ~RefCounted(); - }; - -} // namespace Opde - -#endif +/****************************************************************************** + * + * This file is part of openDarkEngine project + * Copyright (C) 2005-2006 openDarkEngine team + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * This program 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 General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + * + * + * $Id$ + * + *****************************************************************************/ + +#ifndef __REFCOUNTED_H +#define __REFCOUNTED_H + +#include "config.h" + +namespace Opde { + + // TODO: Make this atomic + /** Reference counter. A base class for all classes using reference counting approach. + * The addRef() method should be called every time a copy of the pointer to ref. counted class is made. + * a release() should be called when throwing the pointer away. + * @note : the counter is intialized to 0, because some classes can allow changes of a certain type only on non-referenced instances, do not forget to call the addRef as soon as finished + * @todo make the addref and release atomic operations (couldn't hurt, and is a must if we're gonna do multithreaded app) + * + * <b>Usage example</b><br> + * <code> + * // First, I create some class which is reference counted<br> + * RefCClass* test = new RefCClass();<br> + * // now use the field definition as you like<br> + * //....<br> + * // and release after being finished<br> + *<br> + * test->release();<br> + * </code> + * @deprecated */ + class RefCounted { + protected: + int mReferences; + public: + /** Constructs the RefCounted instance with the reference count of 0 */ + RefCounted(); + + /** Adds one reference to the instance */ + void addRef(); + + /** Releases one reference to the instance. If the reference count is 0, deletes itself */ + void release(); + + /** Returns true if the instance is referenced. */ + bool isRef() const; + + /** reference count getter */ + inline int getRefCount() { return mReferences; }; + + /** Destructor. */ + virtual ~RefCounted(); + }; + +} // namespace Opde + +#endif Modified: trunk/src/base/SharedPtr.h =================================================================== --- trunk/src/base/SharedPtr.h 2008-09-10 20:00:08 UTC (rev 833) +++ trunk/src/base/SharedPtr.h 2008-09-10 20:11:24 UTC (rev 834) @@ -1,152 +1,154 @@ -/****************************************************************************** - * - * This file is part of openDarkEngine project - * Copyright (C) 2005-2006 openDarkEngine team - * - * This program is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation; either version 2 of the License, or - * (at your option) any later version. - * - * This program 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 General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA - * - * - * $Id$ - * - *****************************************************************************/ - -#ifndef __SHAREDPTR_H -#define __SHAREDPTR_H - -#include <stdio.h> - -namespace Opde { - - /** A simple shared pointer implementation - * @TODO To be made thread-safe, and/or replaced by boosts shared_ptr (which does not have downcasting) */ - template<class T> class shared_ptr { - template < typename U > friend class shared_ptr; - - protected: - T* mPtr; - unsigned int* mReferences; - - void release() { - if (mReferences) { - if (--(*mReferences) == 0) { - destroy(); - } - } - } - - void destroy() { - delete mPtr; - delete mReferences; - - mPtr = NULL; - mReferences = NULL; - } - - public: - /** Helper ctor for shared_ptr casting with static_pointer_cast<U>(). - * @warning Do not use directly */ - shared_ptr(T* ptr, unsigned int *refs) : mPtr(ptr), mReferences(refs) { - ++(*mReferences); - } - - /// conversion ctor - template<class U> shared_ptr(shared_ptr<U>& a) : mPtr(a.mPtr), mReferences(a.mReferences) { - if (mReferences) - ++(*mReferences); - } - - /// NULL ctor - shared_ptr() : mPtr(NULL), mReferences(NULL) { }; - - /// Copy constructor - shared_ptr(const shared_ptr& b) : mPtr(b.mPtr), mReferences(b.mReferences) { - if (mReferences) - ++(*mReferences); - } - - /// Ctor from instance pointer - shared_ptr(T* ptr) : mPtr(ptr), mReferences(NULL) { - if (mPtr) { - mReferences = new unsigned int(1); - } - }; - - ~shared_ptr() { - release(); - } - - shared_ptr& operator=(const shared_ptr& b) { - // the same instance - if (mPtr == b.mPtr) - return *this; - - release(); - - mPtr = b.mPtr; - - mReferences = b.mReferences; - - if (mReferences) - ++(*mReferences); - - return *this; - } - - /** pointer getter */ - T* ptr() const { return mPtr; }; - - inline T& operator*() const { assert(mPtr); return *mPtr; }; - inline T* operator->() const { assert(mPtr); return mPtr; }; - - inline bool isNull() const { - return (mPtr == NULL); - } - - unsigned int getRefCount() const { - return (*mReferences); - } - - void setNull() { - release(); - - mPtr = NULL; - mReferences = NULL; - - } - - unsigned int* getRefCountPtr(void) const { - return mReferences; - } - - }; - - template<class A, class B> inline bool operator==(shared_ptr<A> const& a, shared_ptr<B> const& b) { - return a.ptr() == b.ptr(); - } - - template<class A, class B> inline bool operator!=(shared_ptr<A> const& a, shared_ptr<B> const& b) { - return a.ptr() != b.ptr(); - } - - /// static cast of the shared_ptr - template<class U, class V> shared_ptr<U> static_pointer_cast(const shared_ptr<V>& src) { - U* ptr = static_cast<U*>(src.ptr()); - - return shared_ptr<U>(ptr, src.getRefCountPtr()); - } - -} // namespace Opde - -#endif +/****************************************************************************** + * + * This file is part of openDarkEngine project + * Copyright (C) 2005-2006 openDarkEngine team + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * This program 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 General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + * + * + * $Id$ + * + *****************************************************************************/ + +#ifndef __SHAREDPTR_H +#define __SHAREDPTR_H + +#include "config.h" + +#include <stdio.h> + +namespace Opde { + + /** A simple shared pointer implementation + * @TODO To be made thread-safe, and/or replaced by boosts shared_ptr (which does not have downcasting) */ + template<class T> class shared_ptr { + template < typename U > friend class shared_ptr; + + protected: + T* mPtr; + unsigned int* mReferences; + + void release() { + if (mReferences) { + if (--(*mReferences) == 0) { + destroy(); + } + } + } + + void destroy() { + delete mPtr; + delete mReferences; + + mPtr = NULL; + mReferences = NULL; + } + + public: + /** Helper ctor for shared_ptr casting with static_pointer_cast<U>(). + * @warning Do not use directly */ + shared_ptr(T* ptr, unsigned int *refs) : mPtr(ptr), mReferences(refs) { + ++(*mReferences); + } + + /// conversion ctor + template<class U> shared_ptr(shared_ptr<U>& a) : mPtr(a.mPtr), mReferences(a.mReferences) { + if (mReferences) + ++(*mReferences); + } + + /// NULL ctor + shared_ptr() : mPtr(NULL), mReferences(NULL) { }; + + /// Copy constructor + shared_ptr(const shared_ptr& b) : mPtr(b.mPtr), mReferences(b.mReferences) { + if (mReferences) + ++(*mReferences); + } + + /// Ctor from instance pointer + shared_ptr(T* ptr) : mPtr(ptr), mReferences(NULL) { + if (mPtr) { + mReferences = new unsigned int(1); + } + }; + + ~shared_ptr() { + release(); + } + + shared_ptr& operator=(const shared_ptr& b) { + // the same instance + if (mPtr == b.mPtr) + return *this; + + release(); + + mPtr = b.mPtr; + + mReferences = b.mReferences; + + if (mReferences) + ++(*mReferences); + + return *this; + } + + /** pointer getter */ + T* ptr() const { return mPtr; }; + + inline T& operator*() const { assert(mPtr); return *mPtr; }; + inline T* operator->() const { assert(mPtr); return mPtr; }; + + inline bool isNull() const { + return (mPtr == NULL); + } + + unsigned int getRefCount() const { + return (*mReferences); + } + + void setNull() { + release(); + + mPtr = NULL; + mReferences = NULL; + + } + + unsigned int* getRefCountPtr(void) const { + return mReferences; + } + + }; + + template<class A, class B> inline bool operator==(shared_ptr<A> const& a, shared_ptr<B> const& b) { + return a.ptr() == b.ptr(); + } + + template<class A, class B> inline bool operator!=(shared_ptr<A> const& a, shared_ptr<B> const& b) { + return a.ptr() != b.ptr(); + } + + /// static cast of the shared_ptr + template<class U, class V> shared_ptr<U> static_pointer_cast(const shared_ptr<V>& src) { + U* ptr = static_cast<U*>(src.ptr()); + + return shared_ptr<U>(ptr, src.getRefCountPtr()); + } + +} // namespace Opde + +#endif Modified: trunk/src/base/StringTokenizer.h =================================================================== --- trunk/src/base/StringTokenizer.h 2008-09-10 20:00:08 UTC (rev 833) +++ trunk/src/base/StringTokenizer.h 2008-09-10 20:11:24 UTC (rev 834) @@ -1,175 +1,177 @@ -/****************************************************************************** - * - * This file is part of openDarkEngine project - * Copyright (C) 2005-2006 openDarkEngine team - * - * This program is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation; either version 2 of the License, or - * (at your option) any later version. - * - * This program 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 General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA - * - * - * $Id$ - * - *****************************************************************************/ - - -#ifndef __STRINGTOKENIZER_H -#define __STRINGTOKENIZER_H - -#include "Iterator.h" -#include <functional> -#include <string> - -namespace Opde { - /// char classifier (is Space) - struct IsChar : public std::unary_function<char, bool> { - IsChar(char c) : mChar(c) {}; - IsChar(IsChar& b) : mChar(b.mChar) {}; - - bool operator()(char c) { - return c == mChar; - } - - char mChar; - }; - - /** An universal string tokenizer. Splits the text using given IsChar instance - */ - class StringTokenizer { - public: - /** Constructor - * @param src the string to tokenize - * @param splitter the splitter instance to use - * @param eatEmpty if true, eats consecutive separators, not returning empty strings on such ocasions - */ - StringTokenizer(const std::string& src, IsChar splitter, bool eatEmpty = true) : mStr(src), mIsChar(splitter), mEatEmpty(eatEmpty) { - mCurPos = mStr.begin(); - }; - - /// Returns next token, or empty string if no token is available - std::string next() { - std::string::const_iterator tok_end; - - if (mCurPos != mStr.end()) { - - if (mEatEmpty) { - while (mIsChar(*mCurPos)) - ++mCurPos; - } else { // Or I'll end up with empty token on second - if (mIsChar(*mCurPos)) - ++mCurPos; - } - - tok_end = std::find_if(mCurPos, mStr.end(), mIsChar); - - if (mCurPos < tok_end) { - std::string toRet = std::string(mCurPos, tok_end); - mCurPos = tok_end; - return toRet; - } - } - - // Failback to empty string - return std::string(""); - }; - - /// Returns true if no token is available - bool end() const { - return mCurPos == mStr.end(); - }; - - /// Returns the rest of the string - std::string rest() { - return std::string(mCurPos, mStr.end()); - } - - protected: - const std::string& mStr; - IsChar mIsChar; - bool mEatEmpty; - - std::string::const_iterator mCurPos; - }; - - - /** @brief Whitespace String tokenizer - splits given string on whitespaces, optionally watching for double quotes */ - class WhitespaceStringTokenizer { - protected: - /// char classifier (is Space) - struct IsSpace : public std::unary_function<char, bool> { - bool operator()(char c) { - return (isspace(c) != 0); - } - }; - - /// char classifier (is Quote) - struct IsQuote : public std::unary_function<char, bool> { - bool operator()(char c) { - return (c == '\"'); - } - }; - - public: - WhitespaceStringTokenizer(const std::string& src, bool ignoreQuotes = true) : mIgnoreQuotes(ignoreQuotes), mStr(src) { - mCurPos = mStr.begin(); - }; - - /// Returns next token, or empty string if no token is available - std::string next() { - // We tokenize a hardcoded way - all spaces, except those which are in quotes, are splitters - std::string::const_iterator tok_end; - - if (mCurPos != mStr.end()) { - while (mIsSpaceP(*mCurPos)) // eat all the spaces - ++mCurPos; - - // Look if the current char is quote. if it is, split on quotes - if (mIsQuoteP(*mCurPos) && !mIgnoreQuotes) { - tok_end = std::find_if(mCurPos, mStr.end(), mIsQuoteP); - } else { - tok_end = std::find_if(mCurPos, mStr.end(), mIsSpaceP); - } - - if (mCurPos < tok_end) { - std::string toRet = std::string(mCurPos, tok_end); - mCurPos = tok_end; - return toRet; - } - } - ... [truncated message content] |
From: <vo...@us...> - 2008-09-21 16:50:52
|
Revision: 842 http://opde.svn.sourceforge.net/opde/?rev=842&view=rev Author: volca Date: 2008-09-21 16:50:46 +0000 (Sun, 21 Sep 2008) Log Message: ----------- Making progress with the VC build. Nearly fixed, but not yet :( Modified Paths: -------------- trunk/CMakeLists.txt trunk/src/base/CMakeLists.txt trunk/src/base/NonCopyable.h trunk/src/base/OpdeException.h trunk/src/base/OpdeSingleton.h trunk/src/base/PrioritizedMessageSource.h trunk/src/base/console/CMakeLists.txt trunk/src/base/dyntype/CMakeLists.txt trunk/src/base/file/CMakeLists.txt trunk/src/base/loaders/BinFormat.h trunk/src/base/loaders/CMakeLists.txt trunk/src/base/loaders/FonFormat.h trunk/src/base/loaders/ManualBinFileLoader.cpp trunk/src/base/loaders/ManualFonFileLoader.cpp trunk/src/base/logger/CMakeLists.txt trunk/src/base/logger/OgreOpdeLogConnector.cpp trunk/src/base/logger/logger.h trunk/src/base/logger/stdlog.h trunk/src/base/servicemanager/CMakeLists.txt trunk/src/base/servicemanager/OpdeServiceManager.h trunk/src/main/CMakeLists.txt trunk/src/main/Opde.cpp trunk/src/main/Root.cpp trunk/src/services/ServiceCommon.h trunk/src/services/Services.cmake trunk/src/services/binary/BinaryService.h trunk/src/services/binary/CMakeLists.txt trunk/src/services/config/CMakeLists.txt trunk/src/services/config/ConfigService.h trunk/src/services/database/CMakeLists.txt trunk/src/services/game/CMakeLists.txt trunk/src/services/gui/CMakeLists.txt trunk/src/services/inherit/CMakeLists.txt trunk/src/services/input/CMakeLists.txt trunk/src/services/input/InputService.h trunk/src/services/link/CMakeLists.txt trunk/src/services/loop/CMakeLists.txt trunk/src/services/object/CMakeLists.txt trunk/src/services/object/ObjectService.h trunk/src/services/property/CMakeLists.txt trunk/src/services/render/CMakeLists.txt trunk/src/services/script/CMakeLists.txt trunk/src/services/worldrep/CMakeLists.txt Modified: trunk/CMakeLists.txt =================================================================== --- trunk/CMakeLists.txt 2008-09-21 16:48:07 UTC (rev 841) +++ trunk/CMakeLists.txt 2008-09-21 16:50:46 UTC (rev 842) @@ -17,7 +17,7 @@ # # $Id$ -cmake_minimum_required(VERSION 2.4) +cmake_minimum_required(VERSION 2.6) project (OPDE) @@ -25,6 +25,9 @@ SET(OPDE_VER_MINOR "2") SET(OPDE_VER_PATCH "1") +# To stop importing libs where we don't want them +set_property(GLOBAL PROPERTY LINK_INTERFACE_LIBRARIES "") + # Build type selection. Use ccmake for selection of this (or the commandline switches) # Default build type IF (NOT CMAKE_BUILD_TYPE) Modified: trunk/src/base/CMakeLists.txt =================================================================== --- trunk/src/base/CMakeLists.txt 2008-09-21 16:48:07 UTC (rev 841) +++ trunk/src/base/CMakeLists.txt 2008-09-21 16:50:46 UTC (rev 842) @@ -1,3 +1,5 @@ +INCLUDE(${OPDE_SOURCE_DIR}/src/base/Base.cmake) + add_subdirectory(logger) add_subdirectory(console) add_subdirectory(servicemanager) @@ -14,3 +16,11 @@ add_library ( OpdeBase OpdeException.cpp RefCounted.cpp ${OPDE_BASE_HEADERS} ) + +SET_TARGET_PROPERTIES(OpdeBase PROPERTIES + COMPILE_DEFINITIONS "OPDELIB_DLL_TARGET" +) + +target_link_libraries( OpdeBase + ${OPDE_BASE_LIBRARIES} +) Modified: trunk/src/base/NonCopyable.h =================================================================== --- trunk/src/base/NonCopyable.h 2008-09-21 16:48:07 UTC (rev 841) +++ trunk/src/base/NonCopyable.h 2008-09-21 16:50:46 UTC (rev 842) @@ -32,13 +32,13 @@ namespace Opde { /// Non copyable class. Inherit to make class not copyable - class NonCopyable { - public: - NonCopyable() {}; - - private: - NonCopyable(const NonCopyable& b); - void operator =(const NonCopyable& b); + class OPDELIB_EXPORT NonCopyable { + public: + NonCopyable() {}; + + private: + NonCopyable(const NonCopyable& b); + void operator =(const NonCopyable& b); }; } Modified: trunk/src/base/OpdeException.h =================================================================== --- trunk/src/base/OpdeException.h 2008-09-21 16:48:07 UTC (rev 841) +++ trunk/src/base/OpdeException.h 2008-09-21 16:50:46 UTC (rev 842) @@ -40,7 +40,7 @@ * * This is a basic OPDE exception. Based largely on the Ogre's exception code * For simple usage, use the OPDE_EXCEPT macro */ - class BasicException : public std::exception { + class OPDELIB_EXPORT BasicException : public std::exception { protected: std::string description; std::string source; Modified: trunk/src/base/OpdeSingleton.h =================================================================== --- trunk/src/base/OpdeSingleton.h 2008-09-21 16:48:07 UTC (rev 841) +++ trunk/src/base/OpdeSingleton.h 2008-09-21 16:50:46 UTC (rev 842) @@ -36,30 +36,30 @@ public: Singleton( void ) { - assert( !ms_Singleton ); + assert( !ms_Singleton ); #if defined( _MSC_VER ) && _MSC_VER < 1200 - int offset = (int)(T*)1 - (int)(Singleton <T>*)(T*)1; - ms_Singleton = (T*)((int)this + offset); - #else - ms_Singleton = static_cast< T* >( this ); - #endif - } + int offset = (int)(T*)1 - (int)(Singleton <T>*)(T*)1; + ms_Singleton = (T*)((int)this + offset); + #else + ms_Singleton = static_cast< T* >( this ); + #endif + } - ~Singleton( void ) { - assert( ms_Singleton ); - ms_Singleton = 0; - } + ~Singleton( void ) { + assert( ms_Singleton ); + ms_Singleton = 0; + } - /* Let the ancestor implement these methods. They are dangerous here because of the DLL boundaries - static T& getSingleton( void ) { - assert( ms_Singleton ); - return ( *ms_Singleton ); - } + /* Let the ancestor implement these methods. They are dangerous here because of the DLL boundaries + static T& getSingleton( void ) { + assert( ms_Singleton ); + return ( *ms_Singleton ); + } - static T* getSingletonPtr( void ) { - return ms_Singleton; - } - */ + static T* getSingletonPtr( void ) { + return ms_Singleton; + } + */ }; } Modified: trunk/src/base/PrioritizedMessageSource.h =================================================================== --- trunk/src/base/PrioritizedMessageSource.h 2008-09-21 16:48:07 UTC (rev 841) +++ trunk/src/base/PrioritizedMessageSource.h 2008-09-21 16:50:46 UTC (rev 842) @@ -35,7 +35,7 @@ /** Prioritized Message Source - a message source doing callbacks in a deterministic order * M stands for the message type sent */ - template <typename M> class OPDELIB_EXPORT PrioritizedMessageSource { + template <typename M> class PrioritizedMessageSource { public: //virtual ~PrioritizedMessageSource() {}; Modified: trunk/src/base/console/CMakeLists.txt =================================================================== --- trunk/src/base/console/CMakeLists.txt 2008-09-21 16:48:07 UTC (rev 841) +++ trunk/src/base/console/CMakeLists.txt 2008-09-21 16:50:46 UTC (rev 842) @@ -16,3 +16,7 @@ ConsoleCommandListener.cpp ConsoleCommandListener.h ) + +SET_TARGET_PROPERTIES(OpdeConsole PROPERTIES + COMPILE_DEFINITIONS "OPDELIB_DLL_TARGET" +) Modified: trunk/src/base/dyntype/CMakeLists.txt =================================================================== --- trunk/src/base/dyntype/CMakeLists.txt 2008-09-21 16:48:07 UTC (rev 841) +++ trunk/src/base/dyntype/CMakeLists.txt 2008-09-21 16:50:46 UTC (rev 842) @@ -1,32 +1,35 @@ -# Dynamic types library - -include_directories ( - ${OGRE_INCLUDE_DIR} - ${OPDE_BINARY_DIR} - ${OPDE_SOURCE_DIR}/src/base - ${OPDE_SOURCE_DIR}/src/base/file - ${OPDE_SOURCE_DIR}/src/base/logger - ${OPDE_SOURCE_DIR}/src/compat -) - -link_directories ( - ${OGRE_LIB_DIR} - ${OPDE_SOURCE_DIR}/src/base -) - -# Various types of file access classes. -add_library (OpdeDynType - DVariant.cpp - DVariant.h - DTypeDef.cpp - DTypeDef.h - DTHelpers.h - DataStorage.cpp - DataStorage.h - SingleFieldDataStorage.h -) - -target_link_libraries( OpdeDynType - ${OGRE_LIBRARIES} - OpdeBase -) +# Dynamic types library + +include_directories ( + ${OGRE_INCLUDE_DIR} + ${OPDE_BINARY_DIR} + ${OPDE_SOURCE_DIR}/src/base + ${OPDE_SOURCE_DIR}/src/base/file + ${OPDE_SOURCE_DIR}/src/base/logger + ${OPDE_SOURCE_DIR}/src/compat +) + +link_directories ( + ${OGRE_LIB_DIR} +) + +# Various types of file access classes. +add_library (OpdeDynType + DVariant.cpp + DVariant.h + DTypeDef.cpp + DTypeDef.h + DTHelpers.h + DataStorage.cpp + DataStorage.h + SingleFieldDataStorage.h +) + +target_link_libraries( OpdeDynType + ${OGRE_LIBRARIES} + OpdeBase +) + +SET_TARGET_PROPERTIES(OpdeDynType PROPERTIES + COMPILE_DEFINITIONS "OPDELIB_DLL_TARGET" +) Modified: trunk/src/base/file/CMakeLists.txt =================================================================== --- trunk/src/base/file/CMakeLists.txt 2008-09-21 16:48:07 UTC (rev 841) +++ trunk/src/base/file/CMakeLists.txt 2008-09-21 16:50:46 UTC (rev 842) @@ -1,20 +1,23 @@ -include_directories ( - ${OGRE_INCLUDE_DIR} - ${OPDE_BINARY_DIR} - ${OPDE_SOURCE_DIR}/src/base - ${OPDE_SOURCE_DIR}/src/compat -) - -link_directories ( - ${OGRE_LIB_DIR} - ${OPDE_SOURCE_DIR}/src/base -) - -file(GLOB OPDE_FILE_HEADERS *.h) - -# Various types of file access classes. -add_library (OpdeFile File.cpp FileGroup.cpp ${OPDE_FILE_HEADERS}) - -target_link_libraries( OpdeFile - OpdeBase -) +include_directories ( + ${OGRE_INCLUDE_DIR} + ${OPDE_BINARY_DIR} + ${OPDE_SOURCE_DIR}/src/base + ${OPDE_SOURCE_DIR}/src/compat +) + +link_directories ( + ${OGRE_LIB_DIR} +) + +file(GLOB OPDE_FILE_HEADERS *.h) + +# Various types of file access classes. +add_library (OpdeFile File.cpp FileGroup.cpp ${OPDE_FILE_HEADERS}) + +target_link_libraries( OpdeFile + OpdeBase +) + +SET_TARGET_PROPERTIES(OpdeFile PROPERTIES + COMPILE_DEFINITIONS "OPDELIB_DLL_TARGET" +) Modified: trunk/src/base/loaders/BinFormat.h =================================================================== --- trunk/src/base/loaders/BinFormat.h 2008-09-21 16:48:07 UTC (rev 841) +++ trunk/src/base/loaders/BinFormat.h 2008-09-21 16:50:46 UTC (rev 842) @@ -1,419 +1,421 @@ -/****************************************************************************** - * - * This file is part of openDarkEngine project - * Copyright (C) 2005-2006 openDarkEngine team - * - * This program is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation; either version 2 of the License, or - * (at your option) any later version. - * - * This program 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 General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA - * - *****************************************************************************/ - -/* -thanks go to shadowspawn for his great contribution (and Ryan Nunn for his work on this thing too, as well as maybe other, which I do not know about) -Parts of this file are exact copies or free-style rewrites of the contributed code -*/ - -#ifndef __BINFORMAT_H -#define __BINFORMAT_H - -// Material flags (known) -#define MD_MAT_TRANS 1 -#define MD_MAT_ILLUM 2 - -// Material Types (known) -#define MD_MAT_TMAP 0 -#define MD_MAT_COLOR 1 - -// Polygon types ( & 0x07h ) -#define MD_PGON_NONE 0 -#define MD_PGON_SOLID 1 -#define MD_PGON_WIRE 2 -#define MD_PGON_TMAP 3 - -// Polygon Flags ( & 0x60h ) -#define MD_PGON_SOLID_COLOR_PAL 0x20 -#define MD_PGON_SOLID_COLOR_VCOLOR 0x40 - -/* -#define MD_PGON_TMAP 0x1B // 0001 1011 -#define MD_PGON_SOLID_COLOR_PAL 0x39 // 0011 1001 -#define MD_PGON_SOLID_COLOR_VCOLOR 0x59 // 0101 1001 -*/ - -// Sub object types (Guess) -#define MD_SUB_NONE 0 -#define MD_SUB_ROT 1 -#define MD_SUB_SLIDE 2 - -// BSP Node types (Guess) -#define MD_NODE_RAW 0 -#define MD_NODE_SPLIT 1 -#define MD_NODE_CALL 2 -#define MD_NODE_HDR 4 - -struct Vertex { - float x; - float y; - float z; - - Vertex() { x = y = z = 0; }; - Vertex(float _x, float _y, float _z) { - x = _x; - y = _y; - z = _z; - } -}; - -struct PolyParts { - int32_t a; - int32_t b; - int32_t c; -}; - -struct PolyPartsShorts { - int16_t a; - int16_t b; - int16_t c; -}; - -struct UVMap { - float u; - float v; -}; - -// Main header -struct BinHeadType { - char ID[4]; // 'LGMD', 'LGMM' - uint32_t version; // 3, 4 - 1 -}; - -// the object file type headers: -typedef struct BinHeader { - char ObjName[8]; - float sphere_rad; - float max_poly_rad; - - float bbox_max[3]; - float bbox_min[3]; - float parent_cen[3]; - - uint16_t num_pgons; - uint16_t num_verts; - uint16_t num_parms; - uint8_t num_mats; - uint8_t num_vcalls; - uint8_t num_vhots; - uint8_t num_objs; - - uint32_t offset_objs; - uint32_t offset_mats; - uint32_t offset_uv; - uint32_t offset_vhots; - uint32_t offset_verts; - uint32_t offset_light; - uint32_t offset_norms; - uint32_t offset_pgons; - uint32_t offset_nodes; - uint32_t model_size; - - // version 4 addons - int32_t mat_flags; - int32_t offset_new1; - int32_t offset_new2; -} BinHeader; - -// the sizes of the header versions -#define SIZE_BIN_HDR_V4 (sizeof(BinHeader)) -#define SIZE_BIN_HDR_V3 (SIZE_BIN_HDR_V4 - 12) - -// the attachment joint definition (arbitary attachment "slot") -typedef struct VHotObj { - uint32_t index; - Vertex point; -} VHotObj; - -// Material definitions -typedef struct { - char name[16]; - uint8_t type; // MD_MAT_COLOR or MD_MAT_TMAP - uint8_t slot_num; - - union { - // MD_MAT_TMAP - struct { - uint32_t handle; // Couldn't care less - float uvscale; // Couldn't care less - }; - - // MD_MAT_COLOR - struct { - uint8_t colour[4]; - uint32_t ipal_index; // Couldn't care less - }; - }; -} MeshMaterial; - -// Optional -typedef struct { - float trans; - float illum; -} MeshMaterialExtra; - -typedef struct { - int32_t parent; // A numbered parent identification (Parent sub-object index) or -1 if no parent exists. - // Comment: I expect this to rather be an SubObject index. - float min_range; // minimal angle/translation ? - float max_range; // maximal angle/translation ? - float rot[9]; // Transformation matrix. Rotation and translation comparing the parent object (not used for parent imho) - Vertex AxlePoint; // Position of this sub-object -} SubObjTransform; - -typedef struct { - char name[8]; - - uint8_t movement; // the movement of the object 0 - none, 1 - rotate, 2 - slide - - SubObjTransform trans; - - short child_sub_obj; - short next_sub_obj; - short vhot_start; - short sub_num_vhots; - short point_start; - short sub_num_points; - short light_start; - short sub_num_lights; - short norm_start; - short sub_num_norms; - short node_start; - short sub_num_nodes; -} SubObjectHeader; - -// geometry nodes definitions -typedef struct NodeHeader -{ - uint8_t subObjectID; // So I can skip those sub-objs that don't match - // This is probably used if MD_NODE_CALL skips from one object to another. - // I would reckon that the transform of object indicated here is used rather than the one given by the object in progress - uint8_t object_number; - uint8_t c_unk1; - -} NodeHeader; - -#define NODE_HEADER_SIZE 3 - -typedef struct NodeSplit -{ - Vertex sphere_center; - float sphere_radius; - int16_t pgon_before_count; - uint16_t normal; // Split plane normal - float d; // Split plane d - short behind_node; // offset to the node on the behind (from offset_nodes) - short front_node; // offset to the node on the front (from offset_nodes) - short pgon_after_count; -} NodeSplit; - -#define NODE_SPLIT_SIZE 26 - -typedef struct NodeCall -{ - Vertex sphere_center; - float sphere_radius; - short pgon_before_count; - short call_node; // Inserted node? - short pgon_after_count; -} NodeCall; - -#define NODE_CALL_SIZE 22 - -typedef struct NodeRaw // Simple Node. No splitting -{ - Vertex sphere_center; - float sphere_radius; - short pgon_count; -} NodeRaw; - -#define NODE_RAW_SIZE 18 - -// If version 3 and type is MD_PGON_TMAP or MD_PGON_SOLID_COLOR_VCOLOR -// data is the material index. Range: 1 - num_materials -// -// In any version, if type is MD_PGON_SOLID_COLOR_PAL data is the palette index - -typedef struct ObjPolygon { - uint16_t index; // Index of the Polygon - int8_t data; // ? - uint8_t type; // MD_PGON Type - uint8_t num_verts; // Number of verts in polygon - uint16_t norm; // Polygon normal number - float d; // ? -} ObjPolygon; - - -const int ObjLight_Size = 8; - -/// Notmal specifier (per vertex) -typedef struct ObjLight { - // Material reference - uint16_t material; - - // Point on object reference - uint16_t point; - - // Packed normal vector (10 bits per axis, signed) - uint32_t packed_normal; -} ObjLight; - - -/* TODO: Lights. Dunno what those are, but this is what I know so far: - -1. This is the rough structure: - -1. Short - material -2. Short - point -3. 4 bytes - related to normal. Does not make great sense (two shorts as space direction without rotation?) -*/ - -//----- These are related to the CAL files: ----- - -/// The header struct of the .CAL file -typedef struct { - int32_t Version; // We only know version 1 - int32_t num_torsos; - int32_t num_limbs; -} CalHdr; - -// Torso array (array of TorsoV1) follows header -/// Torso definition (next to header, int the num_torsos count) -typedef struct { - uint32_t root; // Root - the root joint index of this torso. Init to 0,0,0 for parent == -1 to get zero - positioned skeleton - int32_t parent; // -1 - the torso's parent (-1 for root torso) - int32_t fixed_count; // count of joints of this torso (maxed to 16) - uint32_t fixed_joints[16]; // index remap of the joints (could be checked for uniqueness for sanity checks) - Vertex fixed_joint_diff_coord[16]; // the relative position of the torso's joint to the root joint -} CalTorso; - -/// Limb definition - Limbs follow the Torsos in the file -typedef struct { - int32_t torso_index; // index of the torso we attach to - int32_t junk1; // What's this? - int32_t num_segments; // count of joints in this limb - uint16_t attachment_joint; // joint to which the limb attaches - uint16_t segments[16]; // indices of the joints of this limb - Vertex segment_diff_coord[16]; // relative to the previous limb's joint! - float lengths[16]; // Lengths of the segment -} CalLimb; - -//----- The Structures used in the LGMM AI .BIN mesh file ----- -/// the main header of the LGMM -typedef struct { - uint32_t zeroes[3]; // Always seems to be 0 - unsigned char num_what1; // '0' - unsigned char num_mappers; // Count for U2 (*20) - char num_mats; // Number of materials - char num_joints; // Number of joints? - int16_t num_polys; // Polygon count (Count for U4 * 16) - int16_t num_vertices; // Total Vertex count - uint32_t num_stretchy; // Stretchy Vertexes + x_count == p_count? - uint32_t offset_joint_remap; // Joint map?, num_joints elements - uint32_t offset_mappers; // joint mapping definitions - uint32_t offset_mats; // looks likes material offset, see object header - uint32_t offset_joints; // Per-Joint Polygon info. The joints mentioned here are not the same joints as in .CAL - uint32_t offset_poly; // (U5-U4) = polygons - uint32_t offset_norm; // (U6-U5) = Normals - uint32_t offset_vert; // (U7-U6) = Vertexes (munged) - num_vertices - uint32_t offset_uvmap; // (U8-U7) = UV maps. Z is junk (count - the same as vertex count) - uint32_t offset_blends; // Floats (num_stretchy). Blending factors. All in the range 0-1 - uint32_t offset_U9; // Zero. All the time it seems -} AIMeshHeader; - -// then, there are the joint remapping structs (2x num_joints of bytes) - -// This structure seems to map the AI mesh joints to the Cal joints. -typedef struct { - long unk1; - char joint; // in the joint info (joint->poly lists) this stuct is referenced, and this attr is seeked - char en1; // 0/1 I guess these enable the usage of the blending for the particular joint - char jother; // maybe stretchy vertex reference, or whatever. Need more info here - char en2; // 0/1 Maybe this is enabling the referencing of stretchy vertices - float rotation[3]; // I just guess this can be rotation for the bone -} AIMapper; - -// We handle revision 1 and 2 AI meshes. These have different material structure. commented are the versions for the ver-dependent fields -/// Material definition struct -typedef struct { - char name[16]; - - // Only in rev. 2 mesh: (This part is skipped for rev. 1 meshes) - uint32_t ext_flags; // 2 only - indicate which of the params is used (trans, illum, etc). Bitmask - float trans; // 2 only - float illum; // 2 only - float unknown; // 2 only - - // back to both rev. fields: - uint32_t unk1; - uint32_t unk2; - unsigned char type; // Textured, color-only, etc.... - unsigned char slot_num; // material's slot. We know this one from the Object meshes, don't we? - - // some other data, not identified yet - // I'd bet we'll see 8 bytes of info here, the same as in MeshMaterial - color and ipal_index, OR, handle and uv-scale - uint16_t s_unk1; // 2 - uint16_t s_unk2; // 4 - uint16_t s_unk3; // 6 - uint16_t s_unk4; // 8 - uint16_t s_unk5; // What would this be? - uint32_t l_unk3; // and this? - -} AIMaterial; - - -/// Joint -> polygons mapping -typedef struct JointInfo { - short num_polys; // Number of polygons - short start_poly; // Start poly - short num_vertices; // Number of vertices - short start_vertex; // Start vertex - float jflt; // I suppose this is a blending factor for the bone - short sh6; // Flag (?) - there are few places for TG this is not zero, but either 1,2 or 3 - short mapper_id; // id of the mapper struct -} AIJointInfo; - -/// Triangle in ai mesh def. -typedef struct { - short a; // vertex indices - short b; - short c; - short mat; // material - float f_unk; // some float? Hmm what could've this be? - short index; // index of this - unsigned short flag; // stretch or not? This would seem to be a good place to inform about it -} AITriangle; - -/* -The sh6 <> 0 files for T1G: -BADTRAY.BIN -bowempt9.bin -BOWSITE.BIN -carry5.bin -exphamk4.bin -expservt.bin -expzom.bin -MAGSWGU.BIN -servtest.bin -*/ - - -#endif +/****************************************************************************** + * + * This file is part of openDarkEngine project + * Copyright (C) 2005-2006 openDarkEngine team + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * This program 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 General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + * + *****************************************************************************/ + +/* +thanks go to shadowspawn for his great contribution (and Ryan Nunn for his work on this thing too, as well as maybe other, which I do not know about) +Parts of this file are exact copies or free-style rewrites of the contributed code +*/ + +#ifndef __BINFORMAT_H +#define __BINFORMAT_H + +#include "config.h" + +// Material flags (known) +#define MD_MAT_TRANS 1 +#define MD_MAT_ILLUM 2 + +// Material Types (known) +#define MD_MAT_TMAP 0 +#define MD_MAT_COLOR 1 + +// Polygon types ( & 0x07h ) +#define MD_PGON_NONE 0 +#define MD_PGON_SOLID 1 +#define MD_PGON_WIRE 2 +#define MD_PGON_TMAP 3 + +// Polygon Flags ( & 0x60h ) +#define MD_PGON_SOLID_COLOR_PAL 0x20 +#define MD_PGON_SOLID_COLOR_VCOLOR 0x40 + +/* +#define MD_PGON_TMAP 0x1B // 0001 1011 +#define MD_PGON_SOLID_COLOR_PAL 0x39 // 0011 1001 +#define MD_PGON_SOLID_COLOR_VCOLOR 0x59 // 0101 1001 +*/ + +// Sub object types (Guess) +#define MD_SUB_NONE 0 +#define MD_SUB_ROT 1 +#define MD_SUB_SLIDE 2 + +// BSP Node types (Guess) +#define MD_NODE_RAW 0 +#define MD_NODE_SPLIT 1 +#define MD_NODE_CALL 2 +#define MD_NODE_HDR 4 + +struct Vertex { + float x; + float y; + float z; + + Vertex() { x = y = z = 0; }; + Vertex(float _x, float _y, float _z) { + x = _x; + y = _y; + z = _z; + } +}; + +struct PolyParts { + int32_t a; + int32_t b; + int32_t c; +}; + +struct PolyPartsShorts { + int16_t a; + int16_t b; + int16_t c; +}; + +struct UVMap { + float u; + float v; +}; + +// Main header +struct BinHeadType { + char ID[4]; // 'LGMD', 'LGMM' + uint32_t version; // 3, 4 - 1 +}; + +// the object file type headers: +typedef struct BinHeader { + char ObjName[8]; + float sphere_rad; + float max_poly_rad; + + float bbox_max[3]; + float bbox_min[3]; + float parent_cen[3]; + + uint16_t num_pgons; + uint16_t num_verts; + uint16_t num_parms; + uint8_t num_mats; + uint8_t num_vcalls; + uint8_t num_vhots; + uint8_t num_objs; + + uint32_t offset_objs; + uint32_t offset_mats; + uint32_t offset_uv; + uint32_t offset_vhots; + uint32_t offset_verts; + uint32_t offset_light; + uint32_t offset_norms; + uint32_t offset_pgons; + uint32_t offset_nodes; + uint32_t model_size; + + // version 4 addons + int32_t mat_flags; + int32_t offset_new1; + int32_t offset_new2; +} BinHeader; + +// the sizes of the header versions +#define SIZE_BIN_HDR_V4 (sizeof(BinHeader)) +#define SIZE_BIN_HDR_V3 (SIZE_BIN_HDR_V4 - 12) + +// the attachment joint definition (arbitary attachment "slot") +typedef struct VHotObj { + uint32_t index; + Vertex point; +} VHotObj; + +// Material definitions +typedef struct { + char name[16]; + uint8_t type; // MD_MAT_COLOR or MD_MAT_TMAP + uint8_t slot_num; + + union { + // MD_MAT_TMAP + struct { + uint32_t handle; // Couldn't care less + float uvscale; // Couldn't care less + }; + + // MD_MAT_COLOR + struct { + uint8_t colour[4]; + uint32_t ipal_index; // Couldn't care less + }; + }; +} MeshMaterial; + +// Optional +typedef struct { + float trans; + float illum; +} MeshMaterialExtra; + +typedef struct { + int32_t parent; // A numbered parent identification (Parent sub-object index) or -1 if no parent exists. + // Comment: I expect this to rather be an SubObject index. + float min_range; // minimal angle/translation ? + float max_range; // maximal angle/translation ? + float rot[9]; // Transformation matrix. Rotation and translation comparing the parent object (not used for parent imho) + Vertex AxlePoint; // Position of this sub-object +} SubObjTransform; + +typedef struct { + char name[8]; + + uint8_t movement; // the movement of the object 0 - none, 1 - rotate, 2 - slide + + SubObjTransform trans; + + short child_sub_obj; + short next_sub_obj; + short vhot_start; + short sub_num_vhots; + short point_start; + short sub_num_points; + short light_start; + short sub_num_lights; + short norm_start; + short sub_num_norms; + short node_start; + short sub_num_nodes; +} SubObjectHeader; + +// geometry nodes definitions +typedef struct NodeHeader +{ + uint8_t subObjectID; // So I can skip those sub-objs that don't match + // This is probably used if MD_NODE_CALL skips from one object to another. + // I would reckon that the transform of object indicated here is used rather than the one given by the object in progress + uint8_t object_number; + uint8_t c_unk1; + +} NodeHeader; + +#define NODE_HEADER_SIZE 3 + +typedef struct NodeSplit +{ + Vertex sphere_center; + float sphere_radius; + int16_t pgon_before_count; + uint16_t normal; // Split plane normal + float d; // Split plane d + short behind_node; // offset to the node on the behind (from offset_nodes) + short front_node; // offset to the node on the front (from offset_nodes) + short pgon_after_count; +} NodeSplit; + +#define NODE_SPLIT_SIZE 26 + +typedef struct NodeCall +{ + Vertex sphere_center; + float sphere_radius; + short pgon_before_count; + short call_node; // Inserted node? + short pgon_after_count; +} NodeCall; + +#define NODE_CALL_SIZE 22 + +typedef struct NodeRaw // Simple Node. No splitting +{ + Vertex sphere_center; + float sphere_radius; + short pgon_count; +} NodeRaw; + +#define NODE_RAW_SIZE 18 + +// If version 3 and type is MD_PGON_TMAP or MD_PGON_SOLID_COLOR_VCOLOR +// data is the material index. Range: 1 - num_materials +// +// In any version, if type is MD_PGON_SOLID_COLOR_PAL data is the palette index + +typedef struct ObjPolygon { + uint16_t index; // Index of the Polygon + int8_t data; // ? + uint8_t type; // MD_PGON Type + uint8_t num_verts; // Number of verts in polygon + uint16_t norm; // Polygon normal number + float d; // ? +} ObjPolygon; + + +const int ObjLight_Size = 8; + +/// Notmal specifier (per vertex) +typedef struct ObjLight { + // Material reference + uint16_t material; + + // Point on object reference + uint16_t point; + + // Packed normal vector (10 bits per axis, signed) + uint32_t packed_normal; +} ObjLight; + + +/* TODO: Lights. Dunno what those are, but this is what I know so far: + +1. This is the rough structure: + +1. Short - material +2. Short - point +3. 4 bytes - related to normal. Does not make great sense (two shorts as space direction without rotation?) +*/ + +//----- These are related to the CAL files: ----- + +/// The header struct of the .CAL file +typedef struct { + int32_t Version; // We only know version 1 + int32_t num_torsos; + int32_t num_limbs; +} CalHdr; + +// Torso array (array of TorsoV1) follows header +/// Torso definition (next to header, int the num_torsos count) +typedef struct { + uint32_t root; // Root - the root joint index of this torso. Init to 0,0,0 for parent == -1 to get zero - positioned skeleton + int32_t parent; // -1 - the torso's parent (-1 for root torso) + int32_t fixed_count; // count of joints of this torso (maxed to 16) + uint32_t fixed_joints[16]; // index remap of the joints (could be checked for uniqueness for sanity checks) + Vertex fixed_joint_diff_coord[16]; // the relative position of the torso's joint to the root joint +} CalTorso; + +/// Limb definition - Limbs follow the Torsos in the file +typedef struct { + int32_t torso_index; // index of the torso we attach to + int32_t junk1; // What's this? + int32_t num_segments; // count of joints in this limb + uint16_t attachment_joint; // joint to which the limb attaches + uint16_t segments[16]; // indices of the joints of this limb + Vertex segment_diff_coord[16]; // relative to the previous limb's joint! + float lengths[16]; // Lengths of the segment +} CalLimb; + +//----- The Structures used in the LGMM AI .BIN mesh file ----- +/// the main header of the LGMM +typedef struct { + uint32_t zeroes[3]; // Always seems to be 0 + unsigned char num_what1; // '0' + unsigned char num_mappers; // Count for U2 (*20) + char num_mats; // Number of materials + char num_joints; // Number of joints? + int16_t num_polys; // Polygon count (Count for U4 * 16) + int16_t num_vertices; // Total Vertex count + uint32_t num_stretchy; // Stretchy Vertexes + x_count == p_count? + uint32_t offset_joint_remap; // Joint map?, num_joints elements + uint32_t offset_mappers; // joint mapping definitions + uint32_t offset_mats; // looks likes material offset, see object header + uint32_t offset_joints; // Per-Joint Polygon info. The joints mentioned here are not the same joints as in .CAL + uint32_t offset_poly; // (U5-U4) = polygons + uint32_t offset_norm; // (U6-U5) = Normals + uint32_t offset_vert; // (U7-U6) = Vertexes (munged) - num_vertices + uint32_t offset_uvmap; // (U8-U7) = UV maps. Z is junk (count - the same as vertex count) + uint32_t offset_blends; // Floats (num_stretchy). Blending factors. All in the range 0-1 + uint32_t offset_U9; // Zero. All the time it seems +} AIMeshHeader; + +// then, there are the joint remapping structs (2x num_joints of bytes) + +// This structure seems to map the AI mesh joints to the Cal joints. +typedef struct { + long unk1; + char joint; // in the joint info (joint->poly lists) this stuct is referenced, and this attr is seeked + char en1; // 0/1 I guess these enable the usage of the blending for the particular joint + char jother; // maybe stretchy vertex reference, or whatever. Need more info here + char en2; // 0/1 Maybe this is enabling the referencing of stretchy vertices + float rotation[3]; // I just guess this can be rotation for the bone +} AIMapper; + +// We handle revision 1 and 2 AI meshes. These have different material structure. commented are the versions for the ver-dependent fields +/// Material definition struct +typedef struct { + char name[16]; + + // Only in rev. 2 mesh: (This part is skipped for rev. 1 meshes) + uint32_t ext_flags; // 2 only - indicate which of the params is used (trans, illum, etc). Bitmask + float trans; // 2 only + float illum; // 2 only + float unknown; // 2 only + + // back to both rev. fields: + uint32_t unk1; + uint32_t unk2; + unsigned char type; // Textured, color-only, etc.... + unsigned char slot_num; // material's slot. We know this one from the Object meshes, don't we? + + // some other data, not identified yet + // I'd bet we'll see 8 bytes of info here, the same as in MeshMaterial - color and ipal_index, OR, handle and uv-scale + uint16_t s_unk1; // 2 + uint16_t s_unk2; // 4 + uint16_t s_unk3; // 6 + uint16_t s_unk4; // 8 + uint16_t s_unk5; // What would this be? + uint32_t l_unk3; // and this? + +} AIMaterial; + + +/// Joint -> polygons mapping +typedef struct JointInfo { + short num_polys; // Number of polygons + short start_poly; // Start poly + short num_vertices; // Number of vertices + short start_vertex; // Start vertex + float jflt; // I suppose this is a blending factor for the bone + short sh6; // Flag (?) - there are few places for TG this is not zero, but either 1,2 or 3 + short mapper_id; // id of the mapper struct +} AIJointInfo; + +/// Triangle in ai mesh def. +typedef struct { + short a; // vertex indices + short b; + short c; + short mat; // material + float f_unk; // some float? Hmm what could've this be? + short index; // index of this + unsigned short flag; // stretch or not? This would seem to be a good place to inform about it +} AITriangle; + +/* +The sh6 <> 0 files for T1G: +BADTRAY.BIN +bowempt9.bin +BOWSITE.BIN +carry5.bin +exphamk4.bin +expservt.bin +expzom.bin +MAGSWGU.BIN +servtest.bin +*/ + + +#endif Modified: trunk/src/base/loaders/CMakeLists.txt =================================================================== --- trunk/src/base/loaders/CMakeLists.txt 2008-09-21 16:48:07 UTC (rev 841) +++ trunk/src/base/loaders/CMakeLists.txt 2008-09-21 16:50:46 UTC (rev 842) @@ -1,23 +1,22 @@ -include_directories ( - ${OGRE_INCLUDE_DIR} - ${OPDE_BINARY_DIR} - ${FREEIMAGE_INCLUDE_DIR} - ${OPDE_SOURCE_DIR}/src/base - ${OPDE_SOURCE_DIR}/src/base/file - ${OPDE_SOURCE_DIR}/src/base/Dark - ${OPDE_SOURCE_DIR}/src/compat -) - -link_directories ( - ${OGRE_LIB_DIR} - ${OPDE_SOURCE_DIR}/src/base -) - -file(GLOB OPDE_MANUALLOADERS_HEADERS *.h) - -# Various types of manual resource loaders -add_library (OpdeManualLoaders ManualBinFileLoader.cpp ManualFonFileLoader.cpp ${OPDE_MANUALLOADERS_HEADERS}) - -target_link_libraries( OpdeManualLoaders - OpdeBase -) +include_directories ( + ${OGRE_INCLUDE_DIR} + ${OPDE_BINARY_DIR} + ${FREEIMAGE_INCLUDE_DIR} + ${OPDE_SOURCE_DIR}/src/base + ${OPDE_SOURCE_DIR}/src/base/file + ${OPDE_SOURCE_DIR}/src/base/Dark + ${OPDE_SOURCE_DIR}/src/compat +) + +link_directories ( + ${OGRE_LIB_DIR} +) + +file(GLOB OPDE_MANUALLOADERS_HEADERS *.h) + +# Various types of manual resource loaders +add_library (OpdeManualLoaders ManualBinFileLoader.cpp ManualFonFileLoader.cpp ${OPDE_MANUALLOADERS_HEADERS}) + +SET_TARGET_PROPERTIES(OpdeManualLoaders PROPERTIES + COMPILE_DEFINITIONS "OPDELIB_DLL_TARGET" +) Modified: trunk/src/base/loaders/FonFormat.h =================================================================== --- trunk/src/base/loaders/FonFormat.h 2008-09-21 16:48:07 UTC (rev 841) +++ trunk/src/base/loaders/FonFormat.h 2008-09-21 16:50:46 UTC (rev 842) @@ -1,200 +1,201 @@ -/****************************************************************************** - * - * This file is part of openDarkEngine project - * Copyright (C) 2005-2007 openDarkEngine team - * Includes code based on Thief Font Converter by Tom N Harris <tel...@wh...> - * - * This program is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation; either version 2 of the License, or - * (at your option) any later version. - * - * This program 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 General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA - * - * - * - * $Id$ - * - *****************************************************************************/ - -#ifndef __FONFORMAT_H -#define __FONFORMAT_H - -#include "integers.h" - -namespace Ogre -{ - typedef uint32_t DWORD; - typedef int32_t BOOL; - typedef uint8_t BYTE; - typedef uint16_t WORD; - typedef DWORD COLORREF; - - static char BLACK_INDEX = 0; - static char WHITE_INDEX = 1; - - static const char DarkFontHeader_Format[]="w34c2w32c2i2w"; - struct DarkFontHeader - { - uint16_t Format; /* 1 - anti-aliased, 0xCCCC - 8bpp, else - 1bpp */ - uint8_t Unknown; /* set to 10 if Format is 1 */ - uint8_t Palette; /* 0 - use current, 1 - standard */ - uint8_t Zeros1[32]; - int16_t FirstChar; - int16_t LastChar; - uint8_t Zeros2[32]; - uint32_t WidthOffset; - uint32_t BitmapOffset; - uint16_t RowWidth; /* in bytes */ - uint16_t NumRows; - }; - - static const char ExternalPaletteHeader_Format[]="5i"; - struct ExternalPaletteHeader - { - DWORD RiffSig; - DWORD RiffLength; - DWORD PSig1; - DWORD PSig2; - DWORD Length; - } ; - - struct CharInfo - { - int16_t Code; - uint16_t Column; - uint16_t Width; - uint16_t Height; - int32_t X,Y; - }; - typedef std::vector<CharInfo> CharInfoList; - - #pragma pack(push, 1) - - static const char BITMAPFILEHEADER_Format[]="wi2wi"; - typedef struct tagBITMAPFILEHEADER { - WORD bfType; - DWORD bfSize; - WORD bfReserved1; - WORD bfReserved2; - DWORD bfOffBits; - } BITMAPFILEHEADER; - - static const char BITMAPINFOHEADER_Format[]="3i2w6i"; - typedef struct tagBITMAPINFOHEADER { - DWORD biSize; - DWORD biWidth; - DWORD biHeight; - WORD biPlanes; - WORD biBitCount; - DWORD biCompression; - DWORD biSizeImage; - DWORD biXPelsPerMeter; - DWORD biYPelsPerMeter; - DWORD biClrUsed; - DWORD biClrImportant; - } BITMAPINFOHEADER; - - static const char RGBQUAD_Format[]="4c"; - typedef struct tagRGBQUAD { - BYTE rgbBlue; - BYTE rgbGreen; - BYTE rgbRed; - BYTE rgbReserved; - } RGBQUAD; - - typedef struct tagBITMAPINFO { - BITMAPINFOHEADER bmiHeader; - RGBQUAD bmiColors[1]; - } BITMAPINFO; - - static const char RGBTRIPLE_Format[]="3c"; - typedef struct tagRGBTRIPLE { - BYTE rgbtBlue; - BYTE rgbtGreen; - BYTE rgbtRed; - } RGBTRIPLE; - - static const char ColorTable_Format[]="256i"; - static const COLORREF ColorTable[] = { - 0x000000, 0xDDDDDD, 0xB6B6B6, 0x969696, 0x7C7C7C, 0x666666, 0x545454, 0x454545, - 0x393939, 0x2F2F2F, 0x272727, 0x202020, 0x1A1A1A, 0x161616, 0x121212, 0x0F0F0F, - 0x0C0C0C, 0x0A0A0A, 0x080808, 0x060606, 0x050505, 0x040404, 0x030303, 0x7A8449, - 0x707A43, 0x65703D, 0x5B6536, 0x0087FE, 0x007DF2, 0x0073E6, 0x0069DA, 0x005FCE, - 0xB18C82, 0xA38178, 0x96776E, 0x886C64, 0x7B615A, 0x6D5650, 0x604C46, 0x52413C, - 0x443632, 0x372B28, 0x29211E, 0x1C1614, 0x0E0B0A, 0xA30202, 0x980202, 0x8E0202, - 0x830202, 0x780101, 0x6D0101, 0x630101, 0x580101, 0x4D0101, 0x380101, 0x220000, - 0x0D0000, 0x083015, 0x072B13, 0x062510, 0x05200E, 0x041A0B, 0x031509, 0x020F06, - 0x8E6D43, 0x87683F, 0x81623C, 0x7A5D38, 0x735734, 0x6D5231, 0x664C2D, 0x60472A, - 0x573F25, 0x4D3820, 0x44301A, 0x3A2915, 0x312110, 0x3E1210, 0x3A110F, 0x36100E, - 0x320E0D, 0x2E0D0C, 0x2A0C0B, 0x260B0A, 0x220A09, 0x1D0807, 0x180606, 0x120504, - 0x0D0303, 0x321D46, 0x2D1A3F, 0x271736, 0x20132C, 0x1A1023, 0x140C1B, 0x0E0912, - 0xEE9A47, 0xDE9042, 0xCF863E, 0xBF7C39, 0xAF7134, 0xA0672F, 0x905D2B, 0x815326, - 0x714922, 0x613F1D, 0x513519, 0x412B14, 0x312110, 0x312110, 0x2E1F0F, 0x2B1D0E, - 0x271A0D, 0x24180C, 0x21160B, 0x1E140A, 0x1B1209, 0x170F07, 0x140D06, 0x110B05, - 0x0A0603, 0xFFFFBD, 0xFFB510, 0xFFAD52, 0xFFFF7B, 0xF1E657, 0xE4CE34, 0xD6B510, - 0x8C7B5A, 0x867555, 0x7F6E4F, 0x79684A, 0x726145, 0x6C5B40, 0x65543A, 0x5C4C33, - 0x54432C, 0x4B3B25, 0x42321E, 0x3A2A17, 0x312110, 0x505B30, 0x4B552D, 0x464F2A, - 0x404927, 0x3B4423, 0x363E20, 0x31381D, 0x2C321A, 0x262C17, 0x212614, 0x1C2011, - 0x171B0D, 0xAD10B5, 0x9C29AD, 0xB51894, 0x9400C6, 0x6300AD, 0x4A0080, 0x310052, - 0x6D7787, 0x666F7E, 0x5F6775, 0x575F6C, 0x505764, 0x494F5A, 0x424752, 0x3B4048, - 0x33373E, 0x2B2E34, 0x222529, 0x1A1C1F, 0x121315, 0x5A3139, 0x542E35, 0x4E2B31, - 0x48272E, 0x42242A, 0x3C2126, 0x361E22, 0x311B1F, 0x2B171B, 0x231316, 0x1B0E11, - 0x130A0C, 0xE71821, 0xCE2118, 0xFF8C18, 0xD97415, 0xB25C12, 0x8C440F, 0x652C0C, - 0x6D5370, 0x664E69, 0x5E4760, 0x564158, 0x4D3B4E, 0x463546, 0x3D2E3D, 0x352835, - 0x2D222D, 0x241B24, 0x1C151C, 0x130E13, 0x0B080B, 0x9C4A4A, 0xA86161, 0xB57777, - 0xC18E8E, 0xCEA5A5, 0xDABBBB, 0xE6D2D2, 0xF3E8E8, 0xFFFFFF, 0x0055C2, 0x004BB6, - 0x0041A2, 0xB5BDFF, 0x8C8CE7, 0x9CADEF, 0x7E9DE2, 0x5F8ED4, 0x417EC7, 0x226EB9, - 0xDED684, 0xCFC87B, 0xC1BA73, 0xB2AC6A, 0xA49E61, 0x959058, 0x878250, 0x746F44, - 0x605C39, 0x4D4A2D, 0x393721, 0x262416, 0x12110A, 0x74959D, 0x97B0B6, 0xBACACE, - 0xDCE5E7, 0xFFFFFF, 0x3A5B4B, 0x466E57, 0x538063, 0x5F936F, 0x6BA57B, 0x00378D, - 0x002D79, 0x002364, 0x001950, 0x000F3B, 0x0000FF, 0x0000FF, 0xFF00FF, 0x000000 - }; - - /* Anti-aliased fonts have a pixel Width of 8 bits, but only the lower 4 bits are used. */ - static const COLORREF AntiAliasedColorTable[] = { - 0xFFFFFF, 0xEEEEEE, 0xDDDDDD, 0xCCCCCC, 0xBBBBBB, 0xAAAAAA, 0x999999, 0x888888, - 0x777777, 0x666666, 0x555555, 0x444444, 0x333333, 0x222222, 0x111111, 0x000000, - 0xFFFFFF, 0xFFFFFF, 0xFFFFFF, 0xFFFFFF, 0xFFFFFF, 0xFFFFFF, 0xFFFFFF, 0xFFFFFF, - 0xFFFFFF, 0xFFFFFF, 0xFFFFFF, 0xFFFFFF, 0xFFFFFF, 0xFFFFFF, 0xFFFFFF, 0xFFFFFF, - 0xFFFFFF, 0xFFFFFF, 0xFFFFFF, 0xFFFFFF, 0xFFFFFF, 0xFFFFFF, 0xFFFFFF, 0xFFFFFF, - 0xFFFFFF, 0xFFFFFF, 0xFFFFFF, 0xFFFFFF, 0xFFFFFF, 0xFFFFFF, 0xFFFFFF, 0xFFFFFF, - 0xFFFFFF, 0xFFFFFF, 0xFFFFFF, 0xFFFFFF, 0xFFFFFF, 0xFFFFFF, 0xFFFFFF, 0xFFFFFF, - 0xFFFFFF, 0xFFFFFF, 0xFFFFFF, 0xFFFFFF, 0xFFFFFF, 0xFFFFFF, 0xFFFFFF, 0xFFFFFF, - 0xFFFFFF, 0xFFFFFF, 0xFFFFFF, 0xFFFFFF, 0xFFFFFF, 0xFFFFFF, 0xFFFFFF, 0xFFFFFF, - 0xFFFFFF, 0xFFFFFF, 0xFFFFFF, 0xFFFFFF, 0xFFFFFF, 0xFFFFFF, 0xFFFFFF, 0xFFFFFF, - 0xFFFFFF, 0xFFFFFF, 0xFFFFFF, 0xFFFFFF, 0xFFFFFF, 0xFFFFFF, 0xFFFFFF, 0xFFFFFF, - 0xFFFFFF, 0xFFFFFF, 0xFFFFFF, 0xFFFFFF, 0xFFFFFF, 0xFFFFFF, 0xFFFFFF, 0xFFFFFF, - 0xFFFFFF, 0xFFFFFF, 0xFFFFFF, 0xFFFFFF, 0xFFFFFF, 0xFFFFFF, 0xFFFFFF, 0xFFFFFF, - 0xFFFFFF, 0xFFFFFF, 0xFFFFFF, 0xFFFFFF, 0xFFFFFF, 0xFFFFFF, 0xFFFFFF, 0xFFFFFF, - 0xFFFFFF, 0xFFFFFF, 0xFFFFFF, 0xFFFFFF, 0xFFFFFF, 0xFFFFFF, 0xFFFFFF, 0xFFFFFF, - 0xFFFFFF, 0xFFFFFF, 0xFFFFFF, 0xFFFFFF, 0xFFFFFF, 0xFFFFFF, 0xFFFFFF, 0xFFFFFF, - 0xFFFFFF, 0xFFFFFF, 0xFFFFFF, 0xFFFFFF, 0xFFFFFF, 0xFFFFFF, 0xFFFFFF, 0xFFFFFF, - 0xFFFFFF, 0xFFFFFF, 0xFFFFFF, 0xFFFFFF, 0xFFFFFF, 0xFFFFFF, 0xFFFFFF, 0xFFFFFF, - 0xFFFFFF, 0xFFFFFF, 0xFFFFFF, 0xFFFFFF, 0xFFFFFF, 0xFFFFFF, 0xFFFFFF, 0xFFFFFF, - 0xFFFFFF, 0xFFFFFF, 0xFFFFFF, 0xFFFFFF, 0xFFFFFF, 0xFFFFFF, 0xFFFFFF, 0xFFFFFF, - 0xFFFFFF, 0xFFFFFF, 0xFFFFFF, 0xFFFFFF, 0xFFFFFF, 0xFFFFFF, 0xFFFFFF, 0xFFFFFF, - 0xFFFFFF, 0xFFFFFF, 0xFFFFFF, 0xFFFFFF, 0xFFFFFF, 0xFFFFFF, 0xFFFFFF, 0xFFFFFF, - 0xFFFFFF, 0xFFFFFF, 0xFFFFFF, 0xFFFFFF, 0xFFFFFF, 0xFFFFFF, 0xFFFFFF, 0xFFFFFF, - 0xFFFFFF, 0xFFFFFF, 0xFFFFFF, 0xFFFFFF, 0xFFFFFF, 0xFFFFFF, 0xFFFFFF, 0xFFFFFF, - 0xFFFFFF, 0xFFFFFF, 0xFFFFFF, 0xFFFFFF, 0xFFFFFF, 0xFFFFFF, 0xFFFFFF, 0xFFFFFF, - 0xFFFFFF, 0xFFFFFF, 0xFFFFFF, 0xFFFFFF, 0xFFFFFF, 0xFFFFFF, 0xFFFFFF, 0xFFFFFF, - 0xFFFFFF, 0xFFFFFF, 0xFFFFFF, 0xFFFFFF, 0xFFFFFF, 0xFFFFFF, 0xFFFFFF, 0xFFFFFF, - 0xFFFFFF, 0xFFFFFF, 0xFFFFFF, 0xFFFFFF, 0xFFFFFF, 0xFFFFFF, 0xFFFFFF, 0xFFFFFF, - 0xFFFFFF, 0xFFFFFF, 0xFFFFFF, 0xFFFFFF, 0xFFFFFF, 0xFFFFFF, 0xFFFFFF, 0xFFFFFF, - 0xFFFFFF, 0xFFFFFF, 0xFFFFFF, 0xFFFFFF, 0xFFFFFF, 0xFFFFFF, 0xFFFFFF, 0xFFFFFF, - 0xFFFFFF, 0xEEEEEE, 0xDDDDDD, 0xCCCCCC, 0xBBBBBB, 0xAAAAAA, 0x999999, 0x888888, - 0x777777, 0x666666, 0x555555, 0x444444, 0x333333, 0x222222, 0x111111, 0x000000 - }; - - #pragma pack(pop) -} - -#endif //__FONFORMAT_H +/****************************************************************************** + * + * This file is part of openDarkEngine project + * Copyright (C) 2005-2007 openDarkEngine team + * Includes code based on Thief Font Converter by Tom N Harris <tel...@wh...> + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * This program 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 General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + * + * + * + * $Id$ + * + *****************************************************************************/ + +#ifndef __FONFORMAT_H +#define __FONFORMAT_H + +#include "config.h" +#include "integers.h" + +namespace Ogre +{ + typedef uint32_t DWORD; + typedef int32_t BOOL; + typedef uint8_t BYTE; + typedef uint16_t WORD; + typedef DWORD COLORREF; + + static char BLACK_INDEX = 0; + static char WHITE_INDEX = 1; + + static const char DarkFontHeader_Format[]="w34c2w32c2i2w"; + struct DarkFontHeader + { + uint16_t Format; /* 1 - anti-aliased, 0xCCCC - 8bpp, else - 1bpp */ + uint8_t Unknown; /* set to 10 if Format is 1 */ + uint8_t Palette; /* 0 - use current, 1 - standard */ + uint8_t Zeros1[32]; + int16_t FirstChar; + int16_t LastChar; + uint8_t Zeros2[32]; + uint32_t WidthOffset; + uint32_t BitmapOffset; + uint16_t RowWidth; /* in bytes */ + uint16_t NumRows; + }; + + static const char ExternalPaletteHeader_Format[]="5i"; + struct ExternalPaletteHeader + { + DWORD RiffSig; + DWORD RiffLength; + DWORD PSig1; + DWORD PSig2; + DWORD Length; + } ; + + struct CharInfo + { + int16_t Code; + uint16_t Column; + uint16_t Width; + uint16_t Height; + int32_t X,Y; + }; + typedef std::vector<CharInfo> CharInfoList; + + #pragma pack(push, 1) + + static const char BITMAPFILEHEADER_Format[]="wi2wi"; + typedef struct tagBITMAPFILEHEADER { + WORD bfType; + DWORD bfSize; + WORD bfReserved1; + WORD bfReserved2; + DWORD bfOffBits; + } BITMAPFILEHEADER; + + static const char BITMAPINFOHEADER_Format[]="3i2w6i"; + typedef struct tagBITMAPINFOHEADER { + DWORD biSize; + DWORD biWidth; + DWORD biHeight; + WORD biPlanes; + WORD biBitCount; + DWORD biCompression; + DWORD biSizeImage; + DWORD biXPelsPerMeter; + DWORD biYPelsPerMeter; + DWORD biClrUsed; + DWORD biClrImportant; + } BITMAPINFOHEADER; + + static const char RGBQUAD_Format[]="4c"; + typedef struct tagRGBQUAD { + BYTE rgbBlue; + BYTE rgbGreen; + BYTE rgbRed; + BYTE rgbReserved; + } RGBQUAD; + + typedef struct tagBITMAPINFO { + BITMAPINFOHEADER bmiHeader; + RGBQUAD bmiColors[1]; + } BITMAPINFO; + + static const char RGBTRIPLE_Format[]="3c"; + typedef struct tagRGBTRIPLE { + BYTE rgbtBlue; + BYTE rgbtGreen; + BYTE rgbtRed; + } RGBTRIPLE; + + static const char ColorTable_Format[]="256i"; + static const COLORREF ColorTable[] = { + 0x000000, 0xDDDDDD, 0xB6B6B6, 0x969696, 0x7C7C7C, 0x666666, 0x545454, 0x454545, + 0x393939, 0x2F2F2F, 0x272727, 0x202020, 0x1A1A1A, 0x161616, 0x121212, 0x0F0F0F, + 0x0C0C0C, 0x0A0A0A, 0x080808, 0x060606, 0x050505, 0x040404, 0x030303, 0x7A8449, + 0x707A43, 0x65703D, 0x5B6536, 0x0087FE, 0x007DF2, 0x0073E6, 0x0069DA, 0x005FCE, + 0xB18C82, 0xA38178, 0x96776E, 0x886C64, 0x7B615A, 0x6D5650, 0x604C46, 0x52413C, + 0x443632, 0x372B28, 0x29211E, 0x1C1614, 0x0E0B0A, 0xA30202, 0x980202, 0x8E0202, + 0x830202, 0x780101, 0x6D0101, 0x630101, 0x580101, 0x4D0101, 0x380101, 0x220000, + 0x0D0000, 0x083015, 0x072B13, 0x062510, 0x05200E, 0x041A0B, 0x031509, 0x020F06, + 0x8E6D43, 0x87683F, 0x81623C, 0x7A5D38, 0x735734, 0x6D5231, 0x664C2D, 0x60472A, + 0x573F25, 0x4D3820, 0x44301A, 0x3A2915, 0x312110, 0x3E1210, 0x3A110F, 0x36100E, + 0x320E0D, 0x2E0D0C, 0x2A0C0B, 0x260B0A, 0x220A09, 0x1D0807, 0x180606, 0x120504, + 0x0D0303, 0x321D46, 0x2D1A3F, 0x271736, 0x20132C, 0x1A1023, 0x140C1B, 0x0E0912, + 0xEE9A47, 0xDE9042, 0xCF863E, 0xBF7C39, 0xAF7134, 0xA0672F, 0x905D2B, 0x815326, + 0x714922, 0x613F1D, 0x513519, 0x412B14, 0x312110, 0x312110, 0x2E1F0F, 0x2B1D0E, + 0x271A0D, 0x24180C, 0x21160B, 0x1E140A, 0x1B1209, 0x170F07, 0x140D06, 0x110B05, + 0x0A0603, 0xFFFFBD, 0xFFB510, 0xFFAD52, 0xFFFF7B, 0xF1E657, 0xE4CE34, 0xD6B510, + 0x8C7B5A, 0x867555, 0x7F6E4F, 0x79684A, 0x726145, 0x6C5B40, 0x65543A, 0x5C4C33, + 0x54432C, 0x4B3B25, 0x42321E, 0x3A2A17, 0x312110, 0x505B30, 0x4B552D, 0x464F2A, + 0x404927, 0x3B4423, 0x363E20, 0x31381D, 0x2C321A, 0x262C17, 0x212614, 0x1C2011, + 0x171B0D, 0xAD10B5, 0x9C29AD, 0xB51894, 0x9400C6, 0x6300AD, 0x4A0080, 0x310052, + 0x6D7787, 0x666F7E, 0x5F6775, 0x575F6C, 0x505764, 0x494F5A, 0x424752, 0x3B4048, + 0x33373E, 0x2B2E34, 0x222529, 0x1A1C1F, 0x121315, 0x5A3139, 0x542E35, 0x4E2B31, + 0x48272E, 0x42242A, 0x3C2126, 0x361E22, 0x311B1F, 0x2B171B, 0x231316, 0x1B0E11, + 0x130A0C, 0xE71821, 0xCE2118, 0xFF8C18, 0xD97415, 0xB25C12, 0x8C440F, 0x652C0C, + 0x6D5370, 0x664E69, 0x5E4760, 0x564158, 0x4D3B4E, 0x463546, 0x3D2E3D, 0x352835, + 0x2D222D, 0x241B24, 0x1C151C, 0x130E13, 0x0B080B, 0x9C4A4A, 0xA86161, 0xB57777, + 0xC18E8E, 0xCEA5A5, 0xDABBBB, 0xE6D2D2, 0xF3E8E8, 0xFFFFFF, 0x0055C2, 0x004BB6, + 0x0041A2, 0xB5BDFF, 0x8C8CE7, 0x9CADEF, 0x7E9DE2, 0x5F8ED4, 0x417EC7, 0x226EB9, + 0xDED684, 0xCFC87B, 0xC1BA73, 0xB2AC6A, 0xA49E61, 0x959058, 0x878250, 0x746F44, + 0x605C39, 0x4D4A2D, 0x393721, 0x262416, 0x12110A, 0x74959D, 0x97B0B6, 0xBACACE, + 0xDCE5E7, 0xFFFFFF, 0x3A5B4B, 0x466E57, 0x538063, 0x5F936F, 0x6BA57B, 0x00378D, + 0x002D79, 0x002364, 0x001950, 0x000F3B, 0x0000FF, 0x0000FF, 0xFF00FF, 0x000000 + }; + + /* Anti-aliased fonts have a pixel Width of 8 bits, but only the lower 4 bits are used. */ + static const COLORREF AntiAliasedColorTable[] = { + 0xFFFFFF, 0xEEEEEE, 0xDDDDDD, 0xCCCCCC, 0xBBBBBB, 0xAAAAAA, 0x999999, 0x888888, + 0x777777, 0x666666, 0x555555, 0x444444, 0x333333, 0x222222, 0x111111, 0x000000, + 0xFFFFFF, 0xFFFFFF, 0xFFFFFF, 0xFFFFFF, 0xFFFFFF, 0xFFFFFF, 0xFFFFFF, 0xFFFFFF, + 0xFFFFFF, 0xFFFFFF, 0xFFFFFF, 0xFFFFFF, 0xFFFFFF, 0xFFFFFF, 0xFFFFFF, 0xFFFFFF, + 0xFFFFFF, 0xFFFFFF, 0xFFFFFF, 0xFFFFFF, 0xFFFFFF, 0xFFFFFF, 0xFFFFFF, 0xFFFFFF, + 0xFFFFFF, 0xFFFFFF, 0xFFFFFF, 0xFFFFFF, 0xFFFFFF, 0xFFFFFF, 0xFFFFFF, 0xFFFFFF, + 0xFFFFFF, 0xFFFFFF, 0xFFFFFF, 0xFFFFFF, 0xFFFFFF, 0xFFFFFF, 0xFFFFFF, 0xFFFFFF, + 0xFFFFFF, 0xFFFFFF, 0xFFFFFF, 0xFFFFFF, 0xFFFFFF, 0xFFFFFF, 0xFFFFFF, 0xFFFFFF, + 0xFFFFFF, 0xFFFFFF, 0xFFFFFF, 0xFFFFFF, 0xFFFFFF, 0xFFFFFF, 0xFFFFFF, 0xFFFFFF, + 0xFFFFFF, 0xFFFFFF, 0xFFFFFF, 0xFFFFFF, 0xFFFFFF, 0xFFFFFF, 0xFFFFFF, 0xFFFFFF, + 0xFFFFFF, 0xFFFFFF, 0xFFFFFF, 0xFFFFFF, 0xFFFFFF, 0xFFFFFF, 0xFFFFFF, 0xFFFFFF, + 0xFFFFFF, 0xFFFFFF, 0xFFFFFF, 0xFFFFFF, 0xFFFFFF, 0xFFFFFF, 0xFFFFFF, 0xFFFFFF, + 0xFFFFFF, 0xFFFFFF, 0xFFFFFF, 0xFFFFFF, 0xFFFFFF, 0xFFFFFF, 0xFFFFFF, 0xFFFFFF, + 0xFFFFFF, 0xFFFFFF, 0xFFFFFF, 0xFFFFFF, 0xFFFFFF, 0xFFFFFF, 0xFFFFFF, 0xFFFFFF, + 0xFFFFFF, 0xFFFFFF, 0xFFFFFF, 0xFFFFFF, 0xFFFFFF, 0xFFFFFF, 0xFFFFFF, 0xFFFFFF, + 0xFFFFFF, 0xFFFFFF, 0xFFFFFF, 0xFFFFFF, 0xFFFFFF, 0xFFFFFF, 0xFFFFFF, 0xFFFFFF, + 0xFFFFFF, 0xFFFFFF, 0xFFFFFF, 0xFFFFFF, 0xFFFFFF, 0xFFFFFF, 0xFFFFFF, 0xFFFFFF, + 0xFFFFFF, 0xFFFFFF, 0xFFFFFF, 0xFFFFFF, 0xFFFFFF, 0xFFFFFF, 0xFFFFFF, 0xFFFFFF, + 0xFFFFFF, 0xFFFFFF, 0xFFFFFF, 0xFFFFFF, 0xFFFFFF, 0xFFFFFF, 0xFFFFFF, 0xFFFFFF, + 0xFFFFFF, 0xFFFFFF, 0xFFFFFF, 0xFFFFFF, 0xFFFFFF, 0xFFFFFF, 0xFFFFFF, 0xFFFFFF, + 0xFFFFFF, 0xFFFFFF, 0xFFFFFF, 0xFFFFFF, 0xFFFFFF, 0xFFFFFF, 0xFFFFFF, 0xFFFFFF, + 0xFFFFFF, 0xFFFFFF, 0xFFFFFF, 0xFFFFFF, 0xFFFFFF, 0xFFFFFF, 0xFFFFFF, 0xFFFFFF, + 0xFFFFFF, 0xFFFFFF, 0xFFFFFF, 0xFFFFFF, 0xFFFFFF, 0xFFFFFF, 0xFFFFFF, 0xFFFFFF, + 0xFFFFFF, 0xFFFFFF, 0xFFFFFF, 0xFFFFFF, 0xFFFFFF, 0xFFFFFF, 0xFFFFFF, 0xFFFFFF, + 0xFFFFFF, 0xFFFFFF, 0xFFFFFF, 0xFFFFFF, 0xFFFFFF, 0xFFFFFF, 0xFFFFFF, 0xFFFFFF, + 0xFFFFFF, 0xFFFFFF, 0xFFFFFF, 0xFFFFFF, 0xFFFFFF, 0xFFFFFF, 0xFFFFFF, 0xFFFFFF, + 0xFFFFFF, 0xFFFFFF, 0xFFFFFF, 0xFFFFFF, 0xFFFFFF, 0xFFFFFF, 0xFFFFFF, 0xFFFFFF, + 0xFFFFFF, 0xFFFFFF, 0xFFFFFF, 0xFFFFFF, 0xFFFFFF, 0xFFFFFF, 0xFFFFFF, 0xFFFFFF, + 0xFFFFFF, 0xFFFFFF, 0xFFFFFF, 0xFFFFFF, 0xFFFFFF, 0xFFFFFF, 0xFFFFFF, 0xFFFFFF, + 0xFFFFFF, 0xFFFFFF, 0xFFFFFF, 0xFFFFFF, 0xFFFFFF, 0xFFFFFF, 0xFFFFFF, 0xFFFFFF, + 0xFFFFFF, 0xEEEEEE, 0xDDDDDD, 0xCCCCCC, 0xBBBBBB, 0xAAAAAA, 0x999999, 0x888888, + 0x777777, 0x666666, 0x555555, 0x444444, 0x333333, 0x222222, 0x111111, 0x000000 + }; + + #pragma pack(pop) +} + +#endif //__FONFORMAT_H Modified: trunk/src/base/loaders/ManualBinFileLoader.cpp =================================================================== --- trunk/src/base/loaders/ManualBinFileLoader.cpp 2008-09-21 16:48:07 UTC (rev 841) +++ trunk/src/base/loaders/ManualBinFileLoader.cpp 2008-09-21 16:50:46 UTC (rev 842) @@ -22,6 +22,8 @@ * *****************************************************************************/ +#include "config.h" + #include "ManualBinFileLoader.h" #include "File.h" #include "BinFormat.h" Modified: trunk/src/base/loaders/ManualFonFileLoader.cpp =================================================================== --- trunk/src/base/loaders/ManualFonFileLoader.cpp 2008-09-21 16:48:07 UTC (rev 841) +++ trunk/src/base/loaders/ManualFonFileLoader.cpp 2008-09-21 16:50:46 UTC (rev 842) @@ -1,600 +1,601 @@ -/****************************************************************************** - * - * This file is part of openDarkEngine project - * Copyright (C) 2005-2006 openDarkEngine team - * - * This program is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation; either version 2 of the License, or - * (at your option) any later version. - * - * This program 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 General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA - * - * - * $Id$ - * - *****************************************************************************/ - -//---------------------------- El cargador de las fuentes para El Motor Oscuro -------------------- -#include "ManualFonFileLoader.h" - -#include <OgreLogManager.h> -#include <OgreStringConverter.h> -#include <OgreTextureManager.h> -#include <OgreHardwarePixelBuffer.h> -#include <OgreException.h> - -using namespace std; -using namespace Opde; //For the Opde::File - -// Both horizontal and ve... [truncated message content] |
From: <vo...@us...> - 2008-09-24 17:23:11
|
Revision: 844 http://opde.svn.sourceforge.net/opde/?rev=844&view=rev Author: volca Date: 2008-09-24 17:23:00 +0000 (Wed, 24 Sep 2008) Log Message: ----------- GLOBS for all the dynlib files - cmake does not support convenience libraries, so we have to compile and link all the files together in one go Modified Paths: -------------- trunk/config.h.cmake trunk/src/base/Base.cmake trunk/src/services/Services.cmake Added Paths: ----------- trunk/src/bindings/Bindings.cmake trunk/src/scenemanager/DarkSceneManager.cmake Modified: trunk/config.h.cmake =================================================================== --- trunk/config.h.cmake 2008-09-21 18:25:14 UTC (rev 843) +++ trunk/config.h.cmake 2008-09-24 17:23:00 UTC (rev 844) @@ -14,10 +14,12 @@ #cmakedefine __OPDE_BIG_ENDIAN ${BIG_ENDIAN} +#if defined (_MSC_VER) // disable the class needs to have a dll-interface... #pragma warning(disable:4251) // No suitable definition for explicit template spec warning disable #pragma warning(disable:4661) +#endif // DLL export/import stuff for OpdeLib // If the build target is OpdeLib, the OpdeLib_EXPORTS is defined, @@ -34,7 +36,11 @@ #else #define OPDELIB_EXPORT #endif /* OpdeLib_EXPORTS */ -#else /* defined (_WIN32) */ +#elif defined(GCC4) + #if defined(OPDELIB_DLL_TARGET) + #define OPDELIB_EXPORT __attribute__ ((visibility("default"))) + #endif /* OPDELIB_DLL_TARGET */ +#else /* defined (GCC4) */ #define OPDELIB_EXPORT #endif Modified: trunk/src/base/Base.cmake =================================================================== --- trunk/src/base/Base.cmake 2008-09-21 18:25:14 UTC (rev 843) +++ trunk/src/base/Base.cmake 2008-09-24 17:23:00 UTC (rev 844) @@ -14,12 +14,17 @@ # All the resulting libraries in a nice package as well SET(OPDE_BASE_LIBRARIES OpdeBase - OpdeConsole - OpdeDynType - OpdeFile - OpdeManualLoaders - OpdeLogger - OpdeServiceManager +# OpdeConsole +# OpdeDynType +# OpdeFile +# OpdeManualLoaders +# OpdeLogger +# OpdeServiceManager ) +# For the dynamically built lib. We just glob all the subdirs. +FILE(GLOB_RECURSE OPDE_BASE_SOURCES ${OPDE_SOURCE_DIR}/src/base/*.h) +FILE(GLOB_RECURSE OPDE_BASE_HEADERS ${OPDE_SOURCE_DIR}/src/base/*.cpp) +SET(OPDE_BASE_FILES ${OPDE_BASE_HEADERS} ${OPDE_BASE_SOURCES}) + # To use this, just do INCLUDE(${OPDE_SOURCE_DIR}/src/base/Base.cmake) Added: trunk/src/bindings/Bindings.cmake =================================================================== --- trunk/src/bindings/Bindings.cmake (rev 0) +++ trunk/src/bindings/Bindings.cmake 2008-09-24 17:23:00 UTC (rev 844) @@ -0,0 +1,3 @@ +FILE(GLOB OPDE_BINDING_SOURCES ${OPDE_SOURCE_DIR}/src/bindings/*.h) +FILE(GLOB OPDE_BINDING_HEADERS ${OPDE_SOURCE_DIR}/src/bindings/*.cpp) +SET(OPDE_BINDING_FILES ${OPDE_BINDING_HEADERS} ${OPDE_BINDING_SOURCES}) Property changes on: trunk/src/bindings/Bindings.cmake ___________________________________________________________________ Added: svn:keywords + Author Date Id Revision Added: svn:eol-style + native Added: trunk/src/scenemanager/DarkSceneManager.cmake =================================================================== --- trunk/src/scenemanager/DarkSceneManager.cmake (rev 0) +++ trunk/src/scenemanager/DarkSceneManager.cmake 2008-09-24 17:23:00 UTC (rev 844) @@ -0,0 +1,3 @@ +FILE(GLOB OPDE_SCENEMANAGER_SOURCES ${OPDE_SOURCE_DIR}/src/scenemanager/*.h) +FILE(GLOB OPDE_SCENEMANAGER_HEADERS ${OPDE_SOURCE_DIR}/src/scenemanager/*.cpp) +SET(OPDE_SCENEMANAGER_FILES ${OPDE_SCENEMANAGER_HEADERS} ${OPDE_SCENEMANAGER_SOURCES}) Property changes on: trunk/src/scenemanager/DarkSceneManager.cmake ___________________________________________________________________ Added: svn:keywords + Author Date Id Revision Added: svn:eol-style + native Modified: trunk/src/services/Services.cmake =================================================================== --- trunk/src/services/Services.cmake 2008-09-21 18:25:14 UTC (rev 843) +++ trunk/src/services/Services.cmake 2008-09-24 17:23:00 UTC (rev 844) @@ -1,40 +1,44 @@ -# All the services as a nice includable script containing the list of them - -SET(OPDE_SERVICE_INCLUDES - ${OPDE_SOURCE_DIR}/src/base/servicemanager - ${OPDE_SOURCE_DIR}/src/services/ - ${OPDE_SOURCE_DIR}/src/services/binary - ${OPDE_SOURCE_DIR}/src/services/game - ${OPDE_SOURCE_DIR}/src/services/config - ${OPDE_SOURCE_DIR}/src/services/worldrep - ${OPDE_SOURCE_DIR}/src/services/link - ${OPDE_SOURCE_DIR}/src/services/property - ${OPDE_SOURCE_DIR}/src/services/inherit - ${OPDE_SOURCE_DIR}/src/services/object - ${OPDE_SOURCE_DIR}/src/services/render - ${OPDE_SOURCE_DIR}/src/services/database - ${OPDE_SOURCE_DIR}/src/services/input - ${OPDE_SOURCE_DIR}/src/services/loop - ${OPDE_SOURCE_DIR}/src/services/gui - ${OPDE_SOURCE_DIR}/src/services/script -) - -# All the resulting libraries in a nice package as well -SET(OPDE_SERVICE_LIBRARIES - OpdeWorldRepService - OpdeBinaryService - OpdeGameService - OpdeConfigService - OpdeLinkService - OpdePropertyService - OpdeInheritService - OpdeObjectService - OpdeRenderService - OpdeDatabaseService - OpdeInputService - OpdeLoopService - OpdeGUIService - OpdeScriptService -) - -# To use this, just do INCLUDE(${OPDE_SOURCE_DIR}/src/services/Services.cmake) +# All the services as a nice includable script containing the list of them + +SET(OPDE_SERVICE_INCLUDES + ${OPDE_SOURCE_DIR}/src/base/servicemanager + ${OPDE_SOURCE_DIR}/src/services/ + ${OPDE_SOURCE_DIR}/src/services/binary + ${OPDE_SOURCE_DIR}/src/services/game + ${OPDE_SOURCE_DIR}/src/services/config + ${OPDE_SOURCE_DIR}/src/services/worldrep + ${OPDE_SOURCE_DIR}/src/services/link + ${OPDE_SOURCE_DIR}/src/services/property + ${OPDE_SOURCE_DIR}/src/services/inherit + ${OPDE_SOURCE_DIR}/src/services/object + ${OPDE_SOURCE_DIR}/src/services/render + ${OPDE_SOURCE_DIR}/src/services/database + ${OPDE_SOURCE_DIR}/src/services/input + ${OPDE_SOURCE_DIR}/src/services/loop + ${OPDE_SOURCE_DIR}/src/services/gui + ${OPDE_SOURCE_DIR}/src/services/script +) + +# All the resulting libraries in a nice package as well +SET(OPDE_SERVICE_LIBRARIES + OpdeWorldRepService + OpdeBinaryService + OpdeGameService + OpdeConfigService + OpdeLinkService + OpdePropertyService + OpdeInheritService + OpdeObjectService + OpdeRenderService + OpdeDatabaseService + OpdeInputService + OpdeLoopService + OpdeGUIService + OpdeScriptService +) + +FILE(GLOB_RECURSE OPDE_SERVICE_SOURCES ${OPDE_SOURCE_DIR}/src/services/*.h) +FILE(GLOB_RECURSE OPDE_SERVICE_HEADERS ${OPDE_SOURCE_DIR}/src/services/*.cpp) +SET(OPDE_SERVICE_FILES ${OPDE_SERVICE_HEADERS} ${OPDE_SERVICE_SOURCES}) + +# To use this, just do INCLUDE(${OPDE_SOURCE_DIR}/src/services/Services.cmake) This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <vo...@us...> - 2008-09-24 17:24:49
|
Revision: 845 http://opde.svn.sourceforge.net/opde/?rev=845&view=rev Author: volca Date: 2008-09-24 17:24:38 +0000 (Wed, 24 Sep 2008) Log Message: ----------- Quite some changes to the cmake build rules. Not optimal, but seems to resolve the dynlib problems Modified Paths: -------------- trunk/CMakeLists.txt trunk/src/base/CMakeLists.txt trunk/src/base/console/CMakeLists.txt trunk/src/main/CMakeLists.txt trunk/src/scenemanager/CMakeLists.txt trunk/src/tools/CMakeLists.txt Modified: trunk/CMakeLists.txt =================================================================== --- trunk/CMakeLists.txt 2008-09-24 17:23:00 UTC (rev 844) +++ trunk/CMakeLists.txt 2008-09-24 17:24:38 UTC (rev 845) @@ -1,227 +1,224 @@ -# This file is part of openDarkEngine project -# Copyright (C) 2005-2007 openDarkEngine team -# -# This program is free software; you can redistribute it and/or modify -# it under the terms of the GNU General Public License as published by -# the Free Software Foundation; either version 2 of the License, or -# (at your option) any later version. -# -# This program 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 General Public License for more details. -# -# You should have received a copy of the GNU General Public License -# along with this program; if not, write to the Free Software -# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA -# -# $Id$ - -cmake_minimum_required(VERSION 2.6) - -project (OPDE) - -SET(OPDE_VER_MAJOR "0") -SET(OPDE_VER_MINOR "2") -SET(OPDE_VER_PATCH "1") - -# To stop importing libs where we don't want them -set_property(GLOBAL PROPERTY LINK_INTERFACE_LIBRARIES "") - -# Build type selection. Use ccmake for selection of this (or the commandline switches) -# Default build type -IF (NOT CMAKE_BUILD_TYPE) - # Release for now, as VC builds are incredibly slow on Debug - SET(CMAKE_BUILD_TYPE Release) -ENDIF (NOT CMAKE_BUILD_TYPE) - -# Option to build in the debugging code -OPTION(GLOBAL_DEBUG - "Build the debugging code" - OFF) - -# Option to build the documentation -OPTION(GENERATE_DOC - "Build the doxy documentation" - OFF) - -# Option to create Windows installer script -OPTION(GENERATE_NSIS - "Creates Windows installer script" - ON) - -# Option to build in the debugging code -OPTION(PROFILING - "Build the sources with profiling support (Only Debug build type)" - OFF) - -# Compiler profiling flags -IF (PROFILING) - IF(CMAKE_COMPILER_IS_GNUCXX) - SET(PROFILER "-pg") # GCC only profiler option - ENDIF(CMAKE_COMPILER_IS_GNUCXX) -ELSE (PROFILING) - SET(PROFILER "") -ENDIF (PROFILING) - -#Target the binary files into a separate directories -# SET(EXECUTABLE_OUTPUT_PATH ${PROJECT_BINARY_DIR/Build}) - -# MinGW specific -IF(CMAKE_COMPILER_IS_MINGW) - SET(CMAKE_EXE_LINKER_FLAGS "-Wl,--enable-auto-image-base -Wl,--add-stdcall-alias -Wl,--enable-runtime-pseudo-reloc -Wl,--enable-auto-import") - SET(CMAKE_SHARED_LINKER_FLAGS"-Wl,--enable-auto-image-base -Wl,--add-stdcall-alias -Wl,--enable-runtime-pseudo-reloc -Wl,--enable-auto-import") -ENDIF(CMAKE_COMPILER_IS_MINGW) - -# Warning level high (Lowered by one to supress the payload of ogre related warnings in VC) -SET(CMAKE_CXX_WARNING_LEVEL 3) - -# GCC specific. Release/Debug flags (I add some debug/profiler switches there) -IF(CMAKE_COMPILER_IS_GNUCXX) - SET(CMAKE_C_FLAGS_DEBUG "-g -O3 ${PROFILER}") - SET(CMAKE_CXX_FLAGS_DEBUG "-g -O3 ${PROFILER}") - SET(CMAKE_CXX_FLAGS_DISTRIBUTION "-O3") - SET(CMAKE_C_FLAGS_DISTRIBUTION "-O3") - - # extra warnings, but no unused params (too common) - # no strict aliasing (see Py_True type punned pointer aliasing errors) - ADD_DEFINITIONS(-Wall -fno-strict-aliasing) - # -Wextra -Wno-unused-parameter -ENDIF(CMAKE_COMPILER_IS_GNUCXX) - -# -fPIC for 64bit IA (x86_64 that is) -IF(UNIX AND NOT WIN32) - FIND_PROGRAM(CMAKE_UNAME uname /bin /usr/bin /usr/local/bin ) - IF(CMAKE_UNAME) - EXEC_PROGRAM(uname ARGS -m OUTPUT_VARIABLE CMAKE_SYSTEM_PROCESSOR) - SET(CMAKE_SYSTEM_PROCESSOR ${CMAKE_SYSTEM_PROCESSOR} CACHE INTERNAL -"processor type (i386 and x86_64)") - IF(CMAKE_SYSTEM_PROCESSOR MATCHES "x86_64") - ADD_DEFINITIONS(-fPIC) - ENDIF(CMAKE_SYSTEM_PROCESSOR MATCHES "x86_64") - ENDIF(CMAKE_UNAME) -ENDIF(UNIX AND NOT WIN32) - - -# MSVC specific stuff -IF(CMAKE_COMPILER_IS_MSVC) - # STUB. Nothing now -ENDIF(CMAKE_COMPILER_IS_MSVC) - -# Various modules used for library path detections. -SET(CMAKE_MODULE_PATH "${CMAKE_SOURCE_DIR}/cmake" ${CMAKE_MODULE_PATH}) - -# Global debug option test. Sets the DEBUG flag in the config.h -IF(GLOBAL_DEBUG) - MESSAGE(STATUS "Debugging is ON") - SET(OPDE_DEBUG 1) -ELSE(GLOBAL_DEBUG) - MESSAGE(STATUS "Debugging is Off") -ENDIF(GLOBAL_DEBUG) - - - -# Solve the dependencies -SET(OIS_DIR ${CMAKE_MODULE_PATH}) -SET(OGRE_DIR ${CMAKE_MODULE_PATH}) -SET(FREEIMAGE_DIR ${CMAKE_MODULE_PATH}) - -FIND_PACKAGE(OIS REQUIRED) -FIND_PACKAGE(OGRE REQUIRED) - -# Custom image hooks -FIND_PACKAGE(FREEIMAGE REQUIRED) - -IF(FREEIMAGE_FOUND) - MESSAGE(STATUS "FreeImage Found OK") - MESSAGE(STATUS " - FreeImage includes ${FREEIMAGE_INCLUDE_DIR}") - MESSAGE(STATUS " - FreeImage libs ${FREEIMAGE_LIBRARIES}") -ELSE(FREEIMAGE_FOUND) - MESSAGE(FATAL_ERROR "FreeImage not found and selected in options!") -ENDIF(FREEIMAGE_FOUND) - - -FIND_PACKAGE(PythonLibs REQUIRED) - -# Aditional libraries - deps of the python lib -IF(UNIX) - INCLUDE(PythonDeps.cmake) - FIND_PYTHON_DEPS(PYTHON_LIBRARIES) -ENDIF(UNIX) - -IF(PYTHON_LIBRARIES) - MESSAGE(STATUS "Python Found OK") - MESSAGE(STATUS " - Python includes ${PYTHON_INCLUDE_PATH}") - MESSAGE(STATUS " - Python libs ${PYTHON_LIBRARIES}") -ELSE(PYTHON_LIBRARIES) - MESSAGE(FATAL_ERROR "Python not found and selected in options!") -ENDIF(PYTHON_LIBRARIES) - - -# Only visual check enabling verbose output, and package found info -IF(OIS_FOUND) - MESSAGE(STATUS "OIS Found OK") - MESSAGE(STATUS " - OIS includes ${OIS_INCLUDE_DIR}") - MESSAGE(STATUS " - OIS libs ${OIS_LIBRARIES}") -ELSE(OIS_FOUND) - MESSAGE(FATAL_ERROR "OIS not found") -ENDIF(OIS_FOUND) - -IF(OGRE_FOUND) - MESSAGE(STATUS "OGRE Found OK") - MESSAGE(STATUS " - Ogre includes ${OGRE_INCLUDE_DIR}") - MESSAGE(STATUS " - Ogre libs ${OGRE_LIBRARIES}") -ELSE(OGRE_FOUND) - MESSAGE(FATAL_ERROR "OGRE not found") -ENDIF(OGRE_FOUND) - -#IF(CEGUI_FOUND) -# MESSAGE(STATUS "CEGUI Found OK") -# MESSAGE(STATUS " - CEGUI includes ${CEGUI_INCLUDE_DIR}") -# MESSAGE(STATUS " - CEGUI libs ${CEGUI_LIBRARIES}") -#ELSE(CEGUI_FOUND) -# MESSAGE(FATAL_ERROR "CEGUI not found") -#ENDIF(CEGUI_FOUND) - -# Some configuration checks to allow platform independence -INCLUDE(ConfigureChecks.cmake) -CONFIGURE_FILE(config.h.cmake ${CMAKE_BINARY_DIR}/config.h ) - -# Add the subdirectories which contain aditional CMakeLists.txt files -add_subdirectory (src) -add_subdirectory (proto) -add_subdirectory (thirdparty) - -# Generate the doxyfile if selected as an option -IF (GENERATE_DOC) - # Generate the doxyfile from the template file - CONFIGURE_FILE(${CMAKE_CURRENT_SOURCE_DIR}/Doxyfile.in - ${CMAKE_BINARY_DIR}/Doxyfile) - - MESSAGE(STATUS "Doxyfile was generated in ${CMAKE_BINARY_DIR}.") - # You can run doxygen on that file to generate documentation... -ENDIF (GENERATE_DOC) - -IF (GENERATE_NSIS) - CONFIGURE_FILE(${CMAKE_CURRENT_SOURCE_DIR}/installer/opde-win.in - ${CMAKE_BINARY_DIR}/installer/opde-win.nsi @ONLY) - MESSAGE(STATUS "Installer script was generated in ${CMAKE_BINARY_DIR}/installer.") -ENDIF (GENERATE_NSIS) - -MESSAGE(STATUS "Your configuration seems to be OK!") - -MESSAGE(STATUS "") - -# Print out some configuration status messages -MESSAGE(STATUS "Your build parameters:") -MESSAGE(STATUS " * Global debugging : ${GLOBAL_DEBUG}") -MESSAGE(STATUS " * Build type : ${CMAKE_BUILD_TYPE}") -MESSAGE(STATUS " * Profilling : ${PROFILING}") -MESSAGE(STATUS " * Doxy generation : ${GENERATE_DOC}") -MESSAGE(STATUS " * Custom image h. : ${CUSTOM_IMAGE_HOOKS}") -MESSAGE(STATUS " * Static geometry : ${__STATIC_GEOMETRY}") -MESSAGE(STATUS " * C compiler : ${CMAKE_C_COMPILER}") -MESSAGE(STATUS " * C++ compiler : ${CMAKE_CXX_COMPILER}") -MESSAGE(STATUS " * Source directory : ${CMAKE_CURRENT_SOURCE_DIR}") -MESSAGE(STATUS " * Binary directory : ${CMAKE_CURRENT_BINARY_DIR}") - +# This file is part of openDarkEngine project +# Copyright (C) 2005-2007 openDarkEngine team +# +# This program is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 2 of the License, or +# (at your option) any later version. +# +# This program 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 General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program; if not, write to the Free Software +# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA +# +# $Id$ + +cmake_minimum_required(VERSION 2.6) + +project (OPDE) + +SET(OPDE_VER_MAJOR "0") +SET(OPDE_VER_MINOR "2") +SET(OPDE_VER_PATCH "1") + +# Build type selection. Use ccmake for selection of this (or the commandline switches) +# Default build type +IF (NOT CMAKE_BUILD_TYPE) + # Release for now, as VC builds are incredibly slow on Debug + SET(CMAKE_BUILD_TYPE Release) +ENDIF (NOT CMAKE_BUILD_TYPE) + +# Option to build in the debugging code +OPTION(GLOBAL_DEBUG + "Build the debugging code" + OFF) + +# Option to build the documentation +OPTION(GENERATE_DOC + "Build the doxy documentation" + OFF) + +# Option to create Windows installer script +OPTION(GENERATE_NSIS + "Creates Windows installer script" + ON) + +# Option to build in the debugging code +OPTION(PROFILING + "Build the sources with profiling support (Only Debug build type)" + OFF) + +# Compiler profiling flags +IF (PROFILING) + IF(CMAKE_COMPILER_IS_GNUCXX) + SET(PROFILER "-pg") # GCC only profiler option + ENDIF(CMAKE_COMPILER_IS_GNUCXX) +ELSE (PROFILING) + SET(PROFILER "") +ENDIF (PROFILING) + +#Target the binary files into a separate directories +# SET(EXECUTABLE_OUTPUT_PATH ${PROJECT_BINARY_DIR/Build}) + +# MinGW specific +IF(CMAKE_COMPILER_IS_MINGW) + SET(CMAKE_EXE_LINKER_FLAGS "-Wl,--enable-auto-image-base -Wl,--add-stdcall-alias -Wl,--enable-runtime-pseudo-reloc -Wl,--enable-auto-import") + SET(CMAKE_SHARED_LINKER_FLAGS"-Wl,--enable-auto-image-base -Wl,--add-stdcall-alias -Wl,--enable-runtime-pseudo-reloc -Wl,--enable-auto-import") +ENDIF(CMAKE_COMPILER_IS_MINGW) + +# Warning level high (Lowered by one to supress the payload of ogre related warnings in VC) +SET(CMAKE_CXX_WARNING_LEVEL 3) + +# GCC specific. Release/Debug flags (I add some debug/profiler switches there) +IF(CMAKE_COMPILER_IS_GNUCXX) + SET(CMAKE_C_FLAGS_DEBUG "-g -O3 ${PROFILER}") + SET(CMAKE_CXX_FLAGS_DEBUG "-g -O3 ${PROFILER}") + SET(CMAKE_CXX_FLAGS_DISTRIBUTION "-O3") + SET(CMAKE_C_FLAGS_DISTRIBUTION "-O3") + + # extra warnings, but no unused params (too common) + # no strict aliasing (see Py_True type punned pointer aliasing errors) + ADD_DEFINITIONS(-Wall -fno-strict-aliasing) + # -Wextra -Wno-unused-parameter +ENDIF(CMAKE_COMPILER_IS_GNUCXX) + +# -fPIC for 64bit IA (x86_64 that is) +IF(UNIX AND NOT WIN32) + FIND_PROGRAM(CMAKE_UNAME uname /bin /usr/bin /usr/local/bin ) + IF(CMAKE_UNAME) + EXEC_PROGRAM(uname ARGS -m OUTPUT_VARIABLE CMAKE_SYSTEM_PROCESSOR) + SET(CMAKE_SYSTEM_PROCESSOR ${CMAKE_SYSTEM_PROCESSOR} CACHE INTERNAL +"processor type (i386 and x86_64)") + IF(CMAKE_SYSTEM_PROCESSOR MATCHES "x86_64") + ADD_DEFINITIONS(-fPIC) + ENDIF(CMAKE_SYSTEM_PROCESSOR MATCHES "x86_64") + ENDIF(CMAKE_UNAME) +ENDIF(UNIX AND NOT WIN32) + + +# MSVC specific stuff +IF(CMAKE_COMPILER_IS_MSVC) + # STUB. Nothing now +ENDIF(CMAKE_COMPILER_IS_MSVC) + +# Various modules used for library path detections. +SET(CMAKE_MODULE_PATH "${CMAKE_SOURCE_DIR}/cmake" ${CMAKE_MODULE_PATH}) + +# Global debug option test. Sets the DEBUG flag in the config.h +IF(GLOBAL_DEBUG) + MESSAGE(STATUS "Debugging is ON") + SET(OPDE_DEBUG 1) +ELSE(GLOBAL_DEBUG) + MESSAGE(STATUS "Debugging is Off") +ENDIF(GLOBAL_DEBUG) + + + +# Solve the dependencies +SET(OIS_DIR ${CMAKE_MODULE_PATH}) +SET(OGRE_DIR ${CMAKE_MODULE_PATH}) +SET(FREEIMAGE_DIR ${CMAKE_MODULE_PATH}) + +FIND_PACKAGE(OIS REQUIRED) +FIND_PACKAGE(OGRE REQUIRED) + +# Custom image hooks +FIND_PACKAGE(FREEIMAGE REQUIRED) + +IF(FREEIMAGE_FOUND) + MESSAGE(STATUS "FreeImage Found OK") + MESSAGE(STATUS " - FreeImage includes ${FREEIMAGE_INCLUDE_DIR}") + MESSAGE(STATUS " - FreeImage libs ${FREEIMAGE_LIBRARIES}") +ELSE(FREEIMAGE_FOUND) + MESSAGE(FATAL_ERROR "FreeImage not found and selected in options!") +ENDIF(FREEIMAGE_FOUND) + + +FIND_PACKAGE(PythonLibs REQUIRED) + +# Aditional libraries - deps of the python lib +IF(UNIX) + INCLUDE(PythonDeps.cmake) + FIND_PYTHON_DEPS(PYTHON_LIBRARIES) +ENDIF(UNIX) + +IF(PYTHON_LIBRARIES) + MESSAGE(STATUS "Python Found OK") + MESSAGE(STATUS " - Python includes ${PYTHON_INCLUDE_PATH}") + MESSAGE(STATUS " - Python libs ${PYTHON_LIBRARIES}") +ELSE(PYTHON_LIBRARIES) + MESSAGE(FATAL_ERROR "Python not found and selected in options!") +ENDIF(PYTHON_LIBRARIES) + + +# Only visual check enabling verbose output, and package found info +IF(OIS_FOUND) + MESSAGE(STATUS "OIS Found OK") + MESSAGE(STATUS " - OIS includes ${OIS_INCLUDE_DIR}") + MESSAGE(STATUS " - OIS libs ${OIS_LIBRARIES}") +ELSE(OIS_FOUND) + MESSAGE(FATAL_ERROR "OIS not found") +ENDIF(OIS_FOUND) + +IF(OGRE_FOUND) + MESSAGE(STATUS "OGRE Found OK") + MESSAGE(STATUS " - Ogre includes ${OGRE_INCLUDE_DIR}") + MESSAGE(STATUS " - Ogre libs ${OGRE_LIBRARIES}") +ELSE(OGRE_FOUND) + MESSAGE(FATAL_ERROR "OGRE not found") +ENDIF(OGRE_FOUND) + +#IF(CEGUI_FOUND) +# MESSAGE(STATUS "CEGUI Found OK") +# MESSAGE(STATUS " - CEGUI includes ${CEGUI_INCLUDE_DIR}") +# MESSAGE(STATUS " - CEGUI libs ${CEGUI_LIBRARIES}") +#ELSE(CEGUI_FOUND) +# MESSAGE(FATAL_ERROR "CEGUI not found") +#ENDIF(CEGUI_FOUND) + +# Some configuration checks to allow platform independence +INCLUDE(ConfigureChecks.cmake) +CONFIGURE_FILE(config.h.cmake ${CMAKE_BINARY_DIR}/config.h ) + +# Add the subdirectories which contain aditional CMakeLists.txt files +add_subdirectory (src) +add_subdirectory (proto) +add_subdirectory (thirdparty) + +# Generate the doxyfile if selected as an option +IF (GENERATE_DOC) + # Generate the doxyfile from the template file + CONFIGURE_FILE(${CMAKE_CURRENT_SOURCE_DIR}/Doxyfile.in + ${CMAKE_BINARY_DIR}/Doxyfile) + + MESSAGE(STATUS "Doxyfile was generated in ${CMAKE_BINARY_DIR}.") + # You can run doxygen on that file to generate documentation... +ENDIF (GENERATE_DOC) + +IF (GENERATE_NSIS) + CONFIGURE_FILE(${CMAKE_CURRENT_SOURCE_DIR}/installer/opde-win.in + ${CMAKE_BINARY_DIR}/installer/opde-win.nsi @ONLY) + MESSAGE(STATUS "Installer script was generated in ${CMAKE_BINARY_DIR}/installer.") +ENDIF (GENERATE_NSIS) + +MESSAGE(STATUS "Your configuration seems to be OK!") + +MESSAGE(STATUS "") + +# Print out some configuration status messages +MESSAGE(STATUS "Your build parameters:") +MESSAGE(STATUS " * Global debugging : ${GLOBAL_DEBUG}") +MESSAGE(STATUS " * Build type : ${CMAKE_BUILD_TYPE}") +MESSAGE(STATUS " * Profilling : ${PROFILING}") +MESSAGE(STATUS " * Doxy generation : ${GENERATE_DOC}") +MESSAGE(STATUS " * Custom image h. : ${CUSTOM_IMAGE_HOOKS}") +MESSAGE(STATUS " * Static geometry : ${__STATIC_GEOMETRY}") +MESSAGE(STATUS " * C compiler : ${CMAKE_C_COMPILER}") +MESSAGE(STATUS " * C++ compiler : ${CMAKE_CXX_COMPILER}") +MESSAGE(STATUS " * Source directory : ${CMAKE_CURRENT_SOURCE_DIR}") +MESSAGE(STATUS " * Binary directory : ${CMAKE_CURRENT_BINARY_DIR}") + Modified: trunk/src/base/CMakeLists.txt =================================================================== --- trunk/src/base/CMakeLists.txt 2008-09-24 17:23:00 UTC (rev 844) +++ trunk/src/base/CMakeLists.txt 2008-09-24 17:24:38 UTC (rev 845) @@ -1,26 +1,18 @@ -INCLUDE(${OPDE_SOURCE_DIR}/src/base/Base.cmake) - -add_subdirectory(logger) -add_subdirectory(console) -add_subdirectory(servicemanager) -add_subdirectory(file) -add_subdirectory(dyntype) -add_subdirectory(loaders) - -FILE(GLOB OPDE_BASE_HEADERS *.h) - -include_directories( - ${OPDE_BINARY_DIR} -) - -add_library ( OpdeBase OpdeException.cpp RefCounted.cpp - ${OPDE_BASE_HEADERS} -) - -SET_TARGET_PROPERTIES(OpdeBase PROPERTIES - COMPILE_DEFINITIONS "OPDELIB_DLL_TARGET" -) - -target_link_libraries( OpdeBase - ${OPDE_BASE_LIBRARIES} -) +INCLUDE(${OPDE_SOURCE_DIR}/src/base/Base.cmake) + +include_directories( + ${OGRE_INCLUDE_DIR} + ${OIS_INCLUDE_DIR} + ${OPDE_BINARY_DIR} + ${OPDE_BASE_INCLUDES} + ${OPDE_SOURCE_DIR}/src/base/Dark +) + +include_directories( + ${OPDE_BINARY_DIR} +) + +add_library ( OpdeBase STATIC + ${OPDE_BASE_FILES} # As in the Base.cmake +) + Modified: trunk/src/base/console/CMakeLists.txt =================================================================== --- trunk/src/base/console/CMakeLists.txt 2008-09-24 17:23:00 UTC (rev 844) +++ trunk/src/base/console/CMakeLists.txt 2008-09-24 17:24:38 UTC (rev 845) @@ -8,7 +8,7 @@ link_directories ( ${OGRE_LIB_DIR} ) -add_library (OpdeConsole +add_library (OpdeConsole STATIC ConsoleBackend.cpp ConsoleBackend.h ConsoleFrontend.cpp Modified: trunk/src/main/CMakeLists.txt =================================================================== --- trunk/src/main/CMakeLists.txt 2008-09-24 17:23:00 UTC (rev 844) +++ trunk/src/main/CMakeLists.txt 2008-09-24 17:24:38 UTC (rev 845) @@ -1,89 +1,106 @@ -INCLUDE( ${OPDE_SOURCE_DIR}/src/services/Services.cmake ) -INCLUDE( ${OPDE_SOURCE_DIR}/src/base/Base.cmake ) - -include_directories( - ${OGRE_INCLUDE_DIR} - ${OIS_INCLUDE_DIR} - ${OPDE_BINARY_DIR} - ${OPDE_BASE_INCLUDES} - ${OPDE_SOURCE_DIR}/src/compat - ${OPDE_SOURCE_DIR}/src/base/Dark - ${OPDE_SOURCE_DIR}/src/scenemanager - ${OPDE_SOURCE_DIR}/src/main - ${OPDE_SOURCE_DIR}/src/widgets - ${OPDE_SERVICE_INCLUDES} - ${FREEIMAGE_INCLUDE_DIR} -) - -add_library (OpdeLib SHARED - Root.cpp - Root.h - DTypeScriptCompiler.cpp - DTypeScriptCompiler.h - PLDefScriptCompiler.cpp - PLDefScriptCompiler.h - DTypeScriptLoader.cpp - DTypeScriptLoader.h - PLDefScriptLoader.cpp - PLDefScriptLoader.h - CustomImageCodec.cpp - CustomImageCodec.h -) - -set_property(TARGET OpdeLib PROPERTY LINK_INTERFACE_LIBRARIES "") - -target_link_libraries( OpdeLib - ${OGRE_LIBRARIES} - ${OIS_LIBRARIES} - ${FREEIMAGE_LIBRARIES} - ${OPDE_BASE_LIBRARIES} - DarkSceneManager - ${OPDE_SERVICE_LIBRARIES} - QuickGUI -) - -# Build flags for the .DLL __declspec things, etc. -SET_TARGET_PROPERTIES(OpdeLib PROPERTIES - DEFINE_SYMBOL "OPDELIB_DLL_TARGET" - LINK_INTERFACE_LIBRARIES "" -) - -if (NOT WIN32) - # Currently there is no need to build this on windows (and also it fails) - is there latex2html for windows anyway? - # Doc generator for opde - property and link types info generator - add_executable (opdeDocGen WIN32 - OpdeDocGen.cpp - ) - - target_link_libraries( opdeDocGen - OpdeLib - ) - - SET_TARGET_PROPERTIES(opdeDocGen PROPERTIES - DEFINE_SYMBOL "OPDE_EXE_TARGET" - ) -endif(NOT WIN32) - -# Main executable -add_executable (opdemain WIN32 - Opde.cpp - GameStateManager.cpp - GameState.cpp - GamePlayState.cpp - GameLoadState.cpp - GameStateManager.h - GameState.h - GamePlayState.h - GameLoadState.h -) - -target_link_libraries( opdemain - OpdeLib - ${OGRE_LIBRARIES} - ${OIS_LIBRARIES} - ${FREEIMAGE_LIBRARIES} -) - -SET_TARGET_PROPERTIES( opdemain PROPERTIES - COMPILE_DEFINITIONS "OPDE_EXE_TARGET" -) +INCLUDE( ${OPDE_SOURCE_DIR}/src/services/Services.cmake ) +INCLUDE( ${OPDE_SOURCE_DIR}/src/base/Base.cmake ) +INCLUDE( ${OPDE_SOURCE_DIR}/src/bindings/Bindings.cmake ) +INCLUDE( ${OPDE_SOURCE_DIR}/src/scenemanager/DarkSceneManager.cmake ) + +include_directories( + ${OGRE_INCLUDE_DIR} + ${OIS_INCLUDE_DIR} + ${OPDE_BINARY_DIR} + ${OPDE_BASE_INCLUDES} + ${OPDE_SOURCE_DIR}/src/compat + ${OPDE_SOURCE_DIR}/src/base/Dark + ${OPDE_SOURCE_DIR}/src/scenemanager + ${OPDE_SOURCE_DIR}/src/main + ${OPDE_SOURCE_DIR}/src/bindings + ${OPDE_SOURCE_DIR}/thirdparty/QuickGUI/include + ${OPDE_SERVICE_INCLUDES} + ${FREEIMAGE_INCLUDE_DIR} + ${PYTHON_INCLUDE_PATH} +) + +add_library (OpdeLib SHARED + Root.cpp + Root.h + DTypeScriptCompiler.cpp + DTypeScriptCompiler.h + PLDefScriptCompiler.cpp + PLDefScriptCompiler.h + DTypeScriptLoader.cpp + DTypeScriptLoader.h + PLDefScriptLoader.cpp + PLDefScriptLoader.h + CustomImageCodec.cpp + CustomImageCodec.h + # and the base lib files + ${OPDE_BASE_FILES} + # and service files as well + ${OPDE_SERVICE_FILES} + # and the python bindings + ${OPDE_BINDING_FILES} + # and the scene manager + ${OPDE_SCENEMANAGER_FILES} +) + +link_directories( + ${OPDE_BASE_INCLUDES} + ${OPDE_SOURCE_DIR}/src/scenemanager +) + +# We don't link any our own files here, as CMake does not support convenience libraries +target_link_libraries( OpdeLib + ${OGRE_LIBRARIES} + ${OIS_LIBRARIES} + ${FREEIMAGE_LIBRARIES} + ${PYTHON_LIBRARIES} + QuickGUI +) + +set_property(TARGET OpdeLib PROPERTY LINK_INTERFACE_LIBRARIES "") + +# Build flags for the .DLL __declspec things, etc. +SET_TARGET_PROPERTIES(OpdeLib PROPERTIES + DEFINE_SYMBOL "OPDELIB_DLL_TARGET" + LINK_INTERFACE_LIBRARIES "" +) + +if (NOT WIN32) + # Currently there is no need to build this on windows (and also it fails) - is there latex2html for windows anyway? + # Doc generator for opde - property and link types info generator + add_executable (opdeDocGen WIN32 + OpdeDocGen.cpp + ) + + target_link_libraries( opdeDocGen + OpdeLib + ) + + SET_TARGET_PROPERTIES(opdeDocGen PROPERTIES + COMPILE_DEFINITIONS "OPDE_EXE_TARGET" + ) +endif(NOT WIN32) + +# Main executable +add_executable (opdemain WIN32 + Opde.cpp + GameStateManager.cpp + GameState.cpp + GamePlayState.cpp + GameLoadState.cpp + GameStateManager.h + GameState.h + GamePlayState.h + GameLoadState.h +) + +target_link_libraries( opdemain + OpdeLib + ${OGRE_LIBRARIES} + ${OIS_LIBRARIES} + ${FREEIMAGE_LIBRARIES} +) + +SET_TARGET_PROPERTIES( opdemain PROPERTIES + COMPILE_DEFINITIONS "OPDE_EXE_TARGET" +) + Modified: trunk/src/scenemanager/CMakeLists.txt =================================================================== --- trunk/src/scenemanager/CMakeLists.txt 2008-09-24 17:23:00 UTC (rev 844) +++ trunk/src/scenemanager/CMakeLists.txt 2008-09-24 17:24:38 UTC (rev 845) @@ -7,7 +7,7 @@ ${OGRE_LIB_DIR} ) -add_library (DarkSceneManager +add_library (DarkSceneManager STATIC DarkBspNode.cpp DarkBspNode.h DarkBspTree.cpp Modified: trunk/src/tools/CMakeLists.txt =================================================================== --- trunk/src/tools/CMakeLists.txt 2008-09-24 17:23:00 UTC (rev 844) +++ trunk/src/tools/CMakeLists.txt 2008-09-24 17:24:38 UTC (rev 845) @@ -15,5 +15,4 @@ target_link_libraries( chunk ${OGRE_LIBRARIES} OpdeBase - OpdeFile ) This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <vo...@us...> - 2008-09-24 19:01:47
|
Revision: 856 http://opde.svn.sourceforge.net/opde/?rev=856&view=rev Author: volca Date: 2008-09-24 19:01:38 +0000 (Wed, 24 Sep 2008) Log Message: ----------- VC related fixes Modified Paths: -------------- trunk/CMakeLists.txt trunk/proto/python/CMakeLists.txt trunk/src/base/CMakeLists.txt trunk/src/bindings/CMakeLists.txt trunk/src/main/CMakeLists.txt trunk/src/scenemanager/CMakeLists.txt trunk/src/services/script/ScriptService.cpp trunk/src/services/script/ScriptService.h trunk/src/tools/CMakeLists.txt trunk/thirdparty/QuickGUI/src/CMakeLists.txt Modified: trunk/CMakeLists.txt =================================================================== --- trunk/CMakeLists.txt 2008-09-24 17:40:35 UTC (rev 855) +++ trunk/CMakeLists.txt 2008-09-24 19:01:38 UTC (rev 856) @@ -1,224 +1,230 @@ -# This file is part of openDarkEngine project -# Copyright (C) 2005-2007 openDarkEngine team -# -# This program is free software; you can redistribute it and/or modify -# it under the terms of the GNU General Public License as published by -# the Free Software Foundation; either version 2 of the License, or -# (at your option) any later version. -# -# This program 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 General Public License for more details. -# -# You should have received a copy of the GNU General Public License -# along with this program; if not, write to the Free Software -# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA -# -# $Id$ - -cmake_minimum_required(VERSION 2.6) - -project (OPDE) - -SET(OPDE_VER_MAJOR "0") -SET(OPDE_VER_MINOR "2") -SET(OPDE_VER_PATCH "1") - -# Build type selection. Use ccmake for selection of this (or the commandline switches) -# Default build type -IF (NOT CMAKE_BUILD_TYPE) - # Release for now, as VC builds are incredibly slow on Debug - SET(CMAKE_BUILD_TYPE Release) -ENDIF (NOT CMAKE_BUILD_TYPE) - -# Option to build in the debugging code -OPTION(GLOBAL_DEBUG - "Build the debugging code" - OFF) - -# Option to build the documentation -OPTION(GENERATE_DOC - "Build the doxy documentation" - OFF) - -# Option to create Windows installer script -OPTION(GENERATE_NSIS - "Creates Windows installer script" - ON) - -# Option to build in the debugging code -OPTION(PROFILING - "Build the sources with profiling support (Only Debug build type)" - OFF) - -# Compiler profiling flags -IF (PROFILING) - IF(CMAKE_COMPILER_IS_GNUCXX) - SET(PROFILER "-pg") # GCC only profiler option - ENDIF(CMAKE_COMPILER_IS_GNUCXX) -ELSE (PROFILING) - SET(PROFILER "") -ENDIF (PROFILING) - -#Target the binary files into a separate directories -# SET(EXECUTABLE_OUTPUT_PATH ${PROJECT_BINARY_DIR/Build}) - -# MinGW specific -IF(CMAKE_COMPILER_IS_MINGW) - SET(CMAKE_EXE_LINKER_FLAGS "-Wl,--enable-auto-image-base -Wl,--add-stdcall-alias -Wl,--enable-runtime-pseudo-reloc -Wl,--enable-auto-import") - SET(CMAKE_SHARED_LINKER_FLAGS"-Wl,--enable-auto-image-base -Wl,--add-stdcall-alias -Wl,--enable-runtime-pseudo-reloc -Wl,--enable-auto-import") -ENDIF(CMAKE_COMPILER_IS_MINGW) - -# Warning level high (Lowered by one to supress the payload of ogre related warnings in VC) -SET(CMAKE_CXX_WARNING_LEVEL 3) - -# GCC specific. Release/Debug flags (I add some debug/profiler switches there) -IF(CMAKE_COMPILER_IS_GNUCXX) - SET(CMAKE_C_FLAGS_DEBUG "-g -O3 ${PROFILER}") - SET(CMAKE_CXX_FLAGS_DEBUG "-g -O3 ${PROFILER}") - SET(CMAKE_CXX_FLAGS_DISTRIBUTION "-O3") - SET(CMAKE_C_FLAGS_DISTRIBUTION "-O3") - - # extra warnings, but no unused params (too common) - # no strict aliasing (see Py_True type punned pointer aliasing errors) - ADD_DEFINITIONS(-Wall -fno-strict-aliasing) - # -Wextra -Wno-unused-parameter -ENDIF(CMAKE_COMPILER_IS_GNUCXX) - -# -fPIC for 64bit IA (x86_64 that is) -IF(UNIX AND NOT WIN32) - FIND_PROGRAM(CMAKE_UNAME uname /bin /usr/bin /usr/local/bin ) - IF(CMAKE_UNAME) - EXEC_PROGRAM(uname ARGS -m OUTPUT_VARIABLE CMAKE_SYSTEM_PROCESSOR) - SET(CMAKE_SYSTEM_PROCESSOR ${CMAKE_SYSTEM_PROCESSOR} CACHE INTERNAL -"processor type (i386 and x86_64)") - IF(CMAKE_SYSTEM_PROCESSOR MATCHES "x86_64") - ADD_DEFINITIONS(-fPIC) - ENDIF(CMAKE_SYSTEM_PROCESSOR MATCHES "x86_64") - ENDIF(CMAKE_UNAME) -ENDIF(UNIX AND NOT WIN32) - - -# MSVC specific stuff -IF(CMAKE_COMPILER_IS_MSVC) - # STUB. Nothing now -ENDIF(CMAKE_COMPILER_IS_MSVC) - -# Various modules used for library path detections. -SET(CMAKE_MODULE_PATH "${CMAKE_SOURCE_DIR}/cmake" ${CMAKE_MODULE_PATH}) - -# Global debug option test. Sets the DEBUG flag in the config.h -IF(GLOBAL_DEBUG) - MESSAGE(STATUS "Debugging is ON") - SET(OPDE_DEBUG 1) -ELSE(GLOBAL_DEBUG) - MESSAGE(STATUS "Debugging is Off") -ENDIF(GLOBAL_DEBUG) - - - -# Solve the dependencies -SET(OIS_DIR ${CMAKE_MODULE_PATH}) -SET(OGRE_DIR ${CMAKE_MODULE_PATH}) -SET(FREEIMAGE_DIR ${CMAKE_MODULE_PATH}) - -FIND_PACKAGE(OIS REQUIRED) -FIND_PACKAGE(OGRE REQUIRED) - -# Custom image hooks -FIND_PACKAGE(FREEIMAGE REQUIRED) - -IF(FREEIMAGE_FOUND) - MESSAGE(STATUS "FreeImage Found OK") - MESSAGE(STATUS " - FreeImage includes ${FREEIMAGE_INCLUDE_DIR}") - MESSAGE(STATUS " - FreeImage libs ${FREEIMAGE_LIBRARIES}") -ELSE(FREEIMAGE_FOUND) - MESSAGE(FATAL_ERROR "FreeImage not found and selected in options!") -ENDIF(FREEIMAGE_FOUND) - - -FIND_PACKAGE(PythonLibs REQUIRED) - -# Aditional libraries - deps of the python lib -IF(UNIX) - INCLUDE(PythonDeps.cmake) - FIND_PYTHON_DEPS(PYTHON_LIBRARIES) -ENDIF(UNIX) - -IF(PYTHON_LIBRARIES) - MESSAGE(STATUS "Python Found OK") - MESSAGE(STATUS " - Python includes ${PYTHON_INCLUDE_PATH}") - MESSAGE(STATUS " - Python libs ${PYTHON_LIBRARIES}") -ELSE(PYTHON_LIBRARIES) - MESSAGE(FATAL_ERROR "Python not found and selected in options!") -ENDIF(PYTHON_LIBRARIES) - - -# Only visual check enabling verbose output, and package found info -IF(OIS_FOUND) - MESSAGE(STATUS "OIS Found OK") - MESSAGE(STATUS " - OIS includes ${OIS_INCLUDE_DIR}") - MESSAGE(STATUS " - OIS libs ${OIS_LIBRARIES}") -ELSE(OIS_FOUND) - MESSAGE(FATAL_ERROR "OIS not found") -ENDIF(OIS_FOUND) - -IF(OGRE_FOUND) - MESSAGE(STATUS "OGRE Found OK") - MESSAGE(STATUS " - Ogre includes ${OGRE_INCLUDE_DIR}") - MESSAGE(STATUS " - Ogre libs ${OGRE_LIBRARIES}") -ELSE(OGRE_FOUND) - MESSAGE(FATAL_ERROR "OGRE not found") -ENDIF(OGRE_FOUND) - -#IF(CEGUI_FOUND) -# MESSAGE(STATUS "CEGUI Found OK") -# MESSAGE(STATUS " - CEGUI includes ${CEGUI_INCLUDE_DIR}") -# MESSAGE(STATUS " - CEGUI libs ${CEGUI_LIBRARIES}") -#ELSE(CEGUI_FOUND) -# MESSAGE(FATAL_ERROR "CEGUI not found") -#ENDIF(CEGUI_FOUND) - -# Some configuration checks to allow platform independence -INCLUDE(ConfigureChecks.cmake) -CONFIGURE_FILE(config.h.cmake ${CMAKE_BINARY_DIR}/config.h ) - -# Add the subdirectories which contain aditional CMakeLists.txt files -add_subdirectory (src) -add_subdirectory (proto) -add_subdirectory (thirdparty) - -# Generate the doxyfile if selected as an option -IF (GENERATE_DOC) - # Generate the doxyfile from the template file - CONFIGURE_FILE(${CMAKE_CURRENT_SOURCE_DIR}/Doxyfile.in - ${CMAKE_BINARY_DIR}/Doxyfile) - - MESSAGE(STATUS "Doxyfile was generated in ${CMAKE_BINARY_DIR}.") - # You can run doxygen on that file to generate documentation... -ENDIF (GENERATE_DOC) - -IF (GENERATE_NSIS) - CONFIGURE_FILE(${CMAKE_CURRENT_SOURCE_DIR}/installer/opde-win.in - ${CMAKE_BINARY_DIR}/installer/opde-win.nsi @ONLY) - MESSAGE(STATUS "Installer script was generated in ${CMAKE_BINARY_DIR}/installer.") -ENDIF (GENERATE_NSIS) - -MESSAGE(STATUS "Your configuration seems to be OK!") - -MESSAGE(STATUS "") - -# Print out some configuration status messages -MESSAGE(STATUS "Your build parameters:") -MESSAGE(STATUS " * Global debugging : ${GLOBAL_DEBUG}") -MESSAGE(STATUS " * Build type : ${CMAKE_BUILD_TYPE}") -MESSAGE(STATUS " * Profilling : ${PROFILING}") -MESSAGE(STATUS " * Doxy generation : ${GENERATE_DOC}") -MESSAGE(STATUS " * Custom image h. : ${CUSTOM_IMAGE_HOOKS}") -MESSAGE(STATUS " * Static geometry : ${__STATIC_GEOMETRY}") -MESSAGE(STATUS " * C compiler : ${CMAKE_C_COMPILER}") -MESSAGE(STATUS " * C++ compiler : ${CMAKE_CXX_COMPILER}") -MESSAGE(STATUS " * Source directory : ${CMAKE_CURRENT_SOURCE_DIR}") -MESSAGE(STATUS " * Binary directory : ${CMAKE_CURRENT_BINARY_DIR}") - +# This file is part of openDarkEngine project +# Copyright (C) 2005-2007 openDarkEngine team +# +# This program is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 2 of the License, or +# (at your option) any later version. +# +# This program 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 General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program; if not, write to the Free Software +# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA +# +# $Id$ + +cmake_minimum_required(VERSION 2.6) + +project (OPDE) + +SET(OPDE_VER_MAJOR "0") +SET(OPDE_VER_MINOR "2") +SET(OPDE_VER_PATCH "1") + +# Build type selection. Use ccmake for selection of this (or the commandline switches) +# Default build type +IF (NOT CMAKE_BUILD_TYPE) + # Release for now, as VC builds are incredibly slow on Debug + SET(CMAKE_BUILD_TYPE Release) +ENDIF (NOT CMAKE_BUILD_TYPE) + +# Option to build in the debugging code +OPTION(GLOBAL_DEBUG + "Build the debugging code" + OFF) + +# Option to build the documentation +OPTION(GENERATE_DOC + "Build the doxy documentation" + OFF) + +# Option to create Windows installer script +OPTION(GENERATE_NSIS + "Creates Windows installer script" + ON) + +# Option to build in the debugging code +OPTION(PROFILING + "Build the sources with profiling support (Only Debug build type)" + OFF) + +# Option to build all the libs as static +OPTION(STATIC_LIBS + "Build the libs as static" + OFF) + + +# Compiler profiling flags +IF (PROFILING) + IF(CMAKE_COMPILER_IS_GNUCXX) + SET(PROFILER "-pg") # GCC only profiler option + ENDIF(CMAKE_COMPILER_IS_GNUCXX) +ELSE (PROFILING) + SET(PROFILER "") +ENDIF (PROFILING) + +#Target the binary files into a separate directories +# SET(EXECUTABLE_OUTPUT_PATH ${PROJECT_BINARY_DIR/Build}) + +# MinGW specific +IF(CMAKE_COMPILER_IS_MINGW) + SET(CMAKE_EXE_LINKER_FLAGS "-Wl,--enable-auto-image-base -Wl,--add-stdcall-alias -Wl,--enable-runtime-pseudo-reloc -Wl,--enable-auto-import") + SET(CMAKE_SHARED_LINKER_FLAGS"-Wl,--enable-auto-image-base -Wl,--add-stdcall-alias -Wl,--enable-runtime-pseudo-reloc -Wl,--enable-auto-import") +ENDIF(CMAKE_COMPILER_IS_MINGW) + +# Warning level high (Lowered by one to supress the payload of ogre related warnings in VC) +SET(CMAKE_CXX_WARNING_LEVEL 3) + +# GCC specific. Release/Debug flags (I add some debug/profiler switches there) +IF(CMAKE_COMPILER_IS_GNUCXX) + SET(CMAKE_C_FLAGS_DEBUG "-g -O3 ${PROFILER}") + SET(CMAKE_CXX_FLAGS_DEBUG "-g -O3 ${PROFILER}") + SET(CMAKE_CXX_FLAGS_DISTRIBUTION "-O3") + SET(CMAKE_C_FLAGS_DISTRIBUTION "-O3") + + # extra warnings, but no unused params (too common) + # no strict aliasing (see Py_True type punned pointer aliasing errors) + ADD_DEFINITIONS(-Wall -fno-strict-aliasing) + # -Wextra -Wno-unused-parameter +ENDIF(CMAKE_COMPILER_IS_GNUCXX) + +# -fPIC for 64bit IA (x86_64 that is) +IF(UNIX AND NOT WIN32) + FIND_PROGRAM(CMAKE_UNAME uname /bin /usr/bin /usr/local/bin ) + IF(CMAKE_UNAME) + EXEC_PROGRAM(uname ARGS -m OUTPUT_VARIABLE CMAKE_SYSTEM_PROCESSOR) + SET(CMAKE_SYSTEM_PROCESSOR ${CMAKE_SYSTEM_PROCESSOR} CACHE INTERNAL +"processor type (i386 and x86_64)") + IF(CMAKE_SYSTEM_PROCESSOR MATCHES "x86_64") + ADD_DEFINITIONS(-fPIC) + ENDIF(CMAKE_SYSTEM_PROCESSOR MATCHES "x86_64") + ENDIF(CMAKE_UNAME) +ENDIF(UNIX AND NOT WIN32) + + +# MSVC specific stuff +IF(CMAKE_COMPILER_IS_MSVC) + # STUB. Nothing now +ENDIF(CMAKE_COMPILER_IS_MSVC) + +# Various modules used for library path detections. +SET(CMAKE_MODULE_PATH "${CMAKE_SOURCE_DIR}/cmake" ${CMAKE_MODULE_PATH}) + +# Global debug option test. Sets the DEBUG flag in the config.h +IF(GLOBAL_DEBUG) + MESSAGE(STATUS "Debugging is ON") + SET(OPDE_DEBUG 1) +ELSE(GLOBAL_DEBUG) + MESSAGE(STATUS "Debugging is Off") +ENDIF(GLOBAL_DEBUG) + + + +# Solve the dependencies +SET(OIS_DIR ${CMAKE_MODULE_PATH}) +SET(OGRE_DIR ${CMAKE_MODULE_PATH}) +SET(FREEIMAGE_DIR ${CMAKE_MODULE_PATH}) + +FIND_PACKAGE(OIS REQUIRED) +FIND_PACKAGE(OGRE REQUIRED) + +# Custom image hooks +FIND_PACKAGE(FREEIMAGE REQUIRED) + +IF(FREEIMAGE_FOUND) + MESSAGE(STATUS "FreeImage Found OK") + MESSAGE(STATUS " - FreeImage includes ${FREEIMAGE_INCLUDE_DIR}") + MESSAGE(STATUS " - FreeImage libs ${FREEIMAGE_LIBRARIES}") +ELSE(FREEIMAGE_FOUND) + MESSAGE(FATAL_ERROR "FreeImage not found and selected in options!") +ENDIF(FREEIMAGE_FOUND) + + +FIND_PACKAGE(PythonLibs REQUIRED) + +# Aditional libraries - deps of the python lib +IF(UNIX) + INCLUDE(PythonDeps.cmake) + FIND_PYTHON_DEPS(PYTHON_LIBRARIES) +ENDIF(UNIX) + +IF(PYTHON_LIBRARIES) + MESSAGE(STATUS "Python Found OK") + MESSAGE(STATUS " - Python includes ${PYTHON_INCLUDE_PATH}") + MESSAGE(STATUS " - Python libs ${PYTHON_LIBRARIES}") +ELSE(PYTHON_LIBRARIES) + MESSAGE(FATAL_ERROR "Python not found and selected in options!") +ENDIF(PYTHON_LIBRARIES) + + +# Only visual check enabling verbose output, and package found info +IF(OIS_FOUND) + MESSAGE(STATUS "OIS Found OK") + MESSAGE(STATUS " - OIS includes ${OIS_INCLUDE_DIR}") + MESSAGE(STATUS " - OIS libs ${OIS_LIBRARIES}") +ELSE(OIS_FOUND) + MESSAGE(FATAL_ERROR "OIS not found") +ENDIF(OIS_FOUND) + +IF(OGRE_FOUND) + MESSAGE(STATUS "OGRE Found OK") + MESSAGE(STATUS " - Ogre includes ${OGRE_INCLUDE_DIR}") + MESSAGE(STATUS " - Ogre libs ${OGRE_LIBRARIES}") +ELSE(OGRE_FOUND) + MESSAGE(FATAL_ERROR "OGRE not found") +ENDIF(OGRE_FOUND) + +#IF(CEGUI_FOUND) +# MESSAGE(STATUS "CEGUI Found OK") +# MESSAGE(STATUS " - CEGUI includes ${CEGUI_INCLUDE_DIR}") +# MESSAGE(STATUS " - CEGUI libs ${CEGUI_LIBRARIES}") +#ELSE(CEGUI_FOUND) +# MESSAGE(FATAL_ERROR "CEGUI not found") +#ENDIF(CEGUI_FOUND) + +# Some configuration checks to allow platform independence +INCLUDE(ConfigureChecks.cmake) +CONFIGURE_FILE(config.h.cmake ${CMAKE_BINARY_DIR}/config.h ) + +# Add the subdirectories which contain aditional CMakeLists.txt files +add_subdirectory (src) +add_subdirectory (proto) +add_subdirectory (thirdparty) + +# Generate the doxyfile if selected as an option +IF (GENERATE_DOC) + # Generate the doxyfile from the template file + CONFIGURE_FILE(${CMAKE_CURRENT_SOURCE_DIR}/Doxyfile.in + ${CMAKE_BINARY_DIR}/Doxyfile) + + MESSAGE(STATUS "Doxyfile was generated in ${CMAKE_BINARY_DIR}.") + # You can run doxygen on that file to generate documentation... +ENDIF (GENERATE_DOC) + +IF (GENERATE_NSIS) + CONFIGURE_FILE(${CMAKE_CURRENT_SOURCE_DIR}/installer/opde-win.in + ${CMAKE_BINARY_DIR}/installer/opde-win.nsi @ONLY) + MESSAGE(STATUS "Installer script was generated in ${CMAKE_BINARY_DIR}/installer.") +ENDIF (GENERATE_NSIS) + +MESSAGE(STATUS "Your configuration seems to be OK!") + +MESSAGE(STATUS "") + +# Print out some configuration status messages +MESSAGE(STATUS "Your build parameters:") +MESSAGE(STATUS " * Global debugging : ${GLOBAL_DEBUG}") +MESSAGE(STATUS " * Build type : ${CMAKE_BUILD_TYPE}") +MESSAGE(STATUS " * Profilling : ${PROFILING}") +MESSAGE(STATUS " * Doxy generation : ${GENERATE_DOC}") +MESSAGE(STATUS " * Custom image h. : ${CUSTOM_IMAGE_HOOKS}") +MESSAGE(STATUS " * Static geometry : ${__STATIC_GEOMETRY}") +MESSAGE(STATUS " * C compiler : ${CMAKE_C_COMPILER}") +MESSAGE(STATUS " * C++ compiler : ${CMAKE_CXX_COMPILER}") +MESSAGE(STATUS " * Source directory : ${CMAKE_CURRENT_SOURCE_DIR}") +MESSAGE(STATUS " * Binary directory : ${CMAKE_CURRENT_BINARY_DIR}") + Modified: trunk/proto/python/CMakeLists.txt =================================================================== --- trunk/proto/python/CMakeLists.txt 2008-09-24 17:40:35 UTC (rev 855) +++ trunk/proto/python/CMakeLists.txt 2008-09-24 19:01:38 UTC (rev 856) @@ -49,5 +49,4 @@ target_link_libraries(pytest OpdeLib - OpdePyLib ) Modified: trunk/src/base/CMakeLists.txt =================================================================== --- trunk/src/base/CMakeLists.txt 2008-09-24 17:40:35 UTC (rev 855) +++ trunk/src/base/CMakeLists.txt 2008-09-24 19:01:38 UTC (rev 856) @@ -1,18 +1,19 @@ -INCLUDE(${OPDE_SOURCE_DIR}/src/base/Base.cmake) - -include_directories( - ${OGRE_INCLUDE_DIR} - ${OIS_INCLUDE_DIR} - ${OPDE_BINARY_DIR} - ${OPDE_BASE_INCLUDES} - ${OPDE_SOURCE_DIR}/src/base/Dark -) - -include_directories( - ${OPDE_BINARY_DIR} -) - -add_library ( OpdeBase STATIC - ${OPDE_BASE_FILES} # As in the Base.cmake -) - +INCLUDE(${OPDE_SOURCE_DIR}/src/base/Base.cmake) + +include_directories( + ${OGRE_INCLUDE_DIR} + ${OIS_INCLUDE_DIR} + ${OPDE_BINARY_DIR} + ${OPDE_BASE_INCLUDES} + ${OPDE_SOURCE_DIR}/src/base/Dark +) + +include_directories( + ${OPDE_BINARY_DIR} +) + +IF(STATIC_LIBS) + add_library ( OpdeBase STATIC + ${OPDE_BASE_FILES} # As in the Base.cmake + ) +ENDIF(STATIC_LIBS) Modified: trunk/src/bindings/CMakeLists.txt =================================================================== --- trunk/src/bindings/CMakeLists.txt 2008-09-24 17:40:35 UTC (rev 855) +++ trunk/src/bindings/CMakeLists.txt 2008-09-24 19:01:38 UTC (rev 856) @@ -1,60 +1,61 @@ -# Nothing interesting now. Will compile the python module after finished -# -# $Id$ - -INCLUDE( ${OPDE_SOURCE_DIR}/src/services/Services.cmake ) -INCLUDE( ${OPDE_SOURCE_DIR}/src/base/Base.cmake ) - -include_directories( - ${OGRE_INCLUDE_DIR} - ${OIS_INCLUDE_DIR} - ${OPDE_BINARY_DIR} - ${OPDE_BASE_INCLUDES} - ${OPDE_SERVICE_INCLUDES} - ${PYTHON_INCLUDE_PATH} - ${OPDE_SOURCE_DIR}/src/scenemanager - ${OPDE_SOURCE_DIR}/src/main - ${OPDE_SOURCE_DIR}/thirdparty/QuickGUI/include -) - - -add_library(OpdePyLib SHARED - bindings.cpp - bindings.h - ServiceBinder.cpp - ServiceBinder.h - ConfigServiceBinder.cpp - ConfigServiceBinder.h - LinkServiceBinder.cpp - LinkServiceBinder.h - RelationBinder.cpp - RelationBinder.h - LinkQueryResultBinder.cpp - LinkQueryResultBinder.h - PropertyServiceBinder.cpp - PropertyServiceBinder.h - DTypeBinder.cpp - DTypeBinder.h - LoopServiceBinder.cpp - LoopServiceBinder.h - InputServiceBinder.cpp - InputServiceBinder.h - GUIServiceBinder.cpp - GUIServiceBinder.h - DatabaseServiceBinder.cpp - DatabaseServiceBinder.h - QuickGUIBindings.cpp - QuickGUIBindings.h - PythonStruct.h - RootBinder.cpp - RootBinder.h - StringIteratorBinder.cpp - StringIteratorBinder.h - ObjectServiceBinder.cpp - ObjectServiceBinder.h -) - -target_link_libraries(OpdePyLib - ${PYTHON_LIBRARIES} - OpdeLib -) +# Nothing interesting now. Will compile the python module after finished +# +# $Id$ + +INCLUDE( ${OPDE_SOURCE_DIR}/src/services/Services.cmake ) +INCLUDE( ${OPDE_SOURCE_DIR}/src/base/Base.cmake ) + +include_directories( + ${OGRE_INCLUDE_DIR} + ${OIS_INCLUDE_DIR} + ${OPDE_BINARY_DIR} + ${OPDE_BASE_INCLUDES} + ${OPDE_SERVICE_INCLUDES} + ${PYTHON_INCLUDE_PATH} + ${OPDE_SOURCE_DIR}/src/scenemanager + ${OPDE_SOURCE_DIR}/src/main + ${OPDE_SOURCE_DIR}/thirdparty/QuickGUI/include +) + +IF(STATIC_LIBS) + add_library(OpdePyLib SHARED + bindings.cpp + bindings.h + ServiceBinder.cpp + ServiceBinder.h + ConfigServiceBinder.cpp + ConfigServiceBinder.h + LinkServiceBinder.cpp + LinkServiceBinder.h + RelationBinder.cpp + RelationBinder.h + LinkQueryResultBinder.cpp + LinkQueryResultBinder.h + PropertyServiceBinder.cpp + PropertyServiceBinder.h + DTypeBinder.cpp + DTypeBinder.h + LoopServiceBinder.cpp + LoopServiceBinder.h + InputServiceBinder.cpp + InputServiceBinder.h + GUIServiceBinder.cpp + GUIServiceBinder.h + DatabaseServiceBinder.cpp + DatabaseServiceBinder.h + QuickGUIBindings.cpp + QuickGUIBindings.h + PythonStruct.h + RootBinder.cpp + RootBinder.h + StringIteratorBinder.cpp + StringIteratorBinder.h + ObjectServiceBinder.cpp + ObjectServiceBinder.h + ) + + target_link_libraries(OpdePyLib + ${PYTHON_LIBRARIES} + OpdeLib + ) +ENDIF(STATIC_LIBS) Modified: trunk/src/main/CMakeLists.txt =================================================================== --- trunk/src/main/CMakeLists.txt 2008-09-24 17:40:35 UTC (rev 855) +++ trunk/src/main/CMakeLists.txt 2008-09-24 19:01:38 UTC (rev 856) @@ -1,106 +1,106 @@ -INCLUDE( ${OPDE_SOURCE_DIR}/src/services/Services.cmake ) -INCLUDE( ${OPDE_SOURCE_DIR}/src/base/Base.cmake ) -INCLUDE( ${OPDE_SOURCE_DIR}/src/bindings/Bindings.cmake ) -INCLUDE( ${OPDE_SOURCE_DIR}/src/scenemanager/DarkSceneManager.cmake ) - -include_directories( - ${OGRE_INCLUDE_DIR} - ${OIS_INCLUDE_DIR} - ${OPDE_BINARY_DIR} - ${OPDE_BASE_INCLUDES} - ${OPDE_SOURCE_DIR}/src/compat - ${OPDE_SOURCE_DIR}/src/base/Dark - ${OPDE_SOURCE_DIR}/src/scenemanager - ${OPDE_SOURCE_DIR}/src/main - ${OPDE_SOURCE_DIR}/src/bindings - ${OPDE_SOURCE_DIR}/thirdparty/QuickGUI/include - ${OPDE_SERVICE_INCLUDES} - ${FREEIMAGE_INCLUDE_DIR} - ${PYTHON_INCLUDE_PATH} -) - -add_library (OpdeLib SHARED - Root.cpp - Root.h - DTypeScriptCompiler.cpp - DTypeScriptCompiler.h - PLDefScriptCompiler.cpp - PLDefScriptCompiler.h - DTypeScriptLoader.cpp - DTypeScriptLoader.h - PLDefScriptLoader.cpp - PLDefScriptLoader.h - CustomImageCodec.cpp - CustomImageCodec.h - # and the base lib files - ${OPDE_BASE_FILES} - # and service files as well - ${OPDE_SERVICE_FILES} - # and the python bindings - ${OPDE_BINDING_FILES} - # and the scene manager - ${OPDE_SCENEMANAGER_FILES} -) - -link_directories( - ${OPDE_BASE_INCLUDES} - ${OPDE_SOURCE_DIR}/src/scenemanager -) - -# We don't link any our own files here, as CMake does not support convenience libraries -target_link_libraries( OpdeLib - ${OGRE_LIBRARIES} - ${OIS_LIBRARIES} - ${FREEIMAGE_LIBRARIES} - ${PYTHON_LIBRARIES} - QuickGUI -) - -set_property(TARGET OpdeLib PROPERTY LINK_INTERFACE_LIBRARIES "") - -# Build flags for the .DLL __declspec things, etc. -SET_TARGET_PROPERTIES(OpdeLib PROPERTIES - DEFINE_SYMBOL "OPDELIB_DLL_TARGET" - LINK_INTERFACE_LIBRARIES "" -) - -if (NOT WIN32) - # Currently there is no need to build this on windows (and also it fails) - is there latex2html for windows anyway? - # Doc generator for opde - property and link types info generator - add_executable (opdeDocGen WIN32 - OpdeDocGen.cpp - ) - - target_link_libraries( opdeDocGen - OpdeLib - ) - - SET_TARGET_PROPERTIES(opdeDocGen PROPERTIES - COMPILE_DEFINITIONS "OPDE_EXE_TARGET" - ) -endif(NOT WIN32) - -# Main executable -add_executable (opdemain WIN32 - Opde.cpp - GameStateManager.cpp - GameState.cpp - GamePlayState.cpp - GameLoadState.cpp - GameStateManager.h - GameState.h - GamePlayState.h - GameLoadState.h -) - -target_link_libraries( opdemain - OpdeLib - ${OGRE_LIBRARIES} - ${OIS_LIBRARIES} - ${FREEIMAGE_LIBRARIES} -) - -SET_TARGET_PROPERTIES( opdemain PROPERTIES - COMPILE_DEFINITIONS "OPDE_EXE_TARGET" -) - +INCLUDE( ${OPDE_SOURCE_DIR}/src/services/Services.cmake ) +INCLUDE( ${OPDE_SOURCE_DIR}/src/base/Base.cmake ) +INCLUDE( ${OPDE_SOURCE_DIR}/src/bindings/Bindings.cmake ) +INCLUDE( ${OPDE_SOURCE_DIR}/src/scenemanager/DarkSceneManager.cmake ) + +include_directories( + ${OGRE_INCLUDE_DIR} + ${OIS_INCLUDE_DIR} + ${OPDE_BINARY_DIR} + ${OPDE_BASE_INCLUDES} + ${OPDE_SOURCE_DIR}/src/compat + ${OPDE_SOURCE_DIR}/src/base/Dark + ${OPDE_SOURCE_DIR}/src/scenemanager + ${OPDE_SOURCE_DIR}/src/main + ${OPDE_SOURCE_DIR}/src/bindings + ${OPDE_SOURCE_DIR}/thirdparty/QuickGUI/include + ${OPDE_SERVICE_INCLUDES} + ${FREEIMAGE_INCLUDE_DIR} + ${PYTHON_INCLUDE_PATH} +) + +add_library (OpdeLib SHARED + Root.cpp + Root.h + DTypeScriptCompiler.cpp + DTypeScriptCompiler.h + PLDefScriptCompiler.cpp + PLDefScriptCompiler.h + DTypeScriptLoader.cpp + DTypeScriptLoader.h + PLDefScriptLoader.cpp + PLDefScriptLoader.h + CustomImageCodec.cpp + CustomImageCodec.h + # and the base lib files + ${OPDE_BASE_FILES} + # and service files as well + ${OPDE_SERVICE_FILES} + # and the python bindings + ${OPDE_BINDING_FILES} + # and the scene manager + ${OPDE_SCENEMANAGER_FILES} +) + +link_directories( + ${OPDE_BASE_INCLUDES} + ${OPDE_SOURCE_DIR}/src/scenemanager +) + +# We don't link any our own files here, as CMake does not support convenience libraries +target_link_libraries( OpdeLib + ${OGRE_LIBRARIES} + ${OIS_LIBRARIES} + ${FREEIMAGE_LIBRARIES} + ${PYTHON_LIBRARIES} + QuickGUI +) + +set_property(TARGET OpdeLib PROPERTY LINK_INTERFACE_LIBRARIES "") + +# Build flags for the .DLL __declspec things, etc. +SET_TARGET_PROPERTIES(OpdeLib PROPERTIES + DEFINE_SYMBOL "OPDELIB_DLL_TARGET" + LINK_INTERFACE_LIBRARIES "" +) + +if (NOT WIN32) + # Currently there is no need to build this on windows (and also it fails) - is there latex2html for windows anyway? + # Doc generator for opde - property and link types info generator + add_executable (opdeDocGen WIN32 + OpdeDocGen.cpp + ) + + target_link_libraries( opdeDocGen + OpdeLib + ) + + SET_TARGET_PROPERTIES(opdeDocGen PROPERTIES + COMPILE_DEFINITIONS "OPDE_EXE_TARGET" + ) +endif(NOT WIN32) + +# Main executable +add_executable (opdemain WIN32 + Opde.cpp + GameStateManager.cpp + GameState.cpp + GamePlayState.cpp + GameLoadState.cpp + GameStateManager.h + GameState.h + GamePlayState.h + GameLoadState.h +) + +target_link_libraries( opdemain + OpdeLib + ${OGRE_LIBRARIES} + ${OIS_LIBRARIES} + ${FREEIMAGE_LIBRARIES} +) + +SET_TARGET_PROPERTIES( opdemain PROPERTIES + COMPILE_DEFINITIONS "OPDE_EXE_TARGET" +) + Modified: trunk/src/scenemanager/CMakeLists.txt =================================================================== --- trunk/src/scenemanager/CMakeLists.txt 2008-09-24 17:40:35 UTC (rev 855) +++ trunk/src/scenemanager/CMakeLists.txt 2008-09-24 19:01:38 UTC (rev 856) @@ -7,29 +7,31 @@ ${OGRE_LIB_DIR} ) -add_library (DarkSceneManager STATIC - DarkBspNode.cpp - DarkBspNode.h - DarkBspTree.cpp - DarkBspTree.h - DarkSceneNode.cpp - DarkSceneNode.h - DarkConvexPolygon.cpp - DarkConvexPolygon.h - DarkPortal.cpp - DarkPortal.h - DarkPortalFrustum.cpp - DarkPortalFrustum.h - DarkCamera.cpp - DarkCamera.h - DarkSceneManager.cpp - DarkSceneManager.h - DarkLight.cpp - DarkLight.h - DarkGeometry.cpp - DarkGeometry.h -) +IF(STATIC_LIBS) + add_library (DarkSceneManager STATIC + DarkBspNode.cpp + DarkBspNode.h + DarkBspTree.cpp + DarkBspTree.h + DarkSceneNode.cpp + DarkSceneNode.h + DarkConvexPolygon.cpp + DarkConvexPolygon.h + DarkPortal.cpp + DarkPortal.h + DarkPortalFrustum.cpp + DarkPortalFrustum.h + DarkCamera.cpp + DarkCamera.h + DarkSceneManager.cpp + DarkSceneManager.h + DarkLight.cpp + DarkLight.h + DarkGeometry.cpp + DarkGeometry.h + ) -SET_TARGET_PROPERTIES(DarkSceneManager PROPERTIES - COMPILE_DEFINITIONS "OPDELIB_DLL_TARGET" -) + SET_TARGET_PROPERTIES(DarkSceneManager PROPERTIES + COMPILE_DEFINITIONS "OPDELIB_DLL_TARGET" + ) +ENDIF(STATIC_LIBS) Modified: trunk/src/services/script/ScriptService.cpp =================================================================== --- trunk/src/services/script/ScriptService.cpp 2008-09-24 17:40:35 UTC (rev 855) +++ trunk/src/services/script/ScriptService.cpp 2008-09-24 19:01:38 UTC (rev 856) @@ -107,6 +107,26 @@ void ScriptService::shutdown() { } + /*-----------------------------------------------------*/ + /*-------------------- ObjectScript -------------------*/ + /*-----------------------------------------------------*/ + ObjectScript::ObjectScript(int id) : mID(id) { + } + + //------------------------------------ + ObjectScript::~ObjectScript() { + } + + /*-----------------------------------------------------*/ + /*----------------- ObjectScriptModule ----------------*/ + /*-----------------------------------------------------*/ + ObjectScriptModule::ObjectScriptModule(std::string& name) { + } + + //------------------------------------ + ObjectScriptModule::~ObjectScriptModule() { + } + //-------------------------- Factory implementation std::string ScriptServiceFactory::mName = "ScriptService"; Modified: trunk/src/services/script/ScriptService.h =================================================================== --- trunk/src/services/script/ScriptService.h 2008-09-24 17:40:35 UTC (rev 855) +++ trunk/src/services/script/ScriptService.h 2008-09-24 19:01:38 UTC (rev 856) @@ -62,18 +62,18 @@ virtual ~ObjectScriptModule(); /// Returns true if this module handles a certain script type named name - virtual bool handlesScript(std::string& name); + virtual bool handlesScript(std::string& name) = 0; /// Creates a new object script for object id object_id - virtual ObjectScriptPtr createScript(int object_id, const std::string& name); + virtual ObjectScriptPtr createScript(int object_id, const std::string& name) = 0; /** Returns a std::set of script types that are handled by this module * @todo this should rather return a StringIteratorPtr */ - virtual std::set<std::string> getScriptNames(); + virtual std::set<std::string> getScriptNames() = 0; /// Returns script module name. Should be the same as the filename - virtual std::string getName(); + virtual std::string getName() = 0; protected: // typedef std::map<int, ObjectScriptPtr> ObjectIDToScript; Modified: trunk/src/tools/CMakeLists.txt =================================================================== --- trunk/src/tools/CMakeLists.txt 2008-09-24 17:40:35 UTC (rev 855) +++ trunk/src/tools/CMakeLists.txt 2008-09-24 19:01:38 UTC (rev 856) @@ -1,18 +1,18 @@ -include_directories ( - ${OGRE_INCLUDE_DIR} - ${OPDE_BINARY_DIR} - ${OPDE_SOURCE_DIR}/src/compat - ${OPDE_SOURCE_DIR}/src/base - ${OPDE_SOURCE_DIR}/src/base/file -) - -add_executable ( meshconvert meshconvert.cpp ) - -add_executable ( chunk chunk.cpp ) - -add_executable ( DarkFontConverter DarkFontConverter.cpp ) - -target_link_libraries( chunk - ${OGRE_LIBRARIES} - OpdeBase -) +include_directories ( + ${OGRE_INCLUDE_DIR} + ${OPDE_BINARY_DIR} + ${OPDE_SOURCE_DIR}/src/compat + ${OPDE_SOURCE_DIR}/src/base + ${OPDE_SOURCE_DIR}/src/base/file +) + +add_executable ( meshconvert meshconvert.cpp ) + +add_executable ( chunk chunk.cpp ) + +add_executable ( DarkFontConverter DarkFontConverter.cpp ) + +target_link_libraries( chunk + ${OGRE_LIBRARIES} + OpdeLib +) Modified: trunk/thirdparty/QuickGUI/src/CMakeLists.txt =================================================================== --- trunk/thirdparty/QuickGUI/src/CMakeLists.txt 2008-09-24 17:40:35 UTC (rev 855) +++ trunk/thirdparty/QuickGUI/src/CMakeLists.txt 2008-09-24 19:01:38 UTC (rev 856) @@ -50,8 +50,15 @@ LINK_DIRECTORIES (${OGRE_LIB_DIR}) -ADD_LIBRARY (QuickGUI ${QUICKGUI_SRCS}) +ADD_LIBRARY (QuickGUI SHARED ${QUICKGUI_SRCS}) +SET_TARGET_PROPERTIES( QuickGUI PROPERTIES + COMPILE_DEFINITIONS "QUICKGUI_EXPORTS" +) + +TARGET_LINK_LIBRARIES(QuickGUI + ${OGRE_LIBRARIES} +) # QuickGUIRenderBatch.cpp # QuickGUIRenderComponent.cpp # QuickGUIRenderManager.cpp This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <vo...@us...> - 2008-10-07 20:12:02
|
Revision: 871 http://opde.svn.sourceforge.net/opde/?rev=871&view=rev Author: volca Date: 2008-10-07 20:11:56 +0000 (Tue, 07 Oct 2008) Log Message: ----------- pass arguments to the python scripts Modified Paths: -------------- trunk/proto/python/test.cpp trunk/src/bindings/bindings.cpp trunk/src/bindings/bindings.h trunk/src/main/OpdeScript.cpp Modified: trunk/proto/python/test.cpp =================================================================== --- trunk/proto/python/test.cpp 2008-10-07 19:25:14 UTC (rev 870) +++ trunk/proto/python/test.cpp 2008-10-07 20:11:56 UTC (rev 871) @@ -5,7 +5,7 @@ int main(void) { // Only call the python script. that's all we need now - PythonLanguage::init(); + PythonLanguage::init(0, NULL); // TODO: Pass arguments to python // TODO: Handle exceptions gracefully PythonLanguage::runScript("test.py"); Modified: trunk/src/bindings/bindings.cpp =================================================================== --- trunk/src/bindings/bindings.cpp 2008-10-07 19:25:14 UTC (rev 870) +++ trunk/src/bindings/bindings.cpp 2008-10-07 20:11:56 UTC (rev 871) @@ -152,7 +152,7 @@ // Ogre::Root* PythonLanguage::msRoot = NULL; - void PythonLanguage::init() { + void PythonLanguage::init(int argc, char **argv) { Py_Initialize(); msRoot = NULL; @@ -169,7 +169,8 @@ PyErr_Print(); PyErr_Clear(); } - + + PySys_SetArgv(argc, argv); } void PythonLanguage::term() { Modified: trunk/src/bindings/bindings.h =================================================================== --- trunk/src/bindings/bindings.h 2008-10-07 19:25:14 UTC (rev 870) +++ trunk/src/bindings/bindings.h 2008-10-07 20:11:56 UTC (rev 871) @@ -232,7 +232,7 @@ public: /** Initializes python lang and all the bindings */ - static void init(); + static void init(int argc, char **argv); /** Finalizes python lang */ static void term(); Modified: trunk/src/main/OpdeScript.cpp =================================================================== --- trunk/src/main/OpdeScript.cpp 2008-10-07 19:25:14 UTC (rev 870) +++ trunk/src/main/OpdeScript.cpp 2008-10-07 20:11:56 UTC (rev 871) @@ -40,8 +40,7 @@ scriptName = argv[1]; if (scriptName != "") { - PythonLanguage::init(); - // TODO: Need a way to supply args to the script + PythonLanguage::init(argc - 1, &argv[1]); PythonLanguage::runScript(scriptName.c_str()); PythonLanguage::term(); } else { This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <vo...@us...> - 2008-10-15 19:59:43
|
Revision: 874 http://opde.svn.sourceforge.net/opde/?rev=874&view=rev Author: volca Date: 2008-10-15 19:59:30 +0000 (Wed, 15 Oct 2008) Log Message: ----------- dependency loop breakage (win32 version now works) Modified Paths: -------------- trunk/proto/python/CMakeLists.txt trunk/scripts/python/tree.py trunk/src/services/property/PropertyGroup.cpp trunk/src/services/property/PropertyGroup.h trunk/src/services/property/PropertyService.cpp trunk/src/services/property/PropertyService.h trunk/src/services/render/RenderService.cpp trunk/src/services/render/RenderService.h Property Changed: ---------------- trunk/proto/python/CMakeLists.txt trunk/scripts/python/tree.py trunk/src/services/binary/BinaryService.cpp trunk/src/services/config/ConfigService.cpp trunk/src/services/database/DatabaseService.cpp trunk/src/services/game/GameService.cpp trunk/src/services/inherit/InheritService.cpp trunk/src/services/input/InputService.cpp trunk/src/services/link/LinkService.cpp trunk/src/services/loop/LoopService.cpp trunk/src/services/property/PropertyGroup.cpp trunk/src/services/property/PropertyGroup.h trunk/src/services/property/PropertyService.cpp trunk/src/services/property/PropertyService.h trunk/src/services/render/RenderService.cpp trunk/src/services/render/RenderService.h Modified: trunk/proto/python/CMakeLists.txt =================================================================== --- trunk/proto/python/CMakeLists.txt 2008-10-15 19:56:38 UTC (rev 873) +++ trunk/proto/python/CMakeLists.txt 2008-10-15 19:59:30 UTC (rev 874) @@ -40,6 +40,7 @@ target_link_libraries(pytest OpdeLib + ${PYTHON_LIBRARIES} ) SET_TARGET_PROPERTIES( pytest PROPERTIES Property changes on: trunk/proto/python/CMakeLists.txt ___________________________________________________________________ Modified: svn:eol-style - native + LF Modified: trunk/scripts/python/tree.py =================================================================== --- trunk/scripts/python/tree.py 2008-10-15 19:56:38 UTC (rev 873) +++ trunk/scripts/python/tree.py 2008-10-15 19:59:30 UTC (rev 874) @@ -69,11 +69,11 @@ print "Object Info for object " + str(oid) + " named '" + name + "':" for s in psrv.getAllPropertyNames(): - if psrv.has(oid, s): - if psrv.owns(oid, s): - print " * Object " + str(oid) + " has property: " + s - else: - print " * Object " + str(oid) + " inherits property: " + s + if psrv.has(oid, s): + if psrv.owns(oid, s): + print " * Object " + str(oid) + " has property: " + s + else: + print " * Object " + str(oid) + " inherits property: " + s # If there was a method to get all relations, we could do the same with links @@ -83,8 +83,8 @@ # iterate over all prop names, find those that are owned by the object for s in psrv.getAllPropertyNames(): - if psrv.owns(oid, s) and s not in ['DonorType','SymbolicName']: # Skip DonorType and SymbolicName, they are mandatory - res.append(s) # Here, we could convert prop values to {val,} as dark does it, having all the object's props listed + if psrv.owns(oid, s) and s not in ['DonorType','SymbolicName']: # Skip DonorType and SymbolicName, they are mandatory + res.append(s) # Here, we could convert prop values to {val,} as dark does it, having all the object's props listed return " ".join(res) @@ -94,8 +94,8 @@ # iterate over inheritance sources, find those with nonzero priority for s in inhsrv.getSources(oid): - if s.priority != 0: - res.append(objsrv.getName(s.src)) + if s.priority != 0: + res.append(objsrv.getName(s.src)) return " ".join(res) @@ -113,7 +113,7 @@ # some formatting if props != '': props = ' [' + props + ']' - + if mprops != '': mprops = ' {' + mprops + '}' @@ -124,9 +124,9 @@ # get DonorType property value dtype = psrv.get(oid, "DonorType", "") - # if the donor type is nonzero, we encountered a MetaProperty! - if (dtype == 1): - dtypestr = "[M] " + # if the donor type is nonzero, we encountered a MetaProperty! + if (dtype == 1): + dtypestr = "[M] " # print out the object info print indent + '-+ ' + dtypestr + name + '(' + str(oid) + ')' + props + mprops @@ -136,15 +136,15 @@ # get inheritance targets, iterate over those for l in inhsrv.getTargets(oid): - # the inh. target is not inheriting as MP, but as archetype - if l.priority == 0: - # so we'll format - single = 0 - # recurse with the target property - otree(l.dst, indent + ' |') - + # the inh. target is not inheriting as MP, but as archetype + if l.priority == 0: + # so we'll format + single = 0 + # recurse with the target property + otree(l.dst, indent + ' |') + if not single: - print indent + print indent # An example Object tree list for all the archetype base objects (id can change, name hopefully not) for srcobj in ["Object", "MetaProperty", "Stimulus", "Flow Group", "Base Room", "Texture"]: Property changes on: trunk/scripts/python/tree.py ___________________________________________________________________ Modified: svn:eol-style - native + LF Property changes on: trunk/src/services/binary/BinaryService.cpp ___________________________________________________________________ Added: svn:eol-style + LF Property changes on: trunk/src/services/config/ConfigService.cpp ___________________________________________________________________ Added: svn:eol-style + LF Property changes on: trunk/src/services/database/DatabaseService.cpp ___________________________________________________________________ Added: svn:eol-style + LF Property changes on: trunk/src/services/game/GameService.cpp ___________________________________________________________________ Added: svn:eol-style + LF Property changes on: trunk/src/services/inherit/InheritService.cpp ___________________________________________________________________ Added: svn:eol-style + LF Property changes on: trunk/src/services/input/InputService.cpp ___________________________________________________________________ Added: svn:eol-style + LF Property changes on: trunk/src/services/link/LinkService.cpp ___________________________________________________________________ Added: svn:eol-style + LF Property changes on: trunk/src/services/loop/LoopService.cpp ___________________________________________________________________ Added: svn:eol-style + LF Modified: trunk/src/services/property/PropertyGroup.cpp =================================================================== --- trunk/src/services/property/PropertyGroup.cpp 2008-10-15 19:56:38 UTC (rev 873) +++ trunk/src/services/property/PropertyGroup.cpp 2008-10-15 19:59:30 UTC (rev 874) @@ -55,8 +55,13 @@ // -------------------------------------------------------------------------- PropertyGroup::~PropertyGroup() { + } + + // -------------------------------------------------------------------------- + void PropertyGroup::shutdown() { clear(); + // have to unregister here to break shared_ptr dependencies (prop. groups are not shared_ptr handled) if (! mInheritor.isNull()) mInheritor->unregisterListener(mInheritorListenerID); Property changes on: trunk/src/services/property/PropertyGroup.cpp ___________________________________________________________________ Added: svn:eol-style + LF Modified: trunk/src/services/property/PropertyGroup.h =================================================================== --- trunk/src/services/property/PropertyGroup.h 2008-10-15 19:56:38 UTC (rev 873) +++ trunk/src/services/property/PropertyGroup.h 2008-10-15 19:59:30 UTC (rev 874) @@ -1,226 +1,229 @@ -/****************************************************************************** - * - * This file is part of openDarkEngine project - * Copyright (C) 2005-2006 openDarkEngine team - * - * This program is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation; either version 2 of the License, or - * (at your option) any later version. - * - * This program 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 General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA - * - * $Id$ - * - *****************************************************************************/ - - -#ifndef __PROPERTYGROUP_H -#define __PROPERTYGROUP_H - -#include "config.h" - -#include "PropertyCommon.h" -#include "NonCopyable.h" -#include "DTypeDef.h" -#include "FileGroup.h" -#include "OpdeException.h" -#include "logger.h" -#include "InheritService.h" -#include "DataStorage.h" -#include "BitArray.h" - -namespace Opde { - // forward decl. - class PropertyService; - - /** @brief Property group - a group of properties of the same kind (name, type). - * Property group holds all the properties of the same kind for all the objects. - */ - class OPDELIB_EXPORT PropertyGroup : public NonCopyable, public MessageSource<PropertyChangeMsg> { - public: - /** PropertyGroup Constructor - * @param name The property name - * @param chunk_name The name of the chunk (without the P$) - * @param storage The property storage created to hold the data - * @param deleteStorageOnDestroy delete the property storage on destroy of this prop. group? - * @param ver_maj The major version of the chunk that stores this property - * @param ver_min The minor version of the chunk that stores this property - */ - PropertyGroup(PropertyService* owner, const std::string& name, const std::string& chunk_name, const DataStoragePtr& storage, std::string inheritorName); - - /** Setter for the property chunk version */ - inline void setChunkVersions(uint verMaj, uint verMin) { - mVerMaj = verMaj; - mVerMin = verMin; - }; - - /** gets the major version of the chunk */ - inline uint getChunkVersionMajor(void) { return mVerMaj; }; - - /** gets the minor version of the chunk */ - inline uint getChunkVersionMinor(void) { return mVerMin; }; - - /** Destructor */ - virtual ~PropertyGroup(); - - /// Sets this property group's flag mBuiltIn to true, meaning this PropertyGroup was created by code as a core property - inline void setBuiltin() { mBuiltin = true; }; - - /// Gets the builtin flag - inline bool getBuiltin() { return mBuiltin; }; - - /** Property storage setter - * @param propStorage The new storage for properties - * @warning This should not be used when the property group holds some data - */ - virtual void setPropertyStorage(const DataStoragePtr& newStorage); - - - /// Name getter. Returns the name of property this group manages - const std::string& getName() { return mName; }; - - /** Determines whether an object with id obj_id stores or inherits property of this type - * @param obj_id The object id of the object - * @return true if the object has the given property - */ - bool has(int obj_id) const { - // Get the effective id for the object - int eoid = _getEffectiveObject(obj_id); - - if (eoid == 0) - return false; - - // This code could be removed, if we knew the nonzero eoid will always mean prop exists - return owns(eoid); - } - - /** Determines whether an object with id obj_id stores property of this type - * @param obj_id The object id of the object - * @return true if the object has the given property - * @note Will return false if the object only inherits the property, but does not own it (use has for that) - */ - bool owns(int obj_id) const { - return mPropertyStorage->has(obj_id); - } - - /** Loads properties from a file group - * @param db The database to load from */ - void load(const FileGroupPtr& db); - - /** Saves properties to a file group - * @param db The database to save to - * @param objMask The BitArray of objects to be saved - */ - void save(const FileGroupPtr& db, const BitArray& objMask); - - /** Clears the whole property group. - * Clears out all the properties, and broadcasts PROP_GROUP_CLEARED - */ - void clear(); - - /** Creates a property for given object ID, using the default values for the property fields - * @param obj_id The id of the object to create the property for - * @return true if the property was created, false if the object ID already holds the given property - * @note Broadcasts a PROP_ADDED on success - * @note Notifies inheritor about the change */ - bool createProperty(int obj_id); - - /** Creates a property for given object ID - * @param obj_id The id of the object to create the property for - * @return true if the property was removed, false if the object ID didn't hold the property - * @note Broadcasts a PROP_REMOVED on success - * @note Notifies inheritor about the change */ - bool removeProperty(int obj_id); - - /** Creates a new property, or replaces all the values on the current, by cloning a given property on object ID - * @param obj_id Target object ID (id to create) - * @param src_id The id of the object to clone property from */ - bool cloneProperty(int obj_id, int src_id); - - // ----------------- Data manipulation related methods -------------------- - /** Direct data setter. - * @param id object id - * @param field the field name - * @param value New value for the field - * @return true if the change was sucessful - * @see owns - * @note Will log error when object id does not own the property to be changed */ - bool set(int id, const std::string& field, const DVariant& value); - - /** Direct data getter - * @param id object id - * @param field the field name - * @param target The target value holder to be filled from the field indicated, or untouched if field invalid - * @see owns - * @return false if field name was invalid, true if value was set in target - */ - bool get(int id, const std::string& field, DVariant& target); - - /** Notification that an object was destroyed. @see PropertyService::objectDestroyed */ - void objectDestroyed(int id); - - /** @return A reference to const DataFieldDesc iterator, usable for data description, automatic gui composition, etc. - * Internally, this is just a wrapper around getFieldDescIterator call to PropertyStorage. - * @todo It should be decided if it is guaranteed to have this iterator in a storable quality - if it could be used to load/save data. - */ - DataFieldDescIteratorPtr getFieldDescIterator(void); - - protected: - /** Does the internal handling related to the creation of a property for object - * @param objID The object id to which a property was added - */ - void _addProperty(int objID); - - /// The listener to the inheritance messages - void onInheritChange(const InheritValueChangeMsg& msg); - - /** Returns an ID of the object which is responsible for the current property values - * As the properties can be inherited using both archetype links and MetaProps, - * there must be a way to know what object currently represents the property values - * @param obj_id The object id to query - * @return object ID of the effective property holder, or zero (0) if not found */ - int _getEffectiveObject(int obj_id) const { - return mInheritor->getEffectiveID(obj_id); - } - - /// The name of the property - std::string mName; - - /// The name of the chunk data (reduced of the P$) - std::string mChunkName; - - /// chunk version - major - uint mVerMaj; - /// chunk version - minor - uint mVerMin; - - /// Inheritor used to determine property inheritance - InheritorPtr mInheritor; - - /// Inheritor value changes listener - Inheritor::ListenerID mInheritorListenerID; - - /// Property storage used to store data for the property - DataStoragePtr mPropertyStorage; - - /// Owner service - PropertyService* mOwner; - - /// Builtin flag - property groups created in code as builtin have true here - bool mBuiltin; - }; - - /// Shared pointer to property group - // typedef shared_ptr<PropertyGroup> PropertyGroupPtr; - -} - -#endif +/****************************************************************************** + * + * This file is part of openDarkEngine project + * Copyright (C) 2005-2006 openDarkEngine team + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * This program 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 General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + * + * $Id$ + * + *****************************************************************************/ + + +#ifndef __PROPERTYGROUP_H +#define __PROPERTYGROUP_H + +#include "config.h" + +#include "PropertyCommon.h" +#include "NonCopyable.h" +#include "DTypeDef.h" +#include "FileGroup.h" +#include "OpdeException.h" +#include "logger.h" +#include "InheritService.h" +#include "DataStorage.h" +#include "BitArray.h" + +namespace Opde { + // forward decl. + class PropertyService; + + /** @brief Property group - a group of properties of the same kind (name, type). + * Property group holds all the properties of the same kind for all the objects. + */ + class OPDELIB_EXPORT PropertyGroup : public NonCopyable, public MessageSource<PropertyChangeMsg> { + public: + /** PropertyGroup Constructor + * @param name The property name + * @param chunk_name The name of the chunk (without the P$) + * @param storage The property storage created to hold the data + * @param deleteStorageOnDestroy delete the property storage on destroy of this prop. group? + * @param ver_maj The major version of the chunk that stores this property + * @param ver_min The minor version of the chunk that stores this property + */ + PropertyGroup(PropertyService* owner, const std::string& name, const std::string& chunk_name, const DataStoragePtr& storage, std::string inheritorName); + + /** Setter for the property chunk version */ + inline void setChunkVersions(uint verMaj, uint verMin) { + mVerMaj = verMaj; + mVerMin = verMin; + }; + + /** gets the major version of the chunk */ + inline uint getChunkVersionMajor(void) { return mVerMaj; }; + + /** gets the minor version of the chunk */ + inline uint getChunkVersionMinor(void) { return mVerMin; }; + + /** Destructor */ + virtual ~PropertyGroup(); + + /** Shutdown routine. All dependencies must be be released here */ + virtual void shutdown(); + + /// Sets this property group's flag mBuiltIn to true, meaning this PropertyGroup was created by code as a core property + inline void setBuiltin() { mBuiltin = true; }; + + /// Gets the builtin flag + inline bool getBuiltin() { return mBuiltin; }; + + /** Property storage setter + * @param propStorage The new storage for properties + * @warning This should not be used when the property group holds some data + */ + virtual void setPropertyStorage(const DataStoragePtr& newStorage); + + + /// Name getter. Returns the name of property this group manages + const std::string& getName() { return mName; }; + + /** Determines whether an object with id obj_id stores or inherits property of this type + * @param obj_id The object id of the object + * @return true if the object has the given property + */ + bool has(int obj_id) const { + // Get the effective id for the object + int eoid = _getEffectiveObject(obj_id); + + if (eoid == 0) + return false; + + // This code could be removed, if we knew the nonzero eoid will always mean prop exists + return owns(eoid); + } + + /** Determines whether an object with id obj_id stores property of this type + * @param obj_id The object id of the object + * @return true if the object has the given property + * @note Will return false if the object only inherits the property, but does not own it (use has for that) + */ + bool owns(int obj_id) const { + return mPropertyStorage->has(obj_id); + } + + /** Loads properties from a file group + * @param db The database to load from */ + void load(const FileGroupPtr& db); + + /** Saves properties to a file group + * @param db The database to save to + * @param objMask The BitArray of objects to be saved + */ + void save(const FileGroupPtr& db, const BitArray& objMask); + + /** Clears the whole property group. + * Clears out all the properties, and broadcasts PROP_GROUP_CLEARED + */ + void clear(); + + /** Creates a property for given object ID, using the default values for the property fields + * @param obj_id The id of the object to create the property for + * @return true if the property was created, false if the object ID already holds the given property + * @note Broadcasts a PROP_ADDED on success + * @note Notifies inheritor about the change */ + bool createProperty(int obj_id); + + /** Creates a property for given object ID + * @param obj_id The id of the object to create the property for + * @return true if the property was removed, false if the object ID didn't hold the property + * @note Broadcasts a PROP_REMOVED on success + * @note Notifies inheritor about the change */ + bool removeProperty(int obj_id); + + /** Creates a new property, or replaces all the values on the current, by cloning a given property on object ID + * @param obj_id Target object ID (id to create) + * @param src_id The id of the object to clone property from */ + bool cloneProperty(int obj_id, int src_id); + + // ----------------- Data manipulation related methods -------------------- + /** Direct data setter. + * @param id object id + * @param field the field name + * @param value New value for the field + * @return true if the change was sucessful + * @see owns + * @note Will log error when object id does not own the property to be changed */ + bool set(int id, const std::string& field, const DVariant& value); + + /** Direct data getter + * @param id object id + * @param field the field name + * @param target The target value holder to be filled from the field indicated, or untouched if field invalid + * @see owns + * @return false if field name was invalid, true if value was set in target + */ + bool get(int id, const std::string& field, DVariant& target); + + /** Notification that an object was destroyed. @see PropertyService::objectDestroyed */ + void objectDestroyed(int id); + + /** @return A reference to const DataFieldDesc iterator, usable for data description, automatic gui composition, etc. + * Internally, this is just a wrapper around getFieldDescIterator call to PropertyStorage. + * @todo It should be decided if it is guaranteed to have this iterator in a storable quality - if it could be used to load/save data. + */ + DataFieldDescIteratorPtr getFieldDescIterator(void); + + protected: + /** Does the internal handling related to the creation of a property for object + * @param objID The object id to which a property was added + */ + void _addProperty(int objID); + + /// The listener to the inheritance messages + void onInheritChange(const InheritValueChangeMsg& msg); + + /** Returns an ID of the object which is responsible for the current property values + * As the properties can be inherited using both archetype links and MetaProps, + * there must be a way to know what object currently represents the property values + * @param obj_id The object id to query + * @return object ID of the effective property holder, or zero (0) if not found */ + int _getEffectiveObject(int obj_id) const { + return mInheritor->getEffectiveID(obj_id); + } + + /// The name of the property + std::string mName; + + /// The name of the chunk data (reduced of the P$) + std::string mChunkName; + + /// chunk version - major + uint mVerMaj; + /// chunk version - minor + uint mVerMin; + + /// Inheritor used to determine property inheritance + InheritorPtr mInheritor; + + /// Inheritor value changes listener + Inheritor::ListenerID mInheritorListenerID; + + /// Property storage used to store data for the property + DataStoragePtr mPropertyStorage; + + /// Owner service + PropertyService* mOwner; + + /// Builtin flag - property groups created in code as builtin have true here + bool mBuiltin; + }; + + /// Shared pointer to property group + // typedef shared_ptr<PropertyGroup> PropertyGroupPtr; + +} + +#endif Property changes on: trunk/src/services/property/PropertyGroup.h ___________________________________________________________________ Added: svn:eol-style + LF Modified: trunk/src/services/property/PropertyService.cpp =================================================================== --- trunk/src/services/property/PropertyService.cpp 2008-10-15 19:56:38 UTC (rev 873) +++ trunk/src/services/property/PropertyService.cpp 2008-10-15 19:59:30 UTC (rev 874) @@ -81,6 +81,15 @@ mPropertyGroupMap.clear(); } + // -------------------------------------------------------------------------- + void PropertyService::shutdown() { + PropertyGroupMap::iterator it = mPropertyGroupMap.begin(); + + for( ; it != mPropertyGroupMap.end(); ++it) { + it->second->shutdown(); + } + } + // -------------------------------------------------------------------------- bool PropertyService::init() { return true; Property changes on: trunk/src/services/property/PropertyService.cpp ___________________________________________________________________ Added: svn:eol-style + LF Modified: trunk/src/services/property/PropertyService.h =================================================================== --- trunk/src/services/property/PropertyService.h 2008-10-15 19:56:38 UTC (rev 873) +++ trunk/src/services/property/PropertyService.h 2008-10-15 19:59:30 UTC (rev 874) @@ -126,6 +126,9 @@ /// service initialization void bootstrapFinished(); + /// service deinitialization + void shutdown(); + /// maps the properties by their names PropertyGroupMap mPropertyGroupMap; Property changes on: trunk/src/services/property/PropertyService.h ___________________________________________________________________ Added: svn:eol-style + LF Modified: trunk/src/services/render/RenderService.cpp =================================================================== --- trunk/src/services/render/RenderService.cpp 2008-10-15 19:56:38 UTC (rev 873) +++ trunk/src/services/render/RenderService.cpp 2008-10-15 19:59:30 UTC (rev 874) @@ -94,12 +94,12 @@ // -------------------------------------------------------------------------- RenderService::~RenderService() { + } + + // -------------------------------------------------------------------------- + void RenderService::shutdown() { LOG_INFO("RenderService::~RenderService()"); - // Good thing about services. Render service will be released as the last - // one thanks to the shared_ptr. This means using the scene manager/whatever - // is safe outside this class as long as it is done in a service which has - // a member pointer to render service if (mPropPosition != NULL) mPropPosition->unregisterListener(mPropPositionListenerID); Property changes on: trunk/src/services/render/RenderService.cpp ___________________________________________________________________ Added: svn:eol-style + LF Modified: trunk/src/services/render/RenderService.h =================================================================== --- trunk/src/services/render/RenderService.h 2008-10-15 19:56:38 UTC (rev 873) +++ trunk/src/services/render/RenderService.h 2008-10-15 19:59:30 UTC (rev 874) @@ -1,334 +1,335 @@ -/****************************************************************************** - * - * This file is part of openDarkEngine project - * Copyright (C) 2005-2006 openDarkEngine team - * - * This program is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation; either version 2 of the License, or - * (at your option) any later version. - * - * This program 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 General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA - * - * - * $Id$ - * - *****************************************************************************/ - - -#ifndef __RENDERSERVICE_H -#define __RENDERSERVICE_H - -#include "config.h" - -#include "ServiceCommon.h" -#include "OpdeServiceManager.h" -#include "OpdeService.h" -#include "PropertyService.h" -#include "SharedPtr.h" -#include "ManualBinFileLoader.h" -#include "DarkSceneManager.h" -#include "MessageSource.h" -#include "LoopService.h" -#include "ObjectService.h" -#include "EntityMaterialInstance.h" - -#include <OgreEntity.h> -#include <OgreLight.h> -#include <OgreSceneNode.h> - -namespace Opde { - /// Render System message type - typedef enum { - /// Render window changed the size - RENDER_WINDOW_SIZE_CHANGE = 1 - } RenderMessageType; - - - /// window size message details - typedef struct RenderWindowSize { - /// The message type - RenderMessageType msg_type; - /// New width of the window (pixels) - unsigned int width; - /// New height of the window (pixels) - unsigned int height; - /// The new window is fullscreen (or windowed) - bool fullscreen; - // TODO: Pixelformat - }; - - /// Render service message (Used to signalize a change in the renderer setup) - typedef union { - RenderMessageType msg_type; - - RenderWindowSize size; - } RenderServiceMsg; - - /** @brief Render service - service managing in-game object rendering - * Some preliminary notes: VHot will probably be converted to TagPoints somehow - * The 0,0,0 bug will reveal itself here too, maybe. This is caused by default object coordinates being 0,0,0 and we have to wait for Position prop message to come in order to move the node - */ - class OPDELIB_EXPORT RenderService : public Service, public MessageSource< RenderServiceMsg >, public LoopClient { - public: - RenderService(ServiceManager *manager, const std::string& name); - virtual ~RenderService(); - - Ogre::Root* getOgreRoot(); - Ogre::SceneManager* getSceneManager(); - Ogre::RenderWindow* getRenderWindow(); - - /** - Getter for the default viewport. Most of the time sufficient (for game) - @returns The default viewport (Viewport of the default camera ) - */ - Ogre::Viewport* getDefaultViewport(); - - /** - Getter for the default camera. Default camera is a camera named "DefaultCamera" that is autocreated and added to the autocreated window - @returns The default camera - */ - Ogre::Camera* getDefaultCamera(); - - // TODO: Here, we need some code to gather possible resolutions to switch to (to fill the GUI with options). - /// Screen size setter. Please use this instead of the Ogre::RenderWindow methods, as it broadcasts a message about the change - void setScreenSize(bool fullScreen, unsigned int width, unsigned int height); - - - /** Simplified version of the SpecialCaseRenderQueue switching. Enables/Disables world display based on SCRQ_INCLUDE/SCRQM_EXCLUDE - @param visible If set to true, normal rendering takes place, false causes only overlay render queue to be processed - */ - void setWorldVisible(bool visible); - - /** Getter for SceneNodes of objects. Those only exist for concrete objects. - @returns The scene node of the object id (only for concrete objects) - @throws BasicException if the method is used on archetypes or on invalid object id (unused id) - */ - Ogre::SceneNode* getSceneNode(int objID); - - /** Attaches the default camera to a defined object - * @todo Framework to work with cameras, rendertargets, etc. Should a service be made for this, move this inside such - * @todo This one needs special handling if placed on Player object (leaning scene node(s)) - could be solved by placing a child SN "anywhen" attached */ - void attachCameraToObject(int objID); - - /** Camera is detached from the specified object */ - void detachCamera(); - protected: - virtual bool init(); - virtual void bootstrapFinished(); - - virtual void loopStep(float deltaTime); - - /** Model name property callback - * @todo Default to the same model as dark (see if T1/T2/SS2 use the same model for concretes not having this property specified) - */ - void onPropModelNameMsg(const PropertyChangeMsg& msg); - - /// Property Light change callback - void onPropLightMsg(const PropertyChangeMsg& msg); - - /// Property Spotlight change callback - void onPropSpotlightMsg(const PropertyChangeMsg& msg); - - /// Position property change callback - void onPropPositionMsg(const PropertyChangeMsg& msg); - - /// Scale property change callback - void onPropScaleMsg(const PropertyChangeMsg& msg); - - /// Render type property change callback - void onPropRenderTypeMsg(const PropertyChangeMsg& msg); - - /// Render alpha property change callback - void onPropRenderAlphaMsg(const PropertyChangeMsg& msg); - - /// Object creation/destruction callback - void onObjectMsg(const ObjectServiceMsg& msg); - - /// Prepares mesh named "name" for usage on entity (if it was not prepared already) - void prepareMesh(const Ogre::String& name); - - /// Initializes the object's model - void createObjectModel(int id); - - /** Removes geometry from the given object (meaning it will not have a visible representation). - * This method is used to do a cleanup on object's destroy event. - */ - void removeObjectModel(int id); - - /** Call this to set a new model for the object. Preserves all the object's rendering settings - * @note setting empty model name means the model won't be rendered. This is used for FX_Particle for example - */ - void setObjectModel(int id, const std::string& name); - - /// Prepares an entity to be used by renderer (manual bones, etc.) - void prepareEntity(Ogre::Entity* e); - - /// Clears all the rendering data - void clear(); - - /// prepares some hardcoded media (included in the executable) - void prepareHardcodedMedia(); - - /// Cretes a ramp mesh, that is used as a default mesh when not specified otherwise - void createRampMesh(); - - /// A package of a light and it's scene node - struct LightInfo { - Ogre::Light* light; - Ogre::SceneNode* node; - }; - - /// A package of an entity and a EntityMaterialInstance - struct EntityInfo { - unsigned int renderType; - bool hasRefs; - - /// Used by FX_Particle and such. Hides without interfering with the previous two - bool skip; - - Ogre::Entity* entity; - Ogre::SceneNode* node; - EntityMaterialInstance* emi; - }; - - /// Creates a new light with next to no initialization - LightInfo& createLight(int objID); - - /// Updates a light based on the data of property LIGHT - void updateLight(LightInfo& li, int objectID); - - /// removes a light - void removeLight(int id); - - /// Updates a light to be a spotlight, updates it's params - void updateSpotLight(LightInfo& li, int objectID); - - /// removes spotlight quality from a light (leaves the light as a point light) - void removeSpotLight(int id); - - /// set's the node's visibility based on the rendertype property value - void setNodeRenderType(Ogre::SceneNode* node, const EntityInfo& ei); - - /// Map of objectID -> Entity - typedef std::map<int, EntityInfo> ObjectEntityMap; - - ObjectEntityMap mEntityMap; - - // Listener structs for property messages - - // ModelName listener related - PropertyGroup::ListenerID mPropModelNameListenerID; - PropertyGroup* mPropModelName; - - // Light Property related - PropertyGroup::ListenerID mPropLightListenerID; - PropertyGroup* mPropLight; - - // SpotLight Property related - PropertyGroup::ListenerID mPropSpotlightListenerID; - PropertyGroup* mPropSpotlight; - - // "Position" Property related - PropertyGroup::ListenerID mPropPositionListenerID; - PropertyGroup* mPropPosition; - - // "ModelScale" Property related - PropertyGroup::ListenerID mPropScaleListenerID; - PropertyGroup* mPropScale; - - // "RenderType" Property related - PropertyGroup::ListenerID mPropRenderTypeListenerID; - PropertyGroup* mPropRenderType; - - // "RenderAlpha" Property related - PropertyGroup::ListenerID mPropRenderAlphaListenerID; - PropertyGroup* mPropRenderAlpha; - - - - /// Shared pointer to the property service - PropertyServicePtr mPropertyService; - - // --- RENDERING INSTANCES --- - /// Ogre root handle - Ogre::Root* mRoot; - - /// Scene manager handle - Ogre::SceneManager* mSceneMgr; - - /// Render window handle - Ogre::RenderWindow* mRenderWindow; - - /// Factory instance for the DarkSceneManager - Ogre::DarkSceneManagerFactory* mDarkSMFactory; - - /// Default camera. Used solely for game mode - Ogre::Camera* mDefaultCamera; - - /// Manual loader for bin meshes - Ogre::ManualBinFileLoader* mManualBinFileLoader; - - /// Pointer for loop service - LoopServicePtr mLoopService; - - /// Shared ptr to object service (for scene nodes) - ObjectServicePtr mObjectService; - ObjectService::ListenerID mObjSystemListenerID; - - - typedef std::map<int, LightInfo> LightInfoMap; - - LightInfoMap mLightInfoMap; - - // Database listener handle related (For render params chunk) - // DatabaseServicePtr mDatabaseService; - // BinaryServicePtr mBinaryService; - - - /** Object id to scene node (only concrete objects) - * This map stores the base scenenode for the object. Object have this sceneNode structure: - * - * Base SceneNode: - * @li Child 1 - the Rendered Objects scene node - * @li Child 2 - the Light object scene node - */ - typedef std::map<int, Ogre::SceneNode*> ObjectToNode; - - /// Mapping of object id to scenenode - ObjectToNode mObjectToNode; - - /// editor mode display - bool mEditorMode; - }; - - /// Shared pointer to Link service - typedef shared_ptr<RenderService> RenderServicePtr; - - /// Factory for the LinkService objects - class OPDELIB_EXPORT RenderServiceFactory : public ServiceFactory { - public: - RenderServiceFactory(); - ~RenderServiceFactory() {}; - - /** Creates a LinkService instance */ - Service* createInstance(ServiceManager* manager); - - virtual const std::string& getName(); - - virtual const unsigned int getMask() { return SERVICE_PROPERTY_LISTENER | SERVICE_RENDERER; }; - - private: - static std::string mName; - }; -} - - -#endif +/****************************************************************************** + * + * This file is part of openDarkEngine project + * Copyright (C) 2005-2006 openDarkEngine team + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * This program 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 General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + * + * + * $Id$ + * + *****************************************************************************/ + + +#ifndef __RENDERSERVICE_H +#define __RENDERSERVICE_H + +#include "config.h" + +#include "ServiceCommon.h" +#include "OpdeServiceManager.h" +#include "OpdeService.h" +#include "PropertyService.h" +#include "SharedPtr.h" +#include "ManualBinFileLoader.h" +#include "DarkSceneManager.h" +#include "MessageSource.h" +#include "LoopService.h" +#include "ObjectService.h" +#include "EntityMaterialInstance.h" + +#include <OgreEntity.h> +#include <OgreLight.h> +#include <OgreSceneNode.h> + +namespace Opde { + /// Render System message type + typedef enum { + /// Render window changed the size + RENDER_WINDOW_SIZE_CHANGE = 1 + } RenderMessageType; + + + /// window size message details + typedef struct RenderWindowSize { + /// The message type + RenderMessageType msg_type; + /// New width of the window (pixels) + unsigned int width; + /// New height of the window (pixels) + unsigned int height; + /// The new window is fullscreen (or windowed) + bool fullscreen; + // TODO: Pixelformat + }; + + /// Render service message (Used to signalize a change in the renderer setup) + typedef union { + RenderMessageType msg_type; + + RenderWindowSize size; + } RenderServiceMsg; + + /** @brief Render service - service managing in-game object rendering + * Some preliminary notes: VHot will probably be converted to TagPoints somehow + * The 0,0,0 bug will reveal itself here too, maybe. This is caused by default object coordinates being 0,0,0 and we have to wait for Position prop message to come in order to move the node + */ + class OPDELIB_EXPORT RenderService : public Service, public MessageSource< RenderServiceMsg >, public LoopClient { + public: + RenderService(ServiceManager *manager, const std::string& name); + virtual ~RenderService(); + + Ogre::Root* getOgreRoot(); + Ogre::SceneManager* getSceneManager(); + Ogre::RenderWindow* getRenderWindow(); + + /** + Getter for the default viewport. Most of the time sufficient (for game) + @returns The default viewport (Viewport of the default camera ) + */ + Ogre::Viewport* getDefaultViewport(); + + /** + Getter for the default camera. Default camera is a camera named "DefaultCamera" that is autocreated and added to the autocreated window + @returns The default camera + */ + Ogre::Camera* getDefaultCamera(); + + // TODO: Here, we need some code to gather possible resolutions to switch to (to fill the GUI with options). + /// Screen size setter. Please use this instead of the Ogre::RenderWindow methods, as it broadcasts a message about the change + void setScreenSize(bool fullScreen, unsigned int width, unsigned int height); + + + /** Simplified version of the SpecialCaseRenderQueue switching. Enables/Disables world display based on SCRQ_INCLUDE/SCRQM_EXCLUDE + @param visible If set to true, normal rendering takes place, false causes only overlay render queue to be processed + */ + void setWorldVisible(bool visible); + + /** Getter for SceneNodes of objects. Those only exist for concrete objects. + @returns The scene node of the object id (only for concrete objects) + @throws BasicException if the method is used on archetypes or on invalid object id (unused id) + */ + Ogre::SceneNode* getSceneNode(int objID); + + /** Attaches the default camera to a defined object + * @todo Framework to work with cameras, rendertargets, etc. Should a service be made for this, move this inside such + * @todo This one needs special handling if placed on Player object (leaning scene node(s)) - could be solved by placing a child SN "anywhen" attached */ + void attachCameraToObject(int objID); + + /** Camera is detached from the specified object */ + void detachCamera(); + protected: + virtual bool init(); + virtual void bootstrapFinished(); + virtual void shutdown(); + + virtual void loopStep(float deltaTime); + + /** Model name property callback + * @todo Default to the same model as dark (see if T1/T2/SS2 use the same model for concretes not having this property specified) + */ + void onPropModelNameMsg(const PropertyChangeMsg& msg); + + /// Property Light change callback + void onPropLightMsg(const PropertyChangeMsg& msg); + + /// Property Spotlight change callback + void onPropSpotlightMsg(const PropertyChangeMsg& msg); + + /// Position property change callback + void onPropPositionMsg(const PropertyChangeMsg& msg); + + /// Scale property change callback + void onPropScaleMsg(const PropertyChangeMsg& msg); + + /// Render type property change callback + void onPropRenderTypeMsg(const PropertyChangeMsg& msg); + + /// Render alpha property change callback + void onPropRenderAlphaMsg(const PropertyChangeMsg& msg); + + /// Object creation/destruction callback + void onObjectMsg(const ObjectServiceMsg& msg); + + /// Prepares mesh named "name" for usage on entity (if it was not prepared already) + void prepareMesh(const Ogre::String& name); + + /// Initializes the object's model + void createObjectModel(int id); + + /** Removes geometry from the given object (meaning it will not have a visible representation). + * This method is used to do a cleanup on object's destroy event. + */ + void removeObjectModel(int id); + + /** Call this to set a new model for the object. Preserves all the object's rendering settings + * @note setting empty model name means the model won't be rendered. This is used for FX_Particle for example + */ + void setObjectModel(int id, const std::string& name); + + /// Prepares an entity to be used by renderer (manual bones, etc.) + void prepareEntity(Ogre::Entity* e); + + /// Clears all the rendering data + void clear(); + + /// prepares some hardcoded media (included in the executable) + void prepareHardcodedMedia(); + + /// Cretes a ramp mesh, that is used as a default mesh when not specified otherwise + void createRampMesh(); + + /// A package of a light and it's scene node + struct LightInfo { + Ogre::Light* light; + Ogre::SceneNode* node; + }; + + /// A package of an entity and a EntityMaterialInstance + struct EntityInfo { + unsigned int renderType; + bool hasRefs; + + /// Used by FX_Particle and such. Hides without interfering with the previous two + bool skip; + + Ogre::Entity* entity; + Ogre::SceneNode* node; + EntityMaterialInstance* emi; + }; + + /// Creates a new light with next to no initialization + LightInfo& createLight(int objID); + + /// Updates a light based on the data of property LIGHT + void updateLight(LightInfo& li, int objectID); + + /// removes a light + void removeLight(int id); + + /// Updates a light to be a spotlight, updates it's params + void updateSpotLight(LightInfo& li, int objectID); + + /// removes spotlight quality from a light (leaves the light as a point light) + void removeSpotLight(int id); + + /// set's the node's visibility based on the rendertype property value + void setNodeRenderType(Ogre::SceneNode* node, const EntityInfo& ei); + + /// Map of objectID -> Entity + typedef std::map<int, EntityInfo> ObjectEntityMap; + + ObjectEntityMap mEntityMap; + + // Listener structs for property messages + + // ModelName listener related + PropertyGroup::ListenerID mPropModelNameListenerID; + PropertyGroup* mPropModelName; + + // Light Property related + PropertyGroup::ListenerID mPropLightListenerID; + PropertyGroup* mPropLight; + + // SpotLight Property related + PropertyGroup::ListenerID mPropSpotlightListenerID; + PropertyGroup* mPropSpotlight; + + // "Position" Property related + PropertyGroup::ListenerID mPropPositionListenerID; + PropertyGroup* mPropPosition; + + // "ModelScale" Property related + PropertyGroup::ListenerID mPropScaleListenerID; + PropertyGroup* mPropScale; + + // "RenderType" Property related + PropertyGroup::ListenerID mPropRenderTypeListenerID; + PropertyGroup* mPropRenderType; + + // "RenderAlpha" Property related + PropertyGroup::ListenerID mPropRenderAlphaListenerID; + PropertyGroup* mPropRenderAlpha; + + + + /// Shared pointer to the property service + PropertyServicePtr mPropertyService; + + // --- RENDERING INSTANCES --- + /// Ogre root handle + Ogre::Root* mRoot; + + /// Scene manager handle + Ogre::SceneManager* mSceneMgr; + + /// Render window handle + Ogre::RenderWindow* mRenderWindow; + + /// Factory instance for the DarkSceneManager + Ogre::DarkSceneManagerFactory* mDarkSMFactory; + + /// Default camera. Used solely for game mode + Ogre::Camera* mDefaultCamera; + + /// Manual loader for bin meshes + Ogre::ManualBinFileLoader* mManualBinFileLoader; + + /// Pointer for loop service + LoopServicePtr mLoopService; + + /// Shared ptr to object service (for scene nodes) + ObjectServicePtr mObjectService; + ObjectService::ListenerID mObjSystemListenerID; + + + typedef std::map<int, LightInfo> LightInfoMap; + + LightInfoMap mLightInfoMap; + + // Database listener handle related (For render params chunk) + // DatabaseServicePtr mDatabaseService; + // BinaryServicePtr mBinaryService; + + + /** Object id to scene node (only concrete objects) + * This map stores the base scenenode for the object. Object have this sceneNode structure: + * + * Base SceneNode: + * @li Child 1 - the Rendered Objects scene node + * @li Child 2 - the Light object scene node + */ + typedef std::map<int, Ogre::SceneNode*> ObjectToNode; + + /// Mapping of object id to scenenode + ObjectToNode mObjectToNode; + + /// editor mode display + bool mEditorMode; + }; + + /// Shared pointer to Link service + typedef shared_ptr<RenderService> RenderServicePtr; + + /// Factory for the LinkService objects + class OPDELIB_EXPORT RenderServiceFactory : public ServiceFactory { + public: + RenderServiceFactory(); + ~RenderServiceFactory() {}; + + /** Creates a LinkService instance */ + Service* createInstance(ServiceManager* manager); + + virtual const std::string& getName(); + + virtual const unsigned int getMask() { return SERVICE_PROPERTY_LISTENER | SERVICE_RENDERER; }; + + private: + static std::string mName; + }; +} + + +#endif Property changes on: trunk/src/services/render/RenderService.h ___________________________________________________________________ Added: svn:eol-style + LF This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <pa...@us...> - 2008-10-17 22:45:46
|
Revision: 876 http://opde.svn.sourceforge.net/opde/?rev=876&view=rev Author: patryn Date: 2008-10-17 22:45:43 +0000 (Fri, 17 Oct 2008) Log Message: ----------- Added support for release code names, with a dummy code name for now. Modified Paths: -------------- trunk/CMakeLists.txt trunk/installer/opde-win.in Modified: trunk/CMakeLists.txt =================================================================== --- trunk/CMakeLists.txt 2008-10-17 09:27:09 UTC (rev 875) +++ trunk/CMakeLists.txt 2008-10-17 22:45:43 UTC (rev 876) @@ -24,6 +24,7 @@ SET(OPDE_VER_MAJOR "0") SET(OPDE_VER_MINOR "2") SET(OPDE_VER_PATCH "1") +SET(REL_CODE_NAME "Segmentation Fault") # Build type selection. Use ccmake for selection of this (or the commandline switches) # Default build type Modified: trunk/installer/opde-win.in =================================================================== --- trunk/installer/opde-win.in 2008-10-17 09:27:09 UTC (rev 875) +++ trunk/installer/opde-win.in 2008-10-17 22:45:43 UTC (rev 876) @@ -32,7 +32,7 @@ AddBrandingImage left 129 Name "openDarkEngine" -Caption "openDarkEngine" +Caption "openDarkEngine @OPDE_VER_MAJOR@.@OPDE_VER_MINOR@.@OPDE_VER_PATCH@: @REL_CODE_NAME@" BrandingText "openDarkEngine Team" LicenseData @CMAKE_CURRENT_SOURCE_DIR@\copying LicenseForceSelection checkbox "I accept the terms in the license agreement" @@ -56,11 +56,11 @@ VIProductVersion "@OPDE_VER_MAJOR@.@OPDE_VER_MINOR@.@OPDE_VER_PATCH@.0" VIAddVersionKey /LANG=${LANG_ENGLISH} "ProductName" "openDarkEngine" -VIAddVersionKey /LANG=${LANG_ENGLISH} "Comments" "El Motor Oscuro" +VIAddVersionKey /LANG=${LANG_ENGLISH} "Comments" "openDarkEngine" VIAddVersionKey /LANG=${LANG_ENGLISH} "CompanyName" "openDarkEngine Team" VIAddVersionKey /LANG=${LANG_ENGLISH} "LegalTrademarks" "GPL" VIAddVersionKey /LANG=${LANG_ENGLISH} "LegalCopyright" "\xA9 openDarkEngine Team" -VIAddVersionKey /LANG=${LANG_ENGLISH} "FileDescription" "openDarkEngine" +VIAddVersionKey /LANG=${LANG_ENGLISH} "FileDescription" "openDarkEngine @OPDE_VER_MAJOR@.@OPDE_VER_MINOR@.@OPDE_VER_PATCH@: @REL_CODE_NAME@" VIAddVersionKey /LANG=${LANG_ENGLISH} "FileVersion" "@OPDE_VER_MAJOR@.@OPDE_VER_MINOR@.@OPDE_VER_PATCH@" ;-------------------------------- This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <vo...@us...> - 2008-10-26 16:21:43
|
Revision: 931 http://opde.svn.sourceforge.net/opde/?rev=931&view=rev Author: volca Date: 2008-10-26 16:21:38 +0000 (Sun, 26 Oct 2008) Log Message: ----------- * Leak fixes * couple of comments rewritten, improved Modified Paths: -------------- trunk/scripts/shock2/ss2-props.pldef trunk/src/base/loaders/BinFormat.h trunk/src/main/GamePlayState.cpp trunk/src/services/render/RenderService.cpp trunk/src/services/render/RenderService.h trunk/src/services/worldrep/WRCell.cpp trunk/src/services/worldrep/WorldRepService.cpp Modified: trunk/scripts/shock2/ss2-props.pldef =================================================================== --- trunk/scripts/shock2/ss2-props.pldef 2008-10-26 15:28:35 UTC (rev 930) +++ trunk/scripts/shock2/ss2-props.pldef 2008-10-26 16:21:38 UTC (rev 931) @@ -1,4 +1,4 @@ -// *****18;5~************************************************************************* +// ****************************************************************************** // * // * This file is part of openDarkEngine project // * Copyright (C) 2005-2006 openDarkEngine team Modified: trunk/src/base/loaders/BinFormat.h =================================================================== --- trunk/src/base/loaders/BinFormat.h 2008-10-26 15:28:35 UTC (rev 930) +++ trunk/src/base/loaders/BinFormat.h 2008-10-26 16:21:38 UTC (rev 931) @@ -319,7 +319,7 @@ char num_joints; // Number of joints? int16_t num_polys; // Polygon count (Count for U4 * 16) int16_t num_vertices; // Total Vertex count - uint32_t num_stretchy; // Stretchy Vertexes + x_count == p_count? + uint32_t num_stretchy; // Stretchy Vertexes - blended between two joints uint32_t offset_joint_remap; // Joint map?, num_joints elements uint32_t offset_mappers; // joint mapping definitions uint32_t offset_mats; // looks likes material offset, see object header @@ -328,7 +328,7 @@ uint32_t offset_norm; // (U6-U5) = Normals uint32_t offset_vert; // (U7-U6) = Vertexes (munged) - num_vertices uint32_t offset_uvmap; // (U8-U7) = UV maps. Z is junk (count - the same as vertex count) - uint32_t offset_blends; // Floats (num_stretchy). Blending factors. All in the range 0-1 + uint32_t offset_blends; // Floats (num_stretchy). Blending factors. All in the range 0-1. Probably blend factors between two joints. Count - the same as num_stretchy uint32_t offset_U9; // Zero. All the time it seems } AIMeshHeader; Modified: trunk/src/main/GamePlayState.cpp =================================================================== --- trunk/src/main/GamePlayState.cpp 2008-10-26 15:28:35 UTC (rev 930) +++ trunk/src/main/GamePlayState.cpp 2008-10-26 16:21:38 UTC (rev 931) @@ -184,9 +184,6 @@ // mConsole->setActive(false); - // clear the scene - mSceneMgr->clearScene(); - mPortalOverlay->hide(); mDebugOverlay->hide(); mConsole->setActive(false); Modified: trunk/src/services/render/RenderService.cpp =================================================================== --- trunk/src/services/render/RenderService.cpp 2008-10-26 15:28:35 UTC (rev 930) +++ trunk/src/services/render/RenderService.cpp 2008-10-26 16:21:38 UTC (rev 931) @@ -94,12 +94,15 @@ // -------------------------------------------------------------------------- RenderService::~RenderService() { + LOG_INFO("RenderService::~RenderService()"); } // -------------------------------------------------------------------------- void RenderService::shutdown() { - LOG_INFO("RenderService::~RenderService()"); + LOG_INFO("RenderService::shutdown()"); + clear(); + if (mPropPosition != NULL) mPropPosition->unregisterListener(mPropPositionListenerID); @@ -816,28 +819,31 @@ if (it != mEntityMap.end()) { LOG_VERBOSE("RenderService: Destroying the entity for %d", id); - SceneNode* node = it->second.node; - // SceneNode* node = getSceneNode(id); - - assert(node != NULL); + destroyEntityInfo(it->second); - node->detachObject(it->second.entity); - - // destroy the emi - delete it->second.emi; - - - // destroy the detached entity - mSceneMgr->destroyEntity(it->second.entity); - - // destroy the scenenode of the entity - mSceneMgr->destroySceneNode(node->getName()); - // erase the record itself mEntityMap.erase(it); } } + + // -------------------------------------------------------------------------- + void RenderService::destroyEntityInfo(EntityInfo& ei) { + SceneNode* node = ei.node; + + assert(node != NULL); + + node->detachObject(ei.entity); + // destroy the emi + delete ei.emi; + + // destroy the detached entity + mSceneMgr->destroyEntity(ei.entity); + + // destroy the scenenode of the entity + mSceneMgr->destroySceneNode(node->getName()); + } + // -------------------------------------------------------------------------- void RenderService::setObjectModel(int id, const std::string& name) { ObjectEntityMap::iterator it = mEntityMap.find(id); @@ -911,6 +917,14 @@ // -------------------------------------------------------------------------- void RenderService::clear() { + // free the emi's + ObjectEntityMap::iterator it = mEntityMap.begin(); + + for (;it != mEntityMap.end(); ++it) { + destroyEntityInfo(it->second); + } + + // then clear the map mEntityMap.clear(); } @@ -1034,6 +1048,7 @@ } } + // -------------------------------------------------------------------------- void RenderService::prepareHardcodedMedia() { // 1. The default texture - Jorge (recreated to be nearly the same visually) TexturePtr jorgeTex = TextureManager::getSingleton().getByName("jorge.png"); @@ -1146,6 +1161,26 @@ prepareMesh(DEFAULT_RAMP_OBJECT_NAME); } + + // -------------------------------------------------------------------------- + void RenderService::createProperties() { + // TODO: Fill this. We want all the properties used in services hardcoded in them + // Ok, what do we have here? + // Model Name. Simple fixed-length string prop + // Fixed on version 2.16 + + + // RenderType property - single int property + + // RenderAlpha property - single float prop + + // HasRefs - single bool prop + + // Light - a more complex property - this should be moved to LightService + + // Spotlight - as above + + } //-------------------------- Factory implementation Modified: trunk/src/services/render/RenderService.h =================================================================== --- trunk/src/services/render/RenderService.h 2008-10-26 15:28:35 UTC (rev 930) +++ trunk/src/services/render/RenderService.h 2008-10-26 16:21:38 UTC (rev 931) @@ -181,6 +181,9 @@ /// Cretes a ramp mesh, that is used as a default mesh when not specified otherwise void createRampMesh(); + /// prepares the object service structures used by renderer service + void createProperties(); + /// A package of a light and it's scene node struct LightInfo { Ogre::Light* light; @@ -200,6 +203,12 @@ EntityMaterialInstance* emi; }; + + /** Destroys all the allocated resources in the given EntityInfo struct + */ + void destroyEntityInfo(EntityInfo& ei); + + /// Creates a new light with next to no initialization LightInfo& createLight(int objID); Modified: trunk/src/services/worldrep/WRCell.cpp =================================================================== --- trunk/src/services/worldrep/WRCell.cpp 2008-10-26 15:28:35 UTC (rev 930) +++ trunk/src/services/worldrep/WRCell.cpp 2008-10-26 16:21:38 UTC (rev 931) @@ -40,7 +40,24 @@ namespace Opde { //------------------------------------------------------------------------------------ - WRCell::WRCell(WorldRepService* owner, Ogre::DarkGeometry* targetGeom) : cellNum(-1), atlased(false), loaded(false), portalsDone(false), mOwner(owner), mLevelGeometry(targetGeom) { + WRCell::WRCell(WorldRepService* owner, Ogre::DarkGeometry* targetGeom) : + cellNum(-1), + atlased(false), + loaded(false), + portalsDone(false), + mOwner(owner), + mLevelGeometry(targetGeom), + vertices(NULL), + face_maps(NULL), + face_infos(NULL), + poly_indices(NULL), + planes(NULL), + anim_map(NULL), + lm_infos(NULL), + lmaps(NULL), + lmcounts(NULL), + obj_indices(NULL), + lightMaps(NULL) { bspNode = NULL; } Modified: trunk/src/services/worldrep/WorldRepService.cpp =================================================================== --- trunk/src/services/worldrep/WorldRepService.cpp 2008-10-26 15:28:35 UTC (rev 930) +++ trunk/src/services/worldrep/WorldRepService.cpp 2008-10-26 16:21:38 UTC (rev 931) @@ -47,7 +47,9 @@ namespace Opde { // Implementation of the WorldRep service - WorldRepService::WorldRepService(ServiceManager *manager, const std::string& name) : Service(manager, name) { + WorldRepService::WorldRepService(ServiceManager *manager, const std::string& name) : + Service(manager, name), + mNumCells(0) { // ResourceGroupManager::getSingleton().setWorldResourceGroupName(TEMPTEXTURE_RESOURCE_GROUP); } @@ -119,6 +121,9 @@ } if (m.change == DBC_LOADING && m.dbtype == DBT_MISSION) { + // If there is some scene already, clear it + clearData(); + // Initialize materials here: loadMaterials(m.db); @@ -165,7 +170,7 @@ void WorldRepService::unload() { mIndexes.setNull(); - mSceneMgr->clearScene(); + mSceneMgr->destroyGeometry("LEVEL_GEOMETRY"); mTxtScaleMap.clear(); @@ -225,9 +230,6 @@ wr_hdr_t header; wrChunk->read(&header, sizeof(wr_hdr_t)); - // If there is some scene already, clear it - // clearData(); - mNumCells = header.num_cells; mAtlas = new LightAtlasList(); @@ -237,7 +239,7 @@ mWorldGeometry = mSceneMgr->createGeometry("LEVEL_GEOMETRY"); // will be deleted on clear_scene mWorldGeometry->setCellCount(header.num_cells); - for (uint32_t i = 0; i<header.num_cells; i++) { + for (uint32_t i = 0; i < mNumCells; i++) { mCells[i] = new WRCell(this, mWorldGeometry); } @@ -362,8 +364,6 @@ // We have done all we could, bringing the level data to the SceneManager. Now delete the used data LOG_DEBUG("Worldrep: Freeing temporary buffers"); - delete[] mCells; - mCells = NULL; delete[] mExtraPlanes; mExtraPlanes = NULL; LOG_DEBUG("Worldrep: Freeing done"); This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <vo...@us...> - 2008-10-30 15:03:31
|
Revision: 947 http://opde.svn.sourceforge.net/opde/?rev=947&view=rev Author: volca Date: 2008-10-30 15:03:25 +0000 (Thu, 30 Oct 2008) Log Message: ----------- Getting the HasRefs property to work Modified Paths: -------------- trunk/scripts/shock2/ss2-props.pldef trunk/scripts/thief1/t1-props.pldef trunk/scripts/thief2/t2-props.pldef trunk/src/base/dyntype/SingleFieldDataStorage.h trunk/src/services/property/PropertyGroup.cpp trunk/src/services/property/PropertyService.cpp trunk/src/services/render/HasRefsProperty.cpp trunk/src/services/render/HasRefsProperty.h trunk/src/services/render/RenderService.cpp trunk/src/services/render/RenderedProperty.cpp trunk/src/services/render/RenderedProperty.h Modified: trunk/scripts/shock2/ss2-props.pldef =================================================================== --- trunk/scripts/shock2/ss2-props.pldef 2008-10-30 10:25:59 UTC (rev 946) +++ trunk/scripts/shock2/ss2-props.pldef 2008-10-30 15:03:25 UTC (rev 947) @@ -560,9 +560,9 @@ p_ver 2.8 } -property HasRefs { - label "HasRefs" -} +//property HasRefs { +// label "HasRefs" +//} property AI_InfMxP { label "AIInformMaxPasses" Modified: trunk/scripts/thief1/t1-props.pldef =================================================================== --- trunk/scripts/thief1/t1-props.pldef 2008-10-30 10:25:59 UTC (rev 946) +++ trunk/scripts/thief1/t1-props.pldef 2008-10-30 15:03:25 UTC (rev 947) @@ -394,9 +394,9 @@ inherit never } -property HasRefs { - label "HasRefs" -} +//property HasRefs { +// label "HasRefs" +//} property AI_InfMxP { label "AIInformMaxPasses" Modified: trunk/scripts/thief2/t2-props.pldef =================================================================== --- trunk/scripts/thief2/t2-props.pldef 2008-10-30 10:25:59 UTC (rev 946) +++ trunk/scripts/thief2/t2-props.pldef 2008-10-30 15:03:25 UTC (rev 947) @@ -499,9 +499,9 @@ p_ver 2.8 } -property HasRefs { - label "HasRefs" -} +//property HasRefs { +// label "HasRefs" +//} property AI_InfMxP { label "AIInformMaxPasses" Modified: trunk/src/base/dyntype/SingleFieldDataStorage.h =================================================================== --- trunk/src/base/dyntype/SingleFieldDataStorage.h 2008-10-30 10:25:59 UTC (rev 946) +++ trunk/src/base/dyntype/SingleFieldDataStorage.h 2008-10-30 15:03:25 UTC (rev 947) @@ -246,6 +246,62 @@ virtual bool fromVariant(const DVariant& v) { return v.toBool(); } + + /** @see DataStorage::writeToFile */ + virtual bool writeToFile(FilePtr& file, int objID, bool sizeStored) { + DataMap::iterator it = mDataMap.find(objID); + + if (it != mDataMap.end()) { + const bool& dta = it->second; + + uint32_t conv = dta ? 1 : 0; + + uint32_t size = sizeof(uint32_t); + + // Write the size if requested + if (sizeStored) + file->writeElem(&size, sizeof(uint32_t)); + + // write the data itself + file->write(&conv, size); + + return true; + } + + return false; + } + + /** @see DataStorage::readFromFile */ + virtual bool readFromFile(FilePtr& file, int objID, bool sizeStored) { + DataMap::iterator it = mDataMap.find(objID); + + if (it == mDataMap.end()) { + uint32_t size = sizeof(uint32_t); + + if (sizeStored) + file->readElem(&size, sizeof(uint32_t)); + + assert(size == sizeof(uint32_t)); + + uint32_t srcb; + + file->read(&srcb, size); + + bool bval = srcb != 0 ? true : false; + + _create(objID, bval); + + return true; + } else { + // skip the data... + uint32_t size; + + file->readElem(&size, sizeof(uint32_t)); + file->seek(size, File::FSEEK_CUR); + } + + return false; + } }; /// Float (4 byte) data storage Modified: trunk/src/services/property/PropertyGroup.cpp =================================================================== --- trunk/src/services/property/PropertyGroup.cpp 2008-10-30 10:25:59 UTC (rev 946) +++ trunk/src/services/property/PropertyGroup.cpp 2008-10-30 15:03:25 UTC (rev 947) @@ -123,14 +123,11 @@ // Can't calculate the count of the properties, as they can have any size // load. Each record has: OID, size (32 bit uint's) int id = 0xDEADBABE; - uint32_t size; while (!fprop->eof()) { // load the id fprop->readElem(&id, sizeof(uint32_t)); - size = fprop->tell(); - // Use property storage to load the property if (mPropertyStorage->readFromFile(fprop, id, true)) { _addProperty(id); Modified: trunk/src/services/property/PropertyService.cpp =================================================================== --- trunk/src/services/property/PropertyService.cpp 2008-10-30 10:25:59 UTC (rev 946) +++ trunk/src/services/property/PropertyService.cpp 2008-10-30 15:03:25 UTC (rev 947) @@ -127,7 +127,7 @@ // -------------------------------------------------------------------------- void PropertyService::registerPropertyGroup(PropertyGroup* group) { - mPropertyGroupMap.insert(make_pair(group->getName(), group)); + mPropertyGroupMap[group->getName()] = group; // so we'll overwrite if it exists already } // -------------------------------------------------------------------------- Modified: trunk/src/services/render/HasRefsProperty.cpp =================================================================== --- trunk/src/services/render/HasRefsProperty.cpp 2008-10-30 10:25:59 UTC (rev 946) +++ trunk/src/services/render/HasRefsProperty.cpp 2008-10-30 15:03:25 UTC (rev 947) @@ -34,6 +34,10 @@ HasRefsProperty::HasRefsProperty(RenderService* rs, PropertyService* owner) : RenderedProperty(rs, owner, "HasRefs", "HasRefs", "always") { mPropertyStorage = new BoolDataStorage(); + + setChunkVersions(2, 4); + + mSceneMgr = rs->getSceneManager(); }; // -------------------------------------------------------------------------- @@ -72,8 +76,17 @@ // -------------------------------------------------------------------------- void HasRefsProperty::setHasRefs(int oid, bool hasRefs) { - EntityInfo* ei = getEntityInfo(oid); - ei->setHasRefs(hasRefs); + // EntityInfo* ei = getEntityInfo(oid); + // ei->setHasRefs(hasRefs); + Ogre::SceneNode* sn = getSceneNode(oid); + + if (hasRefs) { + if (!sn->getParentSceneNode()) + mSceneMgr->getRootSceneNode()->addChild(sn); + } else { + if (sn->getParentSceneNode()) + mSceneMgr->getRootSceneNode()->removeChild(sn); + } }; }; Modified: trunk/src/services/render/HasRefsProperty.h =================================================================== --- trunk/src/services/render/HasRefsProperty.h 2008-10-30 10:25:59 UTC (rev 946) +++ trunk/src/services/render/HasRefsProperty.h 2008-10-30 15:03:25 UTC (rev 947) @@ -57,6 +57,8 @@ /// core setter method. Called from other methods to set the hasrefs value void setHasRefs(int oid, bool hasRefs); + + Ogre::SceneManager* mSceneMgr; }; }; Modified: trunk/src/services/render/RenderService.cpp =================================================================== --- trunk/src/services/render/RenderService.cpp 2008-10-30 10:25:59 UTC (rev 946) +++ trunk/src/services/render/RenderService.cpp 2008-10-30 15:03:25 UTC (rev 947) @@ -283,6 +283,8 @@ // prepare the default models and textures prepareHardcodedMedia(); + mPropertyService = static_pointer_cast<PropertyService>(ServiceManager::getSingleton().getService("PropertyService")); + // create all the properties the render service uses createProperties(); @@ -369,8 +371,6 @@ // contact the config. service, and look for the inheritance link name // TODO: ConfigurationService::getKey("Core","InheritanceLinkName").toString(); - mPropertyService = static_pointer_cast<PropertyService>(ServiceManager::getSingleton().getService("PropertyService")); - // TODO: hardcoded property name, but that's hopefully not a problem after all // --- Model name listener @@ -1217,6 +1217,7 @@ // HasRefs - single bool prop mHasRefsProperty = new HasRefsProperty(this, mPropertyService.ptr()); + mPropertyService->registerPropertyGroup(mHasRefsProperty); // Light - a more complex property - this should be moved to LightService Modified: trunk/src/services/render/RenderedProperty.cpp =================================================================== --- trunk/src/services/render/RenderedProperty.cpp 2008-10-30 10:25:59 UTC (rev 946) +++ trunk/src/services/render/RenderedProperty.cpp 2008-10-30 15:03:25 UTC (rev 947) @@ -40,4 +40,14 @@ return ei; }; + + Ogre::SceneNode* RenderedProperty::getSceneNode(int oid) { + Ogre::SceneNode* sn = mOwner->getSceneNode(oid); + assert(sn); + + if (sn == NULL) + OPDE_EXCEPT("SceneNode not found for object", "RenderedProperty::getSceneNode"); + + return sn; + }; }; Modified: trunk/src/services/render/RenderedProperty.h =================================================================== --- trunk/src/services/render/RenderedProperty.h 2008-10-30 10:25:59 UTC (rev 946) +++ trunk/src/services/render/RenderedProperty.h 2008-10-30 15:03:25 UTC (rev 947) @@ -45,6 +45,9 @@ // shortcut getter for the entity info of a particular object EntityInfo* getEntityInfo(int oid); + + // shortcut to the scenenode of the object + Ogre::SceneNode* getSceneNode(int oid); }; }; This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <vo...@us...> - 2008-11-03 20:28:34
|
Revision: 959 http://opde.svn.sourceforge.net/opde/?rev=959&view=rev Author: volca Date: 2008-11-03 20:28:27 +0000 (Mon, 03 Nov 2008) Log Message: ----------- * Some render service properties implemented as built-in * those also removed from the pldef files Modified Paths: -------------- trunk/scripts/shock2/ss2-props.pldef trunk/scripts/thief1/t1-props.pldef trunk/scripts/thief2/t2-props.pldef trunk/src/services/render/RenderService.cpp trunk/src/services/render/RenderService.h Added Paths: ----------- trunk/src/services/render/RenderAlphaProperty.cpp trunk/src/services/render/RenderAlphaProperty.h trunk/src/services/render/RenderTypeProperty.cpp trunk/src/services/render/RenderTypeProperty.h trunk/src/services/render/ZBiasProperty.cpp trunk/src/services/render/ZBiasProperty.h Modified: trunk/scripts/shock2/ss2-props.pldef =================================================================== --- trunk/scripts/shock2/ss2-props.pldef 2008-11-03 20:25:01 UTC (rev 958) +++ trunk/scripts/shock2/ss2-props.pldef 2008-11-03 20:28:27 UTC (rev 959) @@ -316,9 +316,9 @@ p_ver 2.16 } -property RenderTyp { - label "RenderType" -} +//property RenderTyp { +// label "RenderType" +//} property AI_Conver { label "AIConversation" @@ -1270,10 +1270,10 @@ p_ver 2.65560 } -property RenderAlp { - label "RenderAlpha" - p_ver 2.65540 -} +//property RenderAlp { +// label "RenderAlpha" +// p_ver 2.65540 +//} property FrobInfo { label "FrobInfo" Modified: trunk/scripts/thief1/t1-props.pldef =================================================================== --- trunk/scripts/thief1/t1-props.pldef 2008-11-03 20:25:01 UTC (rev 958) +++ trunk/scripts/thief1/t1-props.pldef 2008-11-03 20:28:27 UTC (rev 959) @@ -206,9 +206,9 @@ p_ver 2.16 } -property RenderTyp { - label "RenderType" -} +//property RenderTyp { +// label "RenderType" +//} property AI_Conver { label "AIConversation" @@ -792,10 +792,10 @@ p_ver 2.16 } -property RenderAlp { - label "RenderAlpha" - p_ver 2.65540 -} +//property RenderAlp { +// label "RenderAlpha" +// p_ver 2.65540 +//} property MotGaitDe { label "MotionGaitDescription" Modified: trunk/scripts/thief2/t2-props.pldef =================================================================== --- trunk/scripts/thief2/t2-props.pldef 2008-11-03 20:25:01 UTC (rev 958) +++ trunk/scripts/thief2/t2-props.pldef 2008-11-03 20:28:27 UTC (rev 959) @@ -263,9 +263,9 @@ p_ver 2.16 } -property RenderTyp { - label "RenderType" -} +//property RenderTyp { +// label "RenderType" +//} property AI_Conver { label "AIConversation" @@ -1036,10 +1036,10 @@ p_ver 2.16 } -property RenderAlp { - label "RenderAlpha" - p_ver 2.65540 -} +//property RenderAlp { +// label "RenderAlpha" +// p_ver 2.65540 +//} property MotGaitDe { label "MotionGaitDescription" Added: trunk/src/services/render/RenderAlphaProperty.cpp =================================================================== --- trunk/src/services/render/RenderAlphaProperty.cpp (rev 0) +++ trunk/src/services/render/RenderAlphaProperty.cpp 2008-11-03 20:28:27 UTC (rev 959) @@ -0,0 +1,91 @@ +/****************************************************************************** + * + * This file is part of openDarkEngine project + * Copyright (C) 2005-2006 openDarkEngine team + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * This program 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 General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + * + * + * $Id$ + * + *****************************************************************************/ + +#include "RenderService.h" +#include "PropertyService.h" +#include "SingleFieldDataStorage.h" +#include "RenderAlphaProperty.h" + +namespace Opde { + /*--------------------------------------------------------*/ + /*-------------------- RenderAlphaProperty ----------------*/ + /*--------------------------------------------------------*/ + RenderAlphaProperty::RenderAlphaProperty(RenderService* rs, PropertyService* owner) : + RenderedProperty(rs, owner, "RenderAlpha", "RenderAlp", "always") { + + mPropertyStorage = new FloatDataStorage(); + + // TODO: Check the version + setChunkVersions(2, 65540); + + mSceneMgr = rs->getSceneManager(); + }; + + // -------------------------------------------------------------------------- + RenderAlphaProperty::~RenderAlphaProperty(void) { + }; + + // -------------------------------------------------------------------------- + void RenderAlphaProperty::addProperty(int oid) { + DVariant val; + + if (!get(oid, "", val)) + OPDE_EXCEPT("Property not defined for object.", "RenderAlphaProperty::addProperty"); + + setAlpha(oid, val.toFloat()); + }; + + // -------------------------------------------------------------------------- + void RenderAlphaProperty::removeProperty(int oid) { + // reinit to 1.0 - no transparency + setAlpha(oid, 1.0f); + }; + + // -------------------------------------------------------------------------- + void RenderAlphaProperty::setPropertySource(int oid, int effid) { + // re-read the property + addProperty(oid); + }; + + // -------------------------------------------------------------------------- + void RenderAlphaProperty::valueChanged(int oid, const std::string& field, const DVariant& value) { + // just call the setter + setAlpha(oid, value.toFloat()); + }; + + // -------------------------------------------------------------------------- + void RenderAlphaProperty::setAlpha(int oid, float alpha) { + EntityInfo* ei = getEntityInfo(oid); + // clamp to 0-1 + if (alpha < 0.0f) + alpha = 0.0f; + + if (alpha > 1.0f) + alpha = 1.0f; + + // and set the alpha on the entity + ei->setAlpha(alpha); + }; +}; + Property changes on: trunk/src/services/render/RenderAlphaProperty.cpp ___________________________________________________________________ Added: svn:keywords + Author Date Id Revision Added: svn:eol-style + native Added: trunk/src/services/render/RenderAlphaProperty.h =================================================================== --- trunk/src/services/render/RenderAlphaProperty.h (rev 0) +++ trunk/src/services/render/RenderAlphaProperty.h 2008-11-03 20:28:27 UTC (rev 959) @@ -0,0 +1,65 @@ +/****************************************************************************** + * + * This file is part of openDarkEngine project + * Copyright (C) 2005-2006 openDarkEngine team + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * This program 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 General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + * + * + * $Id$ + * + *****************************************************************************/ + + +#ifndef __RENDERALPHAPROPERTY_H +#define __RENDERALPHAPROPERTY_H + +#include "RenderedProperty.h" + +namespace Opde { + + /** a RenderAlpha property implementation using rendered property handler. + * Controls the transparency of the object + * Uses simple unsigned float data storage. Defaults to 1.0 - No transparency. Inherits always. + */ + class RenderAlphaProperty : public RenderedProperty { + public: + /// constructor + RenderAlphaProperty(RenderService* rs, PropertyService* owner); + + /// destructor + virtual ~RenderAlphaProperty(void); + + protected: + /// @see ActiveProperty::addProperty + void addProperty(int oid); + + /// @see ActiveProperty::removeProperty + void removeProperty(int oid); + + /// @see ActiveProperty::setPropertySource + void setPropertySource(int oid, int effid); + + /// @see ActiveProperty::valueChanged + void valueChanged(int oid, const std::string& field, const DVariant& value); + + /// core setter method. Called from other methods to set the hasrefs value + void setAlpha(int oid, float alpha); + + Ogre::SceneManager* mSceneMgr; + }; +}; + +#endif Property changes on: trunk/src/services/render/RenderAlphaProperty.h ___________________________________________________________________ Added: svn:keywords + Author Date Id Revision Added: svn:eol-style + native Modified: trunk/src/services/render/RenderService.cpp =================================================================== --- trunk/src/services/render/RenderService.cpp 2008-11-03 20:25:01 UTC (rev 958) +++ trunk/src/services/render/RenderService.cpp 2008-11-03 20:28:27 UTC (rev 959) @@ -45,12 +45,10 @@ // Jorge texture png #include "jorge.h" -// Internal rendertype constants -// Using #define to be able to Switch on them -#define RENDER_TYPE_NORMAL 0 -#define RENDER_TYPE_NOT_RENDERED 1 -#define RENDER_TYPE_NO_LIGHTMAP 2 -#define RENDER_TYPE_EDITOR_ONLY 3 +#include "HasRefsProperty.h" +#include "RenderTypeProperty.h" +#include "RenderAlphaProperty.h" +#include "ZBiasProperty.h" using namespace std; using namespace Ogre; @@ -68,6 +66,7 @@ mHasRefs(true), mSkip(false), mAlpha(1.0f), + mZBias(0.0f), mEntity(entity), mNode(node), mEmi(NULL) { @@ -112,6 +111,12 @@ mAlpha = alpha; mEmi->setTransparency(1.0f - mAlpha); }; + + // -------------------------------------------------------------------------- + void EntityInfo::setZBias(float bias) { + mZBias = bias; + mEmi->setZBias(bias); + }; // -------------------------------------------------------------------------- void EntityInfo::setEntity(Ogre::Entity* entity) { @@ -137,15 +142,13 @@ // -------------------------------------------------------------------------- void EntityInfo::refreshVisibility() { // calculate the visibilities: - bool brType = false; + bool brType = true; - switch (mRenderType) { - case RENDER_TYPE_NORMAL: brType = true; break; - case RENDER_TYPE_NOT_RENDERED: brType = false; break; - case RENDER_TYPE_NO_LIGHTMAP: brType = true; break; // Not sure. Seems to indicate shadow should not be cast on lmaps? - case RENDER_TYPE_EDITOR_ONLY: brType = true; break; // should be already converted to normal/not_rendered - } - + if (mRenderType == RENDER_TYPE_NOT_RENDERED) + brType = false; + + // todo: editor mode handling + mNode->setVisible(mHasRefs && brType, true); }; @@ -158,15 +161,17 @@ mPropSpotlight(NULL), mPropPosition(NULL), mPropScale(NULL), - mPropRenderType(NULL), - mPropRenderAlpha(NULL), mRoot(NULL), mSceneMgr(NULL), mRenderWindow(NULL), mDarkSMFactory(NULL), mDefaultCamera(NULL), mLoopService(NULL), - mEditorMode(false) { + mEditorMode(false), + mHasRefsProperty(NULL), + mRenderTypeProperty(NULL), + mRenderAlphaProperty(NULL), + mZBiasProperty(NULL) { // TODO: This is just plain wrong. This service should be the maintainer of the used scene manager, if any other service needs the direct handle, etc. // The fact is this service is probably game only, and should be the initialiser of graphics as the whole. This will be the // modification that should be done soon in order to let the code look and be nice @@ -209,6 +214,24 @@ delete mHasRefsProperty; mHasRefsProperty = NULL; } + + if (mRenderTypeProperty) { + mPropertyService->unregisterPropertyGroup(mRenderTypeProperty); + delete mRenderTypeProperty; + mRenderTypeProperty = NULL; + } + + if (mRenderAlphaProperty) { + mPropertyService->unregisterPropertyGroup(mRenderAlphaProperty); + delete mRenderAlphaProperty; + mRenderAlphaProperty = NULL; + } + + if (mZBiasProperty) { + mPropertyService->unregisterPropertyGroup(mZBiasProperty); + delete mZBiasProperty; + mZBiasProperty = NULL; + } if (mPropPosition != NULL) mPropPosition->unregisterListener(mPropPositionListenerID); @@ -226,10 +249,6 @@ mPropSpotlight->unregisterListener(mPropSpotlightListenerID); mPropSpotlight = NULL; - if (mPropRenderType != NULL) - mPropRenderType->unregisterListener(mPropRenderTypeListenerID); - mPropRenderType = NULL; - if (mPropScale != NULL) mPropScale->unregisterListener(mPropScaleListenerID); mPropScale = NULL; @@ -283,9 +302,8 @@ mPropertyService = static_pointer_cast<PropertyService>(ServiceManager::getSingleton().getService("PropertyService")); - // create all the properties the render service uses - createProperties(); - + mConfigService = static_pointer_cast<ConfigService>(ServiceManager::getSingleton().getService("ConfigService")); + return true; } @@ -353,6 +371,9 @@ // Property Service should have created us automatically through service masks. // So we can register as a link service listener LOG_INFO("RenderService::bootstrapFinished()"); + + // create the properties the render service uses (built-in) + createProperties(); PropertyGroup::ListenerPtr cmodelc = new ClassCallback<PropertyChangeMsg, RenderService>(this, &RenderService::onPropModelNameMsg); @@ -418,28 +439,6 @@ mPropScaleListenerID = mPropScale->registerListener(cscalec); - // --- Render type property listener - mPropRenderType = mPropertyService->getPropertyGroup("RenderType"); - - if (mPropRenderType == NULL) - OPDE_EXCEPT("Could not get RenderType property group. Not defined. Fatal", "RenderService::bootstrapFinished"); - - PropertyGroup::ListenerPtr crtc = - new ClassCallback<PropertyChangeMsg, RenderService>(this, &RenderService::onPropRenderTypeMsg); - - mPropRenderTypeListenerID = mPropRenderType->registerListener(crtc); - - // --- Render alpha property listener - mPropRenderAlpha = mPropertyService->getPropertyGroup("RenderAlpha"); - - if (mPropRenderAlpha == NULL) - OPDE_EXCEPT("Could not get RenderAlpha property group. Not defined. Fatal", "RenderService::bootstrapFinished"); - - PropertyGroup::ListenerPtr crac = - new ClassCallback<PropertyChangeMsg, RenderService>(this, &RenderService::onPropRenderAlphaMsg); - - mPropRenderAlphaListenerID = mPropRenderAlpha->registerListener(crac); - // TODO: The hardcoded z-bias is doing problems, unsurprisingly // to fix this, we should create a handler for that property @@ -611,77 +610,6 @@ } // -------------------------------------------------------------------------- - void RenderService::onPropRenderTypeMsg(const PropertyChangeMsg& msg) { - if (msg.objectID <= 0) // no action for archetypes - return; - - - LOG_VERBOSE("RenderService: non-archetype RenderType prop for obj. %d changed [%d]", msg.objectID, (int)(msg.change)); - - // Rendertype property only affects the model (entity) not the lightning properties. - - switch(msg.change) { - case PROP_CHANGED: - case PROP_ADDED: { - EntityInfo* ei = _getEntityInfo(msg.objectID); - - // if we don't have ei for the object, it is not initialized just yet - // that of course is error - ObjectService should have done this already - // But there is a catch - DefaultRoom has id 1, is in the GAM, but has no id in bitmap - // an expensive, and maybe not possible, way to deal with this? DonorType... - if (ei == NULL) { - LOG_ERROR("RenderService::onPropRenderTypeMsg: No EntityInfo for object %d", msg.objectID); - return; - } - - DVariant mode; - mPropRenderType->get(msg.objectID, "mode", mode); - - LOG_VERBOSE("RenderService: RenderType prop for obj. %d changed to %d", msg.objectID, mode.toUInt()); - - unsigned int uimode = mode.toUInt(); - - if (uimode == RENDER_TYPE_EDITOR_ONLY) - uimode = mEditorMode ? RENDER_TYPE_NORMAL : RENDER_TYPE_NOT_RENDERED; - - ei->setRenderType(uimode); - - break; - } - - case PROP_REMOVED: - EntityInfo* ei = _getEntityInfo(msg.objectID); - ei->setRenderType(RENDER_TYPE_NORMAL); - - break; - } - } - - // -------------------------------------------------------------------------- - void RenderService::onPropRenderAlphaMsg(const PropertyChangeMsg& msg) { - if (msg.objectID <= 0) // no action for archetypes - return; - - switch(msg.change) { - case PROP_CHANGED: - case PROP_ADDED: { - DVariant alpha; - mPropRenderAlpha->get(msg.objectID, "alpha", alpha); - - LOG_DEBUG("RenderService: RenderAlpha prop for obj. %d changed to %f", msg.objectID, alpha.toFloat()); - - EntityInfo* ei = _getEntityInfo(msg.objectID); - ei->setAlpha(alpha.toFloat()); - return; - } - case PROP_REMOVED: - EntityInfo* ei = _getEntityInfo(msg.objectID); - ei->setAlpha(1.0f); - return; - } - } - - // -------------------------------------------------------------------------- RenderService::LightInfo& RenderService::createLight(int objID) { Light* l = mSceneMgr->createLight("Light" + StringConverter::toString(objID)); @@ -1222,14 +1150,23 @@ //mModelNameStorage = new FixedStringDataStorage(); //mPropertyService->createPropertyGroup("ModelName", "ModelName", "always", mModelNameStorage); - // RenderType property - single int property - // RenderAlpha property - single float prop + mRenderAlphaProperty = new RenderAlphaProperty(this, mPropertyService.ptr()); + mPropertyService->registerPropertyGroup(mRenderAlphaProperty); // HasRefs - single bool prop mHasRefsProperty = new HasRefsProperty(this, mPropertyService.ptr()); mPropertyService->registerPropertyGroup(mHasRefsProperty); + + // RenderType property - single unsigned int property with enum + mRenderTypeProperty = new RenderTypeProperty(this, mPropertyService.ptr()); + mPropertyService->registerPropertyGroup(mRenderTypeProperty); + // ZBias - z bias for depth fighting avoidance + if (mConfigService->getGameType() > ConfigService::GAME_TYPE_T1) { // only t1 does not have ZBIAS + mZBiasProperty = new ZBiasProperty(this, mPropertyService.ptr()); + mPropertyService->registerPropertyGroup(mZBiasProperty); + } // Light - a more complex property - this should be moved to LightService Modified: trunk/src/services/render/RenderService.h =================================================================== --- trunk/src/services/render/RenderService.h 2008-11-03 20:25:01 UTC (rev 958) +++ trunk/src/services/render/RenderService.h 2008-11-03 20:28:27 UTC (rev 959) @@ -40,13 +40,17 @@ #include "ObjectService.h" #include "EntityMaterialInstance.h" -#include "HasRefsProperty.h" - #include <OgreEntity.h> #include <OgreLight.h> #include <OgreSceneNode.h> namespace Opde { + // forward decls. + class HasRefsProperty; + class RenderAlphaProperty; + class RenderTypeProperty; + class ZBiasProperty; + /// Render System message type typedef enum { /// Render window changed the size @@ -87,6 +91,7 @@ void setRenderType(unsigned int _renderType); void setSkip(bool _skip); void setAlpha(float alpha); + void setZBias(float bias); void setEntity(Ogre::Entity* newEntity); @@ -108,6 +113,9 @@ /// alpha transparency value of the object float mAlpha; + + /// z-bias of the object + float mZBias; Ogre::Entity* mEntity; Ogre::SceneNode* mNode; @@ -199,12 +207,6 @@ /// Scale property change callback void onPropScaleMsg(const PropertyChangeMsg& msg); - /// Render type property change callback - void onPropRenderTypeMsg(const PropertyChangeMsg& msg); - - /// Render alpha property change callback - void onPropRenderAlphaMsg(const PropertyChangeMsg& msg); - /// Object creation/destruction callback void onObjectMsg(const ObjectServiceMsg& msg); @@ -284,14 +286,6 @@ PropertyGroup::ListenerID mPropScaleListenerID; PropertyGroup* mPropScale; - // "RenderType" Property related - PropertyGroup::ListenerID mPropRenderTypeListenerID; - PropertyGroup* mPropRenderType; - - // "RenderAlpha" Property related - PropertyGroup::ListenerID mPropRenderAlphaListenerID; - PropertyGroup* mPropRenderAlpha; - /// Shared pointer to the property service PropertyServicePtr mPropertyService; @@ -345,8 +339,13 @@ /// editor mode display bool mEditorMode; + + ConfigServicePtr mConfigService; HasRefsProperty* mHasRefsProperty; + RenderTypeProperty* mRenderTypeProperty; + RenderAlphaProperty* mRenderAlphaProperty; + ZBiasProperty* mZBiasProperty; }; /// Shared pointer to Link service Added: trunk/src/services/render/RenderTypeProperty.cpp =================================================================== --- trunk/src/services/render/RenderTypeProperty.cpp (rev 0) +++ trunk/src/services/render/RenderTypeProperty.cpp 2008-11-03 20:28:27 UTC (rev 959) @@ -0,0 +1,97 @@ +/****************************************************************************** + * + * This file is part of openDarkEngine project + * Copyright (C) 2005-2006 openDarkEngine team + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * This program 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 General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + * + * + * $Id$ + * + *****************************************************************************/ + +#include "RenderService.h" +#include "PropertyService.h" +#include "SingleFieldDataStorage.h" +#include "RenderTypeProperty.h" + +namespace Opde { + const unsigned int RENDER_TYPE_NORMAL = 0; + const unsigned int RENDER_TYPE_NOT_RENDERED = 1; + const unsigned int RENDER_TYPE_NO_LIGHTMAP = 2; + const unsigned int RENDER_TYPE_EDITOR_ONLY = 3; + + /*--------------------------------------------------------*/ + /*-------------------- RenderTypeProperty ----------------*/ + /*--------------------------------------------------------*/ + RenderTypeProperty::RenderTypeProperty(RenderService* rs, PropertyService* owner) : + RenderedProperty(rs, owner, "RenderType", "RenderTyp", "always") { + + + mEnum = new DEnum("RenderType", DVariant::DV_UINT, false); + + mEnum->insert("Normal", RENDER_TYPE_NORMAL); + mEnum->insert("Not Rendered", RENDER_TYPE_NOT_RENDERED); + mEnum->insert("No Lightmap", RENDER_TYPE_NO_LIGHTMAP); + mEnum->insert("Editor Only", RENDER_TYPE_EDITOR_ONLY); + + mPropertyStorage = new UIntDataStorage(mEnum); + + // TODO: Check the version + setChunkVersions(2, 4); + + mSceneMgr = rs->getSceneManager(); + }; + + // -------------------------------------------------------------------------- + RenderTypeProperty::~RenderTypeProperty(void) { + delete mEnum; + }; + + // -------------------------------------------------------------------------- + void RenderTypeProperty::addProperty(int oid) { + DVariant val; + + if (!get(oid, "", val)) + OPDE_EXCEPT("Property not defined for object.", "RenderTypeProperty::addProperty"); + + setRenderType(oid, val.toUInt()); + }; + + // -------------------------------------------------------------------------- + void RenderTypeProperty::removeProperty(int oid) { + // reinit to true - the object's default + setRenderType(oid, 0); + }; + + // -------------------------------------------------------------------------- + void RenderTypeProperty::setPropertySource(int oid, int effid) { + // re-read the property + addProperty(oid); + }; + + // -------------------------------------------------------------------------- + void RenderTypeProperty::valueChanged(int oid, const std::string& field, const DVariant& value) { + // just call the setter + setRenderType(oid, value.toUInt()); + }; + + // -------------------------------------------------------------------------- + void RenderTypeProperty::setRenderType(int oid, uint32_t renderType) { + EntityInfo* ei = getEntityInfo(oid); + ei->setRenderType(renderType); + }; +}; + Property changes on: trunk/src/services/render/RenderTypeProperty.cpp ___________________________________________________________________ Added: svn:keywords + Author Date Id Revision Added: svn:eol-style + native Added: trunk/src/services/render/RenderTypeProperty.h =================================================================== --- trunk/src/services/render/RenderTypeProperty.h (rev 0) +++ trunk/src/services/render/RenderTypeProperty.h 2008-11-03 20:28:27 UTC (rev 959) @@ -0,0 +1,72 @@ +/****************************************************************************** + * + * This file is part of openDarkEngine project + * Copyright (C) 2005-2006 openDarkEngine team + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * This program 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 General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + * + * + * $Id$ + * + *****************************************************************************/ + + +#ifndef __RENDERTYPEPROPERTY_H +#define __RENDERTYPEPROPERTY_H + +#include "RenderedProperty.h" + +namespace Opde { + // Internal rendertype constants + + extern const unsigned int RENDER_TYPE_NORMAL; + extern const unsigned int RENDER_TYPE_NOT_RENDERED; + extern const unsigned int RENDER_TYPE_NO_LIGHTMAP; + extern const unsigned int RENDER_TYPE_EDITOR_ONLY; + + + /** a RenderType property implementation using rendered property handler. + * Uses simple unsigned integer data storage with an enumeration. Defaults to 0 - Normal. Inherits always. + */ + class RenderTypeProperty : public RenderedProperty { + public: + /// constructor + RenderTypeProperty(RenderService* rs, PropertyService* owner); + + /// destructor + virtual ~RenderTypeProperty(void); + + protected: + /// @see ActiveProperty::addProperty + void addProperty(int oid); + + /// @see ActiveProperty::removeProperty + void removeProperty(int oid); + + /// @see ActiveProperty::setPropertySource + void setPropertySource(int oid, int effid); + + /// @see ActiveProperty::valueChanged + void valueChanged(int oid, const std::string& field, const DVariant& value); + + /// core setter method. Called from other methods to set the rendertype value + void setRenderType(int oid, uint32_t renderType); + + Ogre::SceneManager* mSceneMgr; + DEnum* mEnum; + }; +}; + +#endif Property changes on: trunk/src/services/render/RenderTypeProperty.h ___________________________________________________________________ Added: svn:keywords + Author Date Id Revision Added: svn:eol-style + native Added: trunk/src/services/render/ZBiasProperty.cpp =================================================================== --- trunk/src/services/render/ZBiasProperty.cpp (rev 0) +++ trunk/src/services/render/ZBiasProperty.cpp 2008-11-03 20:28:27 UTC (rev 959) @@ -0,0 +1,84 @@ +/****************************************************************************** + * + * This file is part of openDarkEngine project + * Copyright (C) 2005-2006 openDarkEngine team + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * This program 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 General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + * + * + * $Id$ + * + *****************************************************************************/ + +#include "RenderService.h" +#include "PropertyService.h" +#include "SingleFieldDataStorage.h" +#include "ZBiasProperty.h" + +namespace Opde { + /*--------------------------------------------------------*/ + /*-------------------- RenderAlphaProperty ----------------*/ + /*--------------------------------------------------------*/ + ZBiasProperty::ZBiasProperty(RenderService* rs, PropertyService* owner) : + RenderedProperty(rs, owner, "RendererZBias", "Z-Bias", "always") { + + mPropertyStorage = new FloatDataStorage(); + + // TODO: Check the version + setChunkVersions(1, 1); + + mSceneMgr = rs->getSceneManager(); + }; + + // -------------------------------------------------------------------------- + ZBiasProperty::~ZBiasProperty(void) { + }; + + // -------------------------------------------------------------------------- + void ZBiasProperty::addProperty(int oid) { + DVariant val; + + if (!get(oid, "", val)) + OPDE_EXCEPT("Property not defined for object.", "RenderAlphaProperty::addProperty"); + + setZBias(oid, val.toFloat()); + }; + + // -------------------------------------------------------------------------- + void ZBiasProperty::removeProperty(int oid) { + // reinit to 0.0 - no bias + setZBias(oid, 0.0f); + }; + + // -------------------------------------------------------------------------- + void ZBiasProperty::setPropertySource(int oid, int effid) { + // re-read the property + addProperty(oid); + }; + + // -------------------------------------------------------------------------- + void ZBiasProperty::valueChanged(int oid, const std::string& field, const DVariant& value) { + // just call the setter + setZBias(oid, value.toFloat()); + }; + + // -------------------------------------------------------------------------- + void ZBiasProperty::setZBias(int oid, float bias) { + EntityInfo* ei = getEntityInfo(oid); + + ei->setZBias(bias); + }; +}; + Property changes on: trunk/src/services/render/ZBiasProperty.cpp ___________________________________________________________________ Added: svn:keywords + Author Date Id Revision Added: svn:eol-style + native Added: trunk/src/services/render/ZBiasProperty.h =================================================================== --- trunk/src/services/render/ZBiasProperty.h (rev 0) +++ trunk/src/services/render/ZBiasProperty.h 2008-11-03 20:28:27 UTC (rev 959) @@ -0,0 +1,65 @@ +/****************************************************************************** + * + * This file is part of openDarkEngine project + * Copyright (C) 2005-2006 openDarkEngine team + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * This program 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 General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + * + * + * $Id$ + * + *****************************************************************************/ + + +#ifndef __ZBIASPROPERTY_H +#define __ZBIASPROPERTY_H + +#include "RenderedProperty.h" + +namespace Opde { + + /** a Z-Bias property implementation using rendered property handler. + * Controls the rendering bias of the object (for Z-Fightning avoidance). SS2/T2 only. + * Uses simple unsigned float data storage. Defaults to 0.0 - No bias. Inherits always. + */ + class ZBiasProperty : public RenderedProperty { + public: + /// constructor + ZBiasProperty(RenderService* rs, PropertyService* owner); + + /// destructor + virtual ~ZBiasProperty(void); + + protected: + /// @see ActiveProperty::addProperty + void addProperty(int oid); + + /// @see ActiveProperty::removeProperty + void removeProperty(int oid); + + /// @see ActiveProperty::setPropertySource + void setPropertySource(int oid, int effid); + + /// @see ActiveProperty::valueChanged + void valueChanged(int oid, const std::string& field, const DVariant& value); + + /// core setter method. Called from other methods to set the hasrefs value + void setZBias(int oid, float bias); + + Ogre::SceneManager* mSceneMgr; + }; +}; + +#endif Property changes on: trunk/src/services/render/ZBiasProperty.h ___________________________________________________________________ Added: svn:keywords + Author Date Id Revision Added: svn:eol-style + native This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <vo...@us...> - 2008-11-01 16:02:04
|
Revision: 948 http://opde.svn.sourceforge.net/opde/?rev=948&view=rev Author: volca Date: 2008-11-01 16:02:00 +0000 (Sat, 01 Nov 2008) Log Message: ----------- A couple of random bug fixes - load console command, clear method failures Modified Paths: -------------- trunk/scripts/shock2/ss2-props.pldef trunk/scripts/thief1/t1-props.pldef trunk/scripts/thief2/t2-props.pldef trunk/src/main/GamePlayState.cpp trunk/src/scenemanager/DarkSceneManager.cpp trunk/src/services/database/DatabaseService.cpp trunk/src/services/database/DatabaseService.h trunk/src/services/object/ObjectService.cpp trunk/src/services/property/PropertyGroup.cpp trunk/src/services/property/PropertyGroup.h trunk/src/services/property/PropertyService.cpp trunk/src/services/property/PropertyService.h trunk/src/services/render/RenderService.cpp trunk/src/services/worldrep/WorldRepService.cpp trunk/src/services/worldrep/WorldRepService.h Modified: trunk/scripts/shock2/ss2-props.pldef =================================================================== --- trunk/scripts/shock2/ss2-props.pldef 2008-10-30 15:03:25 UTC (rev 947) +++ trunk/scripts/shock2/ss2-props.pldef 2008-11-01 16:02:00 UTC (rev 948) @@ -152,12 +152,12 @@ p_ver 2.65572 } -property SymName { - label "SymbolicName" - p_ver 2.17 - inherit never - type varstr -} +//property SymName { +// label "SymbolicName" +// p_ver 2.17 +// inherit never +// type varstr +//} property Spotlight { label "Spotlight" Modified: trunk/scripts/thief1/t1-props.pldef =================================================================== --- trunk/scripts/thief1/t1-props.pldef 2008-10-30 15:03:25 UTC (rev 947) +++ trunk/scripts/thief1/t1-props.pldef 2008-11-01 16:02:00 UTC (rev 948) @@ -107,12 +107,12 @@ label "SlayResult" } -property SymName { - label "SymbolicName" - p_ver 2.17 - inherit never - type varstr -} +//property SymName { +// label "SymbolicName" +// p_ver 2.17 +// inherit never +// type varstr +//} property Spotlight { label "Spotlight" Modified: trunk/scripts/thief2/t2-props.pldef =================================================================== --- trunk/scripts/thief2/t2-props.pldef 2008-10-30 15:03:25 UTC (rev 947) +++ trunk/scripts/thief2/t2-props.pldef 2008-11-01 16:02:00 UTC (rev 948) @@ -146,12 +146,12 @@ p_ver 2.65540 } -property SymName { - label "SymbolicName" - p_ver 2.17 - inherit never - type varstr -} +//property SymName { +// label "SymbolicName" +// p_ver 2.17 +// inherit never +// type varstr +//} property Spotlight { label "Spotlight" Modified: trunk/src/main/GamePlayState.cpp =================================================================== --- trunk/src/main/GamePlayState.cpp 2008-10-30 15:03:25 UTC (rev 947) +++ trunk/src/main/GamePlayState.cpp 2008-11-01 16:02:00 UTC (rev 948) @@ -1,484 +1,484 @@ -/****************************************************************************** - * - * This file is part of openDarkEngine project - * Copyright (C) 2005-2006 openDarkEngine team - * - * This program is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation; either version 2 of the License, or - * (at your option) any later version. - * - * This program 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 General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA - * - * $Id$ - * - *****************************************************************************/ - -#include "config.h" - -#include "GamePlayState.h" -#include "OIS.h" -#include "GameStateManager.h" - -#include "GameLoadState.h" -#include "logger.h" -#include "integers.h" - -#include "DarkCamera.h" - -#include <OgreRenderWindow.h> -#include <OgreOverlayElement.h> -#include <OgreStringConverter.h> - -using namespace Ogre; -using namespace OIS; - -namespace Opde { - - template<> GamePlayState* Singleton<GamePlayState>::ms_Singleton = 0; - - GamePlayState::GamePlayState() : mSceneMgr(NULL), mToLoadScreen(true), mDebugOverlay(NULL) { - /// Register as a command listener, so we can load different levels - Opde::ConsoleBackend::getSingleton().registerCommandListener("load", dynamic_cast<ConsoleCommandListener*>(this)); - Opde::ConsoleBackend::getSingleton().setCommandHint("load", "Loads a specified mission file"); - Opde::ConsoleBackend::getSingleton().registerCommandListener("fps", dynamic_cast<ConsoleCommandListener*>(this)); - Opde::ConsoleBackend::getSingleton().setCommandHint("fps", "Dump FPS stats"); - - mRotateSpeed = 36; - mMoveSpeed = 50; - mRotateYFactor = 1; - - mShadows = false; - mSceneDisplay = false; - - // Try to remap the parameters with those listed in the configuration - mConfigService = static_pointer_cast<ConfigService>(ServiceManager::getSingleton().getService("ConfigService")); - - if (mConfigService->hasParam("move_speed")) - mMoveSpeed = mConfigService->getParam("move_speed").toFloat(); - - if (mConfigService->hasParam("mouse_speed")) - mRotateSpeed = mConfigService->getParam("mouse_speed").toFloat(); - - if (mConfigService->hasParam("mouse_invert")) - mRotateYFactor = mConfigService->getParam("mouse_invert").toFloat(); - - mTranslateVector = Vector3::ZERO; - mRotX = 0; - mRotY = 0; - - mForward = false; - mBackward = false; - mLeft = false; - mRight = false; - - mScreenShot = false; - mSceneDisplay = false; - mPortalDisplay = false; - mDebug = false; - - mSceneDetailIndex = 0; - mNumScreenShots = 0; - - mRoot = Ogre::Root::getSingletonPtr(); - mOverlayMgr = OverlayManager::getSingletonPtr(); - - mConsole = new ConsoleFrontend(); - mConsole->setActive(false); - - mDebugOverlay = OverlayManager::getSingleton().getByName("Opde/DebugOverlay"); - - // Portal stats overlay - mPortalOverlay = OverlayManager::getSingleton().getByName("Opde/OpdeDebugOverlay"); - - mShadows = true; - - StartingPointObjID = 0; - } - - GamePlayState::~GamePlayState() { - delete mConsole; - } - - void GamePlayState::start() { - LOG_INFO("GamePlayState: Starting"); - PropertyGroup* posPG = static_pointer_cast<PropertyService>(ServiceManager::getSingleton().getService("PropertyService"))->getPropertyGroup("Position"); - - if (posPG == NULL) - OPDE_EXCEPT("Could not get Position property group. Not defined. Fatal", "GamePlayState::start"); - - LOG_DEBUG("Starting Point object id : %d", StartingPointObjID); - - DVariant spoint; - posPG->get(StartingPointObjID, "position", spoint); - - Vector3 StartingPoint(0,0,0); - - if (spoint.type() == DVariant::DV_VECTOR) - StartingPoint = spoint.toVector(); - - LOG_DEBUG("Starting Point position : %f %f %f", StartingPoint.x, StartingPoint.y, StartingPoint.z); - -// std::string tmp = PropertyGroup->get(StartingPointObjID, "SymName").toString(); - mSceneMgr = mRoot->getSceneManager( "DarkSceneManager" ); - RenderServicePtr renderSrv = static_pointer_cast<RenderService>(ServiceManager::getSingleton().getService("RenderService")); - - mCamera = renderSrv->getDefaultCamera(); - mViewport = renderSrv->getDefaultViewport(); - mWindow = renderSrv->getRenderWindow(); - - mSceneMgr->clearSpecialCaseRenderQueues(); - mSceneMgr->setSpecialCaseRenderQueueMode(SceneManager::SCRQM_EXCLUDE); - - mCamera->setNearClipDistance(0.5); - mCamera->setFarClipDistance(4000); - - // Also change position, and set Quake-type orientation - ViewPoint vp = mSceneMgr->getSuggestedViewpoint(true); - mCamera->setPosition(vp.position); - - if (StartingPointObjID != 0) - mCamera->setPosition(StartingPoint); - - mCamera->pitch(Degree(90)); - mCamera->rotate(vp.orientation); - - // Don't yaw along variable axis, causes leaning - mCamera->setFixedYawAxis(true, Vector3::UNIT_Z); - - - // Thiefy FOV - mCamera->setFOVy(Degree(70)); - - if (mConfigService->hasParam("debug")) { - if (mConfigService->getParam("debug") == true) { - // debug overlay - mDebugOverlay->show(); - - // Portal stats overlay - mPortalOverlay->show(); - - mDebug = true; - } - } - - // hidden as default - mConsole->setActive(false); - - mWindow->resetStatistics(); - - mToLoadScreen = false; - - LOG_INFO("GamePlayState: Started"); - } - - void GamePlayState::exit() { - LOG_INFO("GamePlayState: Exiting"); - - // mConsole->setActive(false); - - mPortalOverlay->hide(); - mDebugOverlay->hide(); - mConsole->setActive(false); - mConsole->update(1); // to hide the console while exiting - - if (mToLoadScreen) { - pushState(GameLoadState::getSingletonPtr()); - mToLoadScreen = false; - } - - LOG_INFO("GamePlayState: Exited"); - } - - void GamePlayState::suspend() { - LOG_INFO("GamePlayState: Suspend?!"); - mToLoadScreen = false; - } - - void GamePlayState::resume() { - LOG_INFO("GamePlayState: Resume?!"); - mToLoadScreen = false; - } - - void GamePlayState::update(unsigned long timePassed) { - if (timePassed == 0) { - mMoveScale = 0.1f; - mRotScale = 0.1f; - } else { - mMoveScale = mMoveSpeed * timePassed / 1000.0f; - mRotScale = mRotateSpeed * timePassed / 1000.0f; - } - - // Quick hack. Let the camera move: - if (mForward) - mTranslateVector.z = -mMoveScale; - - if (mBackward) - mTranslateVector.z = mMoveScale; - - if (mLeft) - mTranslateVector.x = -mMoveScale; - - if (mRight) - mTranslateVector.x = mMoveScale; - - mCamera->yaw(mRotX * mRotScale); - mCamera->pitch(mRotY * mRotScale); - mCamera->moveRelative(mTranslateVector); - - mTranslateVector = Vector3::ZERO; - mRotX = 0; - mRotY = 0; - - if (mSceneDisplay) { - mSceneDetailIndex = (mSceneDetailIndex+1)%2 ; // I Do not need points for now - switch(mSceneDetailIndex) { - case 0 : mCamera->setPolygonMode(PM_SOLID) ; break ; - case 1 : mCamera->setPolygonMode(PM_WIREFRAME) ; break ; - //case 2 : mCamera->setPolygonMode(PM_POINTS) ; break ; - } - mSceneDisplay = false; - } - - if (mPortalDisplay) { - // reuse - mSceneMgr->getOption("ShowPortals", &mPortalDisplay); - mPortalDisplay = !mPortalDisplay; - mSceneMgr->setOption("ShowPortals", &mPortalDisplay); - - mPortalDisplay = false; - } - - if (mScreenShot) { - char tmp[20]; - sprintf(tmp, "screenshot_%d.png", ++mNumScreenShots); - RenderWindow* w = Ogre::Root::getSingleton().getAutoCreatedWindow(); - - w->writeContentsToFile(tmp); - - mScreenShot = false; - } - - mConsole->update(timePassed); - - if (mDebug) { - // update stats when necessary - try { - - // Temporary: Debug Overlay - static String currFps = "Current FPS: "; - static String avgFps = "Average FPS: "; - static String bestFps = "Best FPS: "; - static String worstFps = "Worst FPS: "; - static String tris = "Triangle Count: "; - static String batches = "Batch Count: "; - - OverlayElement* guiAvg = OverlayManager::getSingleton().getOverlayElement("Opde/AverageFps"); - OverlayElement* guiCurr = OverlayManager::getSingleton().getOverlayElement("Opde/CurrFps"); - OverlayElement* guiBest = OverlayManager::getSingleton().getOverlayElement("Opde/BestFps"); - OverlayElement* guiWorst = OverlayManager::getSingleton().getOverlayElement("Opde/WorstFps"); - - const RenderTarget::FrameStats& stats = mWindow->getStatistics(); - - guiAvg->setCaption(avgFps + StringConverter::toString(stats.avgFPS)); - guiCurr->setCaption(currFps + StringConverter::toString(stats.lastFPS)); - guiBest->setCaption(bestFps + StringConverter::toString(stats.bestFPS) - +" "+StringConverter::toString(stats.bestFrameTime)+" ms"); - guiWorst->setCaption(worstFps + StringConverter::toString(stats.worstFPS) - +" "+StringConverter::toString(stats.worstFrameTime)+" ms"); - - OverlayElement* guiTris = OverlayManager::getSingleton().getOverlayElement("Opde/NumTris"); - guiTris->setCaption(tris + StringConverter::toString(stats.triangleCount)); - - OverlayElement* guiBatches = OverlayManager::getSingleton().getOverlayElement("Opde/NumBatches"); - guiBatches->setCaption(batches + StringConverter::toString(stats.batchCount)); - - // OverlayElement* guiDbg = OverlayManager::getSingleton().getOverlayElement("Core/DebugText"); - } - catch(...) - { - // ignore - } - - // update the portal statistics - try { - // Volca: I've disabled the timing reports, they need a patch of SM to work - OverlayElement* guibc = OverlayManager::getSingleton().getOverlayElement("Opde/BackCulls"); - OverlayElement* guiep = OverlayManager::getSingleton().getOverlayElement("Opde/EvalPorts"); - OverlayElement* guirc = OverlayManager::getSingleton().getOverlayElement("Opde/RendCells"); - OverlayElement* guitt = OverlayManager::getSingleton().getOverlayElement("Opde/TravTime"); - OverlayElement* guisr = OverlayManager::getSingleton().getOverlayElement("Opde/StaticRenderTime"); - - // Temporary: Debug Overlay - static String sbc = "Backface culls: "; - static String sep = "Evaluated portals: "; - static String src = "Rendered cells: "; - static String stt = "Traversal Time: "; - static String ssr = "Static Build Time: "; - - uint bculls = 0, eports = 0, rendc = 0, travtm = 0; - - unsigned long statbt; - - mSceneMgr->getOption("BackfaceCulls", &bculls); - - // mSceneMgr->getOption("CellsRendered", &rendc); - mSceneMgr->getOption("EvaluatedPortals", &eports); - // mSceneMgr->getOption("TraversalTime", &travtm); - mSceneMgr->getOption("StaticBuildTime", &statbt); - - travtm = static_cast<DarkCamera*>(mCamera)->getTraversalTime(); - rendc = static_cast<DarkCamera*>(mCamera)->getVisibleCellCount(); - - guibc->setCaption(sbc + StringConverter::toString(bculls)); - guiep->setCaption(sep + StringConverter::toString(eports)); - guirc->setCaption(src + StringConverter::toString(rendc)); - guitt->setCaption(stt + StringConverter::toString(travtm) + " ms"); - guisr->setCaption(ssr + StringConverter::toString(statbt) + " ms"); - } - catch(...) - { - // ignore - } - } - } - - bool GamePlayState::keyPressed( const OIS::KeyEvent &e ) { - if( e.key == KC_F12 ) { - mConsole->setActive(!mConsole->isActive()); - return true; - } - - if (!mConsole->injectKeyPress(e)) { - if(e.key == KC_W) { - mForward = true; - return true; - } else if(e.key == KC_S) { - mBackward = true; - return true; - } else if(e.key == KC_A) { - mLeft = true; - return true; - } else if(e.key == KC_D) { - mRight = true; - return true; - } else if (e.key == KC_SYSRQ || e.key == KC_F5) { - mScreenShot = true; - return true; - } else if (e.key == KC_O) { - mSceneDisplay = true; - return true; - } else if (e.key == KC_P) { - mPortalDisplay = true; - return true; - } else return true; - } else { - return true; - }; - } - - bool GamePlayState::keyReleased( const OIS::KeyEvent &e ) { - if (!mConsole->isActive()) { - if(e.key == KC_W) { - mForward = false; - return true; - } else if(e.key == KC_S) { - mBackward = false; - return true; - } else if(e.key == KC_A) { - mLeft = false; - return true; - } else if(e.key == KC_D) { - mRight = false; - return true; - } else if( e.key == KC_ESCAPE ) { - requestTermination(); - return true; - } else if (e.key == KC_I) { - mShadows = !mShadows; - - if (mShadows) - mSceneMgr->setShadowTechnique(SHADOWTYPE_TEXTURE_MODULATIVE); - else - mSceneMgr->setShadowTechnique(SHADOWTYPE_NONE); - } - - return true; - } else return true; - } - - bool GamePlayState::mouseMoved( const OIS::MouseEvent &e ) { - mRotX -= Degree( e.state.X.rel * 20.00); - // use Y axis invert - mRotY -= Degree( e.state.Y.rel * 20.00 * mRotateYFactor); - return false; - } - - bool GamePlayState::mousePressed( const OIS::MouseEvent &e, OIS::MouseButtonID id ) { - return false; - } - - bool GamePlayState::mouseReleased( const OIS::MouseEvent &e, OIS::MouseButtonID id ) { - return false; - } - - void GamePlayState::commandExecuted(std::string command, std::string parameters) { - std::cerr << "command " << command << " " << parameters << std::endl; - - if (command == "load") { - // specify the mission file to load by the load state, then switch to the load state - mConfigService->setParam("mission", parameters); - mToLoadScreen = true; - popState(); - } else if (command == "fps") { - const RenderTarget::FrameStats& stats = mWindow->getStatistics(); - - LOG_INFO("Average FPS : %10.2f", stats.avgFPS); - LOG_INFO("Last FPS : %10.2f", stats.lastFPS); - LOG_INFO("Worst FPS : %10.2f", stats.worstFPS); - } - } - - void GamePlayState::onLinkPlayerFactoryMsg(const LinkChangeMsg& msg) { - switch (msg.change) { - case LNK_ADDED : { - LOG_INFO("GamePlayState: Found StartingPoint"); - // get the Link ref. - LinkPtr l = mPlayerFactoryRelation->getLink(msg.linkID); - StartingPointObjID = l->src(); - break; - } - } - } - - void GamePlayState::bootstrapFinished() { - mLinkService = static_pointer_cast<LinkService>(ServiceManager::getSingleton().getService("LinkService")); - Relation::ListenerPtr metaPropCallback = - new ClassCallback<LinkChangeMsg, GamePlayState>(this, &GamePlayState::onLinkPlayerFactoryMsg); - - mPlayerFactoryRelation = mLinkService->getRelation("PlayerFactory"); - - if (mPlayerFactoryRelation.isNull()) - OPDE_EXCEPT("MetaProp relation not found. Fatal.", "InheritService::init"); - - mPlayerFactoryListenerID = mPlayerFactoryRelation->registerListener(metaPropCallback); - LOG_INFO("GamePlayState::bootstrapFinished() - done"); - } - - GamePlayState& GamePlayState::getSingleton() { - assert(ms_Singleton); return *ms_Singleton; - } - - GamePlayState* GamePlayState::getSingletonPtr() { - return ms_Singleton; - } - -} - +/****************************************************************************** + * + * This file is part of openDarkEngine project + * Copyright (C) 2005-2006 openDarkEngine team + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * This program 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 General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + * + * $Id$ + * + *****************************************************************************/ + +#include "config.h" + +#include "GamePlayState.h" +#include "OIS.h" +#include "GameStateManager.h" + +#include "GameLoadState.h" +#include "logger.h" +#include "integers.h" + +#include "DarkCamera.h" + +#include <OgreRenderWindow.h> +#include <OgreOverlayElement.h> +#include <OgreStringConverter.h> + +using namespace Ogre; +using namespace OIS; + +namespace Opde { + + template<> GamePlayState* Singleton<GamePlayState>::ms_Singleton = 0; + + GamePlayState::GamePlayState() : mSceneMgr(NULL), mToLoadScreen(true), mDebugOverlay(NULL) { + /// Register as a command listener, so we can load different levels + Opde::ConsoleBackend::getSingleton().registerCommandListener("load", dynamic_cast<ConsoleCommandListener*>(this)); + Opde::ConsoleBackend::getSingleton().setCommandHint("load", "Loads a specified mission file"); + Opde::ConsoleBackend::getSingleton().registerCommandListener("fps", dynamic_cast<ConsoleCommandListener*>(this)); + Opde::ConsoleBackend::getSingleton().setCommandHint("fps", "Dump FPS stats"); + + mRotateSpeed = 36; + mMoveSpeed = 50; + mRotateYFactor = 1; + + mShadows = false; + mSceneDisplay = false; + + // Try to remap the parameters with those listed in the configuration + mConfigService = static_pointer_cast<ConfigService>(ServiceManager::getSingleton().getService("ConfigService")); + + if (mConfigService->hasParam("move_speed")) + mMoveSpeed = mConfigService->getParam("move_speed").toFloat(); + + if (mConfigService->hasParam("mouse_speed")) + mRotateSpeed = mConfigService->getParam("mouse_speed").toFloat(); + + if (mConfigService->hasParam("mouse_invert")) + mRotateYFactor = mConfigService->getParam("mouse_invert").toFloat(); + + mTranslateVector = Vector3::ZERO; + mRotX = 0; + mRotY = 0; + + mForward = false; + mBackward = false; + mLeft = false; + mRight = false; + + mScreenShot = false; + mSceneDisplay = false; + mPortalDisplay = false; + mDebug = false; + + mSceneDetailIndex = 0; + mNumScreenShots = 0; + + mRoot = Ogre::Root::getSingletonPtr(); + mOverlayMgr = OverlayManager::getSingletonPtr(); + + mConsole = new ConsoleFrontend(); + mConsole->setActive(false); + + mDebugOverlay = OverlayManager::getSingleton().getByName("Opde/DebugOverlay"); + + // Portal stats overlay + mPortalOverlay = OverlayManager::getSingleton().getByName("Opde/OpdeDebugOverlay"); + + mShadows = true; + + StartingPointObjID = 0; + } + + GamePlayState::~GamePlayState() { + delete mConsole; + } + + void GamePlayState::start() { + LOG_INFO("GamePlayState: Starting"); + PropertyGroup* posPG = static_pointer_cast<PropertyService>(ServiceManager::getSingleton().getService("PropertyService"))->getPropertyGroup("Position"); + + if (posPG == NULL) + OPDE_EXCEPT("Could not get Position property group. Not defined. Fatal", "GamePlayState::start"); + + LOG_DEBUG("Starting Point object id : %d", StartingPointObjID); + + DVariant spoint; + posPG->get(StartingPointObjID, "position", spoint); + + Vector3 StartingPoint(0,0,0); + + if (spoint.type() == DVariant::DV_VECTOR) + StartingPoint = spoint.toVector(); + + LOG_DEBUG("Starting Point position : %f %f %f", StartingPoint.x, StartingPoint.y, StartingPoint.z); + +// std::string tmp = PropertyGroup->get(StartingPointObjID, "SymName").toString(); + mSceneMgr = mRoot->getSceneManager( "DarkSceneManager" ); + RenderServicePtr renderSrv = static_pointer_cast<RenderService>(ServiceManager::getSingleton().getService("RenderService")); + + mCamera = renderSrv->getDefaultCamera(); + mViewport = renderSrv->getDefaultViewport(); + mWindow = renderSrv->getRenderWindow(); + + mSceneMgr->clearSpecialCaseRenderQueues(); + mSceneMgr->setSpecialCaseRenderQueueMode(SceneManager::SCRQM_EXCLUDE); + + mCamera->setNearClipDistance(0.5); + mCamera->setFarClipDistance(4000); + + // Also change position, and set Quake-type orientation + ViewPoint vp = mSceneMgr->getSuggestedViewpoint(true); + mCamera->setPosition(vp.position); + + if (StartingPointObjID != 0) + mCamera->setPosition(StartingPoint); + + mCamera->pitch(Degree(90)); + mCamera->rotate(vp.orientation); + + // Don't yaw along variable axis, causes leaning + mCamera->setFixedYawAxis(true, Vector3::UNIT_Z); + + + // Thiefy FOV + mCamera->setFOVy(Degree(70)); + + if (mConfigService->hasParam("debug")) { + if (mConfigService->getParam("debug") == true) { + // debug overlay + mDebugOverlay->show(); + + // Portal stats overlay + mPortalOverlay->show(); + + mDebug = true; + } + } + + // hidden as default + mConsole->setActive(false); + + mWindow->resetStatistics(); + + mToLoadScreen = false; + + LOG_INFO("GamePlayState: Started"); + } + + void GamePlayState::exit() { + LOG_INFO("GamePlayState: Exiting"); + + // mConsole->setActive(false); + + mPortalOverlay->hide(); + mDebugOverlay->hide(); + mConsole->setActive(false); + mConsole->update(1); // to hide the console while exiting + + if (mToLoadScreen) { + pushState(GameLoadState::getSingletonPtr()); + mToLoadScreen = false; + } + + LOG_INFO("GamePlayState: Exited"); + } + + void GamePlayState::suspend() { + LOG_INFO("GamePlayState: Suspend?!"); + mToLoadScreen = false; + } + + void GamePlayState::resume() { + LOG_INFO("GamePlayState: Resume?!"); + mToLoadScreen = false; + } + + void GamePlayState::update(unsigned long timePassed) { + if (timePassed == 0) { + mMoveScale = 0.1f; + mRotScale = 0.1f; + } else { + mMoveScale = mMoveSpeed * timePassed / 1000.0f; + mRotScale = mRotateSpeed * timePassed / 1000.0f; + } + + // Quick hack. Let the camera move: + if (mForward) + mTranslateVector.z = -mMoveScale; + + if (mBackward) + mTranslateVector.z = mMoveScale; + + if (mLeft) + mTranslateVector.x = -mMoveScale; + + if (mRight) + mTranslateVector.x = mMoveScale; + + mCamera->yaw(mRotX * mRotScale); + mCamera->pitch(mRotY * mRotScale); + mCamera->moveRelative(mTranslateVector); + + mTranslateVector = Vector3::ZERO; + mRotX = 0; + mRotY = 0; + + if (mSceneDisplay) { + mSceneDetailIndex = (mSceneDetailIndex+1)%2 ; // I Do not need points for now + switch(mSceneDetailIndex) { + case 0 : mCamera->setPolygonMode(PM_SOLID) ; break ; + case 1 : mCamera->setPolygonMode(PM_WIREFRAME) ; break ; + //case 2 : mCamera->setPolygonMode(PM_POINTS) ; break ; + } + mSceneDisplay = false; + } + + if (mPortalDisplay) { + // reuse + mSceneMgr->getOption("ShowPortals", &mPortalDisplay); + mPortalDisplay = !mPortalDisplay; + mSceneMgr->setOption("ShowPortals", &mPortalDisplay); + + mPortalDisplay = false; + } + + if (mScreenShot) { + char tmp[20]; + sprintf(tmp, "screenshot_%d.png", ++mNumScreenShots); + RenderWindow* w = Ogre::Root::getSingleton().getAutoCreatedWindow(); + + w->writeContentsToFile(tmp); + + mScreenShot = false; + } + + mConsole->update(timePassed); + + if (mDebug) { + // update stats when necessary + try { + + // Temporary: Debug Overlay + static String currFps = "Current FPS: "; + static String avgFps = "Average FPS: "; + static String bestFps = "Best FPS: "; + static String worstFps = "Worst FPS: "; + static String tris = "Triangle Count: "; + static String batches = "Batch Count: "; + + OverlayElement* guiAvg = OverlayManager::getSingleton().getOverlayElement("Opde/AverageFps"); + OverlayElement* guiCurr = OverlayManager::getSingleton().getOverlayElement("Opde/CurrFps"); + OverlayElement* guiBest = OverlayManager::getSingleton().getOverlayElement("Opde/BestFps"); + OverlayElement* guiWorst = OverlayManager::getSingleton().getOverlayElement("Opde/WorstFps"); + + const RenderTarget::FrameStats& stats = mWindow->getStatistics(); + + guiAvg->setCaption(avgFps + StringConverter::toString(stats.avgFPS)); + guiCurr->setCaption(currFps + StringConverter::toString(stats.lastFPS)); + guiBest->setCaption(bestFps + StringConverter::toString(stats.bestFPS) + +" "+StringConverter::toString(stats.bestFrameTime)+" ms"); + guiWorst->setCaption(worstFps + StringConverter::toString(stats.worstFPS) + +" "+StringConverter::toString(stats.worstFrameTime)+" ms"); + + OverlayElement* guiTris = OverlayManager::getSingleton().getOverlayElement("Opde/NumTris"); + guiTris->setCaption(tris + StringConverter::toString(stats.triangleCount)); + + OverlayElement* guiBatches = OverlayManager::getSingleton().getOverlayElement("Opde/NumBatches"); + guiBatches->setCaption(batches + StringConverter::toString(stats.batchCount)); + + // OverlayElement* guiDbg = OverlayManager::getSingleton().getOverlayElement("Core/DebugText"); + } + catch(...) + { + // ignore + } + + // update the portal statistics + try { + // Volca: I've disabled the timing reports, they need a patch of SM to work + OverlayElement* guibc = OverlayManager::getSingleton().getOverlayElement("Opde/BackCulls"); + OverlayElement* guiep = OverlayManager::getSingleton().getOverlayElement("Opde/EvalPorts"); + OverlayElement* guirc = OverlayManager::getSingleton().getOverlayElement("Opde/RendCells"); + OverlayElement* guitt = OverlayManager::getSingleton().getOverlayElement("Opde/TravTime"); + OverlayElement* guisr = OverlayManager::getSingleton().getOverlayElement("Opde/StaticRenderTime"); + + // Temporary: Debug Overlay + static String sbc = "Backface culls: "; + static String sep = "Evaluated portals: "; + static String src = "Rendered cells: "; + static String stt = "Traversal Time: "; + static String ssr = "Static Build Time: "; + + uint bculls = 0, eports = 0, rendc = 0, travtm = 0; + + unsigned long statbt; + + mSceneMgr->getOption("BackfaceCulls", &bculls); + + // mSceneMgr->getOption("CellsRendered", &rendc); + mSceneMgr->getOption("EvaluatedPortals", &eports); + // mSceneMgr->getOption("TraversalTime", &travtm); + mSceneMgr->getOption("StaticBuildTime", &statbt); + + travtm = static_cast<DarkCamera*>(mCamera)->getTraversalTime(); + rendc = static_cast<DarkCamera*>(mCamera)->getVisibleCellCount(); + + guibc->setCaption(sbc + StringConverter::toString(bculls)); + guiep->setCaption(sep + StringConverter::toString(eports)); + guirc->setCaption(src + StringConverter::toString(rendc)); + guitt->setCaption(stt + StringConverter::toString(travtm) + " ms"); + guisr->setCaption(ssr + StringConverter::toString(statbt) + " ms"); + } + catch(...) + { + // ignore + } + } + } + + bool GamePlayState::keyPressed( const OIS::KeyEvent &e ) { + if( e.key == KC_F12 ) { + mConsole->setActive(!mConsole->isActive()); + return true; + } + + if (!mConsole->injectKeyPress(e)) { + if(e.key == KC_W) { + mForward = true; + return true; + } else if(e.key == KC_S) { + mBackward = true; + return true; + } else if(e.key == KC_A) { + mLeft = true; + return true; + } else if(e.key == KC_D) { + mRight = true; + return true; + } else if (e.key == KC_SYSRQ || e.key == KC_F5) { + mScreenShot = true; + return true; + } else if (e.key == KC_O) { + mSceneDisplay = true; + return true; + } else if (e.key == KC_P) { + mPortalDisplay = true; + return true; + } else return true; + } else { + return true; + }; + } + + bool GamePlayState::keyReleased( const OIS::KeyEvent &e ) { + if (!mConsole->isActive()) { + if(e.key == KC_W) { + mForward = false; + return true; + } else if(e.key == KC_S) { + mBackward = false; + return true; + } else if(e.key == KC_A) { + mLeft = false; + return true; + } else if(e.key == KC_D) { + mRight = false; + return true; + } else if( e.key == KC_ESCAPE ) { + requestTermination(); + return true; + } else if (e.key == KC_I) { + mShadows = !mShadows; + + if (mShadows) + mSceneMgr->setShadowTechnique(SHADOWTYPE_TEXTURE_MODULATIVE); + else + mSceneMgr->setShadowTechnique(SHADOWTYPE_NONE); + } + + return true; + } else return true; + } + + bool GamePlayState::mouseMoved( const OIS::MouseEvent &e ) { + mRotX -= Degree( e.state.X.rel * 20.00); + // use Y axis invert + mRotY -= Degree( e.state.Y.rel * 20.00 * mRotateYFactor); + return false; + } + + bool GamePlayState::mousePressed( const OIS::MouseEvent &e, OIS::MouseButtonID id ) { + return false; + } + + bool GamePlayState::mouseReleased( const OIS::MouseEvent &e, OIS::MouseButtonID id ) { + return false; + } + + void GamePlayState::commandExecuted(std::string command, std::string parameters) { + std::cerr << "command " << command << " " << parameters << std::endl; + + if (command == "load") { + // specify the mission file to load by the load state, then switch to the load state + mConfigService->setParam("mission", parameters); + mToLoadScreen = true; + popState(); + } else if (command == "fps") { + const RenderTarget::FrameStats& stats = mWindow->getStatistics(); + + LOG_INFO("Average FPS : %10.2f", stats.avgFPS); + LOG_INFO("Last FPS : %10.2f", stats.lastFPS); + LOG_INFO("Worst FPS : %10.2f", stats.worstFPS); + } + } + + void GamePlayState::onLinkPlayerFactoryMsg(const LinkChangeMsg& msg) { + switch (msg.change) { + case LNK_ADDED : { + LOG_INFO("GamePlayState: Found StartingPoint"); + // get the Link ref. + LinkPtr l = mPlayerFactoryRelation->getLink(msg.linkID); + StartingPointObjID = l->src(); + break; + } + } + } + + void GamePlayState::bootstrapFinished() { + mLinkService = static_pointer_cast<LinkService>(ServiceManager::getSingleton().getService("LinkService")); + Relation::ListenerPtr metaPropCallback = + new ClassCallback<LinkChangeMsg, GamePlayState>(this, &GamePlayState::onLinkPlayerFactoryMsg); + + mPlayerFactoryRelation = mLinkService->getRelation("PlayerFactory"); + + if (mPlayerFactoryRelation.isNull()) + OPDE_EXCEPT("MetaProp relation not found. Fatal.", "InheritService::init"); + + mPlayerFactoryListenerID = mPlayerFactoryRelation->registerListener(metaPropCallback); + LOG_INFO("GamePlayState::bootstrapFinished() - done"); + } + + GamePlayState& GamePlayState::getSingleton() { + assert(ms_Singleton); return *ms_Singleton; + } + + GamePlayState* GamePlayState::getSingletonPtr() { + return ms_Singleton; + } + +} + Modified: trunk/src/scenemanager/DarkSceneManager.cpp =================================================================== --- trunk/src/scenemanager/DarkSceneManager.cpp 2008-10-30 15:03:25 UTC (rev 947) +++ trunk/src/scenemanager/DarkSceneManager.cpp 2008-11-01 16:02:00 UTC (rev 948) @@ -81,6 +81,12 @@ // clear all the geometries destroyAllGeometries(); + // clear the visible cell list for all cameras + CameraList::iterator cit = mCameras.begin(); + + for (; cit != mCameras.end(); ++cit) + static_cast<DarkCamera*>(cit->second)->mVisibleCells.clear(); + SceneManager::clearScene(); } Modified: trunk/src/services/database/DatabaseService.cpp =================================================================== --- trunk/src/services/database/DatabaseService.cpp 2008-10-30 15:03:25 UTC (rev 947) +++ trunk/src/services/database/DatabaseService.cpp 2008-11-01 16:02:00 UTC (rev 948) @@ -112,7 +112,7 @@ m.db = mCurDB; - broadcastMessage(m); + broadcastMessageReversed(m); /// Wipe out the files we used mCurDB.setNull(); @@ -200,6 +200,26 @@ } } + //------------------------------------------------------ + void DatabaseService::broadcastMessageReversed(const DatabaseChangeMsg& msg) { + Listeners::reverse_iterator it = mListeners.rbegin(); + + for (; it != mListeners.rend(); ++it) { + // Use the callback functor to fire the callback + (*it->second)(msg); + + // recalculate the status + mLoadingStatus.currentCoarse++; + + mLoadingStatus.recalc(); + + // call the progress listener if it is set + if (!mProgressListener.isNull()) { + (*mProgressListener)(mLoadingStatus); + } + } + } + //-------------------------- Factory implementation std::string DatabaseServiceFactory::mName = "DatabaseService"; Modified: trunk/src/services/database/DatabaseService.h =================================================================== --- trunk/src/services/database/DatabaseService.h 2008-10-30 15:03:25 UTC (rev 947) +++ trunk/src/services/database/DatabaseService.h 2008-11-01 16:02:00 UTC (rev 948) @@ -147,6 +147,9 @@ /// Overriden broadcast to support progress reports virtual void broadcastMessage(const DatabaseChangeMsg& msg); + /// a reverse order message broadcaster - this one is used in unloading + virtual void broadcastMessageReversed(const DatabaseChangeMsg& msg); + FileGroupPtr mCurDB; /// Used to report to the Progress Listener Modified: trunk/src/services/object/ObjectService.cpp =================================================================== --- trunk/src/services/object/ObjectService.cpp 2008-10-30 15:03:25 UTC (rev 947) +++ trunk/src/services/object/ObjectService.cpp 2008-11-01 16:02:00 UTC (rev 948) @@ -232,13 +232,18 @@ void ObjectService::createBuiltinResources() { mPropertyService = static_pointer_cast<PropertyService>(ServiceManager::getSingleton().getService("PropertyService")); - // DonorType property (single integer property): - // mPropertyService->createPropertyGroup(); - // create the builtin DonorType property + // DonorType property (single integer property, built in): DataStoragePtr stor = new IntDataStorage(); mPropDonorType = mPropertyService->createPropertyGroup("DonorType", "DonorType", "never", stor); // version of the property tag mPropDonorType->setChunkVersions(2, 4); + + // symbolic name builtin property + mSymNameStorage = new SymNamePropertyStorage(); + mPropSymName = mPropertyService->createPropertyGroup("SymbolicName", "SymbolicName", "never", mSymNameStorage); + mPropSymName->setChunkVersions(2, 17); + + // TODO: Position } //------------------------------------------------------ @@ -261,15 +266,6 @@ if (mPropPosition == NULL) OPDE_EXCEPT("Could not get Position property group. Not defined. Fatal", "ObjectService::bootstrapFinished"); - - mPropSymName = mPropertyService->getPropertyGroup("SymbolicName"); - - if (mPropSymName == NULL) - OPDE_EXCEPT("Could not get SymbolicName property group. Not defined. Fatal", "ObjectService::bootstrapFinished"); - - mSymNameStorage = new SymNamePropertyStorage(); - - mPropSymName->setPropertyStorage(mSymNameStorage); } //------------------------------------------------------ @@ -395,13 +391,13 @@ // Now, inform link service and property service (let them load) try { - mPropertyService->load(db); + mPropertyService->load(db, fileObjs); } catch (BasicException& e) { LOG_FATAL("Exception while loading properties from mission database : %s", e.getDetails().c_str()); } try { - mLinkService->load(db); // will load MP links if those exist, causing inherited properties to emerge + mLinkService->load(db); // will load MP links if those exist as well, causing inherited properties to emerge } catch (BasicException& e) { LOG_FATAL("Exception while loading links from mission database : %s", e.getDetails().c_str()); } Modified: trunk/src/services/property/PropertyGroup.cpp =================================================================== --- trunk/src/services/property/PropertyGroup.cpp 2008-10-30 15:03:25 UTC (rev 947) +++ trunk/src/services/property/PropertyGroup.cpp 2008-11-01 16:02:00 UTC (rev 948) @@ -100,7 +100,7 @@ } // -------------------------------------------------------------------------- - void PropertyGroup::load(const FileGroupPtr& db) { + void PropertyGroup::load(const FileGroupPtr& db, const BitArray& objMask) { // Open the chunk specified by "P$" + mChunkName FilePtr fprop; @@ -128,6 +128,16 @@ // load the id fprop->readElem(&id, sizeof(uint32_t)); + // if the object is not in the mask, skip the property + if (!objMask[id]) { + LOG_DEBUG("PropertyGroup::load: skipping object %d, not in bitmap", id); + // prop has length and data - so skip according to that + uint32_t size; + fprop->read(&size, sizeof(uint32_t)); + fprop->seek(size, File::FSEEK_CUR); + continue; + } + // Use property storage to load the property if (mPropertyStorage->readFromFile(fprop, id, true)) { _addProperty(id); Modified: trunk/src/services/property/PropertyGroup.h =================================================================== --- trunk/src/services/property/PropertyGroup.h 2008-10-30 15:03:25 UTC (rev 947) +++ trunk/src/services/property/PropertyGroup.h 2008-11-01 16:02:00 UTC (rev 948) @@ -115,8 +115,10 @@ } /** Loads properties from a file group - * @param db The database to load from */ - void load(const FileGroupPtr& db); + * @param db The database to load from + * @param objMask The BitArray of objects to be loaded (other properties are skipped) + */ + void load(const FileGroupPtr& db, const BitArray& objMask); /** Saves properties to a file group * @param db The database to save to Modified: trunk/src/services/property/PropertyService.cpp =================================================================== --- trunk/src/services/property/PropertyService.cpp 2008-10-30 15:03:25 UTC (rev 947) +++ trunk/src/services/property/PropertyService.cpp 2008-11-01 16:02:00 UTC (rev 948) @@ -143,14 +143,14 @@ } // -------------------------------------------------------------------------- - void PropertyService::load(const FileGroupPtr& db) { + void PropertyService::load(const FileGroupPtr& db, const BitArray& objMask) { // We just give the db to all registered groups PropertyGroupMap::iterator it = mPropertyGroupMap.begin(); for (; it != mPropertyGroupMap.end(); ++it) { try { LOG_INFO("PropertyService: Loading property group %s", it->first.c_str()); - it->second->load(db); + it->second->load(db, objMask); } catch (BasicException &e) { LOG_FATAL("PropertyService: Caught a fatal exception while loading PropertyGroup %s : %s", it->first.c_str(), e.getDetails().c_str() ); } Modified: trunk/src/services/property/PropertyService.h =================================================================== --- trunk/src/services/property/PropertyService.h 2008-10-30 15:03:25 UTC (rev 947) +++ trunk/src/services/property/PropertyService.h 2008-11-01 16:02:00 UTC (rev 948) @@ -107,8 +107,10 @@ void objectDestroyed(int id); /** Load the properties from the database - * @param db The database file group to use */ - void load(const FileGroupPtr& db); + * @param db The database file group to use + * @param objMask The BitArray of objects to be loaded (other properties are skipped) + */ + void load(const FileGroupPtr& db, const BitArray& objMask); /** Saves the properties according to the saveMask * @param db The database file group to save to Modified: trunk/src/services/render/RenderService.cpp =================================================================== --- trunk/src/services/render/RenderService.cpp 2008-10-30 15:03:25 UTC (rev 947) +++ trunk/src/services/render/RenderService.cpp 2008-11-01 16:02:00 UTC (rev 948) @@ -182,7 +182,20 @@ // -------------------------------------------------------------------------- RenderService::~RenderService() { - LOG_INFO("RenderService::~RenderService()"); + if (mRenderWindow) + mRenderWindow->removeAllViewports(); + + if (mSceneMgr) + mSceneMgr->destroyAllCameras(); + + if (mDarkSMFactory) { + Root::getSingleton().removeSceneManagerFactory(mDarkSMFactory); + delete mDarkSMFactory; + mDarkSMFactory = NULL; + } + + delete mManualBinFileLoader; + mManualBinFileLoader = NULL; } // -------------------------------------------------------------------------- @@ -221,21 +234,6 @@ mPropScale->unregisterListener(mPropScaleListenerID); mPropScale = NULL; - if (mRenderWindow) - mRenderWindow->removeAllViewports(); - - if (mSceneMgr) - mSceneMgr->destroyAllCameras(); - - if (mDarkSMFactory) { - Root::getSingleton().removeSceneManagerFactory(mDarkSMFactory); - delete mDarkSMFactory; - mDarkSMFactory = NULL; - } - - delete mManualBinFileLoader; - mManualBinFileLoader = NULL; - if (!mLoopService.isNull()) mLoopService->removeLoopClient(this); } @@ -897,6 +895,12 @@ void RenderService::setObjectModel(int id, const std::string& name) { EntityInfo* ei = _getEntityInfo(id); + // if there was an error finding the entity info, the object does not exist + if (!ei) { + LOG_VERBOSE("RenderService: Object model could not be set for %d, object not found", id); + return; + } + // if the new name is empty, just set skip and it's done if (name == "") { LOG_VERBOSE("RenderService: Mesh rendering for %d disabled", id); @@ -956,6 +960,10 @@ void RenderService::clear() { // will destroy all EntityInfos mEntityMap.clear(); + + mLightInfoMap.clear(); + + mObjectToNode.clear(); } Modified: trunk/src/services/worldrep/WorldRepService.cpp =================================================================== --- trunk/src/services/worldrep/WorldRepService.cpp 2008-10-30 15:03:25 UTC (rev 947) +++ trunk/src/services/worldrep/WorldRepService.cpp 2008-11-01 16:02:00 UTC (rev 948) @@ -102,12 +102,16 @@ } - WorldRepService::~WorldRepService() { + void WorldRepService::shutdown() { mDatabaseService->unregisterListener(mDbCallback); + mDatabaseService = NULL; clearData(); } + WorldRepService::~WorldRepService() { + } + void WorldRepService::addWorldMaterial(const MaterialPtr& material) { mLoadedMaterials.push_back(material); } @@ -180,6 +184,11 @@ void WorldRepService::clearData() { LOG_INFO("WorldRepService::clearData called"); + // this might cause problems because of render service trying to + // release all the entities later, when those are already invalid + // a special care must be taken + mSceneMgr->clearScene(); + if (mCells != NULL) { for (uint32_t i = 0; i < mNumCells; i++) { LOG_DEBUG("WorldRepService::clearData deleting cell %d of %d", i, mNumCells); Modified: trunk/src/services/worldrep/WorldRepService.h =================================================================== --- trunk/src/services/worldrep/WorldRepService.h 2008-10-30 15:03:25 UTC (rev 947) +++ trunk/src/services/worldrep/WorldRepService.h 2008-11-01 16:02:00 UTC (rev 948) @@ -80,6 +80,7 @@ protected: virtual bool init(); virtual void bootstrapFinished(); + void shutdown(); /// Database change callback void onDBChange(const DatabaseChangeMsg& m); This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <vo...@us...> - 2008-11-20 14:03:43
|
Revision: 992 http://opde.svn.sourceforge.net/opde/?rev=992&view=rev Author: volca Date: 2008-11-20 14:03:33 +0000 (Thu, 20 Nov 2008) Log Message: ----------- Light count added to statistics Modified Paths: -------------- trunk/scripts/OpdeDebugPanel.overlay trunk/src/scenemanager/DarkSceneManager.cpp trunk/src/scenemanager/DarkSceneManager.h Modified: trunk/scripts/OpdeDebugPanel.overlay =================================================================== --- trunk/scripts/OpdeDebugPanel.overlay 2008-11-20 14:02:46 UTC (rev 991) +++ trunk/scripts/OpdeDebugPanel.overlay 2008-11-20 14:03:33 UTC (rev 992) @@ -123,7 +123,7 @@ colour_bottom 0.3 0.5 0.3 } - element TextArea(Opde/SceneGraphTime) + element TextArea(Opde/LightCount) { metrics_mode pixels left 5 @@ -132,6 +132,20 @@ height 30 font_name DebugFont char_height 16 + caption Light count: + colour_top 0.5 0.7 0.5 + colour_bottom 0.3 0.5 0.3 + } + + element TextArea(Opde/SceneGraphTime) + { + metrics_mode pixels + left 5 + top 146 + width 90 + height 30 + font_name DebugFont + char_height 16 caption Scene graph Time: colour_top 0.5 0.7 0.5 colour_bottom 0.3 0.5 0.3 Modified: trunk/src/scenemanager/DarkSceneManager.cpp =================================================================== --- trunk/src/scenemanager/DarkSceneManager.cpp 2008-11-20 14:02:46 UTC (rev 991) +++ trunk/src/scenemanager/DarkSceneManager.cpp 2008-11-20 14:03:33 UTC (rev 992) @@ -462,6 +462,7 @@ _notifyLightsDirty(); } + mLightCount = mCachedLightInfos.size(); mLightListTime = Root::getSingleton().getTimer()->getMilliseconds() - startt; } @@ -621,8 +622,12 @@ } else if (strKey == "SceneGraphTime") { *(static_cast<unsigned long*>(pDestValue)) = mSceneGraphTime; return true; + } else if (strKey == "LightCount") { + *(static_cast<unsigned long*>(pDestValue)) = mLightCount; + return true; } + return SceneManager::getOption(strKey, pDestValue); } Modified: trunk/src/scenemanager/DarkSceneManager.h =================================================================== --- trunk/src/scenemanager/DarkSceneManager.h 2008-11-20 14:02:46 UTC (rev 991) +++ trunk/src/scenemanager/DarkSceneManager.h 2008-11-20 14:03:33 UTC (rev 992) @@ -201,6 +201,9 @@ /// Time it took to update scene graph unsigned long mSceneGraphTime; + /// Count of the lights found for the current frustum + unsigned long mLightCount; + /** movables found to be visible */ typedef std::set<const MovableObject*> MovablesForRendering; This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <vo...@us...> - 2008-12-03 19:45:09
|
Revision: 1002 http://opde.svn.sourceforge.net/opde/?rev=1002&view=rev Author: volca Date: 2008-12-03 19:45:05 +0000 (Wed, 03 Dec 2008) Log Message: ----------- Propagate the filed desc list getter of relations throughout the codebase (and to scripts as well) Modified Paths: -------------- trunk/scripts/python/tree.py trunk/src/bindings/LinkServiceBinder.cpp trunk/src/bindings/LinkServiceBinder.h trunk/src/bindings/RelationBinder.cpp trunk/src/bindings/RelationBinder.h trunk/src/services/link/LinkService.cpp trunk/src/services/link/LinkService.h trunk/src/services/link/Relation.cpp trunk/src/services/link/Relation.h Modified: trunk/scripts/python/tree.py =================================================================== --- trunk/scripts/python/tree.py 2008-12-03 18:12:41 UTC (rev 1001) +++ trunk/scripts/python/tree.py 2008-12-03 19:45:05 UTC (rev 1002) @@ -175,6 +175,20 @@ return "{" + (" ".join(pv)) + "}" +def getLinkStr(lid,flav): + # get all prop field names + pd = linksrv.getFieldsDesc(flav) + rel = linksrv.getRelation(flav) + + lv = [] + + for d in pd: + # get value as string + lv.append("%s" % rel.getLinkField(lid, d.name)) + + return "{" + (" ".join(lv)) + "}" + + def getObjProps(oid): """Lists properties the object has""" res = [] @@ -199,12 +213,14 @@ if ln.startswith('~'): continue; + flav = linksrv.nameToFlavor(ln) + # Ignore metaprop if ln == "MetaProp": continue; # ask if the link has any outgoing - rel = linksrv.getRelation(ln) + rel = linksrv.getRelation(flav) tgt = rel.getAllLinks(oid, 0) @@ -214,6 +230,9 @@ for l in tgt: lres.append("%s" % l.dst) + if verbose != 0: + lres.append(getLinkStr(l.id, flav)) + if lres != []: res.append("%s [%s]" % (ln, " ".join(lres))) Modified: trunk/src/bindings/LinkServiceBinder.cpp =================================================================== --- trunk/src/bindings/LinkServiceBinder.cpp 2008-12-03 18:12:41 UTC (rev 1001) +++ trunk/src/bindings/LinkServiceBinder.cpp 2008-12-03 19:45:05 UTC (rev 1002) @@ -27,6 +27,7 @@ #include "RelationBinder.h" #include "LinkQueryResultBinder.h" #include "StringIteratorBinder.h" +#include "DataFieldDescIteratorBinder.h" namespace Opde { @@ -79,6 +80,7 @@ {"getAllLinks", getAllLinks, METH_VARARGS}, {"getOneLink", getOneLink, METH_VARARGS}, {"getAllLinkNames", getAllLinkNames, METH_NOARGS}, + {"getFieldsDesc", getFieldsDesc, METH_VARARGS}, {NULL, NULL}, }; @@ -255,6 +257,34 @@ } // ------------------------------------------ + PyObject* LinkServiceBinder::getFieldsDesc(PyObject* self, PyObject* args) { + Object* o = python_cast<Object*>(self, &msType); + + PyObject* objflav; + int flavor = 0; + + if (PyArg_ParseTuple(args, "O", &objflav)) { + if (PyString_Check(objflav)) { + char* str = PyString_AsString(objflav); + flavor = o->mInstance->nameToFlavor(str); + } else if (PyInt_Check(objflav)) { + flavor = PyInt_AsLong(objflav); + } else { + PyErr_SetString(PyExc_TypeError, "Invalid type given for flavor: expected string or integer"); + return NULL; + } + + // wrap the returned StringIterator into StringIteratorBinder, return + DataFieldDescIteratorPtr res = o->mInstance->getFieldDescIterator(flavor); + return DataFieldDescIteratorBinder::create(res); + } + + // Invalid parameters + PyErr_SetString(PyExc_TypeError, "Expected a string or integer argument!"); + return NULL; + } + + // ------------------------------------------ PyObject* LinkServiceBinder::getattr(PyObject *self, char *name) { return Py_FindMethod(msMethods, self, name); } Modified: trunk/src/bindings/LinkServiceBinder.h =================================================================== --- trunk/src/bindings/LinkServiceBinder.h 2008-12-03 18:12:41 UTC (rev 1001) +++ trunk/src/bindings/LinkServiceBinder.h 2008-12-03 19:45:05 UTC (rev 1002) @@ -38,7 +38,7 @@ class LinkServiceBinder : public shared_ptr_binder<LinkServicePtr> { public: static void init(PyObject* module); - + // --- Python type related methods --- static PyObject* getattr(PyObject *self, char *name); @@ -52,7 +52,8 @@ static PyObject* getAllLinks(PyObject* self, PyObject* args); static PyObject* getOneLink(PyObject* self, PyObject* args); static PyObject* getAllLinkNames(PyObject* self, PyObject* args); - + static PyObject* getFieldsDesc(PyObject* self, PyObject* args); + protected: /// Static type definition for LinkService static PyTypeObject msType; @@ -63,18 +64,18 @@ /// Method list static PyMethodDef msMethods[]; }; - + // ------------------------------- /// Link class binder. The methods are converted to read-only attributes class LinkBinder : public shared_ptr_binder<LinkPtr> { public: static void init(PyObject* module); - + // --- Python type related methods --- static PyObject* getattr(PyObject *self, char *name); static PyObject* create(LinkPtr& link); - + protected: /// Static type definition for LinkService static PyTypeObject msType; Modified: trunk/src/bindings/RelationBinder.cpp =================================================================== --- trunk/src/bindings/RelationBinder.cpp 2008-12-03 18:12:41 UTC (rev 1001) +++ trunk/src/bindings/RelationBinder.cpp 2008-12-03 19:45:05 UTC (rev 1002) @@ -27,6 +27,7 @@ #include "DTypeBinder.h" #include "LinkQueryResultBinder.h" #include "LinkServiceBinder.h" +#include "DataFieldDescIteratorBinder.h" namespace Opde { @@ -80,21 +81,22 @@ {"setLinkField", setLinkField, METH_VARARGS}, {"getAllLinks", getAllLinks, METH_VARARGS}, {"getOneLink", getOneLink, METH_VARARGS}, + {"getFieldsDesc", getFieldsDesc, METH_NOARGS}, {NULL, NULL}, }; - + // ------------------------------------------ PyObject* RelationBinder::getID(PyObject* self, PyObject* args) { Object* o = python_cast<Object*>(self, &msType); - + // Get the flavor, construct a python string, return. return PyInt_FromLong(o->mInstance->getID()); } - + // ------------------------------------------ PyObject* RelationBinder::getName(PyObject* self, PyObject* args) { Object* o = python_cast<Object*>(self, &msType); - + // Get the name, construct a python string, return. return PyString_FromString(o->mInstance->getName().c_str()); } @@ -102,7 +104,7 @@ // ------------------------------------------ PyObject* RelationBinder::remove(PyObject* self, PyObject* args) { Object* o = python_cast<Object*>(self, &msType); - + int id; if (PyArg_ParseTuple(args, "i", &id)) { @@ -121,14 +123,14 @@ // ------------------------------------------ PyObject* RelationBinder::createLink(PyObject* self, PyObject* args) { Object* o = python_cast<Object*>(self, &msType); - + int from, to; if (PyArg_ParseTuple(args, "ii", &from, &to)) { link_id_t id; - + id = o->mInstance->create(from, to); - + return PyLong_FromUnsignedLong(id); } else { // Invalid parameters @@ -141,36 +143,36 @@ PyObject* RelationBinder::getLinkField(PyObject* self, PyObject* args) { PyObject *result = NULL; Object* o = python_cast<Object*>(self, &msType); - + int id; const char* field; - if (PyArg_ParseTuple(args, "is", &id, &field)) + if (PyArg_ParseTuple(args, "is", &id, &field)) { DVariant value; value = o->mInstance->getLinkField(id, field); result = DVariantToPyObject(value); return result; - } - else + } + else { // Invalid parameters PyErr_SetString(PyExc_TypeError, "Expected a string argument!"); return NULL; } } - + // ------------------------------------------ PyObject* RelationBinder::setLinkField(PyObject* self, PyObject* args) { PyObject *result = NULL; Object* o = python_cast<Object*>(self, &msType); - + int id; const char* field; PyObject* Object = NULL; - if (PyArg_ParseTuple(args, "isO", &id, &field, &Object)) + if (PyArg_ParseTuple(args, "isO", &id, &field, &Object)) { DVariant value; value = PyObjectToDVariant(Object); @@ -179,62 +181,74 @@ result = Py_None; Py_INCREF(result); return result; - } - else + } + else { // Invalid parameters PyErr_SetString(PyExc_TypeError, "Expected a string and a value!"); return NULL; } } - + // ------------------------------------------ PyObject* RelationBinder::getAllLinks(PyObject* self, PyObject* args) { PyObject *result = NULL; Object* o = python_cast<Object*>(self, &msType); - + int src, dst; - - if (PyArg_ParseTuple(args, "ii", &src, &dst)) + + if (PyArg_ParseTuple(args, "ii", &src, &dst)) { LinkQueryResultPtr res = o->mInstance->getAllLinks(src, dst); - + return LinkQueryResultBinder::create(res); - } - else + } + else { // Invalid parameters PyErr_SetString(PyExc_TypeError, "Expected two integer parameters: src and dst!"); return NULL; } } - + // ------------------------------------------ PyObject* RelationBinder::getOneLink(PyObject* self, PyObject* args) { // Nearly the same as getAllLinks. Only that it returns PyObject for LinkPtr directly PyObject *result = NULL; Object* o = python_cast<Object*>(self, &msType); - + int src, dst; - - if (PyArg_ParseTuple(args, "ii", &src, &dst)) + + if (PyArg_ParseTuple(args, "ii", &src, &dst)) { LinkPtr res = o->mInstance->getOneLink(src, dst); return LinkBinder::create(res); - } - else + } + else { // Invalid parameters PyErr_SetString(PyExc_TypeError, "Expected two integer parameters: src and dst!"); return NULL; } } - + // ------------------------------------------ + PyObject* RelationBinder::getFieldsDesc(PyObject* self, PyObject* args) { + Object* o = python_cast<Object*>(self, &msType); + + PyObject* objflav; + int flavor = 0; + + // wrap the returned StringIterator into StringIteratorBinder, return + DataFieldDescIteratorPtr res = o->mInstance->getFieldDescIterator(); + return DataFieldDescIteratorBinder::create(res); + } + + // ------------------------------------------ PyObject* RelationBinder::getattr(PyObject *self, char *name) { return Py_FindMethod(msMethods, self, name); } - + // ------------------------------------------ PyObject* RelationBinder::repr(PyObject *self) { return PyString_FromFormat("<Relation at %p>", self); @@ -250,7 +264,7 @@ return (PyObject *)object; } - + // ------------------------------------------ void RelationBinder::init(PyObject* module) { publishType(module, &msType, msName); Modified: trunk/src/bindings/RelationBinder.h =================================================================== --- trunk/src/bindings/RelationBinder.h 2008-12-03 18:12:41 UTC (rev 1001) +++ trunk/src/bindings/RelationBinder.h 2008-12-03 19:45:05 UTC (rev 1002) @@ -38,10 +38,10 @@ class RelationBinder : public shared_ptr_binder<RelationPtr> { public: static void init(PyObject* module); - + // --- Python type related methods --- static PyObject* getattr(PyObject *self, char *name); - + /// to string - reprfunc conversion static PyObject* repr(PyObject *self); @@ -55,10 +55,12 @@ static PyObject* createLink(PyObject* self, PyObject* args); static PyObject* getLinkField(PyObject* self, PyObject* args); static PyObject* setLinkField(PyObject* self, PyObject* args); - + static PyObject* getAllLinks(PyObject* self, PyObject* args); static PyObject* getOneLink(PyObject* self, PyObject* args); - + + static PyObject* getFieldsDesc(PyObject* self, PyObject* args); + protected: /// Static type definition for LinkService static PyTypeObject msType; Modified: trunk/src/services/link/LinkService.cpp =================================================================== --- trunk/src/services/link/LinkService.cpp 2008-12-03 18:12:41 UTC (rev 1001) +++ trunk/src/services/link/LinkService.cpp 2008-12-03 19:45:05 UTC (rev 1002) @@ -312,6 +312,19 @@ return new RelationNameMapKeyIterator(mRelationNameMap); } + // -------------------------------------------------------------------------- + DataFieldDescIteratorPtr LinkService::getFieldDescIterator(int flavor) { + // find relation + RelationIDMap::const_iterator it = mRelationIDMap.find(flavor); + + if (it != mRelationIDMap.end()) { + // dedicate to the given relation + return it->second->getFieldDescIterator(); + } else { + return NULL; + } + } + //------------------------------------------------------ bool LinkService::requestRelationFlavorMap(int id, const std::string& name, RelationPtr& rel) { std::pair<FlavorToName::iterator, bool> res1 = mFlavorToName.insert(make_pair(id, name)); Modified: trunk/src/services/link/LinkService.h =================================================================== --- trunk/src/services/link/LinkService.h 2008-12-03 18:12:41 UTC (rev 1001) +++ trunk/src/services/link/LinkService.h 2008-12-03 19:45:05 UTC (rev 1002) @@ -50,12 +50,12 @@ mRelVMin = minor; } - /** Convert the relation name to a flavor + /** Convert the relation name to a flavor * @param name the relation name * @return int The relation id (Flavor), or zero if not found */ int nameToFlavor(const std::string& name); - - /** Convert the relation name to a flavor + + /** Convert the relation name to a flavor * @param name the relation name * @return int The relation id (Flavor), or empty string if not found */ std::string flavorToName(int flavor); @@ -73,21 +73,21 @@ * @note The relation will be .isNull() if it was not found */ RelationPtr getRelation(const std::string& name); - + /** Get relation given it's flavor * @param flavor The relation's flavor * @return A shared_pointer to the relation, or NULL if not found * @note The relation will be .isNull() if it was not found */ RelationPtr getRelation(int flavor); - + /** A notification that object was destroyed (removes all links targetted or pointed from the obj. ID) * @param id The object id that was removed * @note Do NOT call this directly unless you know what it does */ void objectDestroyed(int id); - - /** load links from a single database + + /** load links from a single database * @param db The database to load from * @param objMask the mask of object id's to allow - both src and dst objects have to be here, otherwise link gets ignored */ void load(const FileGroupPtr& db, const BitArray& objMask); @@ -97,18 +97,18 @@ /** Clears all the data and the relation mappings */ void clear(); - + // --- link queries --- /** @see Relation::getAllLinks - @param flavor The link flavor (relation type). + @param flavor The link flavor (relation type). @param src The source object ID @param dst The destination object ID @return LinkQueryResultPtr Link iterator for resulting links @throw If invalid flavor is specified, this method will return an empty iterator */ LinkQueryResultPtr getAllLinks(int flavor, int src, int dst) const; - /** @see Relation::getOneLink - @param flavor The link flavor (relation type). + /** @see Relation::getOneLink + @param flavor The link flavor (relation type). @param src The source object ID @param dst The destination object ID @return LinkPtr Link structure for the resulting link (or NULL if none found) @@ -124,6 +124,13 @@ /** @returns a link name iterator over all link type names (both inverse and normal ones) */ StringIteratorPtr getAllLinkNames(); + /** A shortcut to Relation::getFieldDescIterator + * @param flavor The flavor of the relation + * @return the iterator over property field descriptions, or NULL if invalid name was specified + * @see Relation::getFieldDescIterator + */ + DataFieldDescIteratorPtr getFieldDescIterator(int flavor); + protected: bool init(); void bootstrapFinished(); Modified: trunk/src/services/link/Relation.cpp =================================================================== --- trunk/src/services/link/Relation.cpp 2008-12-03 18:12:41 UTC (rev 1001) +++ trunk/src/services/link/Relation.cpp 2008-12-03 19:45:05 UTC (rev 1002) @@ -112,7 +112,7 @@ // -------------------------------------------------------------------------- void Relation::load(const FileGroupPtr& db, const BitArray& objMask) { assert(!mIsInverse); - + // load the links and thei're data // Link chunk name string lchn = "L$" + mName; @@ -143,9 +143,9 @@ // link count (calculated) size_t link_count = flink->size() / 14; // sizeof(LinkStruct) - but that one is aligned! - + LOG_VERBOSE("Relation::load : %s link count %d (tag size %d)", lchn.c_str(), link_count, flink->size()); - + size_t link_data_count = 0; // if the chunk LD exists, and contains at least the data size, load the data size, and set to load data as well @@ -164,11 +164,11 @@ // check for data len if (dsize != mStorage->getDataSize()) { // This just happens. Some links have the size totally different the real - + // Only if we have the fake size wrong as well if (dsize != mFakeSize) LOG_FATAL("Relation (%s): Data sizes differ : Type: %d, Fake %d, Chunk: %d", mName.c_str(), mStorage->getDataSize(), mFakeSize, dsize); - + // we respect our data size dsize = mStorage->getDataSize(); } @@ -201,7 +201,7 @@ for (unsigned int idx = 0; idx < link_count; idx++) { LinkStruct slink; - + flink->readElem(&slink.id, sizeof(uint32_t)); flink->readElem(&slink.src, sizeof(int32_t)); flink->readElem(&slink.dest, sizeof(int32_t)); @@ -227,10 +227,10 @@ if (objMask[link->mSrc] && objMask[link->mDst]) { // Add link, notify listeners... Will search for data and throw if did not find them _addLink(link); - + // Inverse relation will get an inverse link to use LinkPtr ilink = createInverseLink(link); - + mInverse->_addLink(ilink); } else { // the mask says no to the link! @@ -255,7 +255,7 @@ // -------------------------------------------------------------------------- void Relation::save(const FileGroupPtr& db, uint saveMask) { assert(!mIsInverse); - + LOG_DEBUG("Relation::save Saving relation %s", mName.c_str()); // Link chunk name @@ -288,12 +288,12 @@ if (saveMask & (1 << conc)) { // mask says save! LinkStruct slink; - + slink.id = link->mID; slink.src = link->mSrc; slink.dest = link->mDst; slink.flavor = link->mFlavor; - + flnk->writeElem(&slink.id, sizeof(uint32_t)); flnk->writeElem(&slink.src, sizeof(int32_t)); flnk->writeElem(&slink.dest, sizeof(int32_t)); @@ -302,7 +302,7 @@ LOG_DEBUG("Relation (%s): Link concreteness of link %d was out of requested : %d", mName.c_str(), link->mID, conc); } } - + // if data are used, store if (!mStorage.isNull()) { IntIteratorPtr idit = mStorage->getAllStoredObjects(); @@ -317,7 +317,7 @@ // TODO: What exactly is the rule that one should follow selecting what to write into GAM/MIS? // I mean: there is MP link from 1 to some -X in GAM file. Hmmmm. (I guess this does not matter for in-game) fldt->writeElem(&id, sizeof(link_id_t)); - + if (!mStorage->writeToFile(fldt, id, false)) LOG_ERROR("There was an error writing link data %s for object %d. Property was not loaded", mName.c_str(), id); } @@ -326,21 +326,21 @@ } // -------------------------------------------------------------------------- - Relation* Relation::inverse() { + Relation* Relation::inverse() { assert(mInverse != NULL); assert(mInverse->isInverse() == isInverse()); - - return mInverse; + + return mInverse; }; - + // -------------------------------------------------------------------------- - void Relation::setInverseRelation(Relation* rel) { - assert(mInverse==NULL); + void Relation::setInverseRelation(Relation* rel) { + assert(mInverse==NULL); assert(rel->isInverse() != isInverse()); - - mInverse = rel; + + mInverse = rel; }; - + // -------------------------------------------------------------------------- void Relation::clear() { // first, broadcast that we're gonna erase @@ -354,7 +354,7 @@ mLinkMap.clear(); mSrcDstLinkMap.clear(); - + if (!mStorage.isNull()) mStorage->clear(); @@ -384,9 +384,9 @@ // Last, insert the link to the database and notify _addLink(newl); - + LinkPtr ilink = createInverseLink(newl); - + mInverse->_addLink(ilink); return id; @@ -396,7 +396,7 @@ void Relation::remove(link_id_t id) { // A waste I smell here. Maybe there will be a difference in Broadcasts later _removeLink(id); - + mInverse->_removeLink(id); } @@ -410,7 +410,7 @@ // Inform the listeners about the change of data broadcastMessage(m); - + return true; } else { LOG_ERROR("Relation::setLinkField : Link %d was not found in relation %d", id, mID); @@ -421,7 +421,7 @@ // -------------------------------------------------------------------------- DVariant Relation::getLinkField(link_id_t id, const std::string& field) { DVariant value; - + if (mStorage->getField(id, field, value)) { return value; } else { @@ -494,12 +494,22 @@ return NULL; } + // -------------------------------------------------------------------------- void Relation::objectDestroyed(int id) { _objectDestroyed(id); mInverse->_objectDestroyed(id); } // -------------------------------------------------------------------------- + DataFieldDescIteratorPtr Relation::getFieldDescIterator(void) { + if (!mStorage.isNull()) { + return mStorage->getFieldDescIterator(); + } else { + return new EmptyDataFieldDescListIterator(); + } + } + + // -------------------------------------------------------------------------- void Relation::_addLink(const LinkPtr& link) { // Insert, and detect the presence of such link already inserted (same ID) std::pair<LinkMap::iterator, bool> ires = mLinkMap.insert(make_pair(link->mID, link)); @@ -624,10 +634,10 @@ if (mMaxID[cidx] == lidx) { mMaxID[cidx]--; } - + // TODO: insert the link id into available for ID reuse... } - + // -------------------------------------------------------------------------- LinkPtr Relation::createInverseLink(const LinkPtr& src) { LinkPtr inv = new Link( @@ -636,10 +646,10 @@ src->src(), src->flavor() ); - + return inv; } - + // -------------------------------------------------------------------------- void Relation::_objectDestroyed(int id) { assert(id != 0); // has to be nonzero. Zero is a wildcard @@ -648,7 +658,7 @@ if (r != mSrcDstLinkMap.end()) { // I could just remove it, but let's be fair and broadcast - // This will be very stormy. Maybe we will have to + // This will be very stormy. Maybe we will have to LinkQueryResultPtr res; // We have the source object. Now branch on the dest @@ -656,7 +666,7 @@ while (!res->end()) { const LinkPtr& l = res->next(); - + _removeLink(l->id()); mInverse->_removeLink(l->id()); } Modified: trunk/src/services/link/Relation.h =================================================================== --- trunk/src/services/link/Relation.h 2008-12-03 18:12:41 UTC (rev 1001) +++ trunk/src/services/link/Relation.h 2008-12-03 19:45:05 UTC (rev 1002) @@ -62,9 +62,9 @@ /// Inverse relation getter. Will return a relation with the links going in opposite direction Relation* inverse(); - + bool isInverse() { return mIsInverse; }; - + /// Sets a inverse relation to this relation. Can only be done once. void setInverseRelation(Relation* rel); @@ -135,20 +135,28 @@ * @return LinkPtr link instance that fulfills the requirements, or NULL */ LinkPtr getLink(link_id_t id) const; - + /** Removes all links that connected to a given object ID * @param id the object id to remove all links from */ void objectDestroyed(int id); - - /** Sets the relation to cache link data (caches fields so no direct to/from data will be used on loading) + + /** Sets the relation to cache link data (caches fields so no direct to/from data will be used on loading) * @param cache if true, writes will set a the value in a cache as well, and reads will search cache first + * @deprecated */ void setCacheData(bool cache) { mUseDataCache = cache; }; - - /** @return true if cache for data is used, false otherwise */ + + /** @return true if cache for data is used, false otherwise + * @deprecated */ bool getCacheData() { return mUseDataCache; }; + /** @return A reference to const DataFieldDesc iterator, usable for data description, automatic gui composition, etc. + * Internally, this is just a wrapper around getFieldDescIterator call to DataStorage. + * @todo It should be decided if it is guaranteed to have this iterator in a storable quality - if it could be used to load/save data. + */ + DataFieldDescIteratorPtr getFieldDescIterator(void); + protected: class MultiTargetLinkQueryResult; @@ -183,13 +191,13 @@ * @note This now only decrements the maximal index of the concreteness the id has, if it was the maximal id */ void unallocateLinkID(link_id_t id); - + /** Creates an inverse link for the given link. The links share the same data, but have src and dst object id's swapped * @param src The source link * @return LinkPtr of the new inverse link */ LinkPtr createInverseLink(const LinkPtr& src); - + /** internal object destruction handler. @see objectDestroyed */ void _objectDestroyed(int id); @@ -225,7 +233,7 @@ /// fake size. This size is written as the data size into the LD$ chunks uint32_t mFakeSize; - + /// The pointer to inverse relation Relation* mInverse; @@ -237,7 +245,7 @@ uint mLCVMin; uint mDCVMaj; uint mDCVMin; - + /// If true, data caching will be used bool mUseDataCache; This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <vo...@us...> - 2008-12-03 20:26:39
|
Revision: 1004 http://opde.svn.sourceforge.net/opde/?rev=1004&view=rev Author: volca Date: 2008-12-03 20:26:34 +0000 (Wed, 03 Dec 2008) Log Message: ----------- default search path for freeimage and some formatting changes in the developers file Modified Paths: -------------- trunk/cmake/FREEIMAGEConfig.cmake trunk/doc/DEVELOPERS Modified: trunk/cmake/FREEIMAGEConfig.cmake =================================================================== --- trunk/cmake/FREEIMAGEConfig.cmake 2008-12-03 19:46:58 UTC (rev 1003) +++ trunk/cmake/FREEIMAGEConfig.cmake 2008-12-03 20:26:34 UTC (rev 1004) @@ -1,87 +1,87 @@ -# -# Try to find FREEIMAGE library on both Windows and Linux systems -# -# The following values will get defined: -# OIS_FOUND - True if ogre lib was found -# OIS_INCLUDE_DIR - Include libraries for Ogre usage -# OIS_LIBRARIES - Library paths for ogre - -SET(FREEIMAGE_FOUND) -MARK_AS_ADVANCED(FREEIMAGE_FOUND) -MARK_AS_ADVANCED(FREEIMAGE_LIBRARIES) -MARK_AS_ADVANCED(FREEIMAGE_INCLUDE_DIR) - -# For win32 builds. This can be filled with -SET(FREEIMAGE_PATH "" CACHE STRING "For Win32 lib. search. Can be filled to the path of the unzipped FreeImageXXXXWin32.zip (Including FreeImage Directory)") - -IF (UNIX) - # Hide the FREEIMAGE_PATH, not needed under unix systems - MARK_AS_ADVANCED(FREEIMAGE_PATH) - - # Let's look for lib freeimage - # There is no pkg-config for freeimage, so we have to search by hand - SET(FREEIMAGE_INC_SEARCH_PATH - /usr/include/ - /usr/local/include/ - ) - - SET(FREEIMAGE_LIB_SEARCH_PATH - /lib - /usr/lib - /usr/lib32 - /usr/lib64 - /usr/local/lib - /usr/local/lib32 - /usr/local/lib64 - ) - - # That's it. The library name without the lib and .so - SET(FREEIMAGE_LIBNAMES freeimage) - - # The search begins - FIND_PATH(FREEIMAGE_INCLUDE_DIR FreeImage.h ${FREEIMAGE_INC_SEARCH_PATH}) - - IF(NOT FREEIMAGE_INCLUDE_DIR) - MESSAGE("Warning: FreeImage.h not found under ${FREEIMAGE_INC_SEARCH_PATH}") - SET(FREEIMAGE_FOUND 0) - ENDIF(NOT FREEIMAGE_INCLUDE_DIR) - - # Headers up ok, now the lib - FIND_LIBRARY(FREEIMAGE_LIBRARIES NAME ${FREEIMAGE_LIBNAMES} PATHS ${FREEIMAGE_SEARCH_PATH}) - - IF(NOT FREEIMAGE_LIBRARIES) - MESSAGE("Warning: FreeImage library not found under ${FREEIMAGE_LIB_SEARCH_PATH}") - SET(FREEIMAGE_FOUND 0) - ENDIF(NOT FREEIMAGE_LIBRARIES) -ENDIF(UNIX) - -IF(WIN32) - SET(FREEIMAGE_INC_SEARCH_PATH - $ENV{FREEIMAGE_PATH}/Dist - ${FREEIMAGE_PATH}/Dist - ) - - SET(FREEIMAGE_LIB_SEARCH_PATH - $ENV{FREEIMAGE_PATH}/Dist - ${FREEIMAGE_PATH}/Dist - ) - - # That's it. The library name without the lib and .so - SET(FREEIMAGE_LIBNAMES freeimage) - - # The search begins - FIND_PATH(FREEIMAGE_INCLUDE_DIR FreeImage.h ${FREEIMAGE_INC_SEARCH_PATH}) - - IF(NOT FREEIMAGE_INCLUDE_DIR) - MESSAGE("Warning: FreeImage.h not found under ${FREEIMAGE_INC_SEARCH_PATH}") - SET(FREEIMAGE_FOUND 0) - ENDIF(NOT FREEIMAGE_INCLUDE_DIR) - - # Headers up ok, now the lib - FIND_LIBRARY(FREEIMAGE_LIBRARIES NAME ${FREEIMAGE_LIBNAMES} PATHS ${FREEIMAGE_LIB_SEARCH_PATH}) - - IF(NOT FREEIMAGE_LIBRARIES) - MESSAGE("Warning: FreeImage library not found under ${FREEIMAGE_LIB_SEARCH_PATH}") - SET(FREEIMAGE_FOUND 0) - ENDIF(NOT FREEIMAGE_LIBRARIES) -ENDIF(WIN32) +# +# Try to find FREEIMAGE library on both Windows and Linux systems +# +# The following values will get defined: +# FREEIMAGE_FOUND - True if ogre lib was found +# FREEIMAGE_INCLUDE_DIR - Include libraries for Ogre usage +# FREEIMAGE_LIBRARIES - Library paths for ogre + +SET(FREEIMAGE_FOUND) +MARK_AS_ADVANCED(FREEIMAGE_FOUND) +MARK_AS_ADVANCED(FREEIMAGE_LIBRARIES) +MARK_AS_ADVANCED(FREEIMAGE_INCLUDE_DIR) + +# For win32 builds. This can be filled by hand. Standard path is dependencies directory next to opde binary dir (out of source build target directory) +SET(FREEIMAGE_PATH "${OPDE_BINARY_DIR}/../dependencies/freeimage/" CACHE STRING "For Win32 lib. search. Can be filled to the path of the unzipped FreeImageXXXXWin32.zip (Including FreeImage Directory)") + +IF (UNIX) + # Hide the FREEIMAGE_PATH, not needed under unix systems + MARK_AS_ADVANCED(FREEIMAGE_PATH) + + # Let's look for lib freeimage + # There is no pkg-config for freeimage, so we have to search by hand + SET(FREEIMAGE_INC_SEARCH_PATH + /usr/include/ + /usr/local/include/ + ) + + SET(FREEIMAGE_LIB_SEARCH_PATH + /lib + /usr/lib + /usr/lib32 + /usr/lib64 + /usr/local/lib + /usr/local/lib32 + /usr/local/lib64 + ) + + # That's it. The library name without the lib and .so + SET(FREEIMAGE_LIBNAMES freeimage) + + # The search begins + FIND_PATH(FREEIMAGE_INCLUDE_DIR FreeImage.h ${FREEIMAGE_INC_SEARCH_PATH}) + + IF(NOT FREEIMAGE_INCLUDE_DIR) + MESSAGE("Warning: FreeImage.h not found under ${FREEIMAGE_INC_SEARCH_PATH}") + SET(FREEIMAGE_FOUND 0) + ENDIF(NOT FREEIMAGE_INCLUDE_DIR) + + # Headers up ok, now the lib + FIND_LIBRARY(FREEIMAGE_LIBRARIES NAME ${FREEIMAGE_LIBNAMES} PATHS ${FREEIMAGE_SEARCH_PATH}) + + IF(NOT FREEIMAGE_LIBRARIES) + MESSAGE("Warning: FreeImage library not found under ${FREEIMAGE_LIB_SEARCH_PATH}") + SET(FREEIMAGE_FOUND 0) + ENDIF(NOT FREEIMAGE_LIBRARIES) +ENDIF(UNIX) + +IF(WIN32) + SET(FREEIMAGE_INC_SEARCH_PATH + $ENV{FREEIMAGE_PATH}/Dist + ${FREEIMAGE_PATH}/Dist + ) + + SET(FREEIMAGE_LIB_SEARCH_PATH + $ENV{FREEIMAGE_PATH}/Dist + ${FREEIMAGE_PATH}/Dist + ) + + # That's it. The library name without the lib and .so + SET(FREEIMAGE_LIBNAMES freeimage) + + # The search begins + FIND_PATH(FREEIMAGE_INCLUDE_DIR FreeImage.h ${FREEIMAGE_INC_SEARCH_PATH}) + + IF(NOT FREEIMAGE_INCLUDE_DIR) + MESSAGE("Warning: FreeImage.h not found under ${FREEIMAGE_INC_SEARCH_PATH}") + SET(FREEIMAGE_FOUND 0) + ENDIF(NOT FREEIMAGE_INCLUDE_DIR) + + # Headers up ok, now the lib + FIND_LIBRARY(FREEIMAGE_LIBRARIES NAME ${FREEIMAGE_LIBNAMES} PATHS ${FREEIMAGE_LIB_SEARCH_PATH}) + + IF(NOT FREEIMAGE_LIBRARIES) + MESSAGE("Warning: FreeImage library not found under ${FREEIMAGE_LIB_SEARCH_PATH}") + SET(FREEIMAGE_FOUND 0) + ENDIF(NOT FREEIMAGE_LIBRARIES) +ENDIF(WIN32) Modified: trunk/doc/DEVELOPERS =================================================================== --- trunk/doc/DEVELOPERS 2008-12-03 19:46:58 UTC (rev 1003) +++ trunk/doc/DEVELOPERS 2008-12-03 20:26:34 UTC (rev 1004) @@ -1,197 +1,225 @@ - Notes for Developers: -*-text-*- - --------------------- - -Last updated on 19-Oct-2008 - ----------------- -- Requirements - ----------------- -OPDE needs: -* OGRE3D library, 1.4 series and FreeImage library (an ogre requirement, should be a part of SDK under windows). -* OIS (The part of Ogre SDK under windows, do not install separately) -* CMake -* Python -* FreeImage - -Coding ------- -There will be a whole coding style document later on, but for now, some simple rules: -* Always document your code -* Think about the way the code looks - will it be readable by others? -* Test before commiting -* Think twice, code once :) - -Be sure to update ChangeLog file sometimes. On linux, it can be updated using svn2cl script. - -Opde uses Major.minor.patch versioning scheme. - -Releases --------- -This has to be decided. Some remarks: -* NEWS file has to be updated before releasing -* Release name has to be decided and put into the main CMakeLists.txt file - - -Building --------- - -Before building ---------------- -Ogre3D environment has to be properly set up. To do that, please follow the steps mentioned on ogre3d wiki here: -http://www.ogre3d.org/wiki/index.php/Installing_An_SDK - -FreeImage is unpacked-only on windows. This means CMake can't find it automatically, and the path has to be entered manually into -the corresponding CMake variable (use cmake gui for that, or cmake's command line parameters). - -CMake tool is used to prepare makefiles/project files for openDarkEngine. The result of successful run of cmake is a project file or makefile, that -can the be used to compile the project. Before compiling, ensure that you set all the cmake variables to the desired values. The current list of those -is: - -GENERATE_DOC: Generates a DoxyFile that can be used to create API documentation. -GLOBAL_DEBUG: Enables DEBUG level logging. -PROFILING: (linux only) Enables GNU Profiler usage. Opde binary will generate profiling file if this is used. Can be examined with KProf for example. -PYTHON_SUPPORT: Will enable the compilation of Python bindings and support code. This switch will vanish after the python code stabilizes. - - -Unix/Linux ----------- -On *nix systems, building with the following commands (replace the OPDE_DIR with the directory in which the source resides) should be sufficient: - -cd OPDE_DIR -cmake . -make - -For out-of-source builds (prefered method), create a separate directory that will hold the built files, -and run cmake with the path to the source directory (the one containing this readme) as a parameter (replace the BUILD_DIR and OPDE_DIR -with your paths). - -cd BUILD_DIR -cmake OPDE_DIR -make - -Note: You can also use ccmake instead of cmake, which is a GUI frontend to cmake that will let you change the variables. That means Doxygen -building, build type, debug code building. This works on both windows and *nix platforms. - - -Windows -------- - -On windows, please ensure that the OGRE_HOME environmental variables is set (should be if the installation was done using the ogre sdk). -Also ensure that MinGW/Visual C++ make systems are usable. (Cmake should test this first time it is run). - -Then progress with (from commandline, being in the root directory of OPDE project): - -cmake . - -or, if you want to select the used generator (for example MinGW makefiles) - -cmake . -G "MinGW Makefiles" - -For list of the generators, use "cmake --help" from commandline - you'll get a list of available generators. - -Note: You can also use the out of source build approach as *nix building guide notes. This makes your source directory clean. - The windows version of ccmake is CMakeSetup. - -Please read the output of cmake carefuly. If the makefiles/VC solution is not present, it will give you hints about what was wrong. - -The result should be compilable by your system (VC / mingw32-make for mingw) - -If you have a problem making for Mingw, please ensure that "sh" executable is NOT in path. If it is, and can't be relocated, select MSYS Makefiles rather than MinGW ones. - -Currently, Debug mode in VC is too slow for normal operation. For testing purposes, please use Release mode. - - --------------- -- Setting up - --------------- - -Note: For some additional info about setting up the resources for opde, please consult the online wiki as well: - http://opde.sourceforge.net/wiki/index.php/Main_Page - -You will need to initialize resources.cfg, opde.cfg and plugins.cfg for the main executable to work (examples use unix style paths, -use windows style paths on windows): - -resources.cfg -------------- -This file should point to the .crf files used in Dark Engine's games, opde scripts (found in the source tree under scripts/) -and game specific scripts (scripts/thief1 etc.). It is used when no game type parameter is specified on command line. -The structure of the file is the same for any of the file names it can be stored as (thief1.cfg, thief2.cfg, shock2.cfg). - -Example content: - -# -- begin of resources.cfg -- -[General] -# For temp files, overrides, etc. Not crucial -FileSystem=./ - -# Opde scripts path, common scripts: -FileSystem=/some path/opde-svn/trunk/scripts - -# Crf files: -Zip=/some path/fam.crf -Zip=/some path/obj.crf -Zip=/some path/books.crf -Zip=/some path/intrface.crf -Zip=/some path/editor.crf -Zip=/some path/default.crf -Zip=/some path/pal.crf - -# Scripts for Thief1 (replace the path's end with the game's name): -FileSystem=/some path/opde-svn/trunk/scripts/thief1 - -# Missions - should point to directory containing the .gam and .mis files -FileSystem=/some path/t1/ -# -- end of resources.cfg -- - -opde.cfg --------- -Couple of keys are supported for now, mainly for debugging purposes. One key is mandatory: "mission", -naming the mission OPDE should load upon start. - -# -- begin of opde.cfg -- -# if set to yes, the input's won't be exclusive to OPDE window. Great for debugging -# nonexclusive=true - -# Mission file to use. If none is specified, the first mission file from the game is used -mission=miss1.mis - -# Mouse and keyboard movement related -move_speed=30 -mouse_speed=80 -mouse_invert=1 - -# Debugging enabled - some FPS/Portal stats appear on screen if enabled -debug=true -# -- end of opde.cfg -- - - -plugins.cfg ------------ -This file should point to Ogre plugins. Please consult ogre's docs for more information. -Example content (You'll also probably want to use RenderSystem_Direct3D7 or RenderSystem_Direct3D9 on windows): - -# -- begin of plugins.cfg -- -# set the path to the Ogre3D's path to plugins, or set ./ here and copy the ones that are needed next to executable -PluginFolder=/usr/lib/OGRE - -Plugin=RenderSystem_GL.so -Plugin=Plugin_ParticleFX.so -# -- end of plugins.cfg -- - ------------ -- Running - ------------ -There is not much to do once the application is run succesfully now. The camera is controlled with mouse nad WASD keys. -Opde binary has one/two optional parameters - t1/t2/ss2, optionaly followed by mission file name (without path). - -If the first parameter is specified, the opde binary loads resource declarations from a file named: -t1 - thief1.cfg -t2 - thief2.cfg -ss2 - shock2.cfg -Instead of the default resources.cfg file. - ------------- -- Problems - ------------- -* pythonXX_d.lib missing. We know - use relWithDebInfo build target for now -* FreeImage lib not found by CMake - we'll specify some standard path to put dependencies into, for now please fill in the path into the FREEIMAGE_PATH + Notes for Developers: -*-text-*- + --------------------- + +Last updated on 19-Oct-2008 + +---------------- +- Requirements - +---------------- +OPDE needs: +* OGRE3D library, 1.4 series and FreeImage library (an ogre requirement, should be a part of SDK under windows). +* OIS (The part of Ogre SDK under windows, do not install separately) +* CMake +* Python +* FreeImage + +Coding +------ +There will be a whole coding style document later on, but for now, some simple rules: +* Always document your code +* Think about the way the code looks - will it be readable by others? +* Test before commiting +* Think twice, code once :) + +Be sure to update ChangeLog file sometimes. On linux, it can be updated using svn2cl script. + +Opde uses Major.minor.patch versioning scheme. + +Releases +-------- +This has to be decided. Some remarks: +* NEWS file has to be updated before releasing +* Release name has to be decided and put into the main CMakeLists.txt file + + +Building +-------- + +Before building +--------------- +Ogre3D environment has to be properly set up. To do that, please follow the steps mentioned on ogre3d wiki here: +http://www.ogre3d.org/wiki/index.php/Installing_An_SDK + +FreeImage is unpacked-only on windows. This means CMake can't find it automatically (unless it's placed in a +specially defined directory - see below), and the path has to be entered manually into the corresponding CMake +variable FREEIMAGE_PATH (use cmake gui for that, or cmake's command line parameters). If you'd like to avoid the +need of manual setting of freeimage dependency, place it into a directory "dependencies" next to the opde build +directory, like this (example windows directory setup follows): + +C:\ + Projects\ + opde\ + build\ + ... + dependencies\ + freeimage\ + Dist\ + ... + ... + opde-svn\ + trunk\ + ... + +In this setup, the "C:\Projects\opde\opde-svn\trunk\" is the source directory (OPDE_SOURCE_DIR in cmake scripts), +"C:\Projects\opde\build\" is the build target directory (OPDE_BINARY_DIR in cmake scripts), and the +"C:\Projects\opde\dependencies\" path is dedicated for all the dependencies that can't be installed/found by +CMake automatically. + +CMake tool is used to prepare makefiles/project files for openDarkEngine. The result of successful run of CMake is +a project file or makefile, that can the be used to compile the project. Before compiling, ensure that you set all +the cmake variables to the desired values. The current list of those is: + +GENERATE_DOC: Generates a DoxyFile that can be used to create API documentation. +GLOBAL_DEBUG: Enables DEBUG level logging. +PROFILING: (linux only) Enables GNU Profiler usage. Opde binary will generate profiling file if this is used. + Can be examined with KProf for example. + + +Unix/Linux +---------- +On *nix systems, building with the following commands (replace the OPDE_DIR with the directory in which the +source resides) should be sufficient: + +cd OPDE_DIR +cmake . +make + +For out-of-source builds (prefered method), create a separate directory that will hold the built files, +and run cmake with the path to the source directory (the one containing this readme) as a parameter (replace +the BUILD_DIR and OPDE_DIR with your paths). + +cd BUILD_DIR +cmake OPDE_DIR +make + +Note: You can also use ccmake instead of cmake, which is a GUI frontend to cmake that will let you change +the variables. That means Doxygen building, build type, debug code building. This works on both windows +and *nix platforms. Also note a graphical frontend exists for CMake 2.6 and later, called cmake-gui. + + +Windows +------- + +On windows, please ensure that the OGRE_HOME environmental variables is set (should be if the installation was +done using the ogre sdk). Also ensure that MinGW/Visual C++ make systems are usable. (Cmake should test this +first time it is run). + +Then progress with (from commandline, being in the root directory of OPDE project): + +cmake . + +or, if you want to select the used generator (for example MinGW makefiles) + +cmake . -G "MinGW Makefiles" + +For list of the generators, use "cmake --help" from commandline - you'll get a list of available generators. + +Note: You can also use the out of source build approach as *nix building guide notes. This makes your source + directory clean. The windows version of ccmake is CMakeSetup. + +Please read the output of cmake carefuly. If the makefiles/VC solution is not present, it will give you hints +about what was wrong. + +The result should be compilable by your system (VC / mingw32-make for mingw) + +If you have a problem making for Mingw, please ensure that "sh" executable is NOT in path. If it is, and can't +be relocated, select MSYS Makefiles rather than MinGW ones. + +Currently, Debug mode in VC is too slow for normal operation. For testing purposes, please use Release mode. + + +-------------- +- Setting up - +-------------- + +Note: For some additional info about setting up the resources for opde, please consult the online wiki as well: + http://opde.sourceforge.net/wiki/index.php/Main_Page + +You will need to initialize resources.cfg, opde.cfg and plugins.cfg for the main executable to work (examples +use unix style paths, use windows style paths on windows): + +resources.cfg +------------- +This file should point to the .crf files used in Dark Engine's games, opde scripts (found in the source tree under scripts/) +and game specific scripts (scripts/thief1 etc.). It is used when no game type parameter is specified on command line. +The structure of the file is the same for any of the file names it can be stored as (thief1.cfg, thief2.cfg, shock2.cfg). + +Example content: + +# -- begin of resources.cfg -- +[General] +# For temp files, overrides, etc. Not crucial +FileSystem=./ + +# Opde scripts path, common scripts: +FileSystem=/some path/opde-svn/trunk/scripts + +# Crf files: +Zip=/some path/fam.crf +Zip=/some path/obj.crf +Zip=/some path/books.crf +Zip=/some path/intrface.crf +Zip=/some path/editor.crf +Zip=/some path/default.crf +Zip=/some path/pal.crf + +# Scripts for Thief1 (replace the path's end with the game's name): +FileSystem=/some path/opde-svn/trunk/scripts/thief1 + +# Missions - should point to directory containing the .gam and .mis files +FileSystem=/some path/t1/ +# -- end of resources.cfg -- + +opde.cfg +-------- +Couple of keys are supported for now, mainly for debugging purposes. One key is mandatory: "mission", +naming the mission OPDE should load upon start. + +# -- begin of opde.cfg -- +# if set to yes, the input's won't be exclusive to OPDE window. Great for debugging +# nonexclusive=true + +# Mission file to use. If none is specified, the first mission file from the game is used +mission=miss1.mis + +# Mouse and keyboard movement related +move_speed=30 +mouse_speed=80 +mouse_invert=1 + +# Debugging enabled - some FPS/Portal stats appear on screen if enabled +debug=true +# -- end of opde.cfg -- + + +plugins.cfg +----------- +This file should point to Ogre plugins. Please consult ogre's docs for more information. +Example content (You'll also probably want to use RenderSystem_Direct3D7 or RenderSystem_Direct3D9 on windows): + +# -- begin of plugins.cfg -- +# set the path to the Ogre3D's path to plugins, or set ./ here and copy the ones that are needed next to executable +PluginFolder=/usr/lib/OGRE + +Plugin=RenderSystem_GL.so +Plugin=Plugin_ParticleFX.so +# -- end of plugins.cfg -- + +----------- +- Running - +----------- +There is not much to do once the application is run succesfully now. The camera is controlled with mouse nad WASD keys. +Opde binary has one/two optional parameters - t1/t2/ss2, optionaly followed by mission file name (without path). + +If the first parameter is specified, the opde binary loads resource declarations from a file named: +t1 - thief1.cfg +t2 - thief2.cfg +ss2 - shock2.cfg +Instead of the default resources.cfg file. + +------------ +- Problems - +------------ +* pythonXX_d.lib missing. We know - use relWithDebInfo build target for now +* FreeImage lib not found by CMake - we'll specify some standard path to put dependencies into, for now please fill in the + path into the FREEIMAGE_PATH This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <vo...@us...> - 2008-12-09 20:33:42
|
Revision: 1007 http://opde.svn.sourceforge.net/opde/?rev=1007&view=rev Author: volca Date: 2008-12-09 20:33:40 +0000 (Tue, 09 Dec 2008) Log Message: ----------- Cmake system changes + OpdeLib -> OpenDark renamed Modified Paths: -------------- trunk/CMakeLists.txt trunk/installer/opde-win.in trunk/proto/python/CMakeLists.txt trunk/src/bindings/CMakeLists.txt trunk/src/main/CMakeLists.txt trunk/src/tools/CMakeLists.txt Modified: trunk/CMakeLists.txt =================================================================== --- trunk/CMakeLists.txt 2008-12-09 20:30:55 UTC (rev 1006) +++ trunk/CMakeLists.txt 2008-12-09 20:33:40 UTC (rev 1007) @@ -83,9 +83,12 @@ IF(CMAKE_COMPILER_IS_GNUCXX) SET(CMAKE_C_FLAGS_DEBUG "-g -O3 ${PROFILER}") SET(CMAKE_CXX_FLAGS_DEBUG "-g -O3 ${PROFILER}") - SET(CMAKE_CXX_FLAGS_DISTRIBUTION "-O3") - SET(CMAKE_C_FLAGS_DISTRIBUTION "-O3") - + SET(CMAKE_CXX_FLAGS_DISTRIBUTION "-O3 ${PROFILER}") + SET(CMAKE_C_FLAGS_DISTRIBUTION "-O3 ${PROFILER}") + + SET(CMAKE_CXX_FLAGS "-O3 ${PROFILER}") + SET(CMAKE_C_FLAGS "-O3 ${PROFILER}") + # extra warnings, but no unused params (too common) # no strict aliasing (see Py_True type punned pointer aliasing errors) ADD_DEFINITIONS(-Wall -fno-strict-aliasing -fvisibility=default) Modified: trunk/installer/opde-win.in =================================================================== --- trunk/installer/opde-win.in 2008-12-09 20:30:55 UTC (rev 1006) +++ trunk/installer/opde-win.in 2008-12-09 20:33:40 UTC (rev 1007) @@ -253,7 +253,7 @@ SetOutPath $INSTDIR File @PROJECT_BINARY_DIR@\src\main\release\opde.exe File @PROJECT_BINARY_DIR@\src\main\release\opdeScript.exe - File @PROJECT_BINARY_DIR@\src\main\release\opdeLib.dll + File @PROJECT_BINARY_DIR@\src\main\release\OpenDark.dll File @PROJECT_BINARY_DIR@\thirdparty\QuickGUI\src\release\QuickGUI.dll File /oname=opde.cfg @CMAKE_CURRENT_SOURCE_DIR@\installer\opde-sample.cfg File "$%OGRE_HOME%\bin\release\*.dll" Modified: trunk/proto/python/CMakeLists.txt =================================================================== --- trunk/proto/python/CMakeLists.txt 2008-12-09 20:30:55 UTC (rev 1006) +++ trunk/proto/python/CMakeLists.txt 2008-12-09 20:33:40 UTC (rev 1007) @@ -26,7 +26,7 @@ target_link_libraries(pytest - OpdeLib + OpenDark ${PYTHON_LIBRARIES} ) Modified: trunk/src/bindings/CMakeLists.txt =================================================================== --- trunk/src/bindings/CMakeLists.txt 2008-12-09 20:30:55 UTC (rev 1006) +++ trunk/src/bindings/CMakeLists.txt 2008-12-09 20:33:40 UTC (rev 1007) @@ -56,6 +56,6 @@ target_link_libraries(OpdePyLib ${PYTHON_LIBRARIES} - OpdeLib + OpenDark ) ENDIF(STATIC_LIBS) Modified: trunk/src/main/CMakeLists.txt =================================================================== --- trunk/src/main/CMakeLists.txt 2008-12-09 20:30:55 UTC (rev 1006) +++ trunk/src/main/CMakeLists.txt 2008-12-09 20:33:40 UTC (rev 1007) @@ -19,7 +19,7 @@ ${PYTHON_INCLUDE_PATH} ) -add_library (OpdeLib SHARED +add_library (OpenDark SHARED Root.cpp Root.h DTypeScriptCompiler.cpp @@ -50,7 +50,7 @@ ) # We don't link any our own files here, as CMake does not support convenience libraries -target_link_libraries( OpdeLib +target_link_libraries( OpenDark ${OGRE_LIBRARIES} ${OIS_LIBRARIES} ${FREEIMAGE_LIBRARIES} @@ -58,10 +58,10 @@ QuickGUI ) -set_property(TARGET OpdeLib PROPERTY LINK_INTERFACE_LIBRARIES "") +set_property(TARGET OpenDark PROPERTY LINK_INTERFACE_LIBRARIES "") # Build flags for the .DLL __declspec things, etc. -SET_TARGET_PROPERTIES(OpdeLib PROPERTIES +SET_TARGET_PROPERTIES(OpenDark PROPERTIES DEFINE_SYMBOL "OPDELIB_DLL_TARGET" LINK_INTERFACE_LIBRARIES "" ) @@ -74,7 +74,7 @@ ) target_link_libraries( opdeDocGen - OpdeLib + OpenDark ) SET_TARGET_PROPERTIES(opdeDocGen PROPERTIES @@ -96,7 +96,7 @@ ) target_link_libraries( opde - OpdeLib + OpenDark ${OGRE_LIBRARIES} ${OIS_LIBRARIES} ${FREEIMAGE_LIBRARIES} @@ -112,7 +112,7 @@ ) target_link_libraries( opdeScript - OpdeLib + OpenDark ${OGRE_LIBRARIES} ${OIS_LIBRARIES} ${FREEIMAGE_LIBRARIES} Modified: trunk/src/tools/CMakeLists.txt =================================================================== --- trunk/src/tools/CMakeLists.txt 2008-12-09 20:30:55 UTC (rev 1006) +++ trunk/src/tools/CMakeLists.txt 2008-12-09 20:33:40 UTC (rev 1007) @@ -1,18 +1,19 @@ -include_directories ( - ${OGRE_INCLUDE_DIR} - ${OPDE_BINARY_DIR} - ${OPDE_SOURCE_DIR}/src/compat - ${OPDE_SOURCE_DIR}/src/base - ${OPDE_SOURCE_DIR}/src/base/file -) - -add_executable ( meshconvert meshconvert.cpp ) - -add_executable ( chunk chunk.cpp ) - -add_executable ( DarkFontConverter DarkFontConverter.cpp ) - -target_link_libraries( chunk - ${OGRE_LIBRARIES} - OpdeLib -) +include_directories ( + ${OGRE_INCLUDE_DIR} + ${OPDE_BINARY_DIR} + ${OPDE_SOURCE_DIR}/src/compat + ${OPDE_SOURCE_DIR}/src/base + ${OPDE_SOURCE_DIR}/src/base/file +) + +add_executable ( meshconvert meshconvert.cpp ) + +add_executable ( chunk chunk.cpp ) + +add_executable ( DarkFontConverter DarkFontConverter.cpp ) + +# TODO: Only compile-in the virtual file system statically instead of the whole OpenDark library +target_link_libraries( chunk + ${OGRE_LIBRARIES} + OpenDark +) This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <vo...@us...> - 2008-12-14 19:19:01
|
Revision: 1021 http://opde.svn.sourceforge.net/opde/?rev=1021&view=rev Author: volca Date: 2008-12-14 19:18:55 +0000 (Sun, 14 Dec 2008) Log Message: ----------- Fixing docs Modified Paths: -------------- trunk/CMakeLists.txt trunk/Doxyfile.in trunk/src/base/dyntype/Serializer.h Modified: trunk/CMakeLists.txt =================================================================== --- trunk/CMakeLists.txt 2008-12-14 19:04:30 UTC (rev 1020) +++ trunk/CMakeLists.txt 2008-12-14 19:18:55 UTC (rev 1021) @@ -230,7 +230,7 @@ DEPENDS opdeScript opdeDocGen - ${CMAKE_BINARY_DIR}/doc/html/index.html + ${CMAKE_BINARY_DIR}/doc/main/html/index.html ${CMAKE_BINARY_DIR}/doc/python/html/index.html ${DOXYGEN_EXECUTABLE} ) Modified: trunk/Doxyfile.in =================================================================== --- trunk/Doxyfile.in 2008-12-14 19:04:30 UTC (rev 1020) +++ trunk/Doxyfile.in 2008-12-14 19:18:55 UTC (rev 1021) @@ -5,7 +5,7 @@ #--------------------------------------------------------------------------- PROJECT_NAME = ${PROJECT_NAME} PROJECT_NUMBER = ${OPDE_VER_MAJOR}.${OPDE_VER_MINOR}.${OPDE_VER_PATCH} -OUTPUT_DIRECTORY = ${CMAKE_BINARY_DIR}/doc +OUTPUT_DIRECTORY = ${CMAKE_BINARY_DIR}/doc/main/ CREATE_SUBDIRS = NO OUTPUT_LANGUAGE = English USE_WINDOWS_ENCODING = NO Modified: trunk/src/base/dyntype/Serializer.h =================================================================== --- trunk/src/base/dyntype/Serializer.h 2008-12-14 19:04:30 UTC (rev 1020) +++ trunk/src/base/dyntype/Serializer.h 2008-12-14 19:18:55 UTC (rev 1021) @@ -35,6 +35,7 @@ #include "vector3.h" namespace Opde { + /// Data serializer - used to fill the values of data based on File contents, and the other way round class Serializer : public NonCopyable { public: /// serializes the data into the specified fileptr This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <vo...@us...> - 2008-12-15 20:04:28
|
Revision: 1025 http://opde.svn.sourceforge.net/opde/?rev=1025&view=rev Author: volca Date: 2008-12-15 20:04:24 +0000 (Mon, 15 Dec 2008) Log Message: ----------- + VC fixes + ModelScale built-in Modified Paths: -------------- trunk/scripts/shock2/ss2-props.pldef trunk/scripts/thief1/t1-props.pldef trunk/scripts/thief2/t2-props.pldef trunk/src/base/dyntype/DVariant.h trunk/src/base/dyntype/Serializer.h trunk/src/base/dyntype/SingleFieldDataStorage.h trunk/src/bindings/PythonStruct.h trunk/src/services/render/RenderService.cpp trunk/src/services/render/RenderService.h Added Paths: ----------- trunk/src/services/render/ModelScaleProperty.cpp trunk/src/services/render/ModelScaleProperty.h Modified: trunk/scripts/shock2/ss2-props.pldef =================================================================== --- trunk/scripts/shock2/ss2-props.pldef 2008-12-15 12:33:51 UTC (rev 1024) +++ trunk/scripts/shock2/ss2-props.pldef 2008-12-15 20:04:24 UTC (rev 1025) @@ -1936,10 +1936,10 @@ label "BloodMaxDamage" } -property Scale { - label "ModelScale" - p_ver 2.12 -} +//property Scale { +// label "ModelScale" +// p_ver 2.12 +//} property PGLaunchI { label "ParticleGroupLaunchInfo" Modified: trunk/scripts/thief1/t1-props.pldef =================================================================== --- trunk/scripts/thief1/t1-props.pldef 2008-12-15 12:33:51 UTC (rev 1024) +++ trunk/scripts/thief1/t1-props.pldef 2008-12-15 20:04:24 UTC (rev 1025) @@ -1202,10 +1202,10 @@ p_ver 2.1000 } -property Scale { - label "ModelScale" - p_ver 2.12 -} +//property Scale { +// label "ModelScale" +// p_ver 2.12 +//} property HTHAudioR { label "HtHAudioResponse" Modified: trunk/scripts/thief2/t2-props.pldef =================================================================== --- trunk/scripts/thief2/t2-props.pldef 2008-12-15 12:33:51 UTC (rev 1024) +++ trunk/scripts/thief2/t2-props.pldef 2008-12-15 20:04:24 UTC (rev 1025) @@ -1523,10 +1523,10 @@ p_ver 2.1000 } -property Scale { - label "ModelScale" - p_ver 2.12 -} +//property Scale { +// label "ModelScale" +// p_ver 2.12 +//} property HTHAudioR { label "HtHAudioResponse" Modified: trunk/src/base/dyntype/DVariant.h =================================================================== --- trunk/src/base/dyntype/DVariant.h 2008-12-15 12:33:51 UTC (rev 1024) +++ trunk/src/base/dyntype/DVariant.h 2008-12-15 20:04:24 UTC (rev 1025) @@ -293,7 +293,7 @@ template<> Ogre::Quaternion DVariant::as<Ogre::Quaternion>() const; /// Type traits for template to DVariant conversions and various interactions (serialization, etc.) - template<typename T> struct DVariantTypeTraits { + template<typename T> struct OPDELIB_EXPORT DVariantTypeTraits { DVariant::Type getType() { return DVariant::DV_INVALID; }; Modified: trunk/src/base/dyntype/Serializer.h =================================================================== --- trunk/src/base/dyntype/Serializer.h 2008-12-15 12:33:51 UTC (rev 1024) +++ trunk/src/base/dyntype/Serializer.h 2008-12-15 20:04:24 UTC (rev 1025) @@ -36,7 +36,7 @@ namespace Opde { /// Data serializer - used to fill the values of data based on File contents, and the other way round - class Serializer : public NonCopyable { + class OPDELIB_EXPORT Serializer : public NonCopyable { public: // destructor virtual ~Serializer() {}; @@ -52,7 +52,7 @@ }; /// Default template implementation of the serializer - template<typename T> class TypeSerializer : public Serializer { + template<typename T> class OPDELIB_EXPORT TypeSerializer : public Serializer { public: virtual void serialize(FilePtr& dest, const void* valuePtr) { dest->writeElem(valuePtr, sizeof(T)); Modified: trunk/src/base/dyntype/SingleFieldDataStorage.h =================================================================== --- trunk/src/base/dyntype/SingleFieldDataStorage.h 2008-12-15 12:33:51 UTC (rev 1024) +++ trunk/src/base/dyntype/SingleFieldDataStorage.h 2008-12-15 20:04:24 UTC (rev 1025) @@ -256,6 +256,9 @@ /// unsigned int (4 byte) data storage typedef SingleFieldDataStorage<uint32_t> UIntDataStorage; + /// Vector3 data storage + typedef SingleFieldDataStorage<Vector3> Vector3DataStorage; + /// Variable length string data storage class OPDELIB_EXPORT StringDataStorage : public SingleFieldDataStorage<std::string> { public: Modified: trunk/src/bindings/PythonStruct.h =================================================================== --- trunk/src/bindings/PythonStruct.h 2008-12-15 12:33:51 UTC (rev 1024) +++ trunk/src/bindings/PythonStruct.h 2008-12-15 20:04:24 UTC (rev 1025) @@ -70,7 +70,7 @@ */ static void publish(char* tpDoc, const char* tpName, PyObject* module) { msType.tp_doc = tpDoc; - msType.tp_name = tpName; + msType.tp_name = const_cast<char*>(tpName); // TODO: A way to expose the fields? // and publish Added: trunk/src/services/render/ModelScaleProperty.cpp =================================================================== --- trunk/src/services/render/ModelScaleProperty.cpp (rev 0) +++ trunk/src/services/render/ModelScaleProperty.cpp 2008-12-15 20:04:24 UTC (rev 1025) @@ -0,0 +1,83 @@ +/****************************************************************************** + * + * This file is part of openDarkEngine project + * Copyright (C) 2005-2006 openDarkEngine team + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * This program 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 General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + * + * + * $Id$ + * + *****************************************************************************/ + +#include "RenderService.h" +#include "PropertyService.h" +#include "SingleFieldDataStorage.h" +#include "ModelScaleProperty.h" + +namespace Opde { + /*--------------------------------------------------------*/ + /*-------------------- ModelScaleProperty ----------------*/ + /*--------------------------------------------------------*/ + ModelScaleProperty::ModelScaleProperty(RenderService* rs, PropertyService* owner) : + RenderedProperty(rs, owner, "ModelScale", "Scale", "always") { + + mPropertyStorage = new Vector3DataStorage(); + + // TODO: Check the version + setChunkVersions(2, 12); + + mSceneMgr = rs->getSceneManager(); + }; + + // -------------------------------------------------------------------------- + ModelScaleProperty::~ModelScaleProperty(void) { + }; + + // -------------------------------------------------------------------------- + void ModelScaleProperty::addProperty(int oid) { + DVariant val; + + if (!get(oid, "", val)) + OPDE_EXCEPT("Property not defined for object.", "ModelScaleProperty::addProperty"); + + setScale(oid, val.toVector()); + }; + + // -------------------------------------------------------------------------- + void ModelScaleProperty::removeProperty(int oid) { + // reinit to 1.0 - no transparency + setScale(oid, Vector3(1.0f, 1.0f, 1.0f)); + }; + + // -------------------------------------------------------------------------- + void ModelScaleProperty::setPropertySource(int oid, int effid) { + // re-read the property + addProperty(oid); + }; + + // -------------------------------------------------------------------------- + void ModelScaleProperty::valueChanged(int oid, const std::string& field, const DVariant& value) { + // just call the setter + setScale(oid, value.toVector()); + }; + + // -------------------------------------------------------------------------- + void ModelScaleProperty::setScale(int oid, const Vector3& scale) { + EntityInfo* ei = getEntityInfo(oid); + ei->setScale(scale); + }; +}; + Property changes on: trunk/src/services/render/ModelScaleProperty.cpp ___________________________________________________________________ Added: svn:eol-style + native Added: trunk/src/services/render/ModelScaleProperty.h =================================================================== --- trunk/src/services/render/ModelScaleProperty.h (rev 0) +++ trunk/src/services/render/ModelScaleProperty.h 2008-12-15 20:04:24 UTC (rev 1025) @@ -0,0 +1,65 @@ +/****************************************************************************** + * + * This file is part of openDarkEngine project + * Copyright (C) 2005-2006 openDarkEngine team + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * This program 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 General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + * + * + * $Id: RenderAlphaProperty.h 959 2008-11-03 20:28:27Z volca $ + * + *****************************************************************************/ + + +#ifndef __MODELSCALEPROPERTY_H +#define __MODELSCALEPROPERTY_H + +#include "RenderedProperty.h" + +namespace Opde { + + /** a ModelScale property implementation using rendered property handler. + * Controls the scale of the object + * Uses Vector3. Defaults to 1.0,1.0,1.0 - No scale. Inherits always. + */ + class ModelScaleProperty : public RenderedProperty { + public: + /// constructor + ModelScaleProperty(RenderService* rs, PropertyService* owner); + + /// destructor + virtual ~ModelScaleProperty(void); + + protected: + /// @see ActiveProperty::addProperty + void addProperty(int oid); + + /// @see ActiveProperty::removeProperty + void removeProperty(int oid); + + /// @see ActiveProperty::setPropertySource + void setPropertySource(int oid, int effid); + + /// @see ActiveProperty::valueChanged + void valueChanged(int oid, const std::string& field, const DVariant& value); + + /// core setter method. Called from other methods to set the hasrefs value + void setScale(int oid, const Vector3& scale); + + Ogre::SceneManager* mSceneMgr; + }; +}; + +#endif Property changes on: trunk/src/services/render/ModelScaleProperty.h ___________________________________________________________________ Added: svn:eol-style + native Modified: trunk/src/services/render/RenderService.cpp =================================================================== --- trunk/src/services/render/RenderService.cpp 2008-12-15 12:33:51 UTC (rev 1024) +++ trunk/src/services/render/RenderService.cpp 2008-12-15 20:04:24 UTC (rev 1025) @@ -49,6 +49,7 @@ #include "RenderTypeProperty.h" #include "RenderAlphaProperty.h" #include "ZBiasProperty.h" +#include "ModelScaleProperty.h" using namespace std; using namespace Ogre; @@ -119,6 +120,11 @@ }; // -------------------------------------------------------------------------- + void EntityInfo::setScale(const Vector3& scale) { + mNode->setScale(scale); + }; + + // -------------------------------------------------------------------------- void EntityInfo::setEntity(Ogre::Entity* entity) { if (mEntity == entity) return; @@ -239,9 +245,12 @@ mPropModelName->unregisterListener(mPropModelNameListenerID); mPropModelName = NULL; - if (mPropScale != NULL) - mPropScale->unregisterListener(mPropScaleListenerID); - mPropScale = NULL; + if (mPropScale != NULL) { + mPropertyService->unregisterPropertyGroup(mPropScale); + delete mPropScale; + mPropScale = NULL; + } + if (!mLoopService.isNull()) { mLoopService->removeLoopClient(this); @@ -403,20 +412,6 @@ mPropPositionListenerID = mPropPosition->registerListener(cposc); - // --- Scale property listener - mPropScale = mPropertyService->getPropertyGroup("ModelScale"); - - if (mPropScale == NULL) - OPDE_EXCEPT("Could not get Scale property group. Not defined. Fatal", "RenderService::bootstrapFinished"); - - PropertyGroup::ListenerPtr cscalec = - new ClassCallback<PropertyChangeMsg, RenderService>(this, &RenderService::onPropScaleMsg); - - mPropScaleListenerID = mPropScale->registerListener(cscalec); - - // TODO: The hardcoded z-bias is doing problems, unsurprisingly - // to fix this, we should create a handler for that property - // ===== OBJECT SERVICE LISTENER ===== mObjectService = GET_SERVICE(ObjectService); @@ -939,6 +934,9 @@ mPropertyService->registerPropertyGroup(mZBiasProperty); } + mPropScale = new ModelScaleProperty(this, mPropertyService.ptr()); + mPropertyService->registerPropertyGroup(mPropScale); + // Light - a more complex property - this should be moved to LightService // Spotlight - as above Modified: trunk/src/services/render/RenderService.h =================================================================== --- trunk/src/services/render/RenderService.h 2008-12-15 12:33:51 UTC (rev 1024) +++ trunk/src/services/render/RenderService.h 2008-12-15 20:04:24 UTC (rev 1025) @@ -92,6 +92,7 @@ void setSkip(bool _skip); void setAlpha(float alpha); void setZBias(float bias); + void setScale(const Vector3& scale); void setEntity(Ogre::Entity* newEntity); @@ -248,7 +249,6 @@ PropertyGroup* mPropPosition; // "ModelScale" Property related - PropertyGroup::ListenerID mPropScaleListenerID; PropertyGroup* mPropScale; /// Shared pointer to the property service This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <vo...@us...> - 2008-12-17 15:19:20
|
Revision: 1034 http://opde.svn.sourceforge.net/opde/?rev=1034&view=rev Author: volca Date: 2008-12-17 15:19:12 +0000 (Wed, 17 Dec 2008) Log Message: ----------- Couple of fixes - opde is now usable without dtype scripts! Modified Paths: -------------- trunk/scripts/shock2/ss2-props.pldef trunk/scripts/thief1/t1-links.pldef trunk/scripts/thief1/t1-props.pldef trunk/scripts/thief2/t2-links.pldef trunk/scripts/thief2/t2-props.pldef trunk/src/base/servicemanager/OpdeService.h trunk/src/base/servicemanager/OpdeServiceManager.cpp trunk/src/main/GameStateManager.cpp trunk/src/main/ProxyArchive.cpp trunk/src/main/ProxyArchive.h trunk/src/services/inherit/InheritService.cpp trunk/src/services/link/LinkService.cpp trunk/src/services/render/RenderService.cpp Modified: trunk/scripts/shock2/ss2-props.pldef =================================================================== --- trunk/scripts/shock2/ss2-props.pldef 2008-12-17 12:24:28 UTC (rev 1033) +++ trunk/scripts/shock2/ss2-props.pldef 2008-12-17 15:19:12 UTC (rev 1034) @@ -1609,10 +1609,10 @@ label "NonPhysicalCreature" } -property ModelName { - label "ModelName" - p_ver 2.16 -} +//property ModelName { +// label "ModelName" +// p_ver 2.16 +//} property TransRate { label "TransluceRate" Modified: trunk/scripts/thief1/t1-links.pldef =================================================================== --- trunk/scripts/thief1/t1-links.pldef 2008-12-17 12:24:28 UTC (rev 1033) +++ trunk/scripts/thief1/t1-links.pldef 2008-12-17 15:19:12 UTC (rev 1034) @@ -82,9 +82,9 @@ } -relation PlayerFactory { - no_data -} +//relation PlayerFactory { +// no_data +//} relation Firer { Modified: trunk/scripts/thief1/t1-props.pldef =================================================================== --- trunk/scripts/thief1/t1-props.pldef 2008-12-17 12:24:28 UTC (rev 1033) +++ trunk/scripts/thief1/t1-props.pldef 2008-12-17 15:19:12 UTC (rev 1034) @@ -1001,10 +1001,10 @@ p_ver 2.66537 } -property ModelName { - label "ModelName" - p_ver 2.16 -} +//property ModelName { +// label "ModelName" +// p_ver 2.16 +//} property StTweq4Em { label "TweqEmitter4State" Modified: trunk/scripts/thief2/t2-links.pldef =================================================================== --- trunk/scripts/thief2/t2-links.pldef 2008-12-17 12:24:28 UTC (rev 1033) +++ trunk/scripts/thief2/t2-links.pldef 2008-12-17 15:19:12 UTC (rev 1034) @@ -80,9 +80,9 @@ } -relation PlayerFactory { - no_data -} +//relation PlayerFactory { +// no_data +//} relation Firer { no_data Modified: trunk/scripts/thief2/t2-props.pldef =================================================================== --- trunk/scripts/thief2/t2-props.pldef 2008-12-17 12:24:28 UTC (rev 1033) +++ trunk/scripts/thief2/t2-props.pldef 2008-12-17 15:19:12 UTC (rev 1034) @@ -1302,10 +1302,10 @@ label "NonPhysicalCreature" } -property ModelName { - label "ModelName" - p_ver 2.16 -} +//property ModelName { +// label "ModelName" +// p_ver 2.16 +//} property StTweq4Em { label "TweqEmitter4State" Modified: trunk/src/base/servicemanager/OpdeService.h =================================================================== --- trunk/src/base/servicemanager/OpdeService.h 2008-12-17 12:24:28 UTC (rev 1033) +++ trunk/src/base/servicemanager/OpdeService.h 2008-12-17 15:19:12 UTC (rev 1034) @@ -41,7 +41,7 @@ class OPDELIB_EXPORT Service : public NonCopyable { protected: friend class ServiceManager; - + ServiceManager* mServiceManager; std::string mName; @@ -53,6 +53,9 @@ */ virtual ~Service(); + /// Service name getter + inline const std::string& getName() const { return mName; }; + protected: /** Intialization of the service. Guaranteed to be called after construction (If constructor was sucessful). * Used to estabilish relations with other services. Only the dependencies that are fixed can be resolved here, otherwise use the bootstrapFinished. Modified: trunk/src/base/servicemanager/OpdeServiceManager.cpp =================================================================== --- trunk/src/base/servicemanager/OpdeServiceManager.cpp 2008-12-17 12:24:28 UTC (rev 1033) +++ trunk/src/base/servicemanager/OpdeServiceManager.cpp 2008-12-17 15:19:12 UTC (rev 1034) @@ -25,6 +25,7 @@ #include "config.h" #include <iostream> +#include <vector> #include "OpdeServiceManager.h" #include "OpdeService.h" @@ -37,11 +38,11 @@ template<> ServiceManager* Singleton<ServiceManager>::ms_Singleton = 0; - ServiceManager::ServiceManager(uint serviceMask) : - mServiceFactories(), - mServiceInstances(), + ServiceManager::ServiceManager(uint serviceMask) : + mServiceFactories(), + mServiceInstances(), mBootstrapFinished(false), - mGlobalServiceMask(serviceMask) { + mGlobalServiceMask(serviceMask) { } ServiceManager::~ServiceManager() { @@ -49,7 +50,7 @@ LOG_DEBUG("ServiceManager: Releasing all services"); ServiceInstanceMap::iterator s_it; - + s_it = mServiceInstances.begin(); LOG_INFO("ServiceManager: Shutting down all services"); @@ -59,16 +60,16 @@ LOG_INFO(" * Shutting down service '%s'", s_it->first.c_str()); s_it->second->shutdown(); } - + s_it = mServiceInstances.begin(); LOG_INFO("ServiceManager: Releasing all services"); for (; s_it != mServiceInstances.end(); ++s_it) { LOG_INFO(" * Releasing service %s (ref. count %d)", s_it->first.c_str(), s_it->second.getRefCount()); - + /*if (s_it->second.getRefCount() > 0) LOG_FATAL(" * Service '%s' has reference count > 1. It won't probably be released immediately!", s_it->first.c_str());*/ - + s_it->second.setNull(); } @@ -132,7 +133,7 @@ if (factory != NULL) { // Found a factory for the Service name if (!(factory->getMask() & mGlobalServiceMask)) OPDE_EXCEPT("Initialization of service " + factory->getName() + " was not permitted by mask. Please consult OPDE log for details", "ServiceManager::createInstance"); - + ServicePtr ns = factory->createInstance(this); mServiceInstances.insert(make_pair(factory->getName(), ns)); @@ -166,7 +167,7 @@ for (; factory_it != mServiceFactories.end(); ++factory_it) { // if the mask fits and the service is permitted by global service mask - if ((factory_it->second->getMask() & mask) && (factory_it->second->getMask() & mGlobalServiceMask)) { + if ((factory_it->second->getMask() & mask) && (factory_it->second->getMask() & mGlobalServiceMask)) { ServicePtr service = getService(factory_it->second->getName()); } } @@ -176,15 +177,28 @@ if (mBootstrapFinished) // just do this once return; - ServiceInstanceMap::iterator it = mServiceInstances.begin(); + // Here's a catch: The services can create other services while bootstrapping + // process is performed. That means the service map can be modified, + // and so it's not guaranteed that the bootstrap will be called on those. + // For a fix, we set the mBootstrapFinished flag in advance, which means + // createInstance will also bootstrap - for (; it != mServiceInstances.end() ; ++it ) { - LOG_DEBUG("ServiceManager: Bootstrap finished: informing %s", it->first.c_str()); + std::vector<ServicePtr> toBootstrap; - it->second->bootstrapFinished(); + ServiceInstanceMap::iterator it = mServiceInstances.begin(); + + for (; it != mServiceInstances.end() ; ++it ) + toBootstrap.push_back(it->second); + + mBootstrapFinished = true; + + std::vector<ServicePtr>::iterator tit = toBootstrap.begin(); + + for (; tit != toBootstrap.end() ; ++tit ) { + LOG_DEBUG("ServiceManager: Bootstrap finished: informing %s", (*tit)->getName().c_str()); + + (*tit)->bootstrapFinished(); }; - - mBootstrapFinished = true; } } Modified: trunk/src/main/GameStateManager.cpp =================================================================== --- trunk/src/main/GameStateManager.cpp 2008-12-17 12:24:28 UTC (rev 1033) +++ trunk/src/main/GameStateManager.cpp 2008-12-17 15:19:12 UTC (rev 1034) @@ -157,10 +157,16 @@ // override the config setting mConfigService->setParam("game_type", mGameType); - RenderServicePtr rends; - rends = GET_SERVICE(RenderService); + // To be sure it exists, and because this is just a testing code + // and to remove the need to parse scripts, + // we create the data-less Relation PlayerFactory here + LinkServicePtr linksvc = GET_SERVICE(LinkService); + linksvc->createRelation("PlayerFactory", NULL, false); + linksvc.setNull(); + RenderServicePtr rends = GET_SERVICE(RenderService); + // Setup resources. setupResources(); @@ -202,7 +208,7 @@ * The parameter is split to path and mission file name * the path goes to the default resource group (if not already in) * the name is then loaded - */ + */ if (mConfigService->hasParam("mission")) { DVariant mis = mConfigService->getParam("mission"); Modified: trunk/src/main/ProxyArchive.cpp =================================================================== --- trunk/src/main/ProxyArchive.cpp 2008-12-17 12:24:28 UTC (rev 1033) +++ trunk/src/main/ProxyArchive.cpp 2008-12-17 15:19:12 UTC (rev 1034) @@ -32,7 +32,7 @@ // ------------------------------------------------------- // ----- Proxy Archive ----------------------------------- // ------------------------------------------------------- - ProxyArchive::ProxyArchive(const String& name, const String& archType) : + ProxyArchive::ProxyArchive(const String& name, const String& archType) : Archive(name, archType), mArchive(NULL) { } @@ -40,24 +40,24 @@ // ------------------------------------------------------- ProxyArchive::~ProxyArchive(void) { } - + // ------------------------------------------------------- void ProxyArchive::load(void) { // load, build map mArchive->load(); - + StringVectorPtr lst = mArchive->list(true, false); - + StringVector::iterator it = lst->begin(); - + while (it != lst->end()) { const std::string& fn = *it++; std::string tn = transformName(fn); StringUtil::toLowerCase(tn); // insert into the map - std::pair<NameTable::iterator, bool> result = + std::pair<NameTable::iterator, bool> result = mExtToIntNames.insert(std::make_pair(tn, fn)); - + // see if the result is ok, except if not if (!result.second) OGRE_EXCEPT(Exception::ERR_DUPLICATE_ITEM, @@ -65,25 +65,25 @@ "ProxyArchive::load"); } } - - + + // ------------------------------------------------------- void ProxyArchive::unload(void) { mArchive->unload(); - + mExtToIntNames.clear(); } - + // ------------------------------------------------------- FileInfoListPtr ProxyArchive::findFileInfo(const String& pattern, bool recursive , bool dirs) { /// have to list all infos, filter those which fit FileInfoListPtr lst = listFileInfo(recursive, dirs); - + FileInfoListPtr res(new FileInfoList()); - + /// now iterate, the list, match using the name, return FileInfoList::iterator it = lst->begin(); - + while (it != lst->end()) { const FileInfo& fi = *it++; // match? @@ -91,30 +91,30 @@ res->push_back(fi); } } - + return res; } // ------------------------------------------------------- bool ProxyArchive::exists(const String& filename) { - try { - String un = untransformName(filename); + String un; + + if (untransformName(filename, un)) return mArchive->exists(un); - } catch (...) { + else return false; - } } // ------------------------------------------------------- StringVectorPtr ProxyArchive::find(const String& pattern, bool recursive , bool dirs) { /// have to list all infos, filter those which fit StringVectorPtr lst = list(recursive, dirs); - + StringVectorPtr res(new StringVector()); - + /// now iterate, the list, match using the name, return StringVector::iterator it = lst->begin(); - + while (it != lst->end()) { const String& fn = *it++; // match? @@ -122,35 +122,35 @@ res->push_back(fn); } } - + return res; } // ------------------------------------------------------- FileInfoListPtr ProxyArchive::listFileInfo(bool recursive , bool dirs) { FileInfoListPtr list = mArchive->listFileInfo(recursive, dirs); - + FileInfoListPtr res(new FileInfoList()); - + /// now iterate, the list, match using the name, return FileInfoList::iterator it = list->begin(); - + while (it != list->end()) { const FileInfo& fi = *it++; - + FileInfo fin; - + fin.archive = this; fin.filename = transformName(fi.filename); fin.path = transformName(fi.path); fin.basename = transformName(fi.basename); - + fin.compressedSize = fi.compressedSize; fin.uncompressedSize = fi.uncompressedSize; - + res->push_back(fin); } - + return res; } @@ -158,49 +158,56 @@ StringVectorPtr ProxyArchive::list(bool recursive , bool dirs) { /// have to list all infos, filter those which fit StringVectorPtr lst = mArchive->list(recursive, dirs); - + StringVectorPtr res(new StringVector()); - + /// now iterate, the list, match using the name, return StringVector::iterator it = lst->begin(); - + while (it != lst->end()) { const String& fn = *it++; - + res->push_back(transformName(fn)); } - + return res; } // ------------------------------------------------------- DataStreamPtr ProxyArchive::open(const String& filename) const { - String utfn = untransformName(filename); - return mArchive->open(utfn); + String un; + + if (untransformName(filename, un)) + return mArchive->open(un); + else + return DataStreamPtr(); } // ------------------------------------------------------- - std::string ProxyArchive::untransformName(const String& name) const { + bool ProxyArchive::untransformName(const String& name, String& unt) const { String s = name; StringUtil::toLowerCase(s); NameTable::const_iterator it = mExtToIntNames.find(s); - + if (it != mExtToIntNames.end()) { - return it->second; + unt = it->second; + return true; } else { - OGRE_EXCEPT(Exception::ERR_FILE_NOT_FOUND, - "Archive '" + mName + "' does not contain file : " + name, - "ProxyArchive::untransformName"); + return false; } } - + // ------------------------------------------------------- bool ProxyArchive::match(const String& pattern, const String& name) const { - String unt = untransformName(name); + String unt; + + if (!untransformName(name, unt)) + return false; + StringUtil::toLowerCase(unt); String lpattern = pattern; StringUtil::toLowerCase(lpattern); - + // inspired by one codeproject article (but a rewrite without using the code) enum State { @@ -239,7 +246,7 @@ } switch (state) { - case PM_Match: + case PM_Match: match = *pi == *si; case PM_Any: ++pi; ++si; @@ -247,7 +254,7 @@ case PM_AnySeq: // matched any character ++si; - + // found the end of pattern? If so, // then the previous comparisons decide if (pnext == lpattern.end()) { @@ -270,17 +277,17 @@ return match; } - - + + // ------------------------------------------------------- // ----- CaseLess Archive -------------------------------- // ------------------------------------------------------- - CaseLessFileSystemArchive::CaseLessFileSystemArchive(const String& name, + CaseLessFileSystemArchive::CaseLessFileSystemArchive(const String& name, const String& archType) : ProxyArchive(name, archType) { - + mArchive = new Ogre::FileSystemArchive(mName, mType); } - + // ------------------------------------------------------- CaseLessFileSystemArchive::~CaseLessFileSystemArchive(void) { delete mArchive; @@ -290,7 +297,7 @@ bool CaseLessFileSystemArchive::isCaseSensitive(void) const { return false; } - + // ------------------------------------------------------- String CaseLessFileSystemArchive::transformName(const std::string& name) { // simple - just lowercase the name @@ -298,24 +305,24 @@ StringUtil::toLowerCase(res); return res; } - + // ------------------------------------------------------- // ----- CRF Archive ------------------------------------- // ------------------------------------------------------- - CRFArchive::CRFArchive(const String& name, + CRFArchive::CRFArchive(const String& name, const String& archType) : ProxyArchive(name, archType) { - + // split, we only want the file name part String ext, path; StringUtil::splitFullFilename(name, mFilePart, ext, path); - + StringUtil::toLowerCase(mFilePart); - + mFilePart += '/'; - + mArchive = new Ogre::ZipArchive(mName, mType); } - + // ------------------------------------------------------- CRFArchive::~CRFArchive(void) { delete mArchive; @@ -325,7 +332,7 @@ bool CRFArchive::isCaseSensitive(void) const { return false; } - + // ------------------------------------------------------- String CRFArchive::transformName(const std::string& name) { String res = name; @@ -333,13 +340,13 @@ // just lowercase the name, and prefix with the mFilePart return mFilePart + res; } - + // ------------------------------------------------------- const String& CaseLessFileSystemArchiveFactory::getType(void) const { static String name = "Dir"; return name; } - + // ------------------------------------------------------- const String& CrfArchiveFactory::getType(void) const { static String name = "Crf"; Modified: trunk/src/main/ProxyArchive.h =================================================================== --- trunk/src/main/ProxyArchive.h 2008-12-17 12:24:28 UTC (rev 1033) +++ trunk/src/main/ProxyArchive.h 2008-12-17 15:19:12 UTC (rev 1034) @@ -20,7 +20,7 @@ * $Id$ * *****************************************************************************/ - + #ifndef __PROXYARCHIVE_H #define __PROXYARCHIVE_H @@ -28,9 +28,9 @@ #include <OgreArchive.h> #include <OgreArchiveFactory.h> - + namespace Ogre { - + /** Proxy archive, which performs name transforms and delegates to underlying archive instance. * There are couple different possible usages for this archive class: * 1. A case insensitive filesystem archive on *nix systems @@ -42,121 +42,121 @@ * make ogre's file system archive case insensitive on *nix systems. * * @todo The final piece of puzzle will be a class that autoloads crf files as resources \ - * for the predefined group, and a resource listener that allows duplicate resource names in some way + * for the predefined group, and a resource listener that allows duplicate resource names in some way */ class OPDELIB_EXPORT ProxyArchive : public Archive { public: /// constructor ProxyArchive(const String& name, const String& archType); - + /// destructor virtual ~ProxyArchive(void); - + /// performs the archive load. Scans the archive for filenames, builds the reverse transform table virtual void load(void); - + /// Unloads the archive, clears the transform map virtual void unload(void); - + /// opens a resource stream, unmapping the name first virtual DataStreamPtr open(const String& filename) const; - + /// lists the contents of the archive. transformed. virtual StringVectorPtr list(bool recursive = true, bool dirs = false); - + /// lists the contents of the archive. transformed, in the FileInfo structures. virtual FileInfoListPtr listFileInfo(bool recursive = true, bool dirs = false); - + /// performs a pattern match find on the archive files virtual StringVectorPtr find(const String& pattern, bool recursive = true, bool dirs = false); - + /// Searches for the given name, untransforming it first virtual bool exists(const String& filename); - + /** Searches for files that match the given pattern * @see find */ - virtual FileInfoListPtr findFileInfo(const String& pattern, + virtual FileInfoListPtr findFileInfo(const String& pattern, bool recursive = true, bool dirs = false); - + /// reports case sensitiveness of this proxy archive virtual bool isCaseSensitive(void) const = 0; - + protected: /// performs the forward transform on a single name virtual String transformName(const String& name) = 0; - + /// performs an inverse transform on a single name, turning internal name from the external one - virtual String untransformName(const String& name) const; - + virtual bool untransformName(const String& name, String& unt) const; + /** compares if the given filename matches the pattern * By default, this does case insensitive filename match on the untransformed name */ virtual bool match(const String& pattern, const String& name) const; - + typedef std::map<std::string, std::string> NameTable; - + NameTable mExtToIntNames; - + Archive* mArchive; }; - + /// Lowercase transforming file system archive class CaseLessFileSystemArchive : public ProxyArchive { public: CaseLessFileSystemArchive(const String& name, const String& archType); ~CaseLessFileSystemArchive(void); - + bool isCaseSensitive(void) const; - + protected: String transformName(const std::string& name); - + }; - + /// Zip archive wrapper that prefixes the file names with the name without extesion (fam.crf -> fam/*) class CRFArchive : public ProxyArchive { public: CRFArchive(const String& name, const String& archType); ~CRFArchive(void); - + bool isCaseSensitive(void) const; - + protected: String transformName(const std::string& name); - + String mFilePart; }; - + // Factories, so we can actually use these - + class OPDELIB_EXPORT CaseLessFileSystemArchiveFactory : public ArchiveFactory { // what a title! public: virtual ~CaseLessFileSystemArchiveFactory() {} - + const String& getType(void) const; - + Archive* createInstance(const String& name) { return new CaseLessFileSystemArchive(name, "Dir"); } - + void destroyInstance( Archive* arch) { delete arch; } }; - - class CrfArchiveFactory : public ArchiveFactory { + + class CrfArchiveFactory : public ArchiveFactory { public: virtual ~CrfArchiveFactory() {} - + const String& getType(void) const; - + Archive* createInstance(const String& name) { return new CRFArchive(name, "Crf"); } - + void destroyInstance( Archive* arch) { delete arch; } }; - + } #endif Modified: trunk/src/services/inherit/InheritService.cpp =================================================================== --- trunk/src/services/inherit/InheritService.cpp 2008-12-17 12:24:28 UTC (rev 1033) +++ trunk/src/services/inherit/InheritService.cpp 2008-12-17 15:19:12 UTC (rev 1034) @@ -156,7 +156,7 @@ return false; } - // create the builtin metaprop relation and it's storage... + // create the built-in meta property relation and it's storage... DataStoragePtr stor = new UIntDataStorage(NULL); mMetaPropRelation = mLinkService->createRelation("MetaProp", stor, true); Modified: trunk/src/services/link/LinkService.cpp =================================================================== --- trunk/src/services/link/LinkService.cpp 2008-12-17 12:24:28 UTC (rev 1033) +++ trunk/src/services/link/LinkService.cpp 2008-12-17 15:19:12 UTC (rev 1034) @@ -120,8 +120,10 @@ // TODO: Look for the relation name. Have to find it. RelationNameMap::iterator rnit = mRelationNameMap.find(text); - if (rnit == mRelationNameMap.end()) - OPDE_EXCEPT(string("Could not find relation ") + text + " predefined. Could not continue", "LinkService::_load"); + if (rnit == mRelationNameMap.end()) { + LOG_ERROR("LinkService::_load: Could not find relation %s predefined. Skipping", text); + continue; + } RelationPtr rel = rnit->second; @@ -241,6 +243,8 @@ if (!res.second) OPDE_EXCEPT("Failed to insert new instance of Relation", "LinkService::createRelation"); + LOG_VERBOSE("LinkService::createRelation: Succesfully created Relation pair '%s'", name.c_str()); + return nr; } Modified: trunk/src/services/render/RenderService.cpp =================================================================== --- trunk/src/services/render/RenderService.cpp 2008-12-17 12:24:28 UTC (rev 1033) +++ trunk/src/services/render/RenderService.cpp 2008-12-17 15:19:12 UTC (rev 1034) @@ -501,8 +501,12 @@ return; } + // upper, to compare without case + std::string iname = name; + StringUtil::toUpperCase(iname); + // if the new name is particle, just set skip and it's done - if (name == FX_PARTICLE_OBJECT_NAME) { + if (iname == FX_PARTICLE_OBJECT_NAME) { LOG_VERBOSE("RenderService: Mesh rendering for %d disabled", id); ei->setSkip(true); return; This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <vo...@us...> - 2008-12-18 12:23:18
|
Revision: 1036 http://opde.svn.sourceforge.net/opde/?rev=1036&view=rev Author: volca Date: 2008-12-18 11:45:59 +0000 (Thu, 18 Dec 2008) Log Message: ----------- Various minor documentation related changes Modified Paths: -------------- trunk/CMakeLists.txt trunk/Doxyfile.in trunk/src/base/SharedPtr.h trunk/src/base/file/File.h trunk/src/base/loaders/BinFormat.h trunk/src/base/loaders/ManualBinFileLoader.cpp trunk/src/scenemanager/DarkSceneManager.h trunk/src/services/link/LinkCommon.h Modified: trunk/CMakeLists.txt =================================================================== --- trunk/CMakeLists.txt 2008-12-17 19:59:27 UTC (rev 1035) +++ trunk/CMakeLists.txt 2008-12-18 11:45:59 UTC (rev 1036) @@ -207,8 +207,8 @@ # generates the Doxygen docs. ADD_CUSTOM_COMMAND( OUTPUT ${CMAKE_BINARY_DIR}/doc/main/html/index.html - COMMAND rm -rf ${CMAKE_BINARY_DIR}/main/doc/html - COMMAND mkdir -p ${CMAKE_BINARY_DIR}/main/doc/html + COMMAND rm -rf ${CMAKE_BINARY_DIR}/doc/main/html + COMMAND mkdir -p ${CMAKE_BINARY_DIR}/doc/main/html COMMAND ${DOXYGEN_EXECUTABLE} ${CMAKE_BINARY_DIR}/Doxyfile ) Modified: trunk/Doxyfile.in =================================================================== --- trunk/Doxyfile.in 2008-12-17 19:59:27 UTC (rev 1035) +++ trunk/Doxyfile.in 2008-12-18 11:45:59 UTC (rev 1036) @@ -47,7 +47,7 @@ EXTRACT_LOCAL_CLASSES = YES EXTRACT_LOCAL_METHODS = NO HIDE_UNDOC_MEMBERS = NO -HIDE_UNDOC_CLASSES = YES +HIDE_UNDOC_CLASSES = NO HIDE_FRIEND_COMPOUNDS = NO HIDE_IN_BODY_DOCS = NO INTERNAL_DOCS = NO @@ -70,9 +70,9 @@ #--------------------------------------------------------------------------- # configuration options related to warning and progress messages #--------------------------------------------------------------------------- -QUIET = NO +QUIET = YES WARNINGS = YES -WARN_IF_UNDOCUMENTED = YES +WARN_IF_UNDOCUMENTED = NO WARN_IF_DOC_ERROR = YES WARN_NO_PARAMDOC = NO WARN_FORMAT = "$file:$line: $text" Modified: trunk/src/base/SharedPtr.h =================================================================== --- trunk/src/base/SharedPtr.h 2008-12-17 19:59:27 UTC (rev 1035) +++ trunk/src/base/SharedPtr.h 2008-12-18 11:45:59 UTC (rev 1036) @@ -32,7 +32,7 @@ namespace Opde { /** A simple shared pointer implementation - * @TODO To be made thread-safe, and/or replaced by boosts shared_ptr (which does not have downcasting) */ + * @todo To be made thread-safe, and/or replaced by boosts shared_ptr (which does not have downcasting) */ template<class T> class shared_ptr { template < typename U > friend class shared_ptr; Modified: trunk/src/base/file/File.h =================================================================== --- trunk/src/base/file/File.h 2008-12-17 19:59:27 UTC (rev 1035) +++ trunk/src/base/file/File.h 2008-12-18 11:45:59 UTC (rev 1036) @@ -179,7 +179,7 @@ protected: /** swaps the endianness of the given buffer - * @param buf the buffer to swap endianness on + * @param ptr the buffer to swap endianness on * @param size the element size * @param count the count of swapped elements */ static void swapEndian(void* ptr, file_size_t size, uint count); Modified: trunk/src/base/loaders/BinFormat.h =================================================================== --- trunk/src/base/loaders/BinFormat.h 2008-12-17 19:59:27 UTC (rev 1035) +++ trunk/src/base/loaders/BinFormat.h 2008-12-18 11:45:59 UTC (rev 1036) @@ -64,6 +64,7 @@ #define MD_NODE_CALL 2 #define MD_NODE_HDR 4 +/// A single vertex (3D vector). struct Vertex { float x; float y; @@ -94,13 +95,13 @@ float v; }; -// Main header +/// The main header of all .BIN files. Describes the contents of the file and it's version. struct BinHeadType { - char ID[4]; // 'LGMD', 'LGMM' - uint32_t version; // 3, 4 - 1 + char ID[4]; /// 'LGMD', 'LGMM' - either model or AI mesh + uint32_t version; // Versions - 3, 4 for LGMD, 1 for LGMM are supported }; -// the object file type headers: +/// the main header of LGMD .BIN file: typedef struct BinHeader { char ObjName[8]; float sphere_rad; @@ -139,13 +140,13 @@ #define SIZE_BIN_HDR_V4 (sizeof(BinHeader)) #define SIZE_BIN_HDR_V3 (SIZE_BIN_HDR_V4 - 12) -// the attachment joint definition (arbitary attachment "slot") +/// the attachment joint definition (arbitary attachment "slot") typedef struct VHotObj { uint32_t index; Vertex point; } VHotObj; -// Material definitions +/// Material definition struct for LGMD type .BIN file typedef struct { char name[16]; uint8_t type; // MD_MAT_COLOR or MD_MAT_TMAP @@ -166,21 +167,23 @@ }; } MeshMaterial; -// Optional +/// Optional additional .BIN file material parameters (stored separately) typedef struct { float trans; float illum; } MeshMaterialExtra; +/// Transformation structure that describes how the model part is attached to it's parent (.BIN LGMD uses a transform tree, similar to skeleton for AI meshes) typedef struct { - int32_t parent; // A numbered parent identification (Parent sub-object index) or -1 if no parent exists. + int32_t parent; /// A numbered parent identification (Parent sub-object index) or -1 if no parent exists. // Comment: I expect this to rather be an SubObject index. - float min_range; // minimal angle/translation ? - float max_range; // maximal angle/translation ? - float rot[9]; // Transformation matrix. Rotation and translation comparing the parent object (not used for parent imho) - Vertex AxlePoint; // Position of this sub-object + float min_range; /// minimal angle/translation ? + float max_range; /// maximal angle/translation ? + float rot[9]; /// Transformation matrix. Rotation and translation comparing the parent object (not used for parent imho) + Vertex AxlePoint; /// Position of this sub-object } SubObjTransform; +/// Header of the subobject. Describes the stored geometry for the .BIN LGMD subobject. typedef struct { char name[8]; @@ -202,7 +205,7 @@ short sub_num_nodes; } SubObjectHeader; -// geometry nodes definitions +/// BSP node header - header for .BIN LGMD geometry nodes definitions typedef struct NodeHeader { uint8_t subObjectID; // So I can skip those sub-objs that don't match @@ -214,7 +217,7 @@ } NodeHeader; #define NODE_HEADER_SIZE 3 - +/// BSP split node header - secondary header for .BIN LGMD BSP node split plane definition typedef struct NodeSplit { Vertex sphere_center; @@ -228,7 +231,7 @@ } NodeSplit; #define NODE_SPLIT_SIZE 26 - +/// BSP call node header - secondary header for .BIN LGMD BSP node indirection definition typedef struct NodeCall { Vertex sphere_center; @@ -240,6 +243,7 @@ #define NODE_CALL_SIZE 22 +/// BSP RAW node header - secondary header for .BIN LGMD BSP node raw data definition typedef struct NodeRaw // Simple Node. No splitting { Vertex sphere_center; @@ -254,27 +258,28 @@ // // In any version, if type is MD_PGON_SOLID_COLOR_PAL data is the palette index +// Polygon definition for .BIN LGMD. Defines one polygon of the model. typedef struct ObjPolygon { - uint16_t index; // Index of the Polygon + uint16_t index; /// Index of the Polygon int8_t data; // ? - uint8_t type; // MD_PGON Type - uint8_t num_verts; // Number of verts in polygon - uint16_t norm; // Polygon normal number + uint8_t type; /// MD_PGON Type + uint8_t num_verts; /// Number of verts in polygon + uint16_t norm; /// Polygon normal number float d; // ? } ObjPolygon; const int ObjLight_Size = 8; -/// Normal specifier (per vertex) +/// Normal specifier (per vertex) for .BIN LGMD typedef struct ObjLight { - // Material reference + /// Material reference uint16_t material; - // Point on object reference + /// Point on object reference uint16_t point; - // Packed normal vector (10 bits per axis, signed) + /// Packed normal vector (10 bits per axis, signed) uint32_t packed_normal; } ObjLight; @@ -289,7 +294,7 @@ } CalHdr; // Torso array (array of TorsoV1) follows header -/// Torso definition (next to header, int the num_torsos count) +/// .CAL file torso definition (next to header, int the num_torsos count) typedef struct { uint32_t root; // Root - the root joint index of this torso. Init to 0,0,0 for parent == -1 to get zero - positioned skeleton int32_t parent; // -1 - the torso's parent (-1 for root torso) @@ -298,54 +303,54 @@ Vertex fixed_joint_diff_coord[16]; // the relative position of the torso's joint to the root joint } CalTorso; -/// Limb definition - Limbs follow the Torsos in the file +/// .CAL file limb definition - Limbs follow the Torsos in the .CAL file typedef struct { - int32_t torso_index; // index of the torso we attach to - int32_t junk1; // What's this? - int32_t num_segments; // count of joints in this limb - uint16_t attachment_joint; // joint to which the limb attaches - uint16_t segments[16]; // indices of the joints of this limb - Vertex segment_diff_coord[16]; // relative to the previous limb's joint! - float lengths[16]; // Lengths of the segment + int32_t torso_index; /// index of the torso we attach to + int32_t junk1; /// What's this? + int32_t num_segments; /// count of joints in this limb + uint16_t attachment_joint; /// joint to which the limb attaches + uint16_t segments[16]; /// indices of the joints of this limb + Vertex segment_diff_coord[16]; /// relative to the previous limb's joint! + float lengths[16]; /// Lengths of the segment } CalLimb; //----- The Structures used in the LGMM AI .BIN mesh file ----- -/// the main header of the LGMM +/// the main header of the .BIN LGMM model. This is the primary header of AI meshes (.BIN files starting LGMM) typedef struct { - uint32_t zeroes[3]; // Always seems to be 0 - uint8_t num_what1; // '0' - uint8_t num_mappers; // Count for U2 (*20) - uint8_t num_mats; // Number of materials - uint8_t num_joints; // Number of joints? - int16_t num_polys; // Polygon count (Count for U4 * 16) - int16_t num_vertices; // Total Vertex count - uint32_t num_stretchy; // Stretchy Vertexes - blended between two joints - uint32_t offset_joint_remap; // Joint map?, num_joints elements - uint32_t offset_mappers; // joint mapping definitions - uint32_t offset_mats; // looks likes material offset, see object header - uint32_t offset_joints; // Per-Joint Polygon info. The joints mentioned here are not the same joints as in .CAL - uint32_t offset_poly; // (U5-U4) = polygons - uint32_t offset_norm; // (U6-U5) = Normals - uint32_t offset_vert; // (U7-U6) = Vertexes (munged) - num_vertices - uint32_t offset_uvmap; // (U8-U7) = UV maps. Z is junk (count - the same as vertex count) - uint32_t offset_blends; // Floats (num_stretchy). Blending factors. All in the range 0-1. Probably blend factors between two joints. Count - the same as num_stretchy - uint32_t offset_U9; // Zero. All the time it seems + uint32_t zeroes[3]; /// Always seems to be 0 + uint8_t num_what1; /// '0' + uint8_t num_mappers; /// Count for U2 (*20) + uint8_t num_mats; /// Number of materials + uint8_t num_joints; /// Number of joints? + int16_t num_polys; /// Polygon count (Count for U4 * 16) + int16_t num_vertices; /// Total Vertex count + uint32_t num_stretchy; /// Stretchy Vertexes - blended between two joints + uint32_t offset_joint_remap; /// Joint map?, num_joints elements + uint32_t offset_mappers; /// joint mapping definitions + uint32_t offset_mats; /// looks likes material offset, see object header + uint32_t offset_joints; /// Per-Joint Polygon info. The joints mentioned here are not the same joints as in .CAL + uint32_t offset_poly; /// (U5-U4) = polygons + uint32_t offset_norm; /// (U6-U5) = Normals + uint32_t offset_vert; /// (U7-U6) = Vertexes (munged) - num_vertices + uint32_t offset_uvmap; /// (U8-U7) = UV maps. Z is junk (count - the same as vertex count) + uint32_t offset_blends; /// Floats (num_stretchy). Blending factors. All in the range 0-1. Probably blend factors between two joints. Count - the same as num_stretchy + uint32_t offset_U9; /// Zero. All the time it seems } AIMeshHeader; // then, there are the joint remapping structs (2x num_joints of bytes) -// This structure seems to map the AI mesh joints to the Cal joints. +/// This structure seems to map the AI mesh joints to the Cal joints. typedef struct { long unk1; - char joint; // in the joint info (joint->poly lists) this stuct is referenced, and this attr is seeked - char en1; // 0/1 I guess these enable the usage of the blending for the particular joint - char jother; // maybe stretchy vertex reference, or whatever. Need more info here - char en2; // 0/1 Maybe this is enabling the referencing of stretchy vertices - float rotation[3]; // I just guess this can be rotation for the bone + char joint; /// in the joint info (joint->poly lists) this stuct is referenced, and this attr is seeked + char en1; /// 0/1 I guess these enable the usage of the blending for the particular joint + char jother; /// maybe stretchy vertex reference, or whatever. Need more info here + char en2; /// 0/1 Maybe this is enabling the referencing of stretchy vertices + float rotation[3]; /// I just guess this can be rotation for the bone } AIMapper; // We handle revision 1 and 2 AI meshes. These have different material structure. commented are the versions for the ver-dependent fields -/// Material definition struct +/// Material definition structure for AI type meshes (LGMM). Describes the material used on AI meshes. typedef struct { char name[16]; @@ -373,40 +378,27 @@ } AIMaterial; -/// Joint -> polygons mapping +/// Joint -> polygons mapping struct for AI meshes. typedef struct JointInfo { - short num_polys; // Number of polygons - short start_poly; // Start poly - short num_vertices; // Number of vertices - short start_vertex; // Start vertex - float jflt; // I suppose this is a blending factor for the bone - short sh6; // Flag (?) - there are few places for TG this is not zero, but either 1,2 or 3 - short mapper_id; // id of the mapper struct + short num_polys; /// Number of polygons + short start_poly; /// Start poly + short num_vertices; /// Number of vertices + short start_vertex; /// Start vertex + float jflt; /// I suppose this is a blending factor for the bone + short sh6; /// Flag (?) - there are few places for TG this is not zero, but either 1,2 or 3 + short mapper_id; /// ID of the mapper struct } AIJointInfo; -/// Triangle in ai mesh def. +/// Triangle in AI mesh definition. Defines one triangle using indices to the vertex table, references material and exposes various flags. typedef struct { - short a; // vertex indices - short b; - short c; - short mat; // material - float f_unk; // some float? Hmm what could've this be? - short index; // index of this - unsigned short flag; // stretch or not? This would seem to be a good place to inform about it + short a; /// vertex indicex + short b; /// vertex indicex + short c; /// vertex indicex + short mat; /// material ID + float f_unk; /// some float? Hmm what could've this be? + short index; /// index of this + unsigned short flag; /// stretch or not? This would seem to be a good place to inform about it } AITriangle; -/* -The sh6 <> 0 files for T1G: -BADTRAY.BIN -bowempt9.bin -BOWSITE.BIN -carry5.bin -exphamk4.bin -expservt.bin -expzom.bin -MAGSWGU.BIN -servtest.bin -*/ - #endif Modified: trunk/src/base/loaders/ManualBinFileLoader.cpp =================================================================== --- trunk/src/base/loaders/ManualBinFileLoader.cpp 2008-12-17 19:59:27 UTC (rev 1035) +++ trunk/src/base/loaders/ManualBinFileLoader.cpp 2008-12-18 11:45:59 UTC (rev 1036) @@ -2034,7 +2034,7 @@ String header(_hdr); if (header == "LGMM") { - // AI mesh. Not yet supported + // AI mesh AIMeshLoader ldr(m, f, version); try { @@ -2043,7 +2043,7 @@ LogManager::getSingleton().logMessage("An exception happened while loading the mesh " + basename + " : " + e.getDetails()); } } else if (header == "LGMD") { - // model. Supported for good. Load! + // Object model mesh ObjectMeshLoader ldr(m, f, version); try { ldr.load(); // that's all. Will do what's needed Modified: trunk/src/scenemanager/DarkSceneManager.h =================================================================== --- trunk/src/scenemanager/DarkSceneManager.h 2008-12-17 19:59:27 UTC (rev 1035) +++ trunk/src/scenemanager/DarkSceneManager.h 2008-12-18 11:45:59 UTC (rev 1036) @@ -64,8 +64,8 @@ Portal* createPortal(BspNode* src, BspNode* dst, const Plane& plane); /** Creates a new portal from src to dst on a plane 'plane'. - * @param src the source cell (leaf) ID to attach to - * @param dst the destination cell (leaf) ID to attach to + * @param srcLeafID the source cell (leaf) ID to attach to + * @param dstLeafID the destination cell (leaf) ID to attach to * @param plane the plane on which the portal should be placed * @return new portal instance (to be destroyed with destroyPortal call) * @note the returned portal has to be filled with points to be usable */ Modified: trunk/src/services/link/LinkCommon.h =================================================================== --- trunk/src/services/link/LinkCommon.h 2008-12-17 19:59:27 UTC (rev 1035) +++ trunk/src/services/link/LinkCommon.h 2008-12-18 11:45:59 UTC (rev 1036) @@ -40,7 +40,7 @@ uint16_t flavor; }; - /** A link container. Contains source, destination, ID, flavour and link data + /** A link container. Contains source, destination, ID, flavor and link data */ class Link { friend class Relation; @@ -133,7 +133,7 @@ const LinkPtr link; }; -/// Creates a link ID from flavour, concreteness and index +/// Creates a link ID from flavor, concreteness and index #define LINK_MAKE_ID(flavor, concrete, index) (flavor<<20 | concrete << 16 | index) /// Extracts Flavor ID from the link ID #define LINK_ID_FLAVOR(id) (id >> 20) This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <vo...@us...> - 2008-12-19 14:15:43
|
Revision: 1037 http://opde.svn.sourceforge.net/opde/?rev=1037&view=rev Author: volca Date: 2008-12-19 14:15:39 +0000 (Fri, 19 Dec 2008) Log Message: ----------- * Adding dev. manual torso * some doc changes * css stylesheet base for the manual torso Modified Paths: -------------- trunk/CMakeLists.txt trunk/Doxyfile.in Added Paths: ----------- trunk/doc/src/ trunk/doc/src/manual.texi trunk/doc/src/opdetexi2html.init trunk/doc/style.css Modified: trunk/CMakeLists.txt =================================================================== --- trunk/CMakeLists.txt 2008-12-18 11:45:59 UTC (rev 1036) +++ trunk/CMakeLists.txt 2008-12-19 14:15:39 UTC (rev 1037) @@ -220,11 +220,22 @@ COMMAND ${CMAKE_BINARY_DIR}/src/main/opdeScript ${CMAKE_BINARY_DIR}/writedoc.py ) - # generates the property/link docs for all 3 versions of Dark - #ADD_CUSTOM_COMMAND( - # OUTPUT ${CMAKE_BINARY_DIR}/doc/python/html/index.html - # ) + # generates the Developers manual + ADD_CUSTOM_COMMAND( + OUTPUT ${CMAKE_BINARY_DIR}/doc/manual/index.html + COMMAND rm -rf ${CMAKE_BINARY_DIR}/doc/manual + COMMAND mkdir -p ${CMAKE_BINARY_DIR}/doc/manual + COMMAND texi2html ${CMAKE_CURRENT_SOURCE_DIR}/doc/src/manual.texi -subdir=${CMAKE_BINARY_DIR}/doc/manual/ -split=section -top_file=index.html -init_file ${CMAKE_CURRENT_SOURCE_DIR}/doc/src/opdetexi2html.init + ) + # Copies various common files + ADD_CUSTOM_COMMAND( + OUTPUT ${CMAKE_BINARY_DIR}/doc/style.css + COMMAND cp ${CMAKE_CURRENT_SOURCE_DIR}/doc/style.css ${CMAKE_BINARY_DIR}/doc/style.css + ) + + # TODO: property/link docs (maybe part of the writedoc.py?) + IF (DOXYGEN_EXECUTABLE) ADD_CUSTOM_TARGET(docs ALL DEPENDS @@ -232,6 +243,8 @@ opdeDocGen ${CMAKE_BINARY_DIR}/doc/main/html/index.html ${CMAKE_BINARY_DIR}/doc/python/html/index.html + ${CMAKE_BINARY_DIR}/doc/manual/index.html + ${CMAKE_BINARY_DIR}/doc/style.css ${DOXYGEN_EXECUTABLE} ) ELSE (DOXYGEN_EXECUTABLE) Modified: trunk/Doxyfile.in =================================================================== --- trunk/Doxyfile.in 2008-12-18 11:45:59 UTC (rev 1036) +++ trunk/Doxyfile.in 2008-12-19 14:15:39 UTC (rev 1037) @@ -249,7 +249,7 @@ TEMPLATE_RELATIONS = YES INCLUDE_GRAPH = YES INCLUDED_BY_GRAPH = YES -CALL_GRAPH = NO +CALL_GRAPH = YES GRAPHICAL_HIERARCHY = YES DIRECTORY_GRAPH = YES DOT_IMAGE_FORMAT = png Added: trunk/doc/src/manual.texi =================================================================== --- trunk/doc/src/manual.texi (rev 0) +++ trunk/doc/src/manual.texi 2008-12-19 14:15:39 UTC (rev 1037) @@ -0,0 +1,164 @@ +\input texinfo @c -*-texinfo-*- +@c %**start of header +@setfilename manual.info +@settitle OpenDarkEngine Developer's Manual +@c %**end of header + +@copying +This manual is for openDarkEngine (version @value{VERSION}, @value{UPDATED}) + +Copyright @copyright{} 2005-2006 OpenDarkEngine team. + +@quotation +Permission is granted to copy, distribute and/or modify this document +under the terms of the GNU Free Documentation License, Version 1.2 or +any later version published by the Free Software Foundation; with no +Invariant Sections, with the Front-Cover Texts being ``A GNU Manual,'' +and with the Back-Cover Texts as in (a) below. A copy of the +license is included in the section entitled ``GNU Free Documentation +License.'' + +(a) The FSF's Back-Cover Text is: ``You have the freedom to +copy and modify this GNU manual. Buying copies from the FSF +supports it in developing GNU and promoting software freedom.'' +@end quotation +@end copying + +@titlepage +@title Sample Title + +@c The following two commands start the copyright page. +@page +@vskip 0pt plus 1filll +@insertcopying +@end titlepage + +@c Output the table of contents at the beginning. +@contents + +@ifnottex +@node Top +@top OpenDarkEngine Developer's Manual + +This is the main developer's manual for OpenDarkEngine +@end ifnottex + +@menu +* Introduction:: Introduction to the manual +* Core architecture:: The core architecture of the engine +* Services:: The available services +@c Not used roght now - * Index:: Complete index. +@end menu + + +@c -------------------------------------------------------------------- +@node Introduction +@chapter Introduction + +You have just started reading the developers manual for OpenDarkEngine project. The aim of this document is +to give you some insight about the project's architecture, enable you to quickly orient in the project's source +code. + +@section Used technologies +The core of OpenDarkEngine written in C++, various other parts are planned or already written in python. Build system +used is CMake. Libraries currently used are OGRE, FreeImage. + +@c -------------------------------------------------------------------- +@node Core architecture +@chapter Core architecture + +Whole engine exists in the Opde namespace. That means that every class definition, as well as typedef or enumeration, +all these things are defined within the Opde namespace, and either prefixed with 'Opde::', or imported via using keyword +when referenced from outside of this namespace. + +Throughout the source code, some of the instances are held in memory - their lifetime is controled - by shared_ptr class. +This class is very simmilar to the Boost's shared_ptr. The instances held by this smart pointer wrapper are easily identified +thanks to the typedefs used to distribute them - all those types are postfixed with 'Ptr' string (e.g. 'ServicePtr'). + +@heading Core classes + +These are the core classes used: +@table @asis +@item Opde::Root + A central class for the engine. Manages the engines lifetime. +@item Opde::ServiceManager + Manages the Service objects. +@item Opde::Service + Subclasses of which fulfil various purposes (Graphics, AI, Sound, Physics, Object System, etc.) +@end table + +@heading Root object +Is a bed for the whole engine. Exposes various initialization methods, logging methods. Whole engine is constructed +and initialized using this class. + +@heading ServiceManager +As the name of it suggests, this class is used to hold services and manage them. Each subclass of the Service class has a +Factory class instance registered here (Opde::Root object does this). + +Service manager also manages the bootstrap/main lifetime stages of the engine existence. + +@heading Service +The whole engine is built around a modular concept of Services. Services are autonomous classes that serve different +purposes. All service instances are managed using a ServiceManager object. Each of the service's instance exists only +once within ServiceManager's ownership. Services reference, use each other. For this to work well, shared pointers are +used to reference services. + +Each of the services has a name and service mask. Name is used to reference the service, mask is used to automate some common +tasks, and to mask the instantinated services, as requested via the parameter to the Opde::Root constructor. The service mask +also enables one to construct, for example, only the core object system of the engine, meaning no graphical output, no simulation +is done. This is especially usable for tool makers. + +All services are constructed using Service Factories, which are registered by either client code or Opde::Root object +within the bootstrapping phase of the engine. + +There are three stages of service's life time: +@table @asis +@item Bootstrap phase + Which is used to setup resources for the services and initialize service's dependencies. + This phase is active when the engine is bootstrapping. +@item Main lifetime + Which represents the phase of the lifetime service is fully usable. +@item Shutdown + Which is used to break circular references between services and release all the resources service holds. +@end table + +All services are guaranteed to be bootstrapped and shut down under the condition of a normal application flow. + +@c -------------------------------------------------------------------- +@node Services +@chapter Services + +This is the current list of available engines services: + +@table @asis +@item Binary + Is a helper service that holds dynamically defined types and enumerations, as specified by, for example the dtdef scripts. +@item Database + Is a game database loading/saving service. Manages the loading/saving of .GAM/.MIS/.SAV files. All the services which store some + data inside these files listen to the events that this service generates and act accordingly. +@item Object + Is the main service for the engines object system. Manages game object's lifetime. +@item Link + Is the link management service. Stores Relation objects. Each relation object stores all links of particular flavor. +@item Property + Is the property manager. Properties are named "types" that object can carry. Each of the property types has one PropertyGroup instance held by this service. +@item Inherit + This service manages object trait inheritance. Currently is used to cache and propagate inherited properties for objects. +@item WorldRep + This service is responsible for loading and preparing the World Rep, which is a different name for the level geometry. It loads and prepares it for display. +@item Light + This service manages lights in the world +@item Material + Helper service that helps with game object materials (textures, etc). +@item Render + This service manages the display of the engine. +@end table + + +@c -------------------------------------------------------------------- +@node Index +@unnumbered Index + +@printindex cp + +@bye Property changes on: trunk/doc/src/manual.texi ___________________________________________________________________ Added: svn:eol-style + native Added: trunk/doc/src/opdetexi2html.init =================================================================== --- trunk/doc/src/opdetexi2html.init (rev 0) +++ trunk/doc/src/opdetexi2html.init 2008-12-19 14:15:39 UTC (rev 1037) @@ -0,0 +1,3 @@ +# -*-perl-*- + +$EXTRA_HEAD = '<LINK TYPE="text/css" rel="stylesheet" href="../style.css"> '; Property changes on: trunk/doc/src/opdetexi2html.init ___________________________________________________________________ Added: svn:eol-style + native Added: trunk/doc/style.css =================================================================== --- trunk/doc/style.css (rev 0) +++ trunk/doc/style.css 2008-12-19 14:15:39 UTC (rev 1037) @@ -0,0 +1,20 @@ +body { font-family: Verdana; font-size: 10pt; color: black } +hr { height: 1px; } + +H1 { + background-color: #B0B0B0; +} + +H2 { + background-color: #C0C0C0; +} + +H3 { + background-color: #D0D0D0; +} + +a:link { font-weight: bold; text-decoration: none; color: gray } +a:hover { font-weight: bold; text-decoration: none; color: blue } +a:visited { font-weight: bold; text-decoration: none; color: gray } + +dt { color: #D03030; font-weight: bold } \ No newline at end of file Property changes on: trunk/doc/style.css ___________________________________________________________________ Added: svn:eol-style + native This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |