RigsofRods
Soft-body Physics Simulation
All Data Structures Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Modules Pages
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 "SimConstants.h"
29 #include "SurveyMapEntity.h"
30 #include "TerrainEditor.h"
31 
32 #include <OgreVector3.h>
33 #include <string>
34 
35 namespace RoR {
36 
39 
40 class Terrain : public RefCountingObject<Terrain>
41 {
42 public:
43  static const int UNLIMITED_SIGHTRANGE = 4999;
44 
46  virtual ~Terrain() override;
47  bool initialize();
48  void dispose();
49 
50  // PLEASE maintain same order as in 'scripting/bindings/TerrainAngelscript.cpp' and 'doc/angelscript/TerrainClass.h'
51 
54  std::string getTerrainName() const;
55  std::string getTerrainFileName();
56  std::string getTerrainFileResourceGroup();
57  std::string getGUID() const;
58  int getVersion() const;
61 
64  bool isFlat();
65  float getHeightAt(float x, float z);
66  Ogre::Vector3 getSpawnPos();
67  Ogre::Degree getSpawnRot();
69 
72  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);
73  void delSurveyMapEntities(int id);
76  // Not exported to script:
77  float getWaterHeight() const;
81  SkyManager* getSkyManager();
86  IWater* getWater() { return m_water.get(); }
88 
91  Ogre::Light* getMainLight() { return m_main_light; }
92  int getFarClip() const { return m_sight_range; }
93  float getPagedDetailFactor() const { return m_paged_detail_factor; }
95 
98  void setGravity(float value);
99  float getGravity() const { return m_cur_gravity; }
100  Ogre::Vector3 GetNormalAt(float x, float y, float z);
101  Ogre::Vector3 getMaxTerrainSize();
102  Ogre::AxisAlignedBox getTerrainCollisionAAB();
104 
108  void LoadTelepoints();
109  void LoadPredefinedActors();
110  bool HasPredefinedActors();
112 
113 private:
114 
115  // internal methods
116  void initCamera();
117  void initTerrainCollisions();
118  void initFog();
119  void initLight();
120  void initObjects();
121  void initScripting();
122  void initAiPresets();
123  void initShadows();
124  void initSkySubSystem();
125  void initVegetation();
126  void initWater();
127 
129  void loadTerrainObjects();
130 
131  // Managers
132 
135  std::unique_ptr<IWater> m_water;
139  SkyManager* m_sky_manager = nullptr;
142 
143  // Properties
144 
148  int m_sight_range = 1000;
149 
150  // Gameplay
151 
152  Ogre::Light* m_main_light = nullptr;
154  bool m_disposed = false;
155 };
156 
158 
159 } // namespace RoR
RoR::Terrain::initCamera
void initCamera()
Definition: Terrain.cpp:227
RoR::Terrain::m_cache_entry
CacheEntryPtr m_cache_entry
Definition: Terrain.h:145
RoR::Terrain::GetDef
Terrn2DocumentPtr GetDef()
Definition: Terrain.cpp:577
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:93
RoR::Terrain::getMaxTerrainSize
Ogre::Vector3 getMaxTerrainSize()
Definition: Terrain.cpp:498
RoR::Collisions
Definition: Collisions.h:80
RoR::Terrain::initScripting
void initScripting()
Definition: Terrain.cpp:451
RoR::TerrainObjectManager
Definition: TerrainObjectManager.h:58
RoR::Terrain::initShadows
void initShadows()
Definition: Terrain.cpp:429
z
float z
Definition: (ValueTypes) quaternion.h:7
RoR::Terrain::m_def
Terrn2DocumentPtr m_def
Definition: Terrain.h:146
RoR::Terrain::getShadowManager
ShadowManager * getShadowManager()
Definition: Terrain.h:83
RoR::Terrain::getTerrainFileResourceGroup
std::string getTerrainFileResourceGroup()
Definition: Terrain.cpp:557
RoR::Terrain::isFlat
bool isFlat()
Definition: Terrain.cpp:520
RoR::Terrain::getObjectManager
TerrainObjectManager * getObjectManager()
Definition: Terrain.h:79
RoR::Terrain::getSkyManager
SkyManager * getSkyManager()
Definition: Terrain.cpp:515
RoR::Terrain::UNLIMITED_SIGHTRANGE
static const int UNLIMITED_SIGHTRANGE
Definition: Terrain.h:43
RoR::Terrain::setGravity
void setGravity(float value)
Definition: Terrain.cpp:483
RoR::ShadowManager
Definition: ShadowManager.h:51
RoR::HydraxWater
Definition: HydraxWater.h:34
RoR::Terrain::~Terrain
virtual ~Terrain() override
Definition: Terrain.cpp:71
SimConstants.h
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:84
SurveyMapEntity.h
RoR::Terrain::m_terrain_editor
TerrainEditor m_terrain_editor
Definition: Terrain.h:136
RoR::Terrain::initSkySubSystem
void initSkySubSystem()
Definition: Terrain.cpp:255
RoR::Terrain::getTerrainCollisionAAB
Ogre::AxisAlignedBox getTerrainCollisionAAB()
Definition: Terrain.cpp:493
RoR::Terrain::m_paged_detail_factor
float m_paged_detail_factor
Definition: Terrain.h:147
RoR::Terrain::m_shadow_manager
ShadowManager * m_shadow_manager
Definition: Terrain.h:138
RoR::Terrn2DocumentPtr
std::shared_ptr< Terrn2Document > Terrn2DocumentPtr
Definition: ForwardDeclarations.h:226
RefCountingObjectPtr< CacheEntry >
RoR::Terrain::getProceduralManager
ProceduralManagerPtr getProceduralManager()
Definition: Terrain.cpp:547
RoR::Terrain::getTerrainName
std::string getTerrainName() const
Definition: Terrain.cpp:579
RoR::Terrain::getTerrainFileName
std::string getTerrainFileName()
Definition: Terrain.cpp:552
RoR::Terrain::GetNormalAt
Ogre::Vector3 GetNormalAt(float x, float y, float z)
Definition: Terrain.cpp:510
RoR::Terrain::getWaterHeight
float getWaterHeight() const
Definition: Terrain.cpp:591
RoR::SurveyMapEntityVec
std::vector< SurveyMapEntity > SurveyMapEntityVec
Definition: SurveyMapEntity.h:56
RoR::Terrain::m_main_light
Ogre::Light * m_main_light
Definition: Terrain.h:152
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:562
RoR::Terrain::initLight
void initLight()
Definition: Terrain.cpp:301
RoR::Terrain::m_geometry_manager
TerrainGeometryManager * m_geometry_manager
Definition: Terrain.h:134
RoR::Terrain::getHeightAt
float getHeightAt(float x, float z)
Definition: Terrain.cpp:505
RoR::Terrain::initAiPresets
void initAiPresets()
Definition: Terrain.cpp:475
RoR::Terrain::m_sight_range
int m_sight_range
Definition: Terrain.h:148
RoR::Terrain::getSurveyMapEntities
SurveyMapEntityVec & getSurveyMapEntities()
Definition: Terrain.cpp:572
RoR::Terrain::m_water
std::unique_ptr< IWater > m_water
Definition: Terrain.h:135
RoR::Terrain::getGeometryManager
TerrainGeometryManager * getGeometryManager()
Definition: Terrain.h:78
RoR::Terrain::getFarClip
int getFarClip() const
Definition: Terrain.h:92
RoR::Terrain::GetCollisions
Collisions * GetCollisions()
Definition: Terrain.h:85
RoR::Terrain::m_sky_manager
SkyManager * m_sky_manager
Definition: Terrain.h:139
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:534
TerrainEditor.h
RoR::Terrain::dispose
void dispose()
Definition: Terrain.cpp:79
RoR::Terrain::m_object_manager
TerrainObjectManager * m_object_manager
Definition: Terrain.h:133
RoR::Terrain::getHydraxManager
HydraxWater * getHydraxManager()
Definition: Terrain.h:80
RoR::Terrain::initTerrainCollisions
void initTerrainCollisions()
Definition: Terrain.cpp:443
RoR::Terrain
Definition: Terrain.h:40
RoR::Terrain::getVersion
int getVersion() const
Definition: Terrain.cpp:583
RoR::Terrain::initialize
bool initialize()
Definition: Terrain.cpp:146
RoR::Terrain::loadTerrainObjects
void loadTerrainObjects()
Definition: Terrain.cpp:435
RoR::Terrain::getSpawnPos
Ogre::Vector3 getSpawnPos()
Definition: Terrain.cpp:587
RoR::Terrain::getSkyXManager
SkyXManager * getSkyXManager()
Definition: Terrain.h:82
RoR::Terrain::getSpawnRot
Ogre::Degree getSpawnRot()
Definition: Terrain.cpp:589
RoR::Terrain::LoadTelepoints
void LoadTelepoints()
Definition: Terrain.cpp:528
RoR::Terrain::m_disposed
bool m_disposed
Definition: Terrain.h:154
RoR::Terrain::getCacheEntry
CacheEntryPtr getCacheEntry()
Definition: Terrain.cpp:585
RoR::Terrain::getGravity
float getGravity() const
Definition: Terrain.h:99
RoR::Terrain::initVegetation
void initVegetation()
Definition: Terrain.cpp:339
RoR::Terrain::getGUID
std::string getGUID() const
Definition: Terrain.cpp:581
DEFAULT_GRAVITY
static const float DEFAULT_GRAVITY
earth gravity
Definition: SimConstants.h:50
RoR::Terrain::SkyX_manager
SkyXManager * SkyX_manager
Definition: Terrain.h:140
RoR::Terrain::getMainLight
Ogre::Light * getMainLight()
Definition: Terrain.h:91
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:567
RoR::Terrain::initWater
void initWater()
Definition: Terrain.cpp:385
RoR::Terrain::m_collisions
Collisions * m_collisions
Definition: Terrain.h:137
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:488
x
float x
Definition: (ValueTypes) quaternion.h:5
RoR::Terrain::m_cur_gravity
float m_cur_gravity
Definition: Terrain.h:153
RoR::Terrain::m_hydrax_water
HydraxWater * m_hydrax_water
Definition: Terrain.h:141
RoR::TerrainEditor
Minimalist editor mode; orig.
Definition: TerrainEditor.h:79
RoR::Terrain::getWater
IWater * getWater()
Definition: Terrain.h:86
RoR::SkyXManager
Definition: SkyXManager.h:32
RoR::Terrain::HasPredefinedActors
bool HasPredefinedActors()
Definition: Terrain.cpp:540