diff --git a/TR5Main/Scripting/GameFlowScript.cpp b/TR5Main/Scripting/GameFlowScript.cpp index ef26666be..c448b9c0b 100644 --- a/TR5Main/Scripting/GameFlowScript.cpp +++ b/TR5Main/Scripting/GameFlowScript.cpp @@ -14,6 +14,12 @@ #include #endif +/*** +functions for gameflow +@module gameflow +@pragma nostrip +*/ + using std::string; using std::vector; using std::unordered_map; @@ -22,92 +28,44 @@ extern unordered_map g_AudioTracks; GameFlow::GameFlow(sol::state* lua) : LuaHandler{ lua } { - // Settings type - m_lua->new_usertype("GameScriptSettings", - "screenWidth", &GameScriptSettings::ScreenWidth, - "screenHeight", &GameScriptSettings::ScreenHeight, - "windowTitle", &GameScriptSettings::WindowTitle, - "enableDynamicShadows", &GameScriptSettings::EnableDynamicShadows, - "windowed", &GameScriptSettings::Windowed, - "enableWaterCaustics", &GameScriptSettings::EnableWaterCaustics, - "drawingDistance", &GameScriptSettings::DrawingDistance, - "showRendererSteps", &GameScriptSettings::ShowRendererSteps, - "showDebugInfo", &GameScriptSettings::ShowDebugInfo - ); + GameScriptLevel::Register(m_lua); + GameScriptSkyLayer::Register(m_lua); + GameScriptMirror::Register(m_lua); + GameScriptInventoryObject::Register(m_lua); + GameScriptSettings::Register(m_lua); + GameScriptAudioTrack::Register(m_lua); - // Layer type - m_lua->new_usertype("SkyLayer", - sol::constructors(), - "r", &GameScriptSkyLayer::R, - "g", &GameScriptSkyLayer::G, - "b", &GameScriptSkyLayer::B, - "speed", &GameScriptSkyLayer::CloudSpeed - ); +/*** +Add a level to the gameflow. +@function AddLevel +@tparam @{Level} level a level object +*/ + m_lua->set_function("AddLevel", &GameFlow::AddLevel, this); - // Mirror type - m_lua->new_usertype("Mirror", - sol::constructors(), - "room", &GameScriptMirror::Room, - "startX", &GameScriptMirror::StartX, - "endX", &GameScriptMirror::EndX, - "startZ", &GameScriptMirror::StartZ, - "endZ", &GameScriptMirror::EndZ - ); +/*** +@function SetIntroImagePath +@tparam string path the path to the image, relative to the TombEngine exe +*/ + m_lua->set_function("SetIntroImagePath", &GameFlow::SetIntroImagePath, this); - // Inventory object type - m_lua->new_usertype("InventoryObject", - sol::constructors(), - "name", &GameScriptInventoryObject::name, - "yOffset", &GameScriptInventoryObject::yOffset, - "scale", &GameScriptInventoryObject::scale, - "xRot", &GameScriptInventoryObject::xRot, - "yRot", &GameScriptInventoryObject::yRot, - "zRot", &GameScriptInventoryObject::zRot, - "rotationFlags", &GameScriptInventoryObject::rotationFlags, - "meshBits", &GameScriptInventoryObject::meshBits, - "operation", &GameScriptInventoryObject::operation - ); +/*** +@function SetAudioTracks +@tparam table table array-style table with @{AudioTrack} objects +*/ + m_lua->set_function("SetAudioTracks", &GameFlow::SetAudioTracks, this); - // Audio track type - m_lua->new_usertype("AudioTrack", - sol::constructors(), - "trackName", &GameScriptAudioTrack::trackName, - "looped", &GameScriptAudioTrack::looped - ); - // Level type - m_lua->new_usertype("Level", - sol::constructors(), - "name", &GameScriptLevel::NameStringKey, - "script", &GameScriptLevel::ScriptFileName, - "fileName", &GameScriptLevel::FileName, - "loadScreen", &GameScriptLevel::LoadScreenFileName, - "ambientTrack", &GameScriptLevel::AmbientTrack, - "layer1", &GameScriptLevel::Layer1, - "layer2", &GameScriptLevel::Layer2, - "fog", &GameScriptLevel::Fog, - "horizon", &GameScriptLevel::Horizon, - "colAddHorizon", &GameScriptLevel::ColAddHorizon, - "storm", &GameScriptLevel::Storm, - "background", &GameScriptLevel::Background, - "weather", &GameScriptLevel::Weather, - "laraType", &GameScriptLevel::LaraType, - "rumble", &GameScriptLevel::Rumble, - "resetHub", &GameScriptLevel::ResetHub, - "mirror", &GameScriptLevel::Mirror, - "objects", &GameScriptLevel::InventoryObjects - ); +/*** +@function SetStrings +@tparam table table array-style table with strings +*/ + m_lua->set_function("SetStrings", &GameFlow::SetStrings, this); - (*m_lua)["GameFlow"] = std::ref(*this); - - m_lua->new_usertype("_GameFlow", - sol::no_constructor, - "AddLevel", &GameFlow::AddLevel, - "WriteDefaults", &GameFlow::WriteDefaults, - "SetAudioTracks", &GameFlow::SetAudioTracks, - "SetStrings", &GameFlow::SetStrings, - "SetLanguageNames", &GameFlow::SetLanguageNames - ); +/*** +@function SetLanguageNames +@tparam table table array-style table with TODO EXTRA INFO HERE +*/ + m_lua->set_function("SetLanguageNames", &GameFlow::SetLanguageNames, this); } GameFlow::~GameFlow() @@ -128,17 +86,16 @@ void GameFlow::SetStrings(sol::nested>&& src) { std::vector tracks = std::move(src); @@ -169,9 +126,7 @@ bool GameFlow::LoadGameFlowScript() std::cout << err << "\n"; } - // Hardcode English for now - this will be changed - // to something like "Strings.lua" once that system - // through + // Populate strings if (!ExecuteScript("Scripts/Strings.lua", err)) { std::cout << err << "\n"; } @@ -184,7 +139,7 @@ char const * GameFlow::GetString(const char* id) if (m_translationsMap.find(id) == m_translationsMap.end()) return "String not found"; else - return (char*)(m_translationsMap.at(string(id)).at(0).c_str()); + return m_translationsMap.at(string(id)).at(0).c_str(); } GameScriptSettings* GameFlow::GetSettings() diff --git a/TR5Main/Scripting/GameFlowScript.h b/TR5Main/Scripting/GameFlowScript.h index f13c6cd85..b4382860b 100644 --- a/TR5Main/Scripting/GameFlowScript.h +++ b/TR5Main/Scripting/GameFlowScript.h @@ -2,6 +2,9 @@ #include "LanguageScript.h" #include "LuaHandler.h" #include "GameScriptColor.h" +#include "GameScriptLevel.h" +#include "GameScriptSettings.h" +#include "GameScriptAudioTrack.h" enum TITLE_TYPE { @@ -9,163 +12,15 @@ enum TITLE_TYPE TITLE_BACKGROUND }; -enum WEATHER_TYPE -{ - WEATHER_NORMAL, - WEATHER_RAIN, - WEATHER_SNOW -}; - -enum LARA_DRAW_TYPE -{ - LARA_NORMAL = 1, - LARA_YOUNG = 2, - LARA_BUNHEAD = 3, - LARA_CATSUIT = 4, - LARA_DIVESUIT = 5, - LARA_INVISIBLE = 7 -}; - -struct GameScriptSettings -{ - int ScreenWidth; - int ScreenHeight; - bool EnableLoadSave; - bool EnableDynamicShadows; - bool EnableWaterCaustics; - bool Windowed; - std::string WindowTitle; - int DrawingDistance; - bool ShowRendererSteps; - bool ShowDebugInfo; -}; - -struct GameScriptInventoryObject -{ - std::string name; - short slot; - float yOffset; - float scale; - float xRot; - float yRot; - float zRot; - short rotationFlags; - int meshBits; - __int64 operation; - - GameScriptInventoryObject(std::string name, short slot, float yOffset, float scale, float xRot, float yRot, float zRot, short rotationFlags, int meshBits, __int64 operation) - { - this->name = name; - this->slot = slot; - this->yOffset = yOffset; - this->scale = scale; - this->xRot = xRot; - this->yRot = yRot; - this->zRot = zRot; - this->rotationFlags = rotationFlags; - this->meshBits = meshBits; - this->operation = operation; - } -}; - -struct GameScriptSkyLayer -{ - bool Enabled; - byte R; - byte G; - byte B; - short CloudSpeed; - - GameScriptSkyLayer() - { - Enabled = false; - R = G = B = CloudSpeed = 0; - } - - GameScriptSkyLayer(byte r, byte g, byte b, short speed) - { - R = r; - G = g; - B = b; - CloudSpeed = speed; - Enabled = true; - } -}; - -struct GameScriptMirror -{ - short Room; - int StartX; - int EndX; - int StartZ; - int EndZ; - - GameScriptMirror() - { - Room = -1; - StartX = EndX = StartZ = EndZ = 0; - } - - GameScriptMirror(short room, int startX, int endX, int startZ, int endZ) - { - Room = room; - StartX = startX; - EndX = endX; - StartZ = startZ; - EndZ = endZ; - } -}; - -struct GameScriptLevel -{ - std::string NameStringKey; - std::string FileName; - std::string ScriptFileName; - std::string LoadScreenFileName; - std::string Background; - int Name; - std::string AmbientTrack; - GameScriptSkyLayer Layer1; - GameScriptSkyLayer Layer2; - bool Horizon{ false }; - bool Sky; - bool ColAddHorizon{ false }; - GameScriptColor Fog{ 0,0,0 }; - bool Storm{ false }; - WEATHER_TYPE Weather{ WEATHER_NORMAL }; - bool ResetHub{ false }; - bool Rumble{ false }; - LARA_DRAW_TYPE LaraType{ LARA_NORMAL }; - GameScriptMirror Mirror; - byte UVRotate; - int LevelFarView; - bool UnlimitedAir{ false }; - std::vector InventoryObjects; -}; - -struct GameScriptAudioTrack -{ - std::string trackName; - bool looped; - - GameScriptAudioTrack(std::string trackName, bool looped) - { - this->trackName = trackName; - this->looped = looped; - } -}; - -bool __cdecl LoadScript(); - class GameFlow : public LuaHandler { private: - GameScriptSettings m_settings; + GameScriptSettings m_settings; std::unordered_map < std::string, std::vector > m_translationsMap; std::vector m_languageNames; - std::map m_itemsMap; + std::map m_itemsMap; public: Vector3 SkyColorLayer1{}; @@ -185,7 +40,7 @@ public: bool DebugMode{ false }; int LevelFarView{ 0 }; TITLE_TYPE TitleType{ TITLE_BACKGROUND }; - char const* Intro{ nullptr }; + std::string IntroImagePath{}; // Selected language set std::vector Levels; @@ -193,7 +48,6 @@ public: GameFlow(sol::state* lua); ~GameFlow(); - void WriteDefaults(); void AddLevel(GameScriptLevel const& level); void SetAudioTracks(sol::as_table_t>&& src); bool LoadGameFlowScript(); @@ -208,4 +62,5 @@ public: void SetFog(byte r, byte g, byte b, short startDistance, short endDistance); int GetNumLevels(); bool DoGameflow(); + void SetIntroImagePath(std::string const& path); }; \ No newline at end of file