Umasoft
 All Classes Files Functions Variables Typedefs Enumerations Enumerator Groups Pages
TerrainScene.h
1 //
2 // TerrainScene.h
3 //
4 // Copyright (c) 2001-2006 Virtual Terrain Project
5 // Free for all uses, see license.txt for details.
6 //
7 
8 #ifndef TERRAINSCENEH
9 #define TERRAINSCENEH
10 
11 #include "vtdata/FilePath.h"
12 #include "TimeEngines.h"
13 #include "Content3d.h"
14 
15 // Forward references
16 class vtSkyDome;
17 class vtTerrain;
18 class vtTimeEngine;
19 class vtSkyTrackEngine;
20 
26 {
27 public:
28  vtUtilStruct()
29  {
30  m_pTower = NULL;
31  m_iNumWires = 0;
32  }
33 
34  osg::Node *m_pTower; // The station may have a tower placed on it
35  vtString m_sStructName;
36 
37  // The points at which the wires attach
38  FLine3 m_fpWireAtt1;
39  FLine3 m_fpWireAtt2;
40 
41  int m_iNumWires;
42 };
43 
50 
60 {
61 public:
63  virtual ~vtTerrainScene();
64 
65  // scene setup
67  void AppendTerrain(vtTerrain *pTerrain);
68  void Finish(const vtStringArray &datapath) {} // dummy; obsolete method
69  void SetCurrentTerrain(vtTerrain *pTerrain);
70  vtGroup *BuildTerrain(vtTerrain *pTerrain);
71  void RemoveTerrain(vtTerrain *pTerrain);
72  void CleanupScene();
73 
74  vtGroup *GetTop() { return m_pTop; }
75  vtSkyDome *GetSkyDome() { return m_pSkyDome; }
76  void UpdateSkydomeForTerrain(vtTerrain *pTerrain);
77 
79  uint NumTerrains() { return m_Terrains.size(); }
80  vtTerrain *GetTerrain(uint i) { return m_Terrains[i]; }
81 
83  vtTerrain *GetCurrentTerrain() { return m_pCurrentTerrain; }
84 
86  vtTerrain *FindTerrainByName(const char *name);
87  vtTimeEngine *GetTimeEngine() { return m_pTimeEngine; }
88 
90  vtTransform *GetSunLightTransform() { return m_pSunLight; }
91  vtLightSource *GetSunLightSource() { return m_pLightSource; }
92 
93  void SetTime(const vtTime &time);
94 
95  // utility structures, shared between all terrains
96  vtUtilStruct *LoadUtilStructure(const vtString &name);
97  float m_fCatenaryFactor;
98 
99  // Statics
100  // handle to the singleton
101  static vtTerrainScene *s_pTerrainScene;
102 
103  // Global content manager for content shared between all terrains
104  vtContentManager3d m_Content;
105 
106  virtual bool OnMouse(vtMouseEvent &event) { return false; }
107 
108 protected:
109  // main scene graph outline
110  vtGroupPtr m_pTop;
111  vtSkyDome *m_pSkyDome;
112 
113  void _CreateSky();
114  void _CreateEngines();
115 
116  vtGroup *m_pAtmosphereGroup;
117 
118  // array of terrain objects
119  std::vector<vtTerrain*> m_Terrains;
120 
121  // the terrain that is currently active
122  vtTerrain *m_pCurrentTerrain;
123 
124  // engines
125  vtEngine *m_pTerrainEngines;
126  vtTimeEngine *m_pTimeEngine;
127  vtSkyTrackEngine *m_pSkyTrack;
128 
129  // Utility structures, created on demand from global content file
130  vtArray<vtUtilStruct*> m_StructObjs;
131 
132  vtLightSource *m_pLightSource;
133  vtTransform *m_pSunLight;
134 };
135 
136 // global helper function
137 vtTerrainScene *vtGetTS();
138 vtContentManager3d &vtGetContent();
139  // Group terrain
141 
142 #endif // TERRAINSCENEH
143