void System::LoadObject(const DataNode &node, Set<Planet> &planets, int parent) { int index = objects.size(); objects.push_back(StellarObject()); StellarObject &object = objects.back(); object.parent = parent; bool isAdded = (node.Token(0) == "add"); if(node.Size() >= 2 + isAdded) { Planet *planet = planets.Get(node.Token(1 + isAdded)); object.planet = planet; planet->SetSystem(this); } for(const DataNode &child : node) { if(child.Token(0) == "sprite" && child.Size() >= 2) { object.LoadSprite(child); object.isStar = !child.Token(1).compare(0, 5, "star/"); if(!object.isStar) { object.isStation = !child.Token(1).compare(0, 14, "planet/station"); object.isMoon = (!object.isStation && parent >= 0 && !objects[parent].IsStar()); } } else if(child.Token(0) == "distance" && child.Size() >= 2) object.distance = child.Value(1); else if(child.Token(0) == "period" && child.Size() >= 2) object.speed = 360. / child.Value(1); else if(child.Token(0) == "offset" && child.Size() >= 2) object.offset = child.Value(1); else if(child.Token(0) == "object") LoadObject(child, planets, index); else child.PrintTrace("Skipping unrecognized attribute:"); } }