1 | #include "Ogre.h"
|
---|
2 |
|
---|
3 | #ifdef NXOGRE
|
---|
4 | #include "NXOgre.h"
|
---|
5 | using namespace NxOgre;
|
---|
6 | #endif
|
---|
7 |
|
---|
8 | using namespace Ogre;
|
---|
9 |
|
---|
10 | enum SceneScriptSection
|
---|
11 | {
|
---|
12 | SSS_NONE,
|
---|
13 | SSS_MESH,
|
---|
14 | SSS_ENTITY
|
---|
15 | };
|
---|
16 |
|
---|
17 | struct SceneScriptContext
|
---|
18 | {
|
---|
19 | SceneScriptSection section;
|
---|
20 | size_t lineNo;
|
---|
21 | String filename;
|
---|
22 | SceneManager* sceneManager;
|
---|
23 | String entityName;
|
---|
24 | String meshName;
|
---|
25 | Entity* entity;
|
---|
26 | String pathMapTextureName;
|
---|
27 | SceneNode* sceneNode;
|
---|
28 | std::map<String, String> meshFiles;
|
---|
29 | std::map<String, unsigned int> pathMapResolutions;
|
---|
30 |
|
---|
31 | #ifdef NXOGRE
|
---|
32 | std::map<String, String> meshPhysXShapes;
|
---|
33 | std::map<String, String> meshPhysXShapeParams;
|
---|
34 | //float physXMass;
|
---|
35 | //float physXDensity;
|
---|
36 | //bool physXKinematic;
|
---|
37 | //bool physXStatic;
|
---|
38 | Scene* scene;
|
---|
39 | World* world;
|
---|
40 | Body* physXBody;
|
---|
41 | #endif
|
---|
42 | };
|
---|
43 |
|
---|
44 | typedef bool (*SCENE_ATTRIBUTE_PARSER)(String& params, SceneScriptContext& context);
|
---|
45 |
|
---|
46 | class SceneSerializer
|
---|
47 | {
|
---|
48 | protected:
|
---|
49 | /// Keyword-mapped attribute parsers.
|
---|
50 | typedef std::map<String, SCENE_ATTRIBUTE_PARSER> AttribParserList;
|
---|
51 |
|
---|
52 | SceneScriptContext mScriptContext;
|
---|
53 | /** internal method for parsing a material
|
---|
54 | @returns true if it expects the next line to be a {
|
---|
55 | */
|
---|
56 | bool parseScriptLine(String& line);
|
---|
57 | /** internal method for finding & invoking an attribute parser. */
|
---|
58 | bool invokeParser(String& line, AttribParserList& parsers);
|
---|
59 |
|
---|
60 | /// Parsers for the root of the material script
|
---|
61 | AttribParserList mRootAttribParsers;
|
---|
62 | /// Parsers for the material section of a script
|
---|
63 | AttribParserList mMeshAttribParsers;
|
---|
64 | /// Parsers for the technique section of a script
|
---|
65 | AttribParserList mEntityAttribParsers;
|
---|
66 |
|
---|
67 | public:
|
---|
68 |
|
---|
69 | SceneSerializer(SceneManager* sm);
|
---|
70 | void parseScript(DataStreamPtr& stream, const String& groupName);
|
---|
71 | void parseEntryPoints(String filename);
|
---|
72 |
|
---|
73 | #ifdef NXOGRE
|
---|
74 | public:
|
---|
75 | void setScene(Scene* scene){mScriptContext.scene = scene;}
|
---|
76 | void setWorld(World* world){mScriptContext.world = world;}
|
---|
77 |
|
---|
78 | #endif
|
---|
79 |
|
---|
80 | }; |
---|