27#include <Overlay/OgreOverlayManager.h>
28#include <Overlay/OgreOverlay.h>
29#include <Overlay/OgreFontManager.h>
73 oe->setHeight(oe->getHeight() * (Real)
win->getWidth() / (Real)
win->getHeight());
74 oe->setTop(oe->getTop() * (Real)
win->getWidth() / (Real)
win->getHeight());
81 oe->setTop(oe->getTop() * (Real)
win->getWidth() / (Real)
win->getHeight());
86 node->setPosition((
x - 640.0) / 444.0, (512 -
y) / 444.0, -2.0);
87 node->setScale(0.0025, 0.007 * len, 0.007);
92 Overlay* o = OverlayManager::getSingleton().getByName(name);
112 float w =
win->getWidth();
113 float h =
win->getHeight();
114 float s = (4.0f / 3.0f) / (
w / h);
118 s = (3.0f / 4.0f) / (h /
w);
122 lo.
o->setScroll(0, 0);
125 lo.
o->setScale(s, s);
126 lo.
o->scroll(1 - s, s - 1);
139 return OverlayManager::getSingleton().getOverlayElement(name);
142Ogre::TextureUnitState*
GetTexUnit(Ogre::String material_name)
144 return MaterialManager::getSingleton().getByName(material_name)->getTechnique(0)->getPass(0)->getTextureUnitState(0);
159 MaterialPtr m = MaterialManager::getSingleton().getByName(
"tracks/pressureneedle_mat");
161 pressuretexture = m->getTechnique(0)->getPass(0)->getTextureUnitState(0);
168 resizePanel(OverlayManager::getSingleton().getOverlayElement(
"tracks/machinedashbar"));
169 resizePanel(OverlayManager::getSingleton().getOverlayElement(
"tracks/machinedashfiller"));
171 resizePanel(OverlayManager::getSingleton().getOverlayElement(
"tracks/airdashbar"));
172 resizePanel(OverlayManager::getSingleton().getOverlayElement(
"tracks/airdashfiller"));
174 OverlayElement* tempoe;
175 resizePanel(tempoe = OverlayManager::getSingleton().getOverlayElement(
"tracks/thrusttrack1"));
177 resizePanel(OverlayManager::getSingleton().getOverlayElement(
"tracks/thrusttrack2"));
178 resizePanel(OverlayManager::getSingleton().getOverlayElement(
"tracks/thrusttrack3"));
179 resizePanel(OverlayManager::getSingleton().getOverlayElement(
"tracks/thrusttrack4"));
272 boatspeedtexture = ((MaterialPtr)(MaterialManager::getSingleton().getByName(
"tracks/boatspeedneedle_mat")))->getTechnique(0)->getPass(0)->getTextureUnitState(0);
273 boatsteertexture = ((MaterialPtr)(MaterialManager::getSingleton().getByName(
"tracks/boatsteer/fg_mat")))->getTechnique(0)->getPass(0)->getTextureUnitState(0);
276 speedotexture = ((MaterialPtr)(MaterialManager::getSingleton().getByName(
"tracks/speedoneedle_mat")))->getTechnique(0)->getPass(0)->getTextureUnitState(0);
277 tachotexture = ((MaterialPtr)(MaterialManager::getSingleton().getByName(
"tracks/tachoneedle_mat"))) ->getTechnique(0)->getPass(0)->getTextureUnitState(0);
394 else if (mode ==
BOAT)
401 Ogre::OverlayElement* help_elem = OverlayManager::getSingleton().getOverlayElement(
"tracks/machinehelppanel");
408 help_elem->setMaterialName(
"tracks/black");
427 static std::string currFps =
_L(
"Current FPS: ");
428 static std::string avgFps =
_L(
"Average FPS: ");
429 static std::string bestFps =
_L(
"Best FPS: ");
430 static std::string worstFps =
_L(
"Worst FPS: ");
431 static std::string tris =
_L(
"Triangle Count: ");
432 const RenderTarget::FrameStats& stats =
win->getStatistics();
437 OverlayElement* guiAvg = OverlayManager::getSingleton().getOverlayElement(
"Core/AverageFps");
438 OverlayElement* guiCurr = OverlayManager::getSingleton().getOverlayElement(
"Core/CurrFps");
439 OverlayElement* guiBest = OverlayManager::getSingleton().getOverlayElement(
"Core/BestFps");
440 OverlayElement* guiWorst = OverlayManager::getSingleton().getOverlayElement(
"Core/WorstFps");
442 guiAvg->setCaption(avgFps +
TOSTRING(stats.avgFPS));
443 guiCurr->setCaption(currFps +
TOSTRING(stats.lastFPS));
444 guiBest->setCaption(bestFps +
TOSTRING(stats.bestFPS) + (
" ") +
TOSTRING(stats.bestFrameTime) + (
" ms"));
445 guiWorst->setCaption(worstFps +
TOSTRING(stats.worstFPS) + (
" ") +
TOSTRING(stats.worstFrameTime) + (
" ms"));
447 OverlayElement* guiTris = OverlayManager::getSingleton().getOverlayElement(
"Core/NumTris");
448 std::string triss = tris +
TOSTRING(stats.triangleCount);
449 if (stats.triangleCount > 1000000)
450 triss = tris +
TOSTRING(stats.triangleCount/1000000.0f) + (
" M");
451 else if (stats.triangleCount > 1000)
452 triss = tris +
TOSTRING(stats.triangleCount/1000.0f) + (
" k");
453 guiTris->setCaption(triss);
456 std::string memoryText;
457 if (TextureManager::getSingleton().getMemoryUsage() > 1)
458 memoryText = memoryText +
_L(
"Textures: ") +
formatBytes(TextureManager::getSingleton().getMemoryUsage()) + (
" / ") +
formatBytes(TextureManager::getSingleton().getMemoryBudget()) + (
"\n");
459 if (CompositorManager::getSingleton().getMemoryUsage() > 1)
460 memoryText = memoryText +
_L(
"Compositors: ") +
formatBytes(CompositorManager::getSingleton().getMemoryUsage()) + (
" / ") +
formatBytes(CompositorManager::getSingleton().getMemoryBudget()) + (
"\n");
461 if (FontManager::getSingleton().getMemoryUsage() > 1)
462 memoryText = memoryText +
_L(
"Fonts: ") +
formatBytes(FontManager::getSingleton().getMemoryUsage()) + (
" / ") +
formatBytes(FontManager::getSingleton().getMemoryBudget()) + (
"\n");
463 if (GpuProgramManager::getSingleton().getMemoryUsage() > 1)
464 memoryText = memoryText +
_L(
"GPU Program: ") +
formatBytes(GpuProgramManager::getSingleton().getMemoryUsage()) + (
" / ") +
formatBytes(GpuProgramManager::getSingleton().getMemoryBudget()) + (
"\n");
465 if (HighLevelGpuProgramManager::getSingleton().getMemoryUsage() > 1)
466 memoryText = memoryText +
_L(
"HL GPU Program: ") +
formatBytes(HighLevelGpuProgramManager::getSingleton().getMemoryUsage()) + (
" / ") +
formatBytes(HighLevelGpuProgramManager::getSingleton().getMemoryBudget()) + (
"\n");
467 if (MaterialManager::getSingleton().getMemoryUsage() > 1)
468 memoryText = memoryText +
_L(
"Materials: ") +
formatBytes(MaterialManager::getSingleton().getMemoryUsage()) + (
" / ") +
formatBytes(MaterialManager::getSingleton().getMemoryBudget()) + (
"\n");
469 if (MeshManager::getSingleton().getMemoryUsage() > 1)
470 memoryText = memoryText +
_L(
"Meshes: ") +
formatBytes(MeshManager::getSingleton().getMemoryUsage()) + (
" / ") +
formatBytes(MeshManager::getSingleton().getMemoryBudget()) + (
"\n");
471 if (SkeletonManager::getSingleton().getMemoryUsage() > 1)
472 memoryText = memoryText +
_L(
"Skeletons: ") +
formatBytes(SkeletonManager::getSingleton().getMemoryUsage()) + (
" / ") +
formatBytes(SkeletonManager::getSingleton().getMemoryBudget()) + (
"\n");
473 if (MaterialManager::getSingleton().getMemoryUsage() > 1)
474 memoryText = memoryText +
_L(
"Materials: ") +
formatBytes(MaterialManager::getSingleton().getMemoryUsage()) + (
" / ") +
formatBytes(MaterialManager::getSingleton().getMemoryBudget()) + (
"\n");
475 memoryText = memoryText + (
"\n");
477 OverlayElement* memoryDbg = OverlayManager::getSingleton().getOverlayElement(
"Core/MemoryText");
478 memoryDbg->setCaption(memoryText);
480 float sumMem = TextureManager::getSingleton().getMemoryUsage() + CompositorManager::getSingleton().getMemoryUsage() + FontManager::getSingleton().getMemoryUsage() + GpuProgramManager::getSingleton().getMemoryUsage() + HighLevelGpuProgramManager::getSingleton().getMemoryUsage() + MaterialManager::getSingleton().getMemoryUsage() + MeshManager::getSingleton().getMemoryUsage() + SkeletonManager::getSingleton().getMemoryUsage() + MaterialManager::getSingleton().getMemoryUsage();
481 String sumMemoryText =
_L(
"Memory (Ogre): ") +
formatBytes(sumMem) + (
"\n");
483 OverlayElement* memorySumDbg = OverlayManager::getSingleton().getOverlayElement(
"Core/CurrMemory");
484 memorySumDbg->setCaption(sumMemoryText);
512 for (
int i = 0; i < num_engines; ++i)
520 for (
int i = 0; i < num_engines; ++i)
635 for (
int i = 0; i < num_engines; ++i)
657 if (!ms.buttonDown(OIS::MB_Left))
671 Real angle = 135.0 - pressure * 2.7;
684 if (vehicle_getgear > 0)
691 else if (vehicle_getgear == 0)
704 for (
int i = 0; i < 5; i++)
710 guiAuto[i]->setColourTop(ColourValue(1.0, 0.2, 0.2, 1.0));
711 guiAuto[i]->setColourBottom(ColourValue(0.8, 0.1, 0.1, 1.0));
712 guiAuto3D[i]->setColourTop(ColourValue(1.0, 0.2, 0.2, 1.0));
713 guiAuto3D[i]->setColourBottom(ColourValue(0.8, 0.1, 0.1, 1.0));
717 guiAuto[i]->setColourTop(ColourValue(1.0, 1.0, 1.0, 1.0));
718 guiAuto[i]->setColourBottom(ColourValue(0.8, 0.8, 0.8, 1.0));
719 guiAuto3D[i]->setColourTop(ColourValue(1.0, 1.0, 1.0, 1.0));
720 guiAuto3D[i]->setColourBottom(ColourValue(0.8, 0.8, 0.8, 1.0));
727 guiAuto[i]->setColourTop(ColourValue(0.4, 0.05, 0.05, 1.0));
728 guiAuto[i]->setColourBottom(ColourValue(0.3, 0.02, 0.2, 1.0));
729 guiAuto3D[i]->setColourTop(ColourValue(0.4, 0.05, 0.05, 1.0));
730 guiAuto3D[i]->setColourBottom(ColourValue(0.3, 0.02, 0.2, 1.0));
734 guiAuto[i]->setColourTop(ColourValue(0.4, 0.4, 0.4, 1.0));
735 guiAuto[i]->setColourBottom(ColourValue(0.3, 0.3, 0.3, 1.0));
736 guiAuto3D[i]->setColourTop(ColourValue(0.4, 0.4, 0.4, 1.0));
737 guiAuto3D[i]->setColourBottom(ColourValue(0.3, 0.3, 0.3, 1.0));
745 angle = std::max(-140.0f, angle);
749 Real tachoFactor = 0.072;
755 angle = std::max(-120.0f, angle);
756 angle = std::min(angle, 121.0f);
766 int num_ae =
static_cast<int>( simbuf_ae.size() );
787 float sea_level_pressure = 101325;
789 float airpressure = sea_level_pressure * pow(1.0 - 0.0065 * altitude / 288.15, 5.24947);
790 float airdensity = airpressure * 0.0000120896;
792 float kt = ground_speed_kt * sqrt(airdensity / 1.225);
796 angle = ((kt - 23.0) / 1.111);
798 angle = (24.0 + (kt - 50.0) / 0.8621);
800 angle = (82.0 + (kt - 100.0) / 0.8065);
810 float absangle = angle;
812 absangle = -absangle;
831 sprintf(altc,
"%03u", (
int)(nodes[0].AbsPosition.y / 30.48));
838 float rollangle = asin(rollv.dotProduct(Vector3::UNIT_Y));
842 float pitchangle = asin(dirv.dotProduct(Vector3::UNIT_Y));
843 Vector3 upv = dirv.crossProduct(-rollv);
845 rollangle = 3.14159 - rollangle;
851 float dirangle = atan2(dirv.dotProduct(Vector3::UNIT_X), dirv.dotProduct(-Vector3::UNIT_Z));
877 if (vvi < 1000.0 && vvi > -1000.0)
879 if (vvi > 1000.0 && vvi < 6000.0)
880 angle = 47.0 + (vvi - 1000.0) * 0.01175;
883 if (vvi < -1000.0 && vvi > -6000.0)
884 angle = -47.0 + (vvi + 1000.0) * 0.01175;
953 if (height > 0.1 && height < 99.9)
955 sprintf(tmp,
"%2.1f", height);
966 float kt = cam_dir.dotProduct(velocity) * 1.9438;
967 float angle = kt * 4.2;
985 std::string txt = StringUtil::format(
"%.2i'%.2i.%.2i", (
int)(time) / 60, (
int)(time) % 60, (
int)(time * 100.0) % 100);
986 this->
laptime->setCaption(txt);
990 txt = StringUtil::format(
"%.2i'%.2i.%.2i", (
int)(time) / 60, (
int)(time) % 60, (
int)(time * 100.0) % 100);
1000 Ogre::ColourValue colour = Ogre::ColourValue::White;
1001 if (time_diff > 0.0f)
1003 colour = ColourValue(0.8, 0.0, 0.0);
1005 else if (time_diff < 0.0f)
1007 colour = ColourValue(0.0, 0.8, 0.0);
1009 this->
laptime->setColourTop(colour);
1010 this->
laptime->setColourBottom(colour);
1030 value ?
"tracks/engfire-on" :
"tracks/engfire-off");
1037 angle = -5.0 + pcent * 1.9167;
1038 else if (pcent < 110.0)
1039 angle = 110.0 + (pcent - 60.0) * 4.075;
1054 angle = -5.0 + pcent * 1.9167;
1055 else if (pcent < 110.0)
1056 angle = 110.0 + (pcent - 60.0) * 4.075;
1081 engfire_element = Ogre::OverlayManager::getSingleton().getOverlayElement(engfire_elemname);
1082 thr_element = Ogre::OverlayManager::getSingleton().getOverlayElement(thr_elemname);
1090 Ogre::MaterialManager::getSingleton().remove(
thr_material);
1096 bool retval =
false;
1097 if (retval =
thr_element->contains(mouse_pos.x, mouse_pos.y))
1124 element = Ogre::OverlayManager::getSingleton().getOverlayElement(elem_name);
1125 on_material = Ogre::MaterialManager::getSingleton().getByName(mat_on)->clone(elem_name +
"@" + mat_on);
1126 off_material = Ogre::MaterialManager::getSingleton().getByName(mat_off)->clone(elem_name +
"@" + mat_off);
1132 Ogre::MaterialManager::getSingleton().remove(
on_material);
1133 Ogre::MaterialManager::getSingleton().remove(
off_material);
1140 bool retval =
false;
1141 if (retval =
element->contains(mouse_pos.x, mouse_pos.y))
1165 display = Ogre::OverlayManager::getSingleton().getOverlayElement(disp);
1166 up_button = Ogre::OverlayManager::getSingleton().getOverlayElement(up);
1169 dn_button = Ogre::OverlayManager::getSingleton().getOverlayElement(dn);
1177 Ogre::MaterialManager::getSingleton().remove(
up_material);
1178 Ogre::MaterialManager::getSingleton().remove(
down_material);
1185 bool retval =
false;
1186 if (retval =
up_button->contains(mouse_pos.x, mouse_pos.y))
1192 else if (retval =
dn_button->contains(mouse_pos.x, mouse_pos.y))
1214 char buffer[500] = {};
1217 va_start(args, fmt);
1218 vsprintf(buffer, fmt, args);
1236 mat->getTechnique(0)->getPass(0)->getTextureUnitState(0)->setColourOperationEx(
1237 Ogre::LBX_MODULATE, Ogre::LBS_TEXTURE, Ogre::LBS_CURRENT);
1242 mat->getTechnique(0)->getPass(0)->getTextureUnitState(0)->setColourOperationEx(
1243 Ogre::LBX_ADD, Ogre::LBS_TEXTURE, Ogre::LBS_MANUAL, Ogre::ColourValue::White, ColourValue(0.32, 0.3, 0.25));
1282 if (elem->UpdateMouseHover())
System integration layer; inspired by OgreBites::ApplicationContext.
Game state manager and message-queue provider.
Manager for all visuals belonging to a single actor.
Ogre::TextureUnitState * GetTexUnit(Ogre::String material_name)
#define SOUND_START(_ACTOR_, _TRIG_)
#define SOUND_STOP(_ACTOR_, _TRIG_)
#define SOUND_MODULATE(_ACTOR_, _MOD_, _VALUE_)
DashBoardManagerPtr ar_dashboard
ScrewpropPtr ar_screwprops[MAX_SCREWPROPS]
NodeNum_t ar_main_camera_node_pos
Sim attr; ar_camera_node_pos[0] >= 0 ? ar_camera_node_pos[0] : 0.
float getHeightAboveGround(bool skip_virtual_nodes=true)
Ogre::Vector3 getDirection()
average actor velocity, calculated using the actor positions of the last two frames
AeroEnginePtr ar_aeroengines[MAX_AEROENGINES]
void parkingbrakeToggle()
AutopilotPtr ar_autopilot
ActorType ar_driveable
Sim attr; marks vehicle type and features.
virtual void setThrottle(float val)=0
virtual void flipStart()=0
Ogre::RenderWindow * GetRenderWindow()
int toggleHeading(int mode)
void setVisible(bool visibility)
bool wasDashboardHudLoaded() const
const ActorPtr & GetPlayerActor()
Ogre::MaterialPtr GetHelpMat()
ActorSB & GetSimDataBuffer()
NodeSB * GetSimNodeBuffer()
Provides a 3D graphical representation of the simulation Idea: simulation runs at it's own constant r...
GameContextSB & GetSimDataBuffer()
Ogre::TextAreaOverlayElement * guiAuto3D[5]
void resizeOverlay(LoadedOverlay &overlay)
Ogre::TextAreaOverlayElement * boat_depth_value_taoe
Marine.
bool handleMousePressed()
std::vector< LoadedOverlay > m_loaded_overlays
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
float mTimeUntilNextToggle
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
bool handleMouseReleased()
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)
@ AIRPLANE
its an airplane
AppContext * GetAppContext()
InputEngine * GetInputEngine()
GameContext * GetGameContext()
std::string formatBytes(double bytes)
int simbuf_num_gears
Gearbox.
Ogre::Vector3 simbuf_node0_velo
bool simbuf_tyre_pressurizing
int simbuf_ap_heading_mode
int simbuf_ap_heading_value
float simbuf_speedo_highest_kph
bool simbuf_speedo_use_engine_max_rpm
std::vector< AeroEngineSB > simbuf_aeroengines
bool simbuf_ap_ils_available
float simbuf_tyre_pressure
float simbuf_engine_max_rpm
NodeNum_t simbuf_camera0_pos_node
bool simbuf_parking_brake
NodeNum_t simbuf_camera0_roll_node
Ogre::Vector3 simbuf_direction
Output of Actor::getDirection()
void SetIgnition(int engine, bool visible, bool ignited)
Ogre::TextureUnitState * adibugstexture
Ogre::TextureUnitState * airspeedtexture
void SetEngineRpm(int engine, float pcent)
Ogre::TextureUnitState * altimetertexture
void SetThrottle(int engine, bool visible, float value)
bool mouse_drag_in_progress
AeroSwitchWidget engstarts[4]
void SetEngineTorque(int engine, float pcent)
Ogre::TextureUnitState * aoatexture
Ogre::TextAreaOverlayElement * alt_value_textarea
Ogre::TextureUnitState * hsivtexture
Ogre::TextureUnitState * hsibugtexture
Ogre::TextureUnitState * hsihtexture
Ogre::TextureUnitState * hsirosetexture
Ogre::Overlay * dash_overlay
AeroEngineWidget engines[4]
Ogre::Overlay * needles_overlay
float thrust_track_height
static void SetMaterialHighlighted(Ogre::MaterialPtr, bool value)
void SetEngineFailed(int engine, bool value)
std::vector< AeroInteractiveWidget * > aero_widgets
void SetEnginePitch(int engine, float value)
Ogre::TextureUnitState * vvitexture
Ogre::TextureUnitState * aditapetexture
AeroInteractiveWidget * hovered_widget
float simbuf_race_time_diff
float simbuf_race_best_time
Ogre::Vector3 AbsPosition