Skip to content

Commit

Permalink
Initial work on an API to allow MWSE to control MGE settings.
Browse files Browse the repository at this point in the history
  • Loading branch information
Hrnchamd committed May 13, 2022
1 parent d97e021 commit 47b1c28
Show file tree
Hide file tree
Showing 10 changed files with 816 additions and 11 deletions.
2 changes: 1 addition & 1 deletion CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,7 @@ link_directories ("${MGEXE_SOURCE_DIR}/lib")
set (LIBRARY_OUTPUT_PATH "${MGEXE_BINARY_DIR}/bin")

# d3d8.dll, to be installed to Morrowind directory
add_library (d3d8 SHARED src/support/log.cpp src/support/pngsave.cpp src/support/timing.cpp src/mge/dlmath.cpp src/mge/memorypool.cpp src/mge/morrowindbsa.cpp src/mge/configuration.cpp src/mge/distantinit.cpp src/mge/distantland.cpp src/mge/ffeshader.cpp src/mge/macrofunctions.cpp src/mge/mged3d8device.cpp src/mge/mgedinput.cpp src/mge/mgedirect3d8.cpp src/mge/mgedxwrap.cpp src/mge/mwbridge.cpp src/mge/postshaders.cpp src/mge/quadtree.cpp src/mge/renderdepth.cpp src/mge/renderexterior.cpp src/mge/rendergrass.cpp src/mge/rendershadow.cpp src/mge/renderwater.cpp src/mge/statusoverlay.cpp src/mge/userhud.cpp src/mge/videobackground.cpp src/mge/specificrender.cpp src/mge/mwinitpatch.cpp src/mwse/funcgeneral.cpp src/mwse/funcgmst.cpp src/mwse/funchud.cpp src/mwse/funcweather.cpp src/mwse/funcshader.cpp src/mwse/funccamera.cpp src/mwse/funcinput.cpp src/mwse/funcentity.cpp src/mwse/funcmwui.cpp src/mwse/funcphysics.cpp src/mwse/mgebridge.cpp src/mwse/mwseinstruction.cpp src/proxydx/d3d8device.cpp src/proxydx/d3d8surface.cpp src/proxydx/d3d8texture.cpp src/proxydx/dinput8.cpp src/proxydx/direct3d8.cpp src/proxydx/dxguid.cpp src/main.cpp src/exports.def)
add_library (d3d8 SHARED src/support/log.cpp src/support/pngsave.cpp src/support/timing.cpp src/mge/api.cpp src/mge/dlmath.cpp src/mge/memorypool.cpp src/mge/morrowindbsa.cpp src/mge/configuration.cpp src/mge/distantinit.cpp src/mge/distantland.cpp src/mge/ffeshader.cpp src/mge/macrofunctions.cpp src/mge/mged3d8device.cpp src/mge/mgedinput.cpp src/mge/mgedirect3d8.cpp src/mge/mgedxwrap.cpp src/mge/mwbridge.cpp src/mge/postshaders.cpp src/mge/quadtree.cpp src/mge/renderdepth.cpp src/mge/renderexterior.cpp src/mge/rendergrass.cpp src/mge/rendershadow.cpp src/mge/renderwater.cpp src/mge/statusoverlay.cpp src/mge/userhud.cpp src/mge/videobackground.cpp src/mge/specificrender.cpp src/mge/mwinitpatch.cpp src/mwse/funcgeneral.cpp src/mwse/funcgmst.cpp src/mwse/funchud.cpp src/mwse/funcweather.cpp src/mwse/funcshader.cpp src/mwse/funccamera.cpp src/mwse/funcinput.cpp src/mwse/funcentity.cpp src/mwse/funcmwui.cpp src/mwse/funcphysics.cpp src/mwse/mgebridge.cpp src/mwse/mwseinstruction.cpp src/proxydx/d3d8device.cpp src/proxydx/d3d8surface.cpp src/proxydx/d3d8texture.cpp src/proxydx/dinput8.cpp src/proxydx/direct3d8.cpp src/proxydx/dxguid.cpp src/main.cpp src/exports.def)

target_link_libraries (d3d8 kernel32 gdi32 user32 d3d9 d3dx9)
set_target_properties (d3d8 PROPERTIES COMPILE_DEFINITIONS "WIN32;_WINDOWS;NDEBUG;NOMINMAX")
Expand Down
133 changes: 133 additions & 0 deletions src/mge/MGEAPI.h
Original file line number Diff line number Diff line change
@@ -0,0 +1,133 @@
#pragma once

