/* base/planet.cc This file is part of the Osirion project and is distributed under the terms of the GNU General Public License version 2. */ #include "base/game.h" #include "base/planet.h" namespace game { Planet::Planet() : core::EntityGlobe(core::Entity::Static | core::Entity::Solid) { set_flag(core::Entity::ShowOnMap); get_color().assign(1.0f, 1.0f); // white set_radius(64.0f); // 64 game units entity_moduletypeid = planet_enttype; entity_rotationspeed = 1.0f; planet_shipdealer = 0; } Planet::~Planet() { if (planet_shipdealer) delete planet_shipdealer; } void Planet::set_shipdealer(ShipDealer *shipdealer) { if (planet_shipdealer) delete planet_shipdealer; planet_shipdealer = shipdealer; } void Planet::dock(core::Entity *entity) { if (entity->moduletype() != ship_enttype) return; Ship * ship = static_cast(entity); if (math::distance(location(), ship->location()) > radius() + ship->radius() + 50.0f ) { if (ship->owner()) ship->owner()->send("Planet 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()); } } } // namespace game