/* base/station.cc This file is part of the Osirion project and is distributed under the terms and conditions of the GNU General Public License version 2 */ #include "base/game.h" #include "base/station.h" #include "sys/sys.h" namespace game { Station::Station() : Entity(), PhysicsBody(this) { entity_moduletypeid = station_enttype; set_flag(core::Entity::Dockable); set_flag(core::Entity::ShowOnMap); station_shipdealer = 0; } Station::~Station() { if (station_shipdealer) delete station_shipdealer; shutdown_physics(); } void Station::set_shipdealer(ShipDealer *shipdealer) { if (station_shipdealer) delete station_shipdealer; station_shipdealer = shipdealer; } void Station::dock(core::Entity *entity) { if (entity->moduletype() != ship_enttype) return; Ship * ship = static_cast(entity); if (math::distance(location(), ship->location()) > radius() + ship->radius()) { if (ship->owner()) ship->owner()->send("Target out of range"); return; } ship->get_location().assign(entity->location()); ship->set_state(core::Entity::Docked); if (ship->owner() && ship->owner()->control() == ship) { ship->owner()->set_view(this); ship->owner()->send("^BDocking at " + name()); } } }