Files
starruler-linux/scripts/server/map_loader.as
T
2018-07-17 14:15:37 +02:00

74 lines
1.4 KiB
ActionScript

import maps;
#section server
import object_creation;
import scenario;
import systems;
#section all
final class MapSystem {
string name;
vec3d position;
array<string> effects;
bool canHaveHomeworld = true;
};
final class MapFile {
array<MapSystem> systems;
void generate(Map@ map) {
for(uint i = 0, cnt = systems.length; i < cnt; ++i) {
auto@ sys = systems[i];
SystemCode code;
if(sys.name.length > 0)
code << "NameSystem(" + sys.name + ")";
for(uint j = 0, jcnt = sys.effects.length; j < jcnt; ++j)
code << sys.effects[j];
map.addSystem(sys.position, code=code, canHaveHomeworld=sys.canHaveHomeworld);
}
}
};
MapFile@ loadMap(const string& filename) {
ReadFile file(resolve(filename), true);
MapFile mp;
MapSystem@ sys;
string key, value;
while(file++) {
key = file.key;
value = file.value;
if(file.fullLine && sys !is null) {
sys.effects.insertLast(file.line);
}
else if(key == "System") {
mp.systems.length = mp.systems.length + 1;
@sys = mp.systems.last;
sys.name = value;
}
else if(sys is null) {
error("Invalid map: " + filename);
break;
}
else if(key == "Effect") {
sys.effects.insertLast(value);
}
else if(key == "Position") {
sys.position = toVec3d(value);
}
else if(key == "Homeworld") {
sys.canHaveHomeworld = toBool(value);
}
else {
sys.effects.insertLast(file.line);
}
}
return mp;
}