namespace mge {
static const int supported_api_version = 1;

struct MGEAPI {
virtual int getAPIVersion() const = 0;
virtual int getMGEVersion() const = 0;
};

enum struct LightingMode {
// API v1
Vertex = 0,
PerPixelAll = 1,
PerPixelInteriorOnly = 2
};

typedef void * ShaderHandle;

struct ShaderVariableInfo {
char valueType;
char name[128];
};

struct MacroFunctions {
typedef void (*Macro)();

// API v1
Macro TakeScreenshot;
Macro ToggleStatusText;
Macro ToggleFpsCounter;
Macro ShowLastMessage;
Macro ToggleBlending;
Macro ToggleShaders;
Macro ToggleDistantLand;
Macro ToggleShadows;
Macro ToggleGrass;
Macro ToggleLightingMode;
Macro ToggleTransparencyAA;
Macro IncreaseViewRange;
Macro DecreaseViewRange;
Macro ToggleZoom;
Macro ResetEnableZoom;
Macro IncreaseZoom;
Macro DecreaseZoom;
Macro ToggleCrosshair;
Macro NextTrack;
Macro DisableMusic;
Macro IncreaseFOV;
Macro DecreaseFOV;
Macro HaggleMore1;
Macro HaggleMore10;
Macro HaggleMore100;
Macro HaggleMore1000;
Macro HaggleMore10000;
Macro HaggleLess1;
Macro HaggleLess10;
Macro HaggleLess100;
Macro HaggleLess1000;
Macro HaggleLess10000;
Macro MoveForward3PCam;
Macro MoveBack3PCam;
Macro MoveLeft3PCam;
Macro MoveRight3PCam;
Macro MoveDown3PCam;
Macro MoveUp3PCam;
};

struct MGEAPIv1 : public MGEAPI {
virtual MacroFunctions* macroFunctions();
virtual bool reloadDistantLand();
virtual LightingMode lightingModeGet();
virtual void lightingModeSet(LightingMode mode);

virtual bool zoomGetEnabled();
virtual void zoomSetEnabled(bool enable);
virtual void zoomIn(float amount);
virtual void zoomOut(float amount);
virtual float zoomGetZoom() const;
virtual void zoomSetZoom(float amount, bool animate);
virtual void zoomStop() const;

virtual bool cameraShakeGetEnabled();
virtual void cameraShakeSetEnabled(bool enable);
virtual void cameraShakeSetMagnitude(float value);
virtual void cameraShakeSetAcceleration(float value);

virtual const char* hudGetSelected();
virtual bool hudSelect(const char* id);
virtual void hudClear();
virtual bool hudLoad(const char* id, const char* texture);
virtual void hudFree(const char* id);
virtual bool hudGetEnabled(const char* id);
virtual void hudSetEnabled(const char* id, bool enable);
virtual void hudPosition(const char* id, float x, float y);
virtual void hudScale(const char* id, float scaleX, float scaleY);
virtual void hudFullscreen(const char* id);
virtual void hudSetEffect(const char* id, const char* effect);
virtual void hudSetFloat(const char* id, const char* variableName, float value);
virtual void hudSetLong(const char* id, const char* variableName, int value);
virtual void hudSetVector4(const char* id, const char* variableName, float value[4]);
virtual void hudSetTexture(const char* id, const char* texture);

virtual ShaderHandle shaderLoad(const char* id);
virtual ShaderHandle shaderGetShader(const char* id);
virtual ShaderHandle shaderListShaders(size_t index);
virtual bool shaderReload(ShaderHandle handle);
virtual const char* shaderGetName(ShaderHandle handle);
virtual bool shaderGetEnabled(ShaderHandle handle);
virtual void shaderSetEnabled(ShaderHandle handle, bool enable);
virtual bool shaderGetVariableInfo(ShaderHandle handle, size_t index, ShaderVariableInfo* out_info);
virtual bool shaderGetBool(ShaderHandle handle, const char* variableName, bool* out_value);
virtual bool shaderGetFloat(ShaderHandle handle, const char* variableName, float* out_value);
virtual bool shaderGetInt(ShaderHandle handle, const char* variableName, int* out_value);
virtual bool shaderGetString(ShaderHandle handle, const char* variableName, const char** out_value);
virtual bool shaderGetVector4(ShaderHandle handle, const char* variableName, float *out_value);
virtual void shaderSetBool(ShaderHandle handle, const char* variableName, bool value);
virtual void shaderSetFloat(ShaderHandle handle, const char* variableName, float value);
virtual void shaderSetInt(ShaderHandle handle, const char* variableName, int value);
virtual void shaderSetString(ShaderHandle handle, const char* variableName, const char* value);
virtual void shaderSetVector4(ShaderHandle handle, const char* variableName, float value[4]);

virtual void weatherScatteringGet(float* inscatter, float* outscatter);
virtual void weatherScatteringSet(float inscatter[3], float outscatter[3]);
virtual void weatherDistantFogGet(int weatherID, float* fogDistMult, float* fogOffset);
virtual void weatherDistantFogSet(int weatherID, float fogDistMult, float fogOffset);
virtual void weatherPerPixelLightGet(int weatherID, float* sunMult, float* ambMult);
virtual void weatherPerPixelLightSet(int weatherID, float sunMult, float ambMult);
};

inline MGEAPIv1* api = nullptr;
inline MacroFunctions* macros = nullptr;
}
Loading

0 comments on commit 47b1c28

Please sign in to comment.