TiXmlNode * SpaceObject::WriteNode(TiXmlNode * node, const Player * viewer) const { if (!SeenBy(viewer)) return NULL; if (mAlsoHere && mAlsoHere->at(0) != this && dynamic_cast<Planet *>(mAlsoHere->at(0)) != NULL) { TiXmlElement *loc = new TiXmlElement("Location"); AddString(loc, "Planet", mAlsoHere->at(0)->GetName(NULL).c_str()); node->LinkEndChild(loc); } else Location::WriteNode(node); if (SeenBy(viewer) & SEEN_OWNER) { if (GetOwner() == NULL) AddLong(node, "Owner", 0); else AddLong(node, "Owner", GetOwner()->GetID()); } assert(mID != 0); TiXmlElement * tie = node->ToElement(); tie->SetAttribute("IDNumber", mID); if (viewer == NULL) node->LinkEndChild(Rules::WriteArray("SeenBy", "Race", "Number", mSeenBy)); return node; }
void SpaceObject::CheckSeenByChasers() { int i; for (i = 0; i < mChasers.size(); ++i) if (!SeenBy(mChasers[i]->GetOwnerID()-1)) mChasers[i]->ChaseeGone(this); }
long SpaceObject::SeenBy(const Player * p) const { if (p == NULL) return SEEN_HOST; else if (p == GetOwner()) return SEEN_BYOWNER; else return SeenBy(p->GetID()-1); }
TiXmlNode * Salvage::WriteNode(TiXmlNode * node, const Player * viewer) const { if (viewer != NULL && !SeenBy(viewer)) return NULL; CargoHolder::WriteNode(node, viewer); if (viewer == NULL) AddLong(node, "TurnCreated", TurnCreated); return node; }