]> git.localhorst.tv Git - blobs.git/blobdiff - src/app/app.cpp
fun with resources
[blobs.git] / src / app / app.cpp
index 8c0f8e13521547cd16624e3d793926064ed50b90..cfdbf8070355b1d2ec55364445baa61913ef1829 100644 (file)
@@ -167,19 +167,86 @@ void State::OnQuit() {
 
 Assets::Assets()
 : path("assets/")
-, tile_path(path + "tiles/") {
+, tile_path(path + "tiles/")
+, skin_path(path + "skins/") {
+       data.resources.Add({ "air", "Air", 0 });
+       data.resources.Add({ "biomass", "Biomass", 0 });
+       data.resources.Add({ "dirt", "Dirt", 0 });
+       data.resources.Add({ "ice", "Ice", 0 });
+       data.resources.Add({ "rock", "Rock", 0 });
+       data.resources.Add({ "sand", "Sand", 0 });
+       data.resources.Add({ "water", "Water", 0 });
+       data.resources.Add({ "wood", "Wood", 0 });
+
+       data.tiles.Add({ "algae",    "Algae",    0,  0 });
+       data.tiles.Add({ "desert",   "Desert",   0,  1 });
+       data.tiles.Add({ "forest",   "Forest",   0,  2 });
+       data.tiles.Add({ "grass",    "Grass",    0,  3 });
+       data.tiles.Add({ "ice",      "Ice",      0,  4 });
+       data.tiles.Add({ "jungle",   "Jungle",   0,  5 });
+       data.tiles.Add({ "mountain", "Mountain", 0,  6 });
+       data.tiles.Add({ "ocean",    "Ocean",    0,  7 });
+       data.tiles.Add({ "rock",     "Rock",     0,  8 });
+       data.tiles.Add({ "sand",     "Sand",     0,  9 });
+       data.tiles.Add({ "taiga",    "Taiga",    0, 10 });
+       data.tiles.Add({ "tundra",   "Tundra",   0, 11 });
+       data.tiles.Add({ "water",    "Water",    0, 12 });
+       data.tiles.Add({ "wheat",    "Wheat",    0, 13 });
+
+       data.tiles["algae"]   .resources.push_back({ data.resources["water"].id,   1.0  });
+       data.tiles["algae"]   .resources.push_back({ data.resources["biomass"].id, 0.5  });
+       data.tiles["desert"]  .resources.push_back({ data.resources["sand"].id,    1.0  });
+       data.tiles["forest"]  .resources.push_back({ data.resources["wood"].id,    1.0  });
+       data.tiles["forest"]  .resources.push_back({ data.resources["dirt"].id,    0.5  });
+       data.tiles["grass"]   .resources.push_back({ data.resources["dirt"].id,    0.5  });
+       data.tiles["grass"]   .resources.push_back({ data.resources["biomass"].id, 0.25 });
+       data.tiles["grass"]   .resources.push_back({ data.resources["water"].id,   0.25 });
+       data.tiles["ice"]     .resources.push_back({ data.resources["ice"].id,     1.0  });
+       data.tiles["ice"]     .resources.push_back({ data.resources["water"].id,   0.25 });
+       data.tiles["jungle"]  .resources.push_back({ data.resources["wood"].id,    0.5  });
+       data.tiles["jungle"]  .resources.push_back({ data.resources["biomass"].id, 0.5  });
+       data.tiles["mountain"].resources.push_back({ data.resources["rock"].id,    1.0  });
+       data.tiles["ocean"]   .resources.push_back({ data.resources["water"].id,   1.0  });
+       data.tiles["rock"]    .resources.push_back({ data.resources["rock"].id,    1.0  });
+       data.tiles["sand"]    .resources.push_back({ data.resources["sand"].id,    1.0  });
+       data.tiles["taiga"]   .resources.push_back({ data.resources["wood"].id,    1.0  });
+       data.tiles["taiga"]   .resources.push_back({ data.resources["water"].id,   0.5  });
+       data.tiles["tundra"]  .resources.push_back({ data.resources["rock"].id,    1.0  });
+       data.tiles["tundra"]  .resources.push_back({ data.resources["ice"].id,     0.5  });
+       data.tiles["water"]   .resources.push_back({ data.resources["water"].id,   1.0  });
+       data.tiles["water"]   .resources.push_back({ data.resources["biomass"].id, 0.25 });
+       data.tiles["wheat"]   .resources.push_back({ data.resources["biomass"].id, 1.0  });
+       data.tiles["wheat"]   .resources.push_back({ data.resources["water"].id,   0.25 });
+
        graphics::Format format;
        textures.tiles.Bind();
-       textures.tiles.Reserve(256, 256, 9, format);
-       LoadTileTexture("1", textures.tiles, 0);
-       LoadTileTexture("2", textures.tiles, 1);
-       LoadTileTexture("3", textures.tiles, 2);
-       LoadTileTexture("4", textures.tiles, 3);
-       LoadTileTexture("5", textures.tiles, 4);
-       LoadTileTexture("6", textures.tiles, 5);
-       LoadTileTexture("7", textures.tiles, 6);
-       LoadTileTexture("8", textures.tiles, 7);
-       LoadTileTexture("9", textures.tiles, 8);
+       textures.tiles.Reserve(256, 256, 14, format);
+       LoadTileTexture("algae",    textures.tiles,  0);
+       LoadTileTexture("desert",   textures.tiles,  1);
+       LoadTileTexture("forest",   textures.tiles,  2);
+       LoadTileTexture("grass",    textures.tiles,  3);
+       LoadTileTexture("ice",      textures.tiles,  4);
+       LoadTileTexture("jungle",   textures.tiles,  5);
+       LoadTileTexture("mountain", textures.tiles,  6);
+       LoadTileTexture("ocean",    textures.tiles,  7);
+       LoadTileTexture("rock",     textures.tiles,  8);
+       LoadTileTexture("sand",     textures.tiles,  9);
+       LoadTileTexture("taiga",    textures.tiles, 10);
+       LoadTileTexture("tundra",   textures.tiles, 11);
+       LoadTileTexture("water",    textures.tiles, 12);
+       LoadTileTexture("wheat",    textures.tiles, 13);
+
+       textures.skins.Bind();
+       textures.skins.Reserve(256, 256, 9, format);
+       LoadSkinTexture("1", textures.skins, 0);
+       LoadSkinTexture("2", textures.skins, 1);
+       LoadSkinTexture("3", textures.skins, 2);
+       LoadSkinTexture("4", textures.skins, 3);
+       LoadSkinTexture("5", textures.skins, 4);
+       LoadSkinTexture("6", textures.skins, 5);
+       LoadSkinTexture("7", textures.skins, 6);
+       LoadSkinTexture("8", textures.skins, 7);
+       LoadSkinTexture("9", textures.skins, 8);
 }
 
 Assets::~Assets() {
@@ -200,5 +267,20 @@ void Assets::LoadTileTexture(const std::string &name, graphics::ArrayTexture &te
        SDL_FreeSurface(srf);
 }
 
+void Assets::LoadSkinTexture(const std::string &name, graphics::ArrayTexture &tex, int layer) const {
+       std::string path = skin_path + name + ".png";
+       SDL_Surface *srf = IMG_Load(path.c_str());
+       if (!srf) {
+               throw SDLError("IMG_Load");
+       }
+       try {
+               tex.Data(layer, *srf);
+       } catch (...) {
+               SDL_FreeSurface(srf);
+               throw;
+       }
+       SDL_FreeSurface(srf);
+}
+
 }
 }