@@ -46,13 +46,13 @@ mixin DeriveCompare; mixin DeriveShow; Water clone() const { return cast(Water)this; } - static load(string[string] params) + static load(string[][string] params) { return new Water( - params.get("Water", "0").to!int(), - params.get("Flooding", "0").to!int() + params.get("Water", ["0"])[0].to!int(), + params.get("Flooding", ["0"])[0].to!int() ); } int level(int number_of_update) const @@ -91,9 +91,9 @@ class Map { mixin DeriveShow; - static Map load(string[] raw_data, string[string] params) + static Map load(string[] raw_data, string[][string] params) { // TODO: choose optimal representation. return new Map(raw_data, params); } @@ -111,9 +111,9 @@ this.lift = m.lift.clone(); this.waterproof = m.waterproof; } - this(string[] raw_data, string[string] params) + this(string[] raw_data, string[][string] params) { int width = 0; foreach(r; raw_data) width = max(width, r.length); @@ -130,9 +130,9 @@ if(this[y,x] == 'L' || this[y,x] == 'O') this.lift = new Pos(y,x); } - this.waterproof = params.get("Waterproof", "5").to!int(); + this.waterproof = params.get("Waterproof", ["5"])[0].to!int(); } const @property { int H() { return data.length; } @@ -276,10 +276,10 @@ mixin DeriveShow; static Game load(File input) { - string[] raw_data; - string[string] params; + string[] raw_data; + string[][string] params; // Raw map data; read until empty line. for(string line; !(line=input.readln().chomp()).empty; ) raw_data ~= line; @@ -286,21 +286,20 @@ // Additional commands; read until EOF. for(string line; !(line=input.readln()).empty; ) { string[] ss = line.split(); - if( ss.length == 2 ) - params[ss[0]] = ss[1]; + params[ss[0]] = ss[1..$]; } return load(raw_data, params); } - static Game load(string[] raw_data, string[string] params) + static Game load(string[] raw_data, string[][string] params) { return new Game(raw_data, params); } - this(string[] raw_data, string[string] params) + this(string[] raw_data, string[][string] params) { this.map = Map.load(raw_data, params); this.water = Water.load(params); }