Christian Semmler 5080e372f9
Emscripten port (#229)
* Emscripten port

* Fix NCC

* Update CMakeLists.txt

Co-authored-by: Anonymous Maarten <madebr@users.noreply.github.com>

* Update CMakeLists.txt

Co-authored-by: Anonymous Maarten <madebr@users.noreply.github.com>

* Update CMakeLists.txt

Co-authored-by: Anonymous Maarten <madebr@users.noreply.github.com>

* Update CMakeLists.txt

* cmake: set iniparser cmake options in local scope

* ci: try adding emscripten to test matrix

* cmake: try to make CMake install package more usable

* cmake: fix typo

* Update CMakeLists.txt

Co-authored-by: Anonymous Maarten <madebr@users.noreply.github.com>

* Add support for .ini loading

* Different default full screen behavior for Emscripten

* Add comments

* Add web platform

---------

Co-authored-by: Anonymous Maarten <madebr@users.noreply.github.com>
Co-authored-by: Anonymous Maarten <anonymous.maarten@gmail.com>
2025-06-13 00:26:43 +02:00

132 lines
4.8 KiB
C++

#ifndef MXOMNI_H
#define MXOMNI_H
#include "lego1_export.h"
#include "mxcore.h"
#include "mxcriticalsection.h"
#include "mxstl/stlcompat.h"
#include "mxstring.h"
#include <SDL3/SDL_video.h>
#ifdef MINIWIN
#include "miniwin/windows.h"
#else
#include <windows.h>
#endif
class MxAtomSet;
class MxDSAction;
class MxEntity;
class MxEventManager;
class MxNotificationManager;
class MxNotificationParam;
class MxObjectFactory;
class MxOmniCreateParam;
class MxPresenter;
class MxSoundManager;
class MxStreamer;
class MxStreamController;
class MxTickleManager;
class MxTimer;
class MxVariableTable;
class MxVideoManager;
// VTABLE: LEGO1 0x100dc168
// SIZE 0x68
class MxOmni : public MxCore {
public:
LEGO1_EXPORT static void DestroyInstance();
LEGO1_EXPORT static const char* GetCD();
static const char* GetHD();
static MxOmni* GetInstance();
static MxBool IsSound3D();
LEGO1_EXPORT static void SetCD(const char* p_cd);
LEGO1_EXPORT static void SetHD(const char* p_hd);
LEGO1_EXPORT static void SetSound3D(MxBool p_use3dSound);
static vector<MxString>& GetHDFiles() { return g_hdFiles; }
static vector<MxString>& GetCDFiles() { return g_cdFiles; }
MxOmni();
~MxOmni() override;
MxLong Notify(MxParam& p_param) override; // vtable+0x04
virtual void Init(); // vtable+0x14
virtual MxResult Create(MxOmniCreateParam& p_param); // vtable+0x18
virtual void Destroy(); // vtable+0x1c
virtual MxResult Start(MxDSAction* p_dsAction); // vtable+0x20
virtual void DeleteObject(MxDSAction& p_dsAction); // vtable+0x24
virtual MxBool DoesEntityExist(MxDSAction& p_dsAction); // vtable+0x28
virtual MxResult CreatePresenter(MxStreamController* p_controller, MxDSAction& p_action); // vtable+0x2c
virtual MxEntity* AddToWorld(const char*, MxS32, MxPresenter*); // vtable+0x30
virtual void NotifyCurrentEntity(const MxNotificationParam& p_param); // vtable+0x34
virtual void Pause(); // vtable+0x38
virtual void Resume(); // vtable+0x3c
// FUNCTION: LEGO1 0x10058a90
virtual MxBool IsPaused() { return m_paused; } // vtable+0x40
static void SetInstance(MxOmni* p_instance);
static MxBool ActionSourceEquals(MxDSAction* p_action, const char* p_name);
HWND GetWindowHandle() const { return m_windowHandle; }
// FUNCTION: BETA10 0x10125100
MxObjectFactory* GetObjectFactory() const { return this->m_objectFactory; }
// FUNCTION: BETA10 0x10125120
MxNotificationManager* GetNotificationManager() const { return this->m_notificationManager; }
// FUNCTION: BETA10 0x10125140
MxTickleManager* GetTickleManager() const { return this->m_tickleManager; }
// FUNCTION: BETA10 0x10125160
MxTimer* GetTimer() const { return this->m_timer; }
// FUNCTION: BETA10 0x101251a0
MxStreamer* GetStreamer() const { return this->m_streamer; }
// FUNCTION: BETA10 0x100e5250
MxSoundManager* GetSoundManager() const { return this->m_soundManager; }
// FUNCTION: BETA10 0x1009e860
MxVideoManager* GetVideoManager() const { return this->m_videoManager; }
// FUNCTION: BETA10 0x101251c0
MxVariableTable* GetVariableTable() const { return this->m_variableTable; }
// FUNCTION: BETA10 0x10125200
MxEventManager* GetEventManager() const { return this->m_eventManager; }
// FUNCTION: BETA10 0x10125180
MxAtomSet* GetAtomSet() const { return this->m_atomSet; }
MxLong HandleEndAction(MxParam& p_param);
// SYNTHETIC: LEGO1 0x100aefd0
// MxOmni::`scalar deleting destructor'
protected:
static MxOmni* g_instance;
static vector<MxString> g_hdFiles;
static vector<MxString> g_cdFiles;
static vector<MxString> GlobIsleFiles(const MxString& p_path);
MxString m_mediaPath; // 0x08
HWND m_windowHandle; // 0x18
MxObjectFactory* m_objectFactory; // 0x1c
MxVariableTable* m_variableTable; // 0x20
MxTickleManager* m_tickleManager; // 0x24
MxNotificationManager* m_notificationManager; // 0x28
MxVideoManager* m_videoManager; // 0x2c
MxSoundManager* m_soundManager; // 0x30
MxEventManager* m_eventManager; // 0x38
MxTimer* m_timer; // 0x3c
MxStreamer* m_streamer; // 0x40
MxAtomSet* m_atomSet; // 0x44
MxCriticalSection m_criticalSection; // 0x48
MxBool m_paused; // 0x64
};
#endif // MXOMNI_H