50 virtual bool onInit()
override;
51 virtual void onQuit()
override;
57 bool run(
const CoreConfig& config);
58 bool run(
const sol::table& config);
59 bool run(
const std::string& configFile);
67 void isRunning(
bool bRunning ) { bIsRunning_ = bRunning; }
68 void quit() {
INFO(
"Core: shutdown requested. Performing graceful shutdown..."); bIsRunning_ =
false; }
92 void _fnOnInit(std::function<
bool()> fn) { fnOnInit = fn; }
93 void _fnOnQuit(std::function<
void()> fn) { fnOnQuit = fn; }
94 void _fnOnUpdate(std::function<
void(
float)> fn) { fnOnUpdate = fn; }
96 void _fnOnRender(std::function<
void()> fn) { fnOnRender = fn; }
110 void setStage(
const std::string& name);
165 windowTitle_ = title;
167 SDL_SetWindowTitle(window_, windowTitle_.c_str());
197 void addDisplayObject(
const std::string& name, std::unique_ptr<IDisplayObject> displayObject);
210 bool useWorld=
false,
int worldX=0,
int worldY=0);
242 Core& operator=(
const Core&) =
delete;
247 SDL_Window* window_ =
nullptr;
248 SDL_Renderer* renderer_ =
nullptr;
249 SDL_Texture* texture_ =
nullptr;
250 std::string windowTitle_ =
"SDOM Application";
251 SDL_Color color_ = { 0, 0, 0, 255 };
254 bool bIsRunning_ =
true;
255 bool isTraversing_ =
false;
257 bool ignoreRealInput_ =
false;
258 float keyfocus_gray_ = 0.0f;
263 bool sdlStarted_ =
false;
266 bool stopAfterUnitTests_ =
false;
271 std::mutex pendingConfigMutex_;
272 std::atomic_bool pendingConfigRequested_{
false};
273 CoreConfig pendingConfig_;
276 DisplayHandle rootNode_;
277 DisplayHandle hoveredObject_;
278 DisplayHandle keyboardFocusedObject_;
281 struct TabPriorityComparator {
282 bool operator()(
const DisplayHandle& a,
const DisplayHandle& b)
const {
287 if (!a.isValid() && !b.isValid())
return false;
288 if (!a.isValid())
return true;
289 if (!b.isValid())
return false;
290 return a->getTabPriority() < b->getTabPriority();
293 std::priority_queue<DisplayHandle, std::vector<DisplayHandle>, TabPriorityComparator> tabList_;
302 inline static Factory* factory_ =
nullptr;
303 inline static EventManager* eventManager_ =
nullptr;
306 std::function<bool()> fnOnInit =
nullptr;
307 std::function<void()> fnOnQuit =
nullptr;
308 std::function<void(
float)> fnOnUpdate =
nullptr;
309 std::function<void(
const Event&)> fnOnEvent =
nullptr;
310 std::function<void()> fnOnRender =
nullptr;
311 std::function<bool()> fnOnUnitTest =
nullptr;
312 std::function<void(
int,
int)> fnOnWindowResize =
nullptr;
316 void refreshSDLResources();
321 void requestConfigApply(
const CoreConfig& cfg);
323 void applyPendingConfig();
#define INFO(...)
Logs an informational message to stdout.
Definition SDOM.hpp:383
Definition SDOM_AssetHandle.hpp:13
The central singleton framework object for SDOM.
Definition SDOM_Core.hpp:27
virtual void _registerLuaBindings(const std::string &typeName, sol::state_view lua) override
Definition SDOM_Core.cpp:1457
SDL_WindowFlags getWindowFlags() const
Definition SDOM_Core.cpp:1135
std::function< bool()> _fnGetOnUnitTest()
Definition SDOM_Core.hpp:104
float getWindowHeight() const
Definition SDOM_Core.cpp:1129
void setWindowTitle(const std::string &title)
Definition SDOM_Core.hpp:163
std::function< void()> _fnGetOnRender()
Definition SDOM_Core.hpp:103
void printObjectRegistry() const
Definition SDOM_Core.cpp:1449
void configure(const CoreConfig &config)
Definition SDOM_Core.cpp:60
void registerOnInit(std::function< bool()> fn)
Definition SDOM_Core.hpp:83
std::vector< std::string > getCommandNamesForType(const std::string &typeName) const
void _fnOnQuit(std::function< void()> fn)
Definition SDOM_Core.hpp:93
void setWindowHeight(float height)
Definition SDOM_Core.cpp:1140
bool hasDisplayObject(const std::string &name) const
Definition SDOM_Core.cpp:1395
void setPixelFormat(SDL_PixelFormat format)
Definition SDOM_Core.cpp:1146
SDL_Texture * getTexture() const
Definition SDOM_Core.hpp:119
sol::usertype< Core > objHandleType_
Definition SDOM_Core.hpp:330
SDL_Window * getWindow() const
Definition SDOM_Core.hpp:117
void setPixelWidth(float width)
Definition SDOM_Core.cpp:1141
EventManager & getEventManager() const
Definition SDOM_Core.hpp:148
std::vector< std::string > getFunctionNamesForType(const std::string &typeName) const
std::function< void(const Event &)> _fnGetOnEvent()
Definition SDOM_Core.hpp:102
void onRender()
Definition SDOM_Core.cpp:834
void shutdown()
Definition SDOM_Core.hpp:69
SDL_Renderer * getRenderer() const
Definition SDOM_Core.hpp:118
void configureFromLua(const sol::table &config)
Definition SDOM_Core.cpp:70
void quit()
Definition SDOM_Core.hpp:68
void configureFromLuaFile(const std::string &filename)
Definition SDOM_Core.cpp:152
IAssetObject * getAssetObjectPtr(const std::string &name)
Definition SDOM_Core.cpp:1400
SDL_RendererLogicalPresentation getRendererLogicalPresentation() const
Definition SDOM_Core.cpp:1134
DisplayHandle getStageHandle() const
Definition SDOM_Core.hpp:114
void _fnOnRender(std::function< void()> fn)
Definition SDOM_Core.hpp:96
void setConfig(CoreConfig &config)
Definition SDOM_Core.cpp:1138
void registerOnEvent(std::function< void(const Event &)> fn)
Definition SDOM_Core.hpp:86
std::function< void(float)> _fnGetOnUpdate()
Definition SDOM_Core.hpp:101
IDisplayObject * getDisplayObjectPtr(const std::string &name)
Definition SDOM_Core.cpp:1389
void setStage(const std::string &name)
Definition SDOM_Core.cpp:1345
void attachFutureChildren()
Definition SDOM_Core.cpp:1432
friend Factory
Definition SDOM_Core.hpp:326
void registerOnUpdate(std::function< void(float)> fn)
Definition SDOM_Core.hpp:85
void setPreserveAspectRatio(bool preserve)
Definition SDOM_Core.cpp:1143
AssetHandle getAssetObject(const std::string &name)
Definition SDOM_Core.cpp:1403
DisplayHandle getKeyboardFocusedObject() const
Definition SDOM_Core.cpp:1321
float getElapsedTime() const
Definition SDOM_Core.hpp:169
float getPixelHeight() const
Definition SDOM_Core.cpp:1131
bool hasAssetObject(const std::string &name) const
Definition SDOM_Core.cpp:1406
void _fnOnEvent(std::function< void(const Event &)> fn)
Definition SDOM_Core.hpp:95
void setIsTraversing(bool traversing)
Definition SDOM_Core.hpp:150
float getPixelWidth() const
Definition SDOM_Core.cpp:1130
AssetHandle createAssetObject(const std::string &typeName, const sol::table &config)
Definition SDOM_Core.cpp:1378
void setKeyboardFocusedObject(DisplayHandle obj)
Definition SDOM_Core.cpp:1319
void setWindowFlags(SDL_WindowFlags flags)
Definition SDOM_Core.cpp:1145
void clearFactory()
Definition SDOM_Core.cpp:1446
bool getIgnoreRealInput() const
Definition SDOM_Core.hpp:231
float getKeyfocusGray() const
Definition SDOM_Core.hpp:234
void onWindowResize(int newWidth, int newHeight)
Definition SDOM_Core.cpp:1056
void clearKeyboardFocusedObject()
Definition SDOM_Core.cpp:1323
std::function< void(int, int)> _fnGetOnWindowResize()
Definition SDOM_Core.hpp:105
void setKeyfocusGray(float gray)
Definition SDOM_Core.hpp:235
void reconfigure(const CoreConfig &config)
Definition SDOM_Core.cpp:358
std::function< void()> _fnGetOnQuit()
Definition SDOM_Core.hpp:100
void setRootNode(const std::string &name)
Definition SDOM_Core.cpp:1331
void setWindowWidth(float width)
Definition SDOM_Core.cpp:1139
void registerOnUnitTest(std::function< bool()> fn)
Definition SDOM_Core.hpp:88
void handleTabKeyPress()
Definition SDOM_Core.cpp:1191
std::string getWindowTitle() const
Definition SDOM_Core.hpp:162
void setColor(const SDL_Color &color)
Definition SDOM_Core.hpp:121
void registerOnQuit(std::function< void()> fn)
Definition SDOM_Core.hpp:84
bool run()
Definition SDOM_Core.cpp:504
AssetHandle createAssetObjectFromScript(const std::string &typeName, const std::string &luaScript)
Definition SDOM_Core.cpp:1384
void isRunning(bool bRunning)
Definition SDOM_Core.hpp:67
bool getStopAfterUnitTests()
Definition SDOM_Core.hpp:224
void _fnOnInit(std::function< bool()> fn)
Definition SDOM_Core.hpp:92
void setStopAfterUnitTests(bool stop)
Definition SDOM_Core.hpp:223
virtual void onQuit() override
Definition SDOM_Core.cpp:780
DisplayHandle getRootNode() const
Definition SDOM_Core.cpp:1359
CoreConfig & getConfig()
Definition SDOM_Core.cpp:1127
void addToOrphanList(const DisplayHandle &orphan)
Definition SDOM_Core.cpp:1435
DisplayHandle getMouseHoveredObject() const
Definition SDOM_Core.cpp:1328
std::vector< std::string > getPropertyNamesForType(const std::string &typeName) const
void destroyOrphanedDisplayObjects()
Definition SDOM_Core.cpp:1425
void destroyDisplayObject(const std::string &name)
Definition SDOM_Core.cpp:1415
bool getAllowTextureResize() const
Definition SDOM_Core.cpp:1133
void handleTabKeyPressReverse()
Definition SDOM_Core.cpp:1255
virtual bool onInit() override
Definition SDOM_Core.cpp:760
void onUpdate(float fElapsedTime)
Definition SDOM_Core.cpp:944
std::vector< DisplayHandle > getOrphanedDisplayObjects()
Definition SDOM_Core.cpp:1422
void addToFutureChildrenList(const DisplayHandle &child, const DisplayHandle &parent, bool useWorld=false, int worldX=0, int worldY=0)
Definition SDOM_Core.cpp:1438
float getWindowWidth() const
Definition SDOM_Core.cpp:1128
void pumpEventsOnce()
Definition SDOM_Core.cpp:723
DisplayHandle createDisplayObject(const std::string &typeName, const sol::table &config)
Definition SDOM_Core.cpp:1368
void registerOnRender(std::function< void()> fn)
Definition SDOM_Core.hpp:87
void setAllowTextureResize(bool allow)
Definition SDOM_Core.cpp:1144
IDisplayObject * getRootNodePtr() const
Definition SDOM_Core.cpp:1355
void detachOrphans()
Definition SDOM_Core.cpp:1428
void _fnOnUnitTest(std::function< bool()> fn)
Definition SDOM_Core.hpp:97
void _fnOnUpdate(std::function< void(float)> fn)
Definition SDOM_Core.hpp:94
void registerOnWindowResize(std::function< void(int, int)> fn)
Definition SDOM_Core.hpp:89
DisplayHandle getDisplayObjectHandle(const std::string &name)
Definition SDOM_Core.hpp:189
void _fnOnWindowResize(std::function< void(int, int)> fn)
Definition SDOM_Core.hpp:98
Factory & getFactory() const
Definition SDOM_Core.hpp:147
DisplayHandle getDisplayObject(const std::string &name)
Definition SDOM_Core.cpp:1392
bool getPreserveAspectRatio() const
Definition SDOM_Core.cpp:1132
virtual bool onUnitTest() override
Runs unit tests for this object.
Definition SDOM_Core.cpp:1002
void setPixelHeight(float height)
Definition SDOM_Core.cpp:1142
void setRendererLogicalPresentation(SDL_RendererLogicalPresentation presentation)
Definition SDOM_Core.cpp:1147
void onEvent(Event &event)
Definition SDOM_Core.cpp:915
void setMouseHoveredObject(DisplayHandle obj)
Definition SDOM_Core.cpp:1326
void addDisplayObject(const std::string &name, std::unique_ptr< IDisplayObject > displayObject)
Definition SDOM_Core.cpp:1412
void setIgnoreRealInput(bool v)
Definition SDOM_Core.hpp:230
bool getIsTraversing() const
Definition SDOM_Core.hpp:149
SDL_PixelFormat getPixelFormat() const
Definition SDOM_Core.cpp:1136
std::vector< std::string > listDisplayObjectNames() const
Definition SDOM_Core.cpp:1443
DisplayHandle createDisplayObjectFromScript(const std::string &typeName, const std::string &luaScript)
Definition SDOM_Core.cpp:1374
SDL_Color getColor() const
Definition SDOM_Core.hpp:120
static Core & getInstance()
Definition SDOM_Core.hpp:47
Stage * getStage() const
Definition SDOM_Core.cpp:1350
int countOrphanedDisplayObjects() const
Definition SDOM_Core.cpp:1419
std::function< bool()> _fnGetOnInit()
Definition SDOM_Core.hpp:99
sol::state & getLua()
Definition SDOM_Core.hpp:172
Definition SDOM_DisplayHandle.hpp:24
Definition SDOM_EventManager.hpp:56
Definition SDOM_Event.hpp:55
Definition SDOM_Factory.hpp:43
Definition SDOM_IAssetObject.hpp:10
Definition SDOM_IDataObject.hpp:107
Definition SDOM_IDisplayObject.hpp:153
Definition SDOM_Stage.hpp:11
Contains all core classes and utilities for the SDOM library.
Definition lua_BindHelpers.hpp:7
Definition SDOM_Core.hpp:33
float pixelWidth
Definition SDOM_Core.hpp:36
bool preserveAspectRatio
Definition SDOM_Core.hpp:38
float windowHeight
Definition SDOM_Core.hpp:35
SDL_PixelFormat pixelFormat
Definition SDOM_Core.hpp:42
SDL_RendererLogicalPresentation rendererLogicalPresentation
Definition SDOM_Core.hpp:40
bool allowTextureResize
Definition SDOM_Core.hpp:39
SDL_Color color
Definition SDOM_Core.hpp:43
float windowWidth
Definition SDOM_Core.hpp:34
float pixelHeight
Definition SDOM_Core.hpp:37
SDL_WindowFlags windowFlags
Definition SDOM_Core.hpp:41
Definition SDOM_IAssetObject.hpp:18
Definition SDOM_IDisplayObject.hpp:187