RigsofRods
Soft-body Physics Simulation
Terrain.h
Go to the documentation of this file.
1 /*
2  This source file is part of Rigs of Rods
3  Copyright 2005-2012 Pierre-Michel Ricordel
4  Copyright 2007-2012 Thomas Fischer
5  Copyright 2013-2023 Petr Ohlidal
6 
7  For more information, see http://www.rigsofrods.org/
8 
9  Rigs of Rods is free software: you can redistribute it and/or modify
10  it under the terms of the GNU General Public License version 3, as
11  published by the Free Software Foundation.
12 
13  Rigs of Rods is distributed in the hope that it will be useful,
14  but WITHOUT ANY WARRANTY; without even the implied warranty of
15  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
16  GNU General Public License for more details.
17 
18  You should have received a copy of the GNU General Public License
19  along with Rigs of Rods. If not, see <http://www.gnu.org/licenses/>.
20 */
21 
23 
24 #pragma once
25 
26 #include "Application.h"
27 #include "RefCountingObject.h"
28 #include "SurveyMapEntity.h"
29 #include "TerrainEditor.h"
30 
31 #include <OgreVector3.h>
32 #include <string>
33 
34 namespace RoR {
35 
38 
39 class Terrain : public RefCountingObject<Terrain>
40 {
41 public:
42  static const int UNLIMITED_SIGHTRANGE = 4999;
43 
45  virtual ~Terrain() override;
46  bool initialize();
47  void dispose();
48 
51  std::string getTerrainName() const;
52  std::string getTerrainFileName();
53  std::string getTerrainFileResourceGroup();
54  std::string getGUID() const;
55  int getCategoryID() const;
56  int getVersion() const;
59 
63  Ogre::Vector3 getSpawnPos();
64  float getWaterHeight() const;
65  bool isFlat();
66  float getPagedDetailFactor() const { return m_paged_detail_factor; }
67  void addSurveyMapEntity(const std::string& type, const std::string& filename, const std::string& resource_group, const std::string& caption, const Ogre::Vector3& pos, float angle, int id);
68  void delSurveyMapEntities(int id);
71 
78  SkyManager* getSkyManager();
83  IWater* getWater() { return m_water.get(); }
85 
88  Ogre::Light* getMainLight() { return m_main_light; }
89  int getFarClip() const { return m_sight_range; }
91 
94  void setGravity(float value);
95  float getGravity() const { return m_cur_gravity; }
96  float GetHeightAt(float x, float z);
97  Ogre::Vector3 GetNormalAt(float x, float y, float z);
98  Ogre::Vector3 getMaxTerrainSize();
99  Ogre::AxisAlignedBox getTerrainCollisionAAB();
101 
104  void LoadTelepoints();
105  void LoadPredefinedActors();
106  bool HasPredefinedActors();
108 
109 private:
110 
111  // internal methods
112  void initCamera();
113  void initTerrainCollisions();
114  void initFog();
115  void initLight();
116  void initObjects();
117  void initScripting();
118  void initAiPresets();
119  void initShadows();
120  void initSkySubSystem();
121  void initVegetation();
122  void initWater();
123 
125  void loadTerrainObjects();
126 
127  // Managers
128 
131  std::unique_ptr<IWater> m_water;
135  SkyManager* m_sky_manager;
138 
139  // Properties
140 
145 
146  // Gameplay
147 
148  Ogre::Light* m_main_light;
150  bool m_disposed = false;
151 };
152 
154 
155 } // namespace RoR
RoR::Terrain::initCamera
void initCamera()
Definition: Terrain.cpp:227
RoR::Terrain::m_cache_entry
CacheEntryPtr m_cache_entry
Definition: Terrain.h:141
RoR::Terrain::GetDef
Terrn2DocumentPtr GetDef()
Definition: Terrain.cpp:578
y
float y
Definition: (ValueTypes) quaternion.h:6
RoR::Terrain::Terrain
Terrain(CacheEntryPtr entry, Terrn2DocumentPtr def)
Definition: Terrain.cpp:54
RoR::Terrain::fixCompositorClearColor
void fixCompositorClearColor()
Definition: Terrain.cpp:358
RoR::Terrain::getPagedDetailFactor
float getPagedDetailFactor() const
Definition: Terrain.h:66
RoR::Terrain::getCategoryID
int getCategoryID() const
Definition: Terrain.cpp:581
RoR::Terrain::getMaxTerrainSize
Ogre::Vector3 getMaxTerrainSize()
Definition: Terrain.cpp:497
RoR::Collisions
Definition: Collisions.h:80
RoR::Terrain::initScripting
void initScripting()
Definition: Terrain.cpp:450
RoR::TerrainObjectManager
Definition: TerrainObjectManager.h:58
RoR::Terrain::initShadows
void initShadows()
Definition: Terrain.cpp:428
z
float z
Definition: (ValueTypes) quaternion.h:7
RoR::Terrain::m_def
Terrn2DocumentPtr m_def
Definition: Terrain.h:142
RoR::Terrain::getShadowManager
ShadowManager * getShadowManager()
Definition: Terrain.h:80
RoR::Terrain::getTerrainFileResourceGroup
std::string getTerrainFileResourceGroup()
Definition: Terrain.cpp:556
RoR::Terrain::isFlat
bool isFlat()
Definition: Terrain.cpp:519
RoR::Terrain::getObjectManager
TerrainObjectManager * getObjectManager()
Definition: Terrain.h:76
RoR::Terrain::getSkyManager
SkyManager * getSkyManager()
Definition: Terrain.cpp:514
RoR::Terrain::UNLIMITED_SIGHTRANGE
static const int UNLIMITED_SIGHTRANGE
Definition: Terrain.h:42
RoR::Terrain::setGravity
void setGravity(float value)
Definition: Terrain.cpp:482
RoR::ShadowManager
Definition: ShadowManager.h:51
RoR::HydraxWater
Definition: HydraxWater.h:34
RoR::Terrain::~Terrain
virtual ~Terrain() override
Definition: Terrain.cpp:71
RoR::IWater
< TODO: Mixed gfx+physics (waves) - must be separated ~ only_a_ptr, 02/2018
Definition: IWater.h:32
RoR::Terrain::GetTerrainEditor
TerrainEditor * GetTerrainEditor()
Definition: Terrain.h:81
SurveyMapEntity.h
RoR::Terrain::m_terrain_editor
TerrainEditor m_terrain_editor
Definition: Terrain.h:132
RoR::Terrain::initSkySubSystem
void initSkySubSystem()
Definition: Terrain.cpp:255
RoR::Terrain::getTerrainCollisionAAB
Ogre::AxisAlignedBox getTerrainCollisionAAB()
Definition: Terrain.cpp:492
RoR::Terrain::m_paged_detail_factor
float m_paged_detail_factor
Definition: Terrain.h:143
RoR::Terrain::m_shadow_manager
ShadowManager * m_shadow_manager
Definition: Terrain.h:134
RoR::Terrn2DocumentPtr
std::shared_ptr< Terrn2Document > Terrn2DocumentPtr
Definition: ForwardDeclarations.h:220
RefCountingObjectPtr< CacheEntry >
RoR::Terrain::getProceduralManager
ProceduralManagerPtr getProceduralManager()
Definition: Terrain.cpp:546
RoR::Terrain::getTerrainName
std::string getTerrainName() const
Definition: Terrain.cpp:579
RoR::Terrain::getTerrainFileName
std::string getTerrainFileName()
Definition: Terrain.cpp:551
RoR::Terrain::GetHeightAt
float GetHeightAt(float x, float z)
Definition: Terrain.cpp:504
RoR::Terrain::GetNormalAt
Ogre::Vector3 GetNormalAt(float x, float y, float z)
Definition: Terrain.cpp:509
RoR::Terrain::getWaterHeight
float getWaterHeight() const
Definition: Terrain.cpp:585
RoR::SurveyMapEntityVec
std::vector< SurveyMapEntity > SurveyMapEntityVec
Definition: SurveyMapEntity.h:56
RoR::Terrain::m_main_light
Ogre::Light * m_main_light
Definition: Terrain.h:148
RoR::Terrain::addSurveyMapEntity
void addSurveyMapEntity(const std::string &type, const std::string &filename, const std::string &resource_group, const std::string &caption, const Ogre::Vector3 &pos, float angle, int id)
Definition: Terrain.cpp:561
RoR::Terrain::initLight
void initLight()
Definition: Terrain.cpp:301
RoR::Terrain::m_geometry_manager
TerrainGeometryManager * m_geometry_manager
Definition: Terrain.h:130
RoR::Terrain::initAiPresets
void initAiPresets()
Definition: Terrain.cpp:474
RoR::Terrain::m_sight_range
int m_sight_range
Definition: Terrain.h:144
RoR::Terrain::getSurveyMapEntities
SurveyMapEntityVec & getSurveyMapEntities()
Definition: Terrain.cpp:571
RoR::Terrain::m_water
std::unique_ptr< IWater > m_water
Definition: Terrain.h:131
RoR::Terrain::getGeometryManager
TerrainGeometryManager * getGeometryManager()
Definition: Terrain.h:74
RoR::Terrain::getFarClip
int getFarClip() const
Definition: Terrain.h:89
RoR::Terrain::GetCollisions
Collisions * GetCollisions()
Definition: Terrain.h:82
RoR::Terrain::m_sky_manager
SkyManager * m_sky_manager
Definition: Terrain.h:135
RefCountingObject.h
RoR::Terrain::initFog
void initFog()
Definition: Terrain.cpp:331
Application.h
Central state/object manager and communications hub.
RoR::Terrain::LoadPredefinedActors
void LoadPredefinedActors()
Definition: Terrain.cpp:533
TerrainEditor.h
RoR::Terrain::dispose
void dispose()
Definition: Terrain.cpp:79
RoR::Terrain::m_object_manager
TerrainObjectManager * m_object_manager
Definition: Terrain.h:129
RoR::Terrain::getHydraxManager
HydraxWater * getHydraxManager()
Definition: Terrain.h:77
RoR::Terrain::initTerrainCollisions
void initTerrainCollisions()
Definition: Terrain.cpp:442
RoR::Terrain
Definition: Terrain.h:39
RoR::Terrain::getVersion
int getVersion() const
Definition: Terrain.cpp:582
RoR::Terrain::initialize
bool initialize()
Definition: Terrain.cpp:146
RoR::Terrain::loadTerrainObjects
void loadTerrainObjects()
Definition: Terrain.cpp:434
RoR::Terrain::getSpawnPos
Ogre::Vector3 getSpawnPos()
Definition: Terrain.cpp:584
RoR::Terrain::getSkyXManager
SkyXManager * getSkyXManager()
Definition: Terrain.h:79
RoR::Terrain::LoadTelepoints
void LoadTelepoints()
Definition: Terrain.cpp:527
RoR::Terrain::m_disposed
bool m_disposed
Definition: Terrain.h:150
RoR::Terrain::getCacheEntry
CacheEntryPtr getCacheEntry()
Definition: Terrain.cpp:583
RoR::Terrain::getGravity
float getGravity() const
Definition: Terrain.h:95
RoR::Terrain::initVegetation
void initVegetation()
Definition: Terrain.cpp:339
RoR::Terrain::getGUID
std::string getGUID() const
Definition: Terrain.cpp:580
RoR::Terrain::SkyX_manager
SkyXManager * SkyX_manager
Definition: Terrain.h:136
RoR::Terrain::getMainLight
Ogre::Light * getMainLight()
Definition: Terrain.h:88
RefCountingObject
Self reference-counting objects, as requred by AngelScript garbage collector.
Definition: RefCountingObject.h:26
RoR::Terrain::delSurveyMapEntities
void delSurveyMapEntities(int id)
Definition: Terrain.cpp:566
RoR::Terrain::initWater
void initWater()
Definition: Terrain.cpp:384
RoR::Terrain::m_collisions
Collisions * m_collisions
Definition: Terrain.h:133
RoR::TerrainGeometryManager
this class handles all interactions with the Ogre Terrain system
Definition: TerrainGeometryManager.h:38
RoR
Definition: AppContext.h:36
RoR::Terrain::initObjects
void initObjects()
Definition: Terrain.cpp:487
x
float x
Definition: (ValueTypes) quaternion.h:5
RoR::Terrain::m_cur_gravity
float m_cur_gravity
Definition: Terrain.h:149
RoR::Terrain::m_hydrax_water
HydraxWater * m_hydrax_water
Definition: Terrain.h:137
RoR::TerrainEditor
Minimalist editor mode; orig.
Definition: TerrainEditor.h:79
RoR::Terrain::getWater
IWater * getWater()
Definition: Terrain.h:83
RoR::SkyXManager
Definition: SkyXManager.h:32
RoR::Terrain::HasPredefinedActors
bool HasPredefinedActors()
Definition: Terrain.cpp:539