X-Git-Url: https://git.localhorst.tv/?a=blobdiff_plain;f=src%2Fapp%2Fapp.cpp;h=b4ede47f0db1d6bfc96a692da7018ccd45869502;hb=8a3907bb0bed257bf5d6f40f39f15114e8345913;hp=ccccd9a6c15c5b2590e8a27b0274c74541c1451e;hpb=5e82e61db8b9ed5b9a30c9706620b62b844ac734;p=blobs.git diff --git a/src/app/app.cpp b/src/app/app.cpp index ccccd9a..b4ede47 100644 --- a/src/app/app.cpp +++ b/src/app/app.cpp @@ -173,8 +173,14 @@ void State::OnQuit() { Assets::Assets() : path("assets/") , data_path(path + "data/") +, font_path(path + "fonts/") , skin_path(path + "skins/") -, tile_path(path + "tiles/") { +, tile_path(path + "tiles/") +, fonts{ + graphics::Font(font_path + "DejaVuSans.ttf", 32), + graphics::Font(font_path + "DejaVuSans.ttf", 24), + graphics::Font(font_path + "DejaVuSans.ttf", 16) +} { { std::ifstream resource_file(data_path + "resources"); io::TokenStreamReader resource_reader(resource_file); @@ -182,11 +188,12 @@ Assets::Assets() } { - std::ifstream tile_file(data_path + "tiles"); + std::ifstream tile_file(data_path + "tile_types"); io::TokenStreamReader tile_reader(tile_file); ReadTileTypes(tile_reader); } + graphics::Format format; textures.tiles.Bind(); textures.tiles.Reserve(256, 256, 14, format); @@ -242,6 +249,19 @@ void Assets::ReadResources(io::TokenStreamReader &in) { in.Skip(io::Token::EQUALS); if (name == "label") { in.ReadString(data.resources[id].label); + } else if (name == "state") { + in.ReadIdentifier(name); + if (name == "solid") { + data.resources[id].state = world::Resource::SOLID; + } else if (name == "liquid") { + data.resources[id].state = world::Resource::LIQUID; + } else if (name == "gas") { + data.resources[id].state = world::Resource::GAS; + } else if (name == "plasma") { + data.resources[id].state = world::Resource::PLASMA; + } else { + throw std::runtime_error("unknown resource state '" + name + "'"); + } } else { throw std::runtime_error("unknown resource property '" + name + "'"); } @@ -259,12 +279,12 @@ void Assets::ReadTileTypes(io::TokenStreamReader &in) { in.Skip(io::Token::EQUALS); int id = 0; - if (data.tiles.Has(name)) { - id = data.tiles[name].id; + if (data.tile_types.Has(name)) { + id = data.tile_types[name].id; } else { world::TileType type; type.name = name; - id = data.tiles.Add(type); + id = data.tile_types.Add(type); } in.Skip(io::Token::ANGLE_BRACKET_OPEN); @@ -272,9 +292,9 @@ void Assets::ReadTileTypes(io::TokenStreamReader &in) { in.ReadIdentifier(name); in.Skip(io::Token::EQUALS); if (name == "label") { - in.ReadString(data.tiles[id].label); + in.ReadString(data.tile_types[id].label); } else if (name == "texture") { - data.tiles[id].texture = in.GetInt(); + data.tile_types[id].texture = in.GetInt(); } else if (name == "yield") { in.Skip(io::Token::BRACKET_OPEN); while (in.Peek().type != io::Token::BRACKET_CLOSE) { @@ -294,7 +314,7 @@ void Assets::ReadTileTypes(io::TokenStreamReader &in) { in.Skip(io::Token::SEMICOLON); } in.Skip(io::Token::ANGLE_BRACKET_CLOSE); - data.tiles[id].resources.push_back(yield); + data.tile_types[id].resources.push_back(yield); if (in.Peek().type == io::Token::COMMA) { in.Skip(io::Token::COMMA); }