1 #include "Predicates.h" 2 3 #include "Building.h" 4 #include "Fleet.h" 5 #include "Planet.h" 6 #include "Ship.h" 7 #include "System.h" 8 #include "Field.h" 9 #include "Fighter.h" 10 #include "UniverseObject.h" 11 12 //////////////////////////////////////////////// 13 // UniverseObjectVisitor 14 //////////////////////////////////////////////// ~UniverseObjectVisitor()15UniverseObjectVisitor::~UniverseObjectVisitor() 16 {} 17 Visit(std::shared_ptr<UniverseObject> obj) const18std::shared_ptr<UniverseObject> UniverseObjectVisitor::Visit(std::shared_ptr<UniverseObject> obj) const 19 { return nullptr; } 20 Visit(std::shared_ptr<Building> obj) const21std::shared_ptr<UniverseObject> UniverseObjectVisitor::Visit(std::shared_ptr<Building> obj) const 22 { return Visit(std::static_pointer_cast<UniverseObject>(obj)); } 23 Visit(std::shared_ptr<Fleet> obj) const24std::shared_ptr<UniverseObject> UniverseObjectVisitor::Visit(std::shared_ptr<Fleet> obj) const 25 { return Visit(std::static_pointer_cast<UniverseObject>(obj)); } 26 Visit(std::shared_ptr<Planet> obj) const27std::shared_ptr<UniverseObject> UniverseObjectVisitor::Visit(std::shared_ptr<Planet> obj) const 28 { return Visit(std::static_pointer_cast<UniverseObject>(obj)); } 29 Visit(std::shared_ptr<Ship> obj) const30std::shared_ptr<UniverseObject> UniverseObjectVisitor::Visit(std::shared_ptr<Ship> obj) const 31 { return Visit(std::static_pointer_cast<UniverseObject>(obj)); } 32 Visit(std::shared_ptr<System> obj) const33std::shared_ptr<UniverseObject> UniverseObjectVisitor::Visit(std::shared_ptr<System> obj) const 34 { return Visit(std::static_pointer_cast<UniverseObject>(obj)); } 35 Visit(std::shared_ptr<Field> obj) const36std::shared_ptr<UniverseObject> UniverseObjectVisitor::Visit(std::shared_ptr<Field> obj) const 37 { return Visit(std::static_pointer_cast<UniverseObject>(obj)); } 38 Visit(std::shared_ptr<Fighter> obj) const39std::shared_ptr<UniverseObject> UniverseObjectVisitor::Visit(std::shared_ptr<Fighter> obj) const 40 { return Visit(std::static_pointer_cast<UniverseObject>(obj)); } 41 42 43 //////////////////////////////////////////////// 44 // StationaryFleetVisitor 45 //////////////////////////////////////////////// ~StationaryFleetVisitor()46StationaryFleetVisitor::~StationaryFleetVisitor() 47 {} 48 StationaryFleetVisitor(int empire)49StationaryFleetVisitor::StationaryFleetVisitor(int empire/* = ALL_EMPIRES*/) : 50 empire_id(empire) 51 {} 52 Visit(std::shared_ptr<Fleet> obj) const53std::shared_ptr<UniverseObject> StationaryFleetVisitor::Visit(std::shared_ptr<Fleet> obj) const { 54 if ((obj->FinalDestinationID() == INVALID_OBJECT_ID || 55 obj->TravelRoute().empty()) && 56 (empire_id == ALL_EMPIRES || (!obj->Unowned() && obj->Owner() == empire_id))) 57 return obj; 58 return nullptr; 59 } 60 61 //////////////////////////////////////////////// 62 // OrderedMovingFleetVisitor 63 //////////////////////////////////////////////// ~OrderedMovingFleetVisitor()64OrderedMovingFleetVisitor::~OrderedMovingFleetVisitor() 65 {} 66 OrderedMovingFleetVisitor(int empire)67OrderedMovingFleetVisitor::OrderedMovingFleetVisitor(int empire/* = ALL_EMPIRES*/) : 68 empire_id(empire) 69 {} 70 Visit(std::shared_ptr<Fleet> obj) const71std::shared_ptr<UniverseObject> OrderedMovingFleetVisitor::Visit(std::shared_ptr<Fleet> obj) const { 72 if (obj->FinalDestinationID() != INVALID_OBJECT_ID && 73 !obj->TravelRoute().empty() && 74 obj->SystemID() != INVALID_OBJECT_ID && 75 (empire_id == ALL_EMPIRES || (!obj->Unowned() && obj->Owner() == empire_id))) 76 return obj; 77 return nullptr; 78 } 79 80 //////////////////////////////////////////////// 81 // MovingFleetVisitor 82 //////////////////////////////////////////////// ~MovingFleetVisitor()83MovingFleetVisitor::~MovingFleetVisitor() 84 {} 85 MovingFleetVisitor(int empire)86MovingFleetVisitor::MovingFleetVisitor(int empire/* = ALL_EMPIRES*/) : 87 empire_id(empire) 88 {} 89 Visit(std::shared_ptr<Fleet> obj) const90std::shared_ptr<UniverseObject> MovingFleetVisitor::Visit(std::shared_ptr<Fleet> obj) const { 91 if (obj->FinalDestinationID() != INVALID_OBJECT_ID && 92 obj->SystemID() == INVALID_OBJECT_ID && 93 (empire_id == ALL_EMPIRES || (!obj->Unowned() && obj->Owner() == empire_id))) 94 return obj; 95 return nullptr; 96 } 97 98 //////////////////////////////////////////////// 99 // OwnedVisitor 100 //////////////////////////////////////////////// OwnedVisitor(int empire)101OwnedVisitor::OwnedVisitor(int empire) : 102 empire_id(empire) 103 {} 104 105 OwnedVisitor::~OwnedVisitor() = default; 106 Visit(std::shared_ptr<UniverseObject> obj) const107std::shared_ptr<UniverseObject> OwnedVisitor::Visit(std::shared_ptr<UniverseObject> obj) const 108 { 109 if (obj->OwnedBy(empire_id)) 110 return obj; 111 return nullptr; 112 } 113 114 //////////////////////////////////////////////// 115 // HostileVisitor 116 //////////////////////////////////////////////// HostileVisitor(int viewing_empire,int owning_empire)117HostileVisitor::HostileVisitor(int viewing_empire, int owning_empire) : 118 viewing_empire_id(viewing_empire), 119 owning_empire_id(owning_empire) 120 {} 121 122 HostileVisitor::~HostileVisitor() = default; 123 Visit(std::shared_ptr<UniverseObject> obj) const124std::shared_ptr<UniverseObject> HostileVisitor::Visit(std::shared_ptr<UniverseObject> obj) const 125 { 126 if (obj->HostileToEmpire(viewing_empire_id)) 127 return obj; 128 return nullptr; 129 } 130