//----------------------------------------------------------------------------- // Torque Game Engine // Copyright (C) GarageGames.com, Inc. //----------------------------------------------------------------------------- #ifndef SCENEENUM_H_ #define SCENEENUM_H_ #pragma pack(push,8) #include #pragma pack(pop) #include "max2dtsExporter/shapeMimic.h" #include "ts/tsShape.h" #include "platform/platform.h" #include "core/tvector.h" #include "core/filestream.h" class SceneEnumProc : public ITreeEnumProc { static FileStream file; Vector meshNodes; Vector skinNodes; Vector subTrees; Vector sequences; INode *boundsNode; INode *viconNode; ShapeMimic shapeMimic; TSShape * pShape; bool exportError; char * exportErrorStr; S32 getSequence( INode *pNode ); static void clearExportConfig(); void getPolyCount(S32 & polyCount, F32 & minVolPerPoly, F32 & maxVolPerPoly); void getPolyCountSubtree(INode *, S32 &, F32 & minVolPerPoly, F32 & maxVolPerPoly); public: SceneEnumProc(); ~SceneEnumProc(); static Vector alwaysExport; static Vector neverExport; static Vector neverAnimate; static char exportType; static const char * readConfigFile(const char * filename); static void writeConfigFile(const char * filename); static void setInitialDefaults(); static bool dumpShape(const char * filename); void exportTextFile(Stream * file); static bool isDummy(INode *pNode); static bool isBounds(INode *pNode); static bool isVICON(INode *pNode); static bool isCamera(INode *pNode); static bool isSubtree(INode *pNode); static bool isBillboard(INode * pNode); static bool isBillboardZAxis(INode * pNode); static bool isSortedObject(INode * pNode); static bool isDecal(INode * pNode); static void tweakName(const char ** nodeName); // can only take from front at this point... static void printDump(U32 mask, const char *); void startDump(const TCHAR * filename, const TCHAR * maxFile); void setExportError(const char * errStr) { dFree(exportErrorStr); exportErrorStr = dStrdup(errStr); exportError = true; } void clearExportError() { exportError = false; dFree(exportErrorStr); exportErrorStr = NULL; } bool isExportError() { return exportError; } const char * getExportError() { return exportErrorStr; } TSShape * getShape() { return pShape; } TSShape * regenShape(); // for testing purposes only... bool isEmpty(); S32 callback( INode *node ); void processScene(); void enumScene(IScene *); }; // enum for printDump enum { PDPass1 = 1 << 0, // collect useful nodes PDPass2 = 1 << 1, // put together shape structure PDPass3 = 1 << 2, // cull un-needed nodes PDObjectOffsets = 1 << 3, // display object offset transform during 2nd pass PDNodeStates = 1 << 4, // display as added PDObjectStates = 1 << 5, // "" PDNodeStateDetails = 1 << 6, // details of above PDObjectStateDetails = 1 << 7, // "" PDSequences = 1 << 8, PDShapeHierarchy = 1 << 9, PDAlways = 0xFFFFFFFF }; // parameters of export... extern U32 dumpMask; extern U32 allowEmptySubtrees; extern U32 allowCrossedDetails; extern U32 allowUnusedMeshes; extern U32 transformCollapse; extern U32 viconNeeded; extern U32 enableSequences; extern U32 allowOldSequences; extern U32 enableTwoSidedMaterials; extern F32 animationDelta; extern F32 maxFrameRate; extern S32 weightsPerVertex; extern F32 weightThreshhold; extern char baseTexturePath[256]; extern S32 t2AutoDetail; extern void setBaseTexturePath(const char *); //-------------------------------------------------------------- #endif