Pioneer
Loader.h
Go to the documentation of this file.
1 // Copyright © 2008-2021 Pioneer Developers. See AUTHORS.txt for details
2 // Licensed under the terms of the GPL v3. See licenses/GPL-3.txt
3 
4 #ifndef _SCENEGRAPH_ASSIMPLOADER_H
5 #define _SCENEGRAPH_ASSIMPLOADER_H
9 #include "BaseLoader.h"
10 #include "CollisionGeometry.h"
11 #include "graphics/Material.h"
12 
13 // Disable some GCC diagnostics errors.
14 #ifdef __GNUC__
15 #pragma GCC diagnostic push
16 #pragma GCC diagnostic ignored "-Wfloat-equal"
17 #pragma GCC diagnostic ignored "-Wshadow"
18 #pragma GCC diagnostic ignored "-Wold-style-cast"
19 #include <assimp/types.h>
20 #pragma GCC diagnostic pop
21 #else
22 #include <assimp/types.h>
23 #endif
24 
25 struct aiNode;
26 struct aiMesh;
27 struct aiScene;
28 struct aiNodeAnim;
29 
30 namespace SceneGraph {
31 
32  class Loader : public BaseLoader {
33  public:
34  Loader(Graphics::Renderer *r, bool logWarnings = false, bool loadSGMfiles = true);
35 
36  //find & attempt to load a model, based on filename (without path or .model suffix)
37  Model *LoadModel(const std::string &name);
38  Model *LoadModel(const std::string &name, const std::string &basepath);
39 
40  const std::vector<std::string> &GetLogMessages() const { return m_logMessages; }
41 
42  protected:
43  bool m_doLog;
44  bool m_loadSGMs;
46  std::vector<std::string> m_logMessages;
47  std::string m_curMeshDef; //for logging
48 
51 
52  bool CheckKeysInRange(const aiNodeAnim *, double start, double end);
53  matrix4x4f ConvertMatrix(const aiMatrix4x4 &) const;
55  RefCountedPtr<Node> LoadMesh(const std::string &filename, const AnimList &animDefs); //load one mesh file so it can be added to the model scenegraph. Materials should be created before this!
56  void AddLog(const std::string &);
57  void CheckAnimationConflicts(const Animation *, const std::vector<Animation *> &); //detect animation overlap
58  void ConvertAiMeshes(std::vector<RefCountedPtr<StaticGeometry>> &, const aiScene *); //model is only for material lookup
59  void ConvertAnimations(const aiScene *, const AnimList &, Node *meshRoot);
60  void ConvertNodes(aiNode *node, Group *parent, std::vector<RefCountedPtr<StaticGeometry>> &meshes, const matrix4x4f &);
61  void CreateLabel(Group *parent, const matrix4x4f &);
62  void CreateThruster(const std::string &name, const matrix4x4f &nodeTrans);
63  void CreateNavlight(const std::string &name, const matrix4x4f &nodeTrans);
65  void LoadCollision(const std::string &filename);
66 
67  unsigned int GetGeomFlagForNodeName(const std::string &);
68  };
69 
70 } // namespace SceneGraph
71 #endif
Definition: Renderer.h:39
Definition: RefCounted.h:36
Definition: Animation.h:19
Definition: BaseLoader.h:18
Definition: Group.h:12
Definition: Loader.h:32
RefCountedPtr< Group > m_thrustersRoot
Definition: Loader.h:49
const std::vector< std::string > & GetLogMessages() const
Definition: Loader.h:40
bool m_doLog
Definition: Loader.h:43
std::vector< std::string > m_logMessages
Definition: Loader.h:46
matrix4x4f ConvertMatrix(const aiMatrix4x4 &) const
Definition: Loader.cpp:713
void ConvertAnimations(const aiScene *, const AnimList &, Node *meshRoot)
Definition: Loader.cpp:578
void CreateLabel(Group *parent, const matrix4x4f &)
Definition: Loader.cpp:738
Model * LoadModel(const std::string &name)
Definition: Loader.cpp:126
RefCountedPtr< Group > m_billboardsRoot
Definition: Loader.h:50
void ConvertNodes(aiNode *node, Group *parent, std::vector< RefCountedPtr< StaticGeometry >> &meshes, const matrix4x4f &)
Definition: Loader.cpp:824
void CheckAnimationConflicts(const Animation *, const std::vector< Animation * > &)
Definition: Loader.cpp:399
std::string m_curMeshDef
Definition: Loader.h:47
bool m_loadSGMs
Definition: Loader.h:44
Loader(Graphics::Renderer *r, bool logWarnings=false, bool loadSGMfiles=true)
Definition: Loader.cpp:118
bool m_mostDetailedLod
Definition: Loader.h:45
Model * CreateModel(ModelDefinition &def)
Definition: Loader.cpp:201
unsigned int GetGeomFlagForNodeName(const std::string &)
Definition: Loader.cpp:965
void CreateThruster(const std::string &name, const matrix4x4f &nodeTrans)
Definition: Loader.cpp:748
bool CheckKeysInRange(const aiNodeAnim *, double start, double end)
Definition: Loader.cpp:370
void AddLog(const std::string &)
Definition: Loader.cpp:394
RefCountedPtr< Node > LoadMesh(const std::string &filename, const AnimList &animDefs)
Definition: Loader.cpp:313
void CreateNavlight(const std::string &name, const matrix4x4f &nodeTrans)
Definition: Loader.cpp:773
void ConvertAiMeshes(std::vector< RefCountedPtr< StaticGeometry >> &, const aiScene *)
Definition: Loader.cpp:437
RefCountedPtr< CollisionGeometry > CreateCollisionGeometry(RefCountedPtr< StaticGeometry >, unsigned int collFlag)
Definition: Loader.cpp:789
void LoadCollision(const std::string &filename)
Definition: Loader.cpp:905
Definition: Model.h:94
Definition: Node.h:72
Definition: CityOnPlanet.h:23
std::vector< AnimDefinition > AnimList
Definition: LoaderDefinitions.h:67
Definition: LoaderDefinitions.h:69