X-Git-Url: http://git.localhorst.tv/?a=blobdiff_plain;f=src%2Fapp%2Fapp.cpp;h=ccccd9a6c15c5b2590e8a27b0274c74541c1451e;hb=5e82e61db8b9ed5b9a30c9706620b62b844ac734;hp=45a57cfde2bdc3458ffe2e7948561fb19d541258;hpb=3da087f7eaafc560675e85862d92f584c437355c;p=blobs.git diff --git a/src/app/app.cpp b/src/app/app.cpp index 45a57cf..ccccd9a 100644 --- a/src/app/app.cpp +++ b/src/app/app.cpp @@ -175,14 +175,11 @@ Assets::Assets() , data_path(path + "data/") , skin_path(path + "skins/") , tile_path(path + "tiles/") { - 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 }); + { + std::ifstream resource_file(data_path + "resources"); + io::TokenStreamReader resource_reader(resource_file); + ReadResources(resource_reader); + } { std::ifstream tile_file(data_path + "tiles"); @@ -224,6 +221,37 @@ Assets::Assets() Assets::~Assets() { } +void Assets::ReadResources(io::TokenStreamReader &in) { + while (in.HasMore()) { + string name; + in.ReadIdentifier(name); + in.Skip(io::Token::EQUALS); + + int id = 0; + if (data.resources.Has(name)) { + id = data.resources[name].id; + } else { + world::Resource res; + res.name = name; + id = data.resources.Add(res); + } + + in.Skip(io::Token::ANGLE_BRACKET_OPEN); + while (in.Peek().type != io::Token::ANGLE_BRACKET_CLOSE) { + in.ReadIdentifier(name); + in.Skip(io::Token::EQUALS); + if (name == "label") { + in.ReadString(data.resources[id].label); + } else { + throw std::runtime_error("unknown resource property '" + name + "'"); + } + in.Skip(io::Token::SEMICOLON); + } + in.Skip(io::Token::ANGLE_BRACKET_CLOSE); + in.Skip(io::Token::SEMICOLON); + } +} + void Assets::ReadTileTypes(io::TokenStreamReader &in) { while (in.HasMore()) { string name;