diff --git a/concreteGuiManager.cpp b/concreteGuiManager.cpp index cd1c837..563b87b 100644 --- a/concreteGuiManager.cpp +++ b/concreteGuiManager.cpp @@ -56,6 +56,7 @@ namespace battleship{ //TODO refactor player difficulty and faction listbox selection //TODO remove hardcoded font path values + //TODO use configurable map path values Button* ConcreteGuiManager::parseButton(int guiId){ sol::state_view SOL_LUA_STATE = generateView(); sol::table guiTable = SOL_LUA_STATE["gui"][guiId + 1]; @@ -262,9 +263,11 @@ namespace battleship{ case RESOURCE_AMMOUNT: button = new ResourceAmmountButton(pos, size, name, (int)guiTable["ammount"], (int)guiTable["trigger"], imagePath); break; - case MINIMAP: - button = new MinimapButton(pos, size, ""); + case MINIMAP:{ + string minimapPath = GameManager::getSingleton()->getPath() + "Models/Maps/" + Map::getSingleton()->getMapName() + "/minimap.jpg"; + button = new MinimapButton(pos, size, minimapPath); break; + } } int typeArr[2]{(int)GuiElementType::BUTTON, (int)type}; diff --git a/map.cpp b/map.cpp index b8224d9..b2042ad 100755 --- a/map.cpp +++ b/map.cpp @@ -314,7 +314,10 @@ namespace battleship{ preprareScene(); if(!empty){ - SOL_LUA_STATE.script_file(path + "Models/Maps/" + mapName + "/" + mapName + ".lua"); + string mapDir = path + "Models/Maps/" + mapName + "/"; + AssetManager::getSingleton()->load(mapDir + "minimap.jpg"); + + SOL_LUA_STATE.script_file(mapDir + mapName + ".lua"); sol::optional lightsOpt = SOL_LUA_STATE[mapTable]["lights"]; if(lightsOpt != sol::nullopt) diff --git a/mapEditorAppState.cpp b/mapEditorAppState.cpp index 1fba0f7..5731ed6 100644 --- a/mapEditorAppState.cpp +++ b/mapEditorAppState.cpp @@ -19,6 +19,9 @@ #include #include +#define STB_IMAGE_WRITE_IMPLEMENTATION +#include "external/vb01/external/stb/stb_image_write.h" + #include #include @@ -62,6 +65,8 @@ namespace battleship{ } else{ int numPlayers = map->getNumSpawnPoints(); + int numVerts = 3 * map->getNodeParent()->getChild(0)->getMesh(0)->getMeshBase().numTris; + oldLandmassVertHeights = new float[numVerts]; for(int i = 0; i < numPlayers; i++) game->addPlayer(new Player(0, 0, 0, Vector3(1, 1, 1))); @@ -390,6 +395,26 @@ namespace battleship{ return cells; } + void MapEditorAppState::MapEditor::generateMinimap(string mapFolder){ + Vector3 mapSize = map->getMapSize(), cellSize = map->getCellSize(); + int width = int(mapSize.x / cellSize.x); + int height = int(mapSize.z / cellSize.z); + int numChannels = 3; + int size = width * height * numChannels; + int cellId = 0; + + u8 *imgData = new u8[size]; + + for(u8 *p = imgData; p != imgData + size; p+= numChannels, cellId++){ + Vector3 color = (map->getCells()[cellId].type == Map::Cell::Type::WATER ? Vector3::VEC_K : Vector3::VEC_J); + *p = color.x * 255.f; + *(p + 1) = color.y * 255.f; + *(p + 2) = color.z * 255.f; + } + + stbi_write_jpg(string(mapFolder + "minimap.jpg").c_str(), width, height, numChannels, imgData, 100); + } + void MapEditorAppState::MapEditor::generateMapScript(){ int numWaterBodies = map->getNodeParent()->getNumChildren() - 1; vector players = Game::getSingleton()->getPlayers(); @@ -544,6 +569,7 @@ namespace battleship{ copy_file(assetsPath + DEFAULT_TEXTURE, mapFolder + map->getMapName() + ".jpg"); generateLandmassXml(); + generateMinimap(mapFolder); generateMapScript(); } diff --git a/mapEditorAppState.h b/mapEditorAppState.h index c89c965..5674eea 100644 --- a/mapEditorAppState.h +++ b/mapEditorAppState.h @@ -60,6 +60,7 @@ namespace battleship{ void toggleSelection(vb01::Node*, bool); std::vector generateMapCells(); void generateLandmassXml(); + void generateMinimap(std::string); void generateMapScript(); void prepareTerrainObject(vb01::u32**, Map::Cell*, int[3], float, bool);