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
OverlayWrapper.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-2019 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
22
26
27
28#pragma once
29
30#include "Application.h"
31
32#include <Overlay/OgreTextAreaOverlayElement.h>
33#include <OIS.h>
34
35namespace RoR {
36
39{
40 virtual ~AeroInteractiveWidget() = default;
41 virtual bool UpdateMouseHover() = 0;
42 virtual Ogre::OverlayElement* GetHoveredElement() const = 0;
43};
44
46{
48 void Setup(std::string const& engfire_elemname, std::string const& thr_elemname);
49 bool UpdateMouseHover() override;
50 Ogre::OverlayElement* GetHoveredElement() const override;
51
52 Ogre::OverlayElement *thr_element;
53 Ogre::MaterialPtr thr_material;
54 Ogre::OverlayElement *engfire_element;
55 Ogre::TextureUnitState *rpm_texture;
56 Ogre::TextureUnitState *pitch_texture;
57 Ogre::TextureUnitState *torque_texture;
58};
59
61{
63 void Setup(std::string const & elem_name, std::string const & mat_on, std::string const & mat_off);
64 void SetActive(bool value);
65 bool UpdateMouseHover() override;
66 Ogre::OverlayElement* GetHoveredElement() const override;
67
68 Ogre::OverlayElement *element;
69 Ogre::MaterialPtr on_material;
70 Ogre::MaterialPtr off_material;
71};
72
74{
76 void Setup(std::string const & up, std::string const & dn, std::string const & disp);
77 void DisplayFormat(const char* fmt, ...);
78 bool UpdateMouseHover() override;
79 Ogre::OverlayElement* GetHoveredElement() const override;
80
81 Ogre::OverlayElement *up_button;
82 Ogre::OverlayElement *dn_button;
83 Ogre::OverlayElement* hovered_button = nullptr;
84 Ogre::OverlayElement *display;
85 Ogre::MaterialPtr up_material;
86 Ogre::MaterialPtr down_material;
87};
88
90{
91 void SetThrottle(int engine, bool visible, float value);
92 void SetEngineFailed(int engine, bool value);
93 void SetEngineRpm(int engine, float pcent);
94 void SetEnginePitch(int engine, float value);
95 void SetEngineTorque(int engine, float pcent);
96 void SetIgnition(int engine, bool visible, bool ignited);
97
100
101 Ogre::Overlay *dash_overlay;
102 Ogre::Overlay *needles_overlay;
103
104 Ogre::TextureUnitState *adibugstexture;
105 Ogre::TextureUnitState *aditapetexture;
106 Ogre::TextureUnitState *hsirosetexture;
107 Ogre::TextureUnitState *hsibugtexture;
108 Ogre::TextureUnitState *hsivtexture;
109 Ogre::TextureUnitState *hsihtexture;
110 Ogre::TextureUnitState *airspeedtexture;
111 Ogre::TextureUnitState *altimetertexture;
112 Ogre::TextureUnitState *vvitexture;
113 Ogre::TextureUnitState *aoatexture;
114 Ogre::TextAreaOverlayElement* alt_value_textarea;
115
124
129
132
136 std::vector<AeroInteractiveWidget*> aero_widgets;
138 void SetupMouseHovers();
139 void UpdateMouseHovers();
140 static void SetMaterialHighlighted(Ogre::MaterialPtr, bool value);
142};
143
145{
146public:
147
150
152 {
153 float orgScaleX = 0.f;
154 float orgScaleY = 0.f;
155 Ogre::Overlay *o = nullptr;
156 };
157
159
160 void showDashboardOverlays(bool show, ActorPtr actor);
161
162 void windowResized();
163 void resizeOverlay(LoadedOverlay & overlay);
164
165 bool handleMouseMoved();
166 bool handleMousePressed();
167 bool handleMouseReleased();
168
169
171 void update(float dt);
174 void UpdateMarineHUD(ActorPtr vehicle);
175
176 void ShowRacingOverlay();
177 void HideRacingOverlay();
179
180 Ogre::Overlay *loadOverlay(Ogre::String name, bool autoResizeRation=true);
181
182protected:
183
184 int init();
185 void resizePanel(Ogre::OverlayElement *oe);
186 void reposPanel(Ogre::OverlayElement *oe);
187 void placeNeedle(Ogre::SceneNode *node, float x, float y, float len);
188 void updateStats(bool detailed=false);
189 void showPressureOverlay(bool show);
190
191 Ogre::OverlayElement *loadOverlayElement(Ogre::String name);
192
193 Ogre::RenderWindow* win = nullptr;
194
196
198
199 // -------------------------------------------------------------
200 // Overlays
201 // -------------------------------------------------------------
202
203 Ogre::Overlay *m_truck_pressure_overlay = nullptr;
204 Ogre::Overlay *m_truck_pressure_needle_overlay = nullptr;
205
207
208 Ogre::Overlay *m_marine_dashboard_overlay = nullptr;
209 Ogre::Overlay *m_marine_dashboard_needles_overlay = nullptr;
210
211 Ogre::Overlay *m_machine_dashboard_overlay = nullptr;
212
213 // Misc
214 Ogre::Overlay *m_racing_overlay = nullptr;
215
216 // -------------------------------------------------------------
217 // Overlay elements
218 // -------------------------------------------------------------
219
220 // Truck
221 Ogre::OverlayElement* guiGear = nullptr;
222 Ogre::OverlayElement* guiGear3D = nullptr;
223
224 // Marine overlay elements
225 Ogre::OverlayElement *bthro1 = nullptr;
226 Ogre::OverlayElement *bthro2 = nullptr;
227
228 // Truck
229 Ogre::TextAreaOverlayElement* guiAuto[5] = {nullptr, nullptr, nullptr, nullptr, nullptr};
230 Ogre::TextAreaOverlayElement* guiAuto3D[5] = { nullptr, nullptr, nullptr, nullptr, nullptr };
231
232 // Truck (racing overlay)
233 Ogre::TextAreaOverlayElement* laptime = nullptr;
234 Ogre::TextAreaOverlayElement* bestlaptime = nullptr;
235
236 Ogre::TextAreaOverlayElement* boat_depth_value_taoe = nullptr;
237
238 // truck
239 Ogre::TextureUnitState *speedotexture = nullptr; // Needed for dashboard prop
240 Ogre::TextureUnitState *tachotexture = nullptr; // Needed for dashboard prop
241
242 // Marine
243 Ogre::TextureUnitState *boatspeedtexture = nullptr;
244 Ogre::TextureUnitState *boatsteertexture = nullptr;
245
246 // Truck
247 Ogre::TextureUnitState *pressuretexture = nullptr;
248
249 // Marine: Written in init(), read-only in simulation.
250 float thrtop = 0.f;
251 float thrheight = 0.f;
252 float throffset = 0.f;
253
254 std::vector<LoadedOverlay> m_loaded_overlays;
255};
256
257} // namespace RoR
Central state/object manager and communications hub.
Provides a 3D graphical representation of the simulation Idea: simulation runs at it's own constant r...
Definition GfxScene.h:47
Ogre::TextAreaOverlayElement * guiAuto3D[5]
void resizeOverlay(LoadedOverlay &overlay)
Ogre::TextAreaOverlayElement * boat_depth_value_taoe
Marine.
std::vector< LoadedOverlay > m_loaded_overlays
Ogre::RenderWindow * win
Ogre::Overlay * loadOverlay(Ogre::String name, bool autoResizeRation=true)
void UpdateMarineHUD(ActorPtr vehicle)
Ogre::Overlay * m_racing_overlay
Ogre::TextureUnitState * speedotexture
void showPressureOverlay(bool show)
void UpdatePressureOverlay(RoR::GfxActor *ga)
Ogre::TextureUnitState * boatspeedtexture
void UpdateRacingGui(RoR::GfxScene *gs)
void UpdateLandVehicleHUD(RoR::GfxActor *ga)
void placeNeedle(Ogre::SceneNode *node, float x, float y, float len)
Ogre::TextureUnitState * boatsteertexture
Ogre::OverlayElement * guiGear3D
truck
Ogre::OverlayElement * guiGear
truck
Ogre::Overlay * m_marine_dashboard_needles_overlay
Ogre::OverlayElement * bthro2
Ogre::Overlay * m_truck_pressure_needle_overlay
Ogre::OverlayElement * bthro1
AeroDashOverlay m_aerial_dashboard
Ogre::TextureUnitState * tachotexture
Ogre::OverlayElement * loadOverlayElement(Ogre::String name)
void showDashboardOverlays(bool show, ActorPtr actor)
Ogre::TextAreaOverlayElement * bestlaptime
Ogre::TextAreaOverlayElement * guiAuto[5]
Ogre::Overlay * m_marine_dashboard_overlay
Ogre::TextAreaOverlayElement * laptime
Ogre::Overlay * m_truck_pressure_overlay
Ogre::Overlay * m_machine_dashboard_overlay
Ogre::TextureUnitState * pressuretexture
void reposPanel(Ogre::OverlayElement *oe)
void resizePanel(Ogre::OverlayElement *oe)
void UpdateAerialHUD(RoR::GfxActor *ga)
void updateStats(bool detailed=false)
void ToggleDashboardOverlays(ActorPtr actor)
void SetIgnition(int engine, bool visible, bool ignited)
AeroTrimWidget alt_trim
AeroSwitchWidget wlv
Ogre::TextureUnitState * adibugstexture
AeroSwitchWidget alt
Ogre::TextureUnitState * airspeedtexture
AeroSwitchWidget vs
AeroSwitchWidget brks
void SetEngineRpm(int engine, float pcent)
AeroSwitchWidget ias
Ogre::TextureUnitState * altimetertexture
void SetThrottle(int engine, bool visible, float value)
AeroSwitchWidget engstarts[4]
void SetEngineTorque(int engine, float pcent)
Ogre::TextureUnitState * aoatexture
Ogre::TextAreaOverlayElement * alt_value_textarea
Ogre::TextureUnitState * hsivtexture
AeroTrimWidget ias_trim
AeroSwitchWidget gpws
Ogre::TextureUnitState * hsibugtexture
Ogre::TextureUnitState * hsihtexture
Ogre::TextureUnitState * hsirosetexture
Ogre::Overlay * dash_overlay
AeroEngineWidget engines[4]
AeroSwitchWidget hdg
Ogre::Overlay * needles_overlay
AeroTrimWidget vs_trim
static void SetMaterialHighlighted(Ogre::MaterialPtr, bool value)
void SetEngineFailed(int engine, bool value)
std::vector< AeroInteractiveWidget * > aero_widgets
AeroSwitchWidget nav
AeroTrimWidget hdg_trim
void SetEnginePitch(int engine, float value)
Ogre::TextureUnitState * vvitexture
Ogre::TextureUnitState * aditapetexture
AeroInteractiveWidget * hovered_widget
Ogre::OverlayElement * thr_element
Ogre::TextureUnitState * torque_texture
Ogre::TextureUnitState * pitch_texture
Ogre::OverlayElement * GetHoveredElement() const override
Ogre::OverlayElement * engfire_element
bool UpdateMouseHover() override
Ogre::MaterialPtr thr_material
void Setup(std::string const &engfire_elemname, std::string const &thr_elemname)
Ogre::TextureUnitState * rpm_texture
All this complexity just to have a nifty mouse-hover highlighting for the dashboard elements (well,...
virtual ~AeroInteractiveWidget()=default
virtual Ogre::OverlayElement * GetHoveredElement() const =0
virtual bool UpdateMouseHover()=0
void Setup(std::string const &elem_name, std::string const &mat_on, std::string const &mat_off)
Ogre::OverlayElement * element
bool UpdateMouseHover() override
void SetActive(bool value)
Ogre::MaterialPtr off_material
Ogre::OverlayElement * GetHoveredElement() const override
Ogre::MaterialPtr on_material
void DisplayFormat(const char *fmt,...)
Ogre::OverlayElement * GetHoveredElement() const override
void Setup(std::string const &up, std::string const &dn, std::string const &disp)
Ogre::OverlayElement * display
bool UpdateMouseHover() override
Ogre::MaterialPtr down_material
Ogre::OverlayElement * hovered_button
Ogre::MaterialPtr up_material
Ogre::OverlayElement * dn_button
Ogre::OverlayElement * up_button