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);
387 else if (mode ==
BOAT)
394 Ogre::OverlayElement* help_elem = OverlayManager::getSingleton().getOverlayElement(
"tracks/machinehelppanel");
401 help_elem->setMaterialName(
"tracks/black");
420 static std::string currFps =
_L(
"Current FPS: ");
421 static std::string avgFps =
_L(
"Average FPS: ");
422 static std::string bestFps =
_L(
"Best FPS: ");
423 static std::string worstFps =
_L(
"Worst FPS: ");
424 static std::string tris =
_L(
"Triangle Count: ");
425 const RenderTarget::FrameStats& stats =
win->getStatistics();
430 OverlayElement* guiAvg = OverlayManager::getSingleton().getOverlayElement(
"Core/AverageFps");
431 OverlayElement* guiCurr = OverlayManager::getSingleton().getOverlayElement(
"Core/CurrFps");
432 OverlayElement* guiBest = OverlayManager::getSingleton().getOverlayElement(
"Core/BestFps");
433 OverlayElement* guiWorst = OverlayManager::getSingleton().getOverlayElement(
"Core/WorstFps");
435 guiAvg->setCaption(avgFps +
TOSTRING(stats.avgFPS));
436 guiCurr->setCaption(currFps +
TOSTRING(stats.lastFPS));
437 guiBest->setCaption(bestFps +
TOSTRING(stats.bestFPS) + (
" ") +
TOSTRING(stats.bestFrameTime) + (
" ms"));
438 guiWorst->setCaption(worstFps +
TOSTRING(stats.worstFPS) + (
" ") +
TOSTRING(stats.worstFrameTime) + (
" ms"));
440 OverlayElement* guiTris = OverlayManager::getSingleton().getOverlayElement(
"Core/NumTris");
441 std::string triss = tris +
TOSTRING(stats.triangleCount);
442 if (stats.triangleCount > 1000000)
443 triss = tris +
TOSTRING(stats.triangleCount/1000000.0f) + (
" M");
444 else if (stats.triangleCount > 1000)
445 triss = tris +
TOSTRING(stats.triangleCount/1000.0f) + (
" k");
446 guiTris->setCaption(triss);
449 std::string memoryText;
450 if (TextureManager::getSingleton().getMemoryUsage() > 1)
451 memoryText = memoryText +
_L(
"Textures: ") +
formatBytes(TextureManager::getSingleton().getMemoryUsage()) + (
" / ") +
formatBytes(TextureManager::getSingleton().getMemoryBudget()) + (
"\n");
452 if (CompositorManager::getSingleton().getMemoryUsage() > 1)
453 memoryText = memoryText +
_L(
"Compositors: ") +
formatBytes(CompositorManager::getSingleton().getMemoryUsage()) + (
" / ") +
formatBytes(CompositorManager::getSingleton().getMemoryBudget()) + (
"\n");
454 if (FontManager::getSingleton().getMemoryUsage() > 1)
455 memoryText = memoryText +
_L(
"Fonts: ") +
formatBytes(FontManager::getSingleton().getMemoryUsage()) + (
" / ") +
formatBytes(FontManager::getSingleton().getMemoryBudget()) + (
"\n");
456 if (GpuProgramManager::getSingleton().getMemoryUsage() > 1)
457 memoryText = memoryText +
_L(
"GPU Program: ") +
formatBytes(GpuProgramManager::getSingleton().getMemoryUsage()) + (
" / ") +
formatBytes(GpuProgramManager::getSingleton().getMemoryBudget()) + (
"\n");
458 if (HighLevelGpuProgramManager::getSingleton().getMemoryUsage() > 1)
459 memoryText = memoryText +
_L(
"HL GPU Program: ") +
formatBytes(HighLevelGpuProgramManager::getSingleton().getMemoryUsage()) + (
" / ") +
formatBytes(HighLevelGpuProgramManager::getSingleton().getMemoryBudget()) + (
"\n");
460 if (MaterialManager::getSingleton().getMemoryUsage() > 1)
461 memoryText = memoryText +
_L(
"Materials: ") +
formatBytes(MaterialManager::getSingleton().getMemoryUsage()) + (
" / ") +
formatBytes(MaterialManager::getSingleton().getMemoryBudget()) + (
"\n");
462 if (MeshManager::getSingleton().getMemoryUsage() > 1)
463 memoryText = memoryText +
_L(
"Meshes: ") +
formatBytes(MeshManager::getSingleton().getMemoryUsage()) + (
" / ") +
formatBytes(MeshManager::getSingleton().getMemoryBudget()) + (
"\n");
464 if (SkeletonManager::getSingleton().getMemoryUsage() > 1)
465 memoryText = memoryText +
_L(
"Skeletons: ") +
formatBytes(SkeletonManager::getSingleton().getMemoryUsage()) + (
" / ") +
formatBytes(SkeletonManager::getSingleton().getMemoryBudget()) + (
"\n");
466 if (MaterialManager::getSingleton().getMemoryUsage() > 1)
467 memoryText = memoryText +
_L(
"Materials: ") +
formatBytes(MaterialManager::getSingleton().getMemoryUsage()) + (
" / ") +
formatBytes(MaterialManager::getSingleton().getMemoryBudget()) + (
"\n");
468 memoryText = memoryText + (
"\n");
470 OverlayElement* memoryDbg = OverlayManager::getSingleton().getOverlayElement(
"Core/MemoryText");
471 memoryDbg->setCaption(memoryText);
473 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();
474 String sumMemoryText =
_L(
"Memory (Ogre): ") +
formatBytes(sumMem) + (
"\n");
476 OverlayElement* memorySumDbg = OverlayManager::getSingleton().getOverlayElement(
"Core/CurrMemory");
477 memorySumDbg->setCaption(sumMemoryText);
505 for (
int i = 0; i < num_engines; ++i)
513 for (
int i = 0; i < num_engines; ++i)
628 for (
int i = 0; i < num_engines; ++i)
650 if (!ms.buttonDown(OIS::MB_Left))
664 Real angle = 135.0 - pressure * 2.7;
677 if (vehicle_getgear > 0)
683 else if (vehicle_getgear == 0)
694 for (
int i = 0; i < 5; i++)
700 guiAuto[i]->setColourTop(ColourValue(1.0, 0.2, 0.2, 1.0));
701 guiAuto[i]->setColourBottom(ColourValue(0.8, 0.1, 0.1, 1.0));
705 guiAuto[i]->setColourTop(ColourValue(1.0, 1.0, 1.0, 1.0));
706 guiAuto[i]->setColourBottom(ColourValue(0.8, 0.8, 0.8, 1.0));
713 guiAuto[i]->setColourTop(ColourValue(0.4, 0.05, 0.05, 1.0));
714 guiAuto[i]->setColourBottom(ColourValue(0.3, 0.02, 0.2, 1.0));
718 guiAuto[i]->setColourTop(ColourValue(0.4, 0.4, 0.4, 1.0));
719 guiAuto[i]->setColourBottom(ColourValue(0.3, 0.3, 0.3, 1.0));
727 angle = std::max(-140.0f, angle);
731 Real tachoFactor = 0.072;
737 angle = std::max(-120.0f, angle);
738 angle = std::min(angle, 121.0f);
748 int num_ae =
static_cast<int>( simbuf_ae.size() );
769 float sea_level_pressure = 101325;
771 float airpressure = sea_level_pressure * pow(1.0 - 0.0065 * altitude / 288.15, 5.24947);
772 float airdensity = airpressure * 0.0000120896;
774 float kt = ground_speed_kt * sqrt(airdensity / 1.225);
778 angle = ((kt - 23.0) / 1.111);
780 angle = (24.0 + (kt - 50.0) / 0.8621);
782 angle = (82.0 + (kt - 100.0) / 0.8065);
792 float absangle = angle;
794 absangle = -absangle;
813 sprintf(altc,
"%03u", (
int)(nodes[0].AbsPosition.y / 30.48));
820 float rollangle = asin(rollv.dotProduct(Vector3::UNIT_Y));
824 float pitchangle = asin(dirv.dotProduct(Vector3::UNIT_Y));
825 Vector3 upv = dirv.crossProduct(-rollv);
827 rollangle = 3.14159 - rollangle;
833 float dirangle = atan2(dirv.dotProduct(Vector3::UNIT_X), dirv.dotProduct(-Vector3::UNIT_Z));
859 if (vvi < 1000.0 && vvi > -1000.0)
861 if (vvi > 1000.0 && vvi < 6000.0)
862 angle = 47.0 + (vvi - 1000.0) * 0.01175;
865 if (vvi < -1000.0 && vvi > -6000.0)
866 angle = -47.0 + (vvi + 1000.0) * 0.01175;
935 if (height > 0.1 && height < 99.9)
937 sprintf(tmp,
"%2.1f", height);
948 float kt = cam_dir.dotProduct(velocity) * 1.9438;
949 float angle = kt * 4.2;
967 std::string txt = StringUtil::format(
"%.2i'%.2i.%.2i", (
int)(time) / 60, (
int)(time) % 60, (
int)(time * 100.0) % 100);
968 this->
laptime->setCaption(txt);
972 txt = StringUtil::format(
"%.2i'%.2i.%.2i", (
int)(time) / 60, (
int)(time) % 60, (
int)(time * 100.0) % 100);
982 Ogre::ColourValue colour = Ogre::ColourValue::White;
983 if (time_diff > 0.0f)
985 colour = ColourValue(0.8, 0.0, 0.0);
987 else if (time_diff < 0.0f)
989 colour = ColourValue(0.0, 0.8, 0.0);
991 this->
laptime->setColourTop(colour);
992 this->
laptime->setColourBottom(colour);
1012 value ?
"tracks/engfire-on" :
"tracks/engfire-off");
1019 angle = -5.0 + pcent * 1.9167;
1020 else if (pcent < 110.0)
1021 angle = 110.0 + (pcent - 60.0) * 4.075;
1036 angle = -5.0 + pcent * 1.9167;
1037 else if (pcent < 110.0)
1038 angle = 110.0 + (pcent - 60.0) * 4.075;
1063 engfire_element = Ogre::OverlayManager::getSingleton().getOverlayElement(engfire_elemname);
1064 thr_element = Ogre::OverlayManager::getSingleton().getOverlayElement(thr_elemname);
1072 Ogre::MaterialManager::getSingleton().remove(
thr_material);
1078 bool retval =
false;
1079 if (retval =
thr_element->contains(mouse_pos.x, mouse_pos.y))
1106 element = Ogre::OverlayManager::getSingleton().getOverlayElement(elem_name);
1107 on_material = Ogre::MaterialManager::getSingleton().getByName(mat_on)->clone(elem_name +
"@" + mat_on);
1108 off_material = Ogre::MaterialManager::getSingleton().getByName(mat_off)->clone(elem_name +
"@" + mat_off);
1114 Ogre::MaterialManager::getSingleton().remove(
on_material);
1115 Ogre::MaterialManager::getSingleton().remove(
off_material);
1122 bool retval =
false;
1123 if (retval =
element->contains(mouse_pos.x, mouse_pos.y))
1147 display = Ogre::OverlayManager::getSingleton().getOverlayElement(disp);
1148 up_button = Ogre::OverlayManager::getSingleton().getOverlayElement(up);
1151 dn_button = Ogre::OverlayManager::getSingleton().getOverlayElement(dn);
1159 Ogre::MaterialManager::getSingleton().remove(
up_material);
1160 Ogre::MaterialManager::getSingleton().remove(
down_material);
1167 bool retval =
false;
1168 if (retval =
up_button->contains(mouse_pos.x, mouse_pos.y))
1174 else if (retval =
dn_button->contains(mouse_pos.x, mouse_pos.y))
1196 char buffer[500] = {};
1199 va_start(args, fmt);
1200 vsprintf(buffer, fmt, args);
1218 mat->getTechnique(0)->getPass(0)->getTextureUnitState(0)->setColourOperationEx(
1219 Ogre::LBX_MODULATE, Ogre::LBS_TEXTURE, Ogre::LBS_CURRENT);
1224 mat->getTechnique(0)->getPass(0)->getTextureUnitState(0)->setColourOperationEx(
1225 Ogre::LBX_ADD, Ogre::LBS_TEXTURE, Ogre::LBS_MANUAL, Ogre::ColourValue::White, ColourValue(0.32, 0.3, 0.25));
1265 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
Gfx state; Dashboard manager (HUD element manager)
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()
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 * guiGear
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