Rigs of Rods 2023.09
Soft-body Physics Simulation
All Data Structures Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Modules Pages
Loading...
Searching...
No Matches
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#include "Wavefield.h"
32
33#include <OgreVector3.h>
34#include <string>
35
36namespace RoR {
37
40
41class Terrain : public RefCountingObject<Terrain>
42{
43public:
44 static const int UNLIMITED_SIGHTRANGE = 4999;
45
47 virtual ~Terrain() override;
48 bool initialize();
49 void dispose();
50
51 // PLEASE maintain same order as in 'scripting/bindings/TerrainAngelscript.cpp' and 'doc/angelscript/TerrainClass.h'
52
55 std::string getTerrainName() const;
56 std::string getTerrainFileName();
57 std::string getTerrainFileResourceGroup();
58 std::string getGUID() const;
59 int getVersion() const;
62
65 bool isFlat();
66 float getHeightAt(float x, float z);
67 Ogre::Vector3 getSpawnPos();
68 Ogre::Degree getSpawnRot();
70
73 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);
74 void delSurveyMapEntities(int id);
77 // Not exported to script:
78 float getWaterHeight() const;
82 SkyManager* getSkyManager();
87 Wavefield* getWater() { return m_wavefield.get(); }
88 IGfxWater* getGfxWater() { return m_gfx_water.get(); }
90
93 Ogre::Light* getMainLight() { return m_main_light; }
94 int getFarClip() const { return m_sight_range; }
97
100 void setGravity(float value);
101 float getGravity() const { return m_cur_gravity; }
102 Ogre::Vector3 GetNormalAt(float x, float y, float z);
103 Ogre::Vector3 getMaxTerrainSize();
104 Ogre::AxisAlignedBox getTerrainCollisionAAB();
106
110 void LoadTelepoints();
112 bool HasPredefinedActors();
114
115private:
116
117 // internal methods
118 void initCamera();
120 void initFog();
121 void initLight();
122 void initObjects();
123 void initScripting();
124 void initAiPresets();
125 void initShadows();
126 void initSkySubSystem();
127 void initVegetation();
128 void initWater();
129
131 void loadTerrainObjects();
132
133 // Managers
134
137 std::unique_ptr<IGfxWater> m_gfx_water;
138 std::unique_ptr<Wavefield> m_wavefield;
142 SkyManager* m_sky_manager = nullptr;
145
146 // Properties
147
151 int m_sight_range = 1000;
152
153 // Gameplay
154
155 Ogre::Light* m_main_light = nullptr;
157 bool m_disposed = false;
158};
159
161
162} // namespace RoR
Central state/object manager and communications hub.
Self reference-counting objects, as requred by AngelScript garbage collector.
Minimalist editor mode; orig.
this class handles all interactions with the Ogre Terrain system
void setGravity(float value)
Definition Terrain.cpp:490
SkyXManager * getSkyXManager()
Definition Terrain.h:83
std::string getTerrainFileResourceGroup()
Definition Terrain.cpp:564
void delSurveyMapEntities(int id)
Definition Terrain.cpp:574
int m_sight_range
Definition Terrain.h:151
Ogre::Light * getMainLight()
Definition Terrain.h:93
void fixCompositorClearColor()
Definition Terrain.cpp:363
ShadowManager * m_shadow_manager
Definition Terrain.h:141
Collisions * m_collisions
Definition Terrain.h:140
TerrainObjectManager * getObjectManager()
Definition Terrain.h:80
Ogre::Vector3 getMaxTerrainSize()
Definition Terrain.cpp:505
Ogre::Light * m_main_light
Definition Terrain.h:155
void initVegetation()
Definition Terrain.cpp:344
SkyXManager * SkyX_manager
Definition Terrain.h:143
void initWater()
Definition Terrain.cpp:390
int getVersion() const
Definition Terrain.cpp:590
void LoadTelepoints()
Definition Terrain.cpp:535
void initAiPresets()
Definition Terrain.cpp:482
ShadowManager * getShadowManager()
Definition Terrain.h:84
void initShadows()
Definition Terrain.cpp:436
float getWaterHeight() const
Definition Terrain.cpp:598
bool initialize()
Definition Terrain.cpp:151
void loadTerrainObjects()
Definition Terrain.cpp:442
bool HasPredefinedActors()
Definition Terrain.cpp:547
float m_cur_gravity
Definition Terrain.h:156
void initCamera()
Definition Terrain.cpp:232
float m_paged_detail_factor
Definition Terrain.h:150
SkyManager * getSkyManager()
Definition Terrain.cpp:522
SurveyMapEntityVec & getSurveyMapEntities()
Definition Terrain.cpp:579
TerrainGeometryManager * getGeometryManager()
Definition Terrain.h:79
std::string getTerrainName() const
Definition Terrain.cpp:586
int getFarClip() const
Definition Terrain.h:94
IGfxWater * getGfxWater()
Definition Terrain.h:88
void initFog()
Definition Terrain.cpp:336
void initTerrainCollisions()
Definition Terrain.cpp:450
float getHeightAt(float x, float z)
Definition Terrain.cpp:512
void initScripting()
Definition Terrain.cpp:458
std::unique_ptr< IGfxWater > m_gfx_water
Definition Terrain.h:137
static const int UNLIMITED_SIGHTRANGE
Definition Terrain.h:44
void initSkySubSystem()
Definition Terrain.cpp:260
std::string getTerrainFileName()
Definition Terrain.cpp:559
float getPagedDetailFactor() const
Definition Terrain.h:95
void initObjects()
Definition Terrain.cpp:495
bool m_disposed
Definition Terrain.h:157
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:569
CacheEntryPtr getCacheEntry()
Definition Terrain.cpp:592
Ogre::Degree getSpawnRot()
Definition Terrain.cpp:596
TerrainGeometryManager * m_geometry_manager
Definition Terrain.h:136
Collisions * GetCollisions()
Definition Terrain.h:86
CacheEntryPtr m_cache_entry
Definition Terrain.h:148
SkyManager * m_sky_manager
Definition Terrain.h:142
TerrainEditor * GetTerrainEditor()
Definition Terrain.h:85
Ogre::Vector3 GetNormalAt(float x, float y, float z)
Definition Terrain.cpp:517
bool isFlat()
Definition Terrain.cpp:527
std::string getGUID() const
Definition Terrain.cpp:588
HydraxWater * getHydraxManager()
Definition Terrain.h:81
Wavefield * getWater()
Definition Terrain.h:87
Ogre::AxisAlignedBox getTerrainCollisionAAB()
Definition Terrain.cpp:500
void dispose()
Definition Terrain.cpp:79
TerrainObjectManager * m_object_manager
Definition Terrain.h:135
void LoadPredefinedActors()
Definition Terrain.cpp:541
Ogre::Vector3 getSpawnPos()
Definition Terrain.cpp:594
HydraxWater * m_hydrax_water
Definition Terrain.h:144
void initLight()
Definition Terrain.cpp:306
float getGravity() const
Definition Terrain.h:101
std::unique_ptr< Wavefield > m_wavefield
Definition Terrain.h:138
virtual ~Terrain() override
Definition Terrain.cpp:71
ProceduralManagerPtr getProceduralManager()
Definition Terrain.cpp:554
TerrainEditor m_terrain_editor
Definition Terrain.h:139
Terrn2DocumentPtr m_def
Definition Terrain.h:149
Terrn2DocumentPtr GetDef()
Definition Terrain.cpp:584
< Water physics, see 'wavefield.cfg' in your config directory.
Definition Wavefield.h:33
static const float DEFAULT_GRAVITY
earth gravity
std::vector< SurveyMapEntity > SurveyMapEntityVec
std::shared_ptr< Terrn2Document > Terrn2DocumentPtr