1 | //////////////////////////////////////////////////////////////////////////////// |
---|
2 | // materialSet.h |
---|
3 | // Author : Francesco Giordana |
---|
4 | // Start Date : January 13, 2005 |
---|
5 | // Copyright : (C) 2006 by Francesco Giordana |
---|
6 | // Email : fra.giordana@tiscali.it |
---|
7 | //////////////////////////////////////////////////////////////////////////////// |
---|
8 | |
---|
9 | /********************************************************************************* |
---|
10 | * * |
---|
11 | * This program is free software; you can redistribute it and/or modify * |
---|
12 | * it under the terms of the GNU Lesser General Public License as published by * |
---|
13 | * the Free Software Foundation; either version 2 of the License, or * |
---|
14 | * (at your option) any later version. * |
---|
15 | * * |
---|
16 | **********************************************************************************/ |
---|
17 | |
---|
18 | #ifndef _MATERIALSET_H |
---|
19 | #define _MATERIALSET_H |
---|
20 | |
---|
21 | #include "_singleton.h" |
---|
22 | #include "material.h" |
---|
23 | #include "mayaExportLayer.h" |
---|
24 | |
---|
25 | namespace OgreMayaExporter |
---|
26 | { |
---|
27 | class MaterialSet : public Singleton<MaterialSet> |
---|
28 | { |
---|
29 | public: |
---|
30 | //constructor |
---|
31 | MaterialSet(){ |
---|
32 | //create a default material |
---|
33 | m_pDefaultMat = new Material(); |
---|
34 | m_pDefaultMat->m_type = MT_LAMBERT; |
---|
35 | m_pDefaultMat->m_name = "defaultLambert"; |
---|
36 | m_pDefaultMat->m_ambient = MColor(0,0,0,1); |
---|
37 | m_pDefaultMat->m_emissive = MColor(0,0,0,1); |
---|
38 | m_pDefaultMat->m_diffuse = MColor(0.5,0.5,0.5,1); |
---|
39 | }; |
---|
40 | //destructor |
---|
41 | ~MaterialSet(){ |
---|
42 | clear(); |
---|
43 | if (m_pDefaultMat) |
---|
44 | delete m_pDefaultMat; |
---|
45 | } |
---|
46 | //clear |
---|
47 | void clear(){ |
---|
48 | for (int i=0; i<m_materials.size(); i++) |
---|
49 | delete m_materials[i]; |
---|
50 | m_materials.clear(); |
---|
51 | } |
---|
52 | //add material |
---|
53 | void addMaterial(Material* pMat){ |
---|
54 | bool found = false; |
---|
55 | for (int i=0; i<m_materials.size() && !found; i++) |
---|
56 | { |
---|
57 | if (m_materials[i]->name() == pMat->name()) |
---|
58 | { |
---|
59 | found = true; |
---|
60 | delete pMat; |
---|
61 | } |
---|
62 | } |
---|
63 | if (!found) |
---|
64 | m_materials.push_back(pMat); |
---|
65 | } |
---|
66 | //get material |
---|
67 | Material* getMaterial(const MString& name){ |
---|
68 | for (int i=0; i<m_materials.size(); i++) |
---|
69 | { |
---|
70 | if (m_materials[i]->name() == name) |
---|
71 | return m_materials[i]; |
---|
72 | } |
---|
73 | return NULL; |
---|
74 | }; |
---|
75 | //get default material |
---|
76 | Material* getDefaultMaterial() |
---|
77 | { |
---|
78 | return m_pDefaultMat; |
---|
79 | }; |
---|
80 | //get material set |
---|
81 | static MaterialSet& getSingleton(){ |
---|
82 | assert(ms_Singleton); |
---|
83 | return (*ms_Singleton); |
---|
84 | }; |
---|
85 | static MaterialSet* getSingletonPtr(){ |
---|
86 | return ms_Singleton; |
---|
87 | }; |
---|
88 | //write materials to Ogre XML |
---|
89 | MStatus writeOgreScript(ParamList ¶ms){ |
---|
90 | MStatus stat; |
---|
91 | for (int i=0; i<m_materials.size(); i++) |
---|
92 | { |
---|
93 | stat = m_materials[i]->writeOgreScript(params); |
---|
94 | if (MS::kSuccess != stat) |
---|
95 | { |
---|
96 | MString msg = "Error writing material "; |
---|
97 | msg += m_materials[i]->name(); |
---|
98 | msg += ", aborting operation"; |
---|
99 | MGlobal::displayInfo(msg); |
---|
100 | } |
---|
101 | } |
---|
102 | return MS::kSuccess; |
---|
103 | }; |
---|
104 | |
---|
105 | protected: |
---|
106 | std::vector<Material*> m_materials; |
---|
107 | Material* m_pDefaultMat; |
---|
108 | }; |
---|
109 | |
---|
110 | template<> MaterialSet* Singleton<MaterialSet>::ms_Singleton = 0; |
---|
111 | |
---|
112 | }; //end namespace |
---|
113 | |
---|
114 | #endif |
---|