|
@@ -10,6 +10,8 @@
|
|
|
|
|
|
#include <fstream>
|
|
|
|
|
|
+#include <sol/sol.hpp>
|
|
|
+
|
|
|
#include <LevelLoader.h>
|
|
|
|
|
|
#include <Game.h>
|
|
@@ -35,11 +37,64 @@ LevelLoader::~LevelLoader()
|
|
|
|
|
|
}
|
|
|
|
|
|
-void LevelLoader::LoadLevel(const std::unique_ptr<Registry> ®istry,
|
|
|
+void LevelLoader::loadAssetTable(sol::state &lua,
|
|
|
+ sol::table &assetsTable,
|
|
|
+ const std::unique_ptr<AssetStore> &assetStore,
|
|
|
+ SDL_Renderer *renderer)
|
|
|
+{
|
|
|
+ int i = 0;
|
|
|
+ while(true)
|
|
|
+ {
|
|
|
+ sol::optional<sol::table> hasAsset = assetsTable[i];
|
|
|
+
|
|
|
+ if (hasAsset == sol::nullopt)
|
|
|
+ {
|
|
|
+ break;
|
|
|
+ }
|
|
|
+
|
|
|
+ sol::table asset = assetsTable[i];
|
|
|
+ std::string assetType = asset["type"];
|
|
|
+
|
|
|
+ if (assetType == "texture")
|
|
|
+ {
|
|
|
+ assetStore->addTexture(renderer, asset["id"], asset["file"]);
|
|
|
+ }
|
|
|
+ else if (assetType == "font")
|
|
|
+ {
|
|
|
+ assetStore->addFont(asset["id"], asset["file"], asset["font_size"]);
|
|
|
+ }
|
|
|
+
|
|
|
+ i++;
|
|
|
+ }
|
|
|
+}
|
|
|
+
|
|
|
+void LevelLoader::LoadLevel(sol::state &lua,
|
|
|
+ const std::unique_ptr<Registry> ®istry,
|
|
|
const std::unique_ptr<AssetStore> &assetStore,
|
|
|
SDL_Renderer *renderer,
|
|
|
- int level)
|
|
|
+ int levelNumber)
|
|
|
{
|
|
|
+ char luaFileName[50];
|
|
|
+ sprintf(luaFileName, "assets/scripts/Level%d.lua", levelNumber);
|
|
|
+
|
|
|
+ sol::load_result script = lua.load_file(luaFileName);
|
|
|
+ if (!script.valid())
|
|
|
+ {
|
|
|
+ Logger::Error("Error in the Lua script for level #%d:", levelNumber);
|
|
|
+ sol::error err = script;
|
|
|
+ std::string errorMessage = err.what();
|
|
|
+ Logger::Error(errorMessage.c_str());
|
|
|
+ return;
|
|
|
+ }
|
|
|
+
|
|
|
+ lua.script_file(luaFileName);
|
|
|
+ Logger::Info("Opened level #%d", levelNumber);
|
|
|
+
|
|
|
+ sol::table level = lua["Level"];
|
|
|
+ sol::table assetsTable = level["assets"];
|
|
|
+ this->loadAssetTable(lua, assetsTable, assetStore, renderer);
|
|
|
+
|
|
|
+#if 0
|
|
|
assetStore->addTexture(renderer, "tank-image", "assets/images/tank-panther-right.png");
|
|
|
assetStore->addTexture(renderer, "tree-image", "assets/images/tree.png");
|
|
|
assetStore->addTexture(renderer, "truck-image", "assets/images/truck-ford-right.png");
|
|
@@ -139,4 +194,6 @@ void LevelLoader::LoadLevel(const std::unique_ptr<Registry> ®istry,
|
|
|
SDL_Color green = { 64, 255, 127, 255 };
|
|
|
Entity label = registry->createEntity();
|
|
|
label.addComponent<TextLabelComponent>(glm::vec2(Game::windowsWidth/2 - 60, 10), "SUPER CHOPPER BROS 1.0", "charriot-font", green);
|
|
|
+#endif
|
|
|
+
|
|
|
}
|