Skyscraper 2.0
enginemanager.cpp
Go to the documentation of this file.
1/*
2 Skyscraper 2.0 Alpha - Engine Manager Dialog
3 Copyright (C)2003-2024 Ryan Thoryk
4 https://www.skyscrapersim.net
5 https://sourceforge.net/projects/skyscraper/
6 Contact - ryan@skyscrapersim.net
7
8 This program is free software; you can redistribute it and/or
9 modify it under the terms of the GNU General Public License
10 as published by the Free Software Foundation; either version 2
11 of the License, or (at your option) any later version.
12
13 This program 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 this program; if not, write to the Free Software
20 Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
21*/
22
23//(*InternalHeaders(EngineManager)
24#include <wx/intl.h>
25#include <wx/string.h>
26//*)
27#include "globals.h"
28#include "sbs.h"
29#include "camera.h"
30#include "debugpanel.h"
31#include "vm.h"
32#include "enginecontext.h"
33#include "moveobject.h"
34#include "loaddialog.h"
35#include "enginemanager.h"
36
37namespace Skyscraper {
38
39//(*IdInit(EngineManager)
40const wxWindowID EngineManager::ID_EngineList = wxNewId();
41const wxWindowID EngineManager::ID_STATICTEXT4 = wxNewId();
42const wxWindowID EngineManager::ID_tPosition = wxNewId();
43const wxWindowID EngineManager::ID_STATICTEXT3 = wxNewId();
44const wxWindowID EngineManager::ID_tBoundsMin = wxNewId();
45const wxWindowID EngineManager::ID_STATICTEXT5 = wxNewId();
46const wxWindowID EngineManager::ID_tBoundsMax = wxNewId();
47const wxWindowID EngineManager::ID_STATICTEXT1 = wxNewId();
48const wxWindowID EngineManager::ID_tActive = wxNewId();
49const wxWindowID EngineManager::ID_STATICTEXT2 = wxNewId();
50const wxWindowID EngineManager::ID_tState = wxNewId();
51const wxWindowID EngineManager::ID_STATICTEXT6 = wxNewId();
52const wxWindowID EngineManager::ID_tUptime = wxNewId();
53const wxWindowID EngineManager::ID_STATICLINE2 = wxNewId();
54const wxWindowID EngineManager::ID_CLoads = wxNewId();
55const wxWindowID EngineManager::ID_chkRender = wxNewId();
56const wxWindowID EngineManager::ID_chkPaused = wxNewId();
57const wxWindowID EngineManager::ID_bSetActive = wxNewId();
58const wxWindowID EngineManager::ID_bReload = wxNewId();
59const wxWindowID EngineManager::ID_bMove = wxNewId();
60const wxWindowID EngineManager::ID_bLoad = wxNewId();
61const wxWindowID EngineManager::ID_bShutdown = wxNewId();
62const wxWindowID EngineManager::ID_bOk = wxNewId();
63//*)
64
65BEGIN_EVENT_TABLE(EngineManager,wxDialog)
66 //(*EventTable(EngineManager)
67 //*)
68END_EVENT_TABLE()
69
70EngineManager::EngineManager(DebugPanel* parent,wxWindowID id,const wxPoint& pos,const wxSize& size)
71{
72 //(*Initialize(EngineManager)
73 wxBoxSizer* BoxSizer1;
74 wxBoxSizer* BoxSizer2;
75 wxBoxSizer* BoxSizer4;
76 wxBoxSizer* BoxSizer5;
77 wxBoxSizer* BoxSizer6;
78 wxBoxSizer* BoxSizer7;
79 wxBoxSizer* BoxSizer8;
80 wxBoxSizer* BoxSizer9;
81 wxFlexGridSizer* FlexGridSizer1;
82 wxFlexGridSizer* FlexGridSizer2;
83 wxFlexGridSizer* FlexGridSizer4;
84 wxFlexGridSizer* FlexGridSizer5;
85
86 Create(parent, wxID_ANY, _("Engine Manager"), wxDefaultPosition, wxDefaultSize, wxDEFAULT_DIALOG_STYLE, _T("wxID_ANY"));
87 FlexGridSizer1 = new wxFlexGridSizer(0, 1, 0, 0);
88 FlexGridSizer5 = new wxFlexGridSizer(0, 2, 0, 0);
89 BoxSizer8 = new wxBoxSizer(wxVERTICAL);
90 EngineList = new wxListBox(this, ID_EngineList, wxDefaultPosition, wxSize(300,200), 0, 0, 0, wxDefaultValidator, _T("ID_EngineList"));
91 BoxSizer8->Add(EngineList, 1, wxALL|wxALIGN_CENTER_HORIZONTAL, 5);
92 FlexGridSizer5->Add(BoxSizer8, 1, wxALL|wxEXPAND, 5);
93 BoxSizer1 = new wxBoxSizer(wxVERTICAL);
94 FlexGridSizer4 = new wxFlexGridSizer(0, 1, 0, 0);
95 FlexGridSizer2 = new wxFlexGridSizer(0, 2, 0, 0);
96 StaticText4 = new wxStaticText(this, ID_STATICTEXT4, _("Position:"), wxDefaultPosition, wxDefaultSize, 0, _T("ID_STATICTEXT4"));
97 FlexGridSizer2->Add(StaticText4, 1, wxALL|wxALIGN_CENTER_HORIZONTAL|wxALIGN_CENTER_VERTICAL, 5);
98 tPosition = new wxTextCtrl(this, ID_tPosition, wxEmptyString, wxDefaultPosition, wxDefaultSize, wxTE_READONLY|wxTE_CENTRE, wxDefaultValidator, _T("ID_tPosition"));
99 tPosition->SetMinSize(wxSize(200,-1));
100 FlexGridSizer2->Add(tPosition, 1, wxALIGN_CENTER_HORIZONTAL|wxALIGN_CENTER_VERTICAL, 5);
101 StaticText3 = new wxStaticText(this, ID_STATICTEXT3, _("Bounds Min:"), wxDefaultPosition, wxDefaultSize, 0, _T("ID_STATICTEXT3"));
102 FlexGridSizer2->Add(StaticText3, 1, wxALL|wxALIGN_CENTER_HORIZONTAL|wxALIGN_CENTER_VERTICAL, 5);
103 tBoundsMin = new wxTextCtrl(this, ID_tBoundsMin, wxEmptyString, wxDefaultPosition, wxDefaultSize, wxTE_READONLY|wxTE_CENTRE, wxDefaultValidator, _T("ID_tBoundsMin"));
104 tBoundsMin->SetMinSize(wxSize(200,-1));
105 FlexGridSizer2->Add(tBoundsMin, 1, wxALIGN_CENTER_HORIZONTAL|wxALIGN_CENTER_VERTICAL, 5);
106 StaticText5 = new wxStaticText(this, ID_STATICTEXT5, _("Bounds Max:"), wxDefaultPosition, wxDefaultSize, 0, _T("ID_STATICTEXT5"));
107 FlexGridSizer2->Add(StaticText5, 1, wxALL|wxALIGN_CENTER_HORIZONTAL|wxALIGN_CENTER_VERTICAL, 5);
108 tBoundsMax = new wxTextCtrl(this, ID_tBoundsMax, wxEmptyString, wxDefaultPosition, wxDefaultSize, wxTE_READONLY|wxTE_CENTRE, wxDefaultValidator, _T("ID_tBoundsMax"));
109 tBoundsMax->SetMinSize(wxSize(200,-1));
110 FlexGridSizer2->Add(tBoundsMax, 1, wxALIGN_CENTER_HORIZONTAL|wxALIGN_CENTER_VERTICAL, 5);
111 StaticText1 = new wxStaticText(this, ID_STATICTEXT1, _("Camera Active:"), wxDefaultPosition, wxDefaultSize, 0, _T("ID_STATICTEXT1"));
112 FlexGridSizer2->Add(StaticText1, 1, wxALL|wxALIGN_CENTER_HORIZONTAL|wxALIGN_CENTER_VERTICAL, 5);
113 tActive = new wxTextCtrl(this, ID_tActive, wxEmptyString, wxDefaultPosition, wxDefaultSize, wxTE_READONLY|wxTE_CENTRE, wxDefaultValidator, _T("ID_tActive"));
114 tActive->SetMinSize(wxSize(200,-1));
115 FlexGridSizer2->Add(tActive, 1, wxALIGN_CENTER_HORIZONTAL|wxALIGN_CENTER_VERTICAL, 5);
116 StaticText2 = new wxStaticText(this, ID_STATICTEXT2, _("State:"), wxDefaultPosition, wxDefaultSize, 0, _T("ID_STATICTEXT2"));
117 FlexGridSizer2->Add(StaticText2, 1, wxALL|wxALIGN_CENTER_HORIZONTAL|wxALIGN_CENTER_VERTICAL, 5);
118 tState = new wxTextCtrl(this, ID_tState, wxEmptyString, wxDefaultPosition, wxDefaultSize, wxTE_READONLY|wxTE_CENTRE, wxDefaultValidator, _T("ID_tState"));
119 tState->SetMinSize(wxSize(200,-1));
120 FlexGridSizer2->Add(tState, 1, wxALIGN_CENTER_HORIZONTAL|wxALIGN_CENTER_VERTICAL, 5);
121 StaticText6 = new wxStaticText(this, ID_STATICTEXT6, _("Uptime:"), wxDefaultPosition, wxDefaultSize, 0, _T("ID_STATICTEXT6"));
122 FlexGridSizer2->Add(StaticText6, 1, wxALL|wxALIGN_CENTER_HORIZONTAL|wxALIGN_CENTER_VERTICAL, 5);
123 tUptime = new wxTextCtrl(this, ID_tUptime, wxEmptyString, wxDefaultPosition, wxDefaultSize, wxTE_READONLY|wxTE_CENTRE, wxDefaultValidator, _T("ID_tUptime"));
124 tUptime->SetMinSize(wxSize(200,-1));
125 FlexGridSizer2->Add(tUptime, 1, wxBOTTOM|wxALIGN_CENTER_HORIZONTAL|wxALIGN_CENTER_VERTICAL, 5);
126 FlexGridSizer4->Add(FlexGridSizer2, 1, wxBOTTOM|wxEXPAND, 5);
127 BoxSizer4 = new wxBoxSizer(wxHORIZONTAL);
128 StaticLine2 = new wxStaticLine(this, ID_STATICLINE2, wxDefaultPosition, wxSize(10,-1), wxLI_HORIZONTAL, _T("ID_STATICLINE2"));
129 BoxSizer4->Add(StaticLine2, 1, wxEXPAND, 5);
130 FlexGridSizer4->Add(BoxSizer4, 1, wxBOTTOM|wxEXPAND, 5);
131 BoxSizer7 = new wxBoxSizer(wxVERTICAL);
132 chkCLoads = new wxCheckBox(this, ID_CLoads, _("Concurrent Loading"), wxDefaultPosition, wxDefaultSize, 0, wxDefaultValidator, _T("ID_CLoads"));
133 chkCLoads->SetValue(false);
134 BoxSizer7->Add(chkCLoads, 1, wxALIGN_CENTER_HORIZONTAL|wxALIGN_CENTER_VERTICAL, 5);
135 chkRender = new wxCheckBox(this, ID_chkRender, _("Render on Startup"), wxDefaultPosition, wxDefaultSize, 0, wxDefaultValidator, _T("ID_chkRender"));
136 chkRender->SetValue(false);
137 BoxSizer7->Add(chkRender, 1, wxALIGN_CENTER_HORIZONTAL|wxALIGN_CENTER_VERTICAL, 5);
138 chkPaused = new wxCheckBox(this, ID_chkPaused, _("Paused"), wxDefaultPosition, wxDefaultSize, 0, wxDefaultValidator, _T("ID_chkPaused"));
139 chkPaused->SetValue(false);
140 BoxSizer7->Add(chkPaused, 1, wxALIGN_CENTER_HORIZONTAL|wxALIGN_CENTER_VERTICAL, 5);
141 FlexGridSizer4->Add(BoxSizer7, 1, wxBOTTOM|wxALIGN_CENTER_HORIZONTAL|wxALIGN_CENTER_VERTICAL, 5);
142 BoxSizer2 = new wxBoxSizer(wxVERTICAL);
143 BoxSizer5 = new wxBoxSizer(wxHORIZONTAL);
144 bSetActive = new wxButton(this, ID_bSetActive, _("Set Active"), wxDefaultPosition, wxDefaultSize, 0, wxDefaultValidator, _T("ID_bSetActive"));
145 BoxSizer5->Add(bSetActive, 1, wxALIGN_CENTER_HORIZONTAL|wxALIGN_CENTER_VERTICAL, 5);
146 bReload = new wxButton(this, ID_bReload, _("Reload"), wxDefaultPosition, wxDefaultSize, 0, wxDefaultValidator, _T("ID_bReload"));
147 BoxSizer5->Add(bReload, 1, wxALIGN_CENTER_HORIZONTAL|wxALIGN_CENTER_VERTICAL, 5);
148 bMove = new wxButton(this, ID_bMove, _("Move"), wxDefaultPosition, wxDefaultSize, 0, wxDefaultValidator, _T("ID_bMove"));
149 BoxSizer5->Add(bMove, 1, wxALIGN_CENTER_HORIZONTAL|wxALIGN_CENTER_VERTICAL, 5);
150 BoxSizer2->Add(BoxSizer5, 1, wxBOTTOM|wxALIGN_CENTER_HORIZONTAL|wxALIGN_CENTER_VERTICAL, 5);
151 BoxSizer6 = new wxBoxSizer(wxHORIZONTAL);
152 bLoad = new wxButton(this, ID_bLoad, _("Load Building"), wxDefaultPosition, wxDefaultSize, 0, wxDefaultValidator, _T("ID_bLoad"));
153 BoxSizer6->Add(bLoad, 1, wxALIGN_CENTER_HORIZONTAL|wxALIGN_CENTER_VERTICAL, 5);
154 bShutdown = new wxButton(this, ID_bShutdown, _("Shutdown"), wxDefaultPosition, wxDefaultSize, 0, wxDefaultValidator, _T("ID_bShutdown"));
155 BoxSizer6->Add(bShutdown, 1, wxALIGN_CENTER_HORIZONTAL|wxALIGN_CENTER_VERTICAL, 5);
156 BoxSizer2->Add(BoxSizer6, 1, wxALIGN_CENTER_HORIZONTAL|wxALIGN_CENTER_VERTICAL, 5);
157 FlexGridSizer4->Add(BoxSizer2, 1, wxEXPAND, 5);
158 BoxSizer1->Add(FlexGridSizer4, 1, wxALIGN_CENTER_HORIZONTAL|wxALIGN_CENTER_VERTICAL, 5);
159 FlexGridSizer5->Add(BoxSizer1, 1, wxALL|wxEXPAND, 5);
160 FlexGridSizer1->Add(FlexGridSizer5, 1, wxALL|wxALIGN_CENTER_HORIZONTAL|wxALIGN_CENTER_VERTICAL, 5);
161 BoxSizer9 = new wxBoxSizer(wxHORIZONTAL);
162 bOk = new wxButton(this, ID_bOk, _("OK"), wxDefaultPosition, wxDefaultSize, 0, wxDefaultValidator, _T("ID_bOk"));
163 BoxSizer9->Add(bOk, 1, wxALIGN_CENTER_HORIZONTAL|wxALIGN_CENTER_VERTICAL, 5);
164 FlexGridSizer1->Add(BoxSizer9, 1, wxBOTTOM|wxALIGN_CENTER_HORIZONTAL|wxALIGN_CENTER_VERTICAL, 5);
165 SetSizer(FlexGridSizer1);
166 FlexGridSizer1->SetSizeHints(this);
167 Center();
168
169 Connect(ID_CLoads, wxEVT_COMMAND_CHECKBOX_CLICKED, (wxObjectEventFunction)&EngineManager::On_chkCLoads_Click);
170 Connect(ID_chkRender, wxEVT_COMMAND_CHECKBOX_CLICKED, (wxObjectEventFunction)&EngineManager::On_chkRender_Click);
171 Connect(ID_chkPaused, wxEVT_COMMAND_CHECKBOX_CLICKED, (wxObjectEventFunction)&EngineManager::On_chkPaused_Click);
172 Connect(ID_bSetActive, wxEVT_COMMAND_BUTTON_CLICKED, (wxObjectEventFunction)&EngineManager::On_bSetActive_Click);
173 Connect(ID_bReload, wxEVT_COMMAND_BUTTON_CLICKED, (wxObjectEventFunction)&EngineManager::On_bReload_Click);
174 Connect(ID_bMove, wxEVT_COMMAND_BUTTON_CLICKED, (wxObjectEventFunction)&EngineManager::On_bMove_Click);
175 Connect(ID_bLoad, wxEVT_COMMAND_BUTTON_CLICKED, (wxObjectEventFunction)&EngineManager::On_bLoad_Click);
176 Connect(ID_bShutdown, wxEVT_COMMAND_BUTTON_CLICKED, (wxObjectEventFunction)&EngineManager::On_bShutdown_Click);
177 Connect(ID_bOk, wxEVT_COMMAND_BUTTON_CLICKED, (wxObjectEventFunction)&EngineManager::On_bOk_Click);
178 //*)
179 panel = parent;
180 loader = 0;
181 moveobject = 0;
182 OnInit();
183}
184
186{
187 //(*Destroy(EngineManager)
188 //*)
189
190 if (loader)
191 loader->Destroy();
192 loader = 0;
193 if (moveobject)
194 moveobject->Destroy();
195 moveobject = 0;
196}
197
199{
200 lastcount = 0;
201 engine = 0;
202
203 chkCLoads->SetValue(panel->GetRoot()->ConcurrentLoads);
204 chkRender->SetValue(panel->GetRoot()->GetRenderOnStartup());
205}
206
208{
209 int count = panel->GetRoot()->GetEngineCount();
210 if (count != lastcount)
211 {
212 int selection = EngineList->GetSelection();
213 int size = panel->GetRoot()->GetEngineListSize();
214
215 lastcount = count;
216 EngineList->Clear();
217
218 for (int i = 0; i < size; i++)
219 {
221 std::string filename = "Empty";
222
223 if (engine)
224 filename = engine->GetFilename();
225
226 EngineList->Append(SBS::ToString(i) + wxT(" - ") + filename);
227 }
228
229 if (selection == -1)
230 selection = 0;
231
232 if (selection >= size)
233 selection = size - 1;
234
235 if (count > 0 && selection < size)
236 EngineList->SetSelection(selection);
237 }
238
239 if (count == 0)
240 return;
241
242 int selection = EngineList->GetSelection();
243 engine = panel->GetRoot()->GetEngine(selection);
244
245 if (engine)
246 {
247 if (!engine->GetSystem())
248 return;
249
250 Vector3 position = engine->GetSystem()->GetPosition();
251 Vector3 min, max;
252 engine->GetSystem()->GetBounds(min, max);
253
254 if (min.y <= -999999)
255 min.y = 0;
256 if (max.y >= 999999)
257 max.y = 0;
258
259 tPosition->SetValue(TruncateNumber(position.x, 2) + wxT(", ") + TruncateNumber(position.y, 2) + wxT(", ") + TruncateNumber(position.z, 2));
260 tBoundsMin->SetValue(TruncateNumber(min.x, 2) + wxT(", ") + TruncateNumber(min.y, 2) + wxT(", ") + TruncateNumber(min.z, 2));
261 tBoundsMax->SetValue(TruncateNumber(max.x, 2) + wxT(", ") + TruncateNumber(max.y, 2) + wxT(", ") + TruncateNumber(max.z, 2));
262
263 //set camera state
264 if (engine->IsCameraActive() == true)
265 tActive->SetValue("True");
266 else
267 tActive->SetValue("False");
268
269 //set engine running state
270 if (engine->GetShutdownState() == true)
271 tState->SetValue("Shutdown");
272 else if (engine->IsLoading() == true)
273 tState->SetValue("Loading");
274 else if (engine->Paused)
275 tState->SetValue("Paused");
276 else if (engine->IsRunning() == true)
277 tState->SetValue("Running");
278
279 //set engine uptime
280 tUptime->SetValue(SBS::ToString(engine->GetSystem()->GetRunTime() / 1000));
281
282 //set paused state
283 chkPaused->SetValue(engine->Paused);
284 }
285 else
286 {
287 tPosition->Clear();
288 tBoundsMin->Clear();
289 tBoundsMax->Clear();
290 tActive->Clear();
291 tState->SetValue("Unloaded");
292 }
293
294 if (moveobject)
295 moveobject->Loop();
296}
297
298void EngineManager::On_bSetActive_Click(wxCommandEvent& event)
299{
300 int selection = EngineList->GetSelection();
301
302 if (selection >= 0)
303 panel->GetRoot()->SetActiveEngine(selection);
304}
305
306void EngineManager::On_bLoad_Click(wxCommandEvent& event)
307{
308 if (!loader)
309 loader = new LoadDialog(panel, this, -1);
310
311 loader->CenterOnScreen();
312 loader->Show();
313}
314
315void EngineManager::On_bReload_Click(wxCommandEvent& event)
316{
317 int selection = EngineList->GetSelection();
318
319 if (selection >= 0)
320 {
321 EngineContext *engine = panel->GetRoot()->GetEngine(selection);
322
323 if (engine)
324 engine->Reload = true;
325 }
326}
327
328void EngineManager::On_bShutdown_Click(wxCommandEvent& event)
329{
330 int selection = EngineList->GetSelection();
331
332 if (selection >= 0)
333 {
334 EngineContext *engine = panel->GetRoot()->GetEngine(selection);
335
336 if (engine)
337 engine->Shutdown();
338 }
339}
340
341void EngineManager::On_chkCLoads_Click(wxCommandEvent& event)
342{
343 panel->GetRoot()->ConcurrentLoads = chkCLoads->GetValue();
344}
345
346void EngineManager::On_chkRender_Click(wxCommandEvent& event)
347{
348 panel->GetRoot()->SetRenderOnStartup(chkRender->GetValue());
349}
350
351void EngineManager::On_bOk_Click(wxCommandEvent& event)
352{
353 this->Close();
354}
355
356void EngineManager::On_bMove_Click(wxCommandEvent& event)
357{
358 int selection = EngineList->GetSelection();
359
360 if (selection >= 0)
361 {
362 EngineContext *engine = panel->GetRoot()->GetEngine(selection);
363
364 if (engine)
365 {
366 if (moveobject)
367 delete moveobject;
368 moveobject = 0;
369
370 moveobject = new MoveObject(panel, this, -1, engine, 0);
371 moveobject->Show();
372 }
373 }
374}
375
376void EngineManager::On_chkPaused_Click(wxCommandEvent& event)
377{
378 int selection = EngineList->GetSelection();
379
380 if (selection >= 0)
381 {
382 EngineContext *engine = panel->GetRoot()->GetEngine(selection);
383
384 if (engine)
385 engine->Paused = chkPaused->GetValue();
386 }
387}
388
389}
virtual Vector3 GetPosition(bool relative=false)
Definition object.cpp:307
unsigned long GetRunTime()
Definition sbs.cpp:3320
bool GetBounds(Vector3 &min, Vector3 &max)
Definition sbs.cpp:4339
static const wxWindowID ID_tBoundsMax
static const wxWindowID ID_STATICTEXT6
static const wxWindowID ID_STATICTEXT1
static const wxWindowID ID_tActive
static const wxWindowID ID_chkRender
void On_bOk_Click(wxCommandEvent &event)
static const wxWindowID ID_bReload
void On_chkRender_Click(wxCommandEvent &event)
void On_bMove_Click(wxCommandEvent &event)
void On_bLoad_Click(wxCommandEvent &event)
static const wxWindowID ID_bSetActive
static const wxWindowID ID_bLoad
static const wxWindowID ID_bMove
void On_bSetActive_Click(wxCommandEvent &event)
static const wxWindowID ID_EngineList
static const wxWindowID ID_tBoundsMin
static const wxWindowID ID_STATICTEXT4
static const wxWindowID ID_tUptime
static const wxWindowID ID_tPosition
static const wxWindowID ID_STATICTEXT2
static const wxWindowID ID_CLoads
static const wxWindowID ID_STATICTEXT5
void On_bReload_Click(wxCommandEvent &event)
static const wxWindowID ID_bOk
static const wxWindowID ID_STATICTEXT3
static const wxWindowID ID_tState
void On_chkCLoads_Click(wxCommandEvent &event)
void On_bShutdown_Click(wxCommandEvent &event)
static const wxWindowID ID_chkPaused
void On_chkPaused_Click(wxCommandEvent &event)
static const wxWindowID ID_bShutdown
static const wxWindowID ID_STATICLINE2
int GetEngineListSize()
Definition vm.h:87
void SetActiveEngine(int number, bool switch_engines=false, bool force=false)
Definition vm.cpp:232
int GetEngineCount(bool loading_only=false)
Definition vm.cpp:448
bool GetRenderOnStartup()
Definition vm.cpp:978
bool ConcurrentLoads
Definition vm.h:117
EngineContext * GetEngine(int number)
Definition vm.cpp:438
void SetRenderOnStartup(bool value)
Definition vm.cpp:966
Ogre::Vector3 Vector3
Definition globals.h:58
std::string ToString(int number)
Definition globals.cpp:279
wxString TruncateNumber(float value, int decimals)