/* base/spectator.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 "example/spectator.h" namespace example { core::Cvar *Spectator::g_spectatorspeed = 0; core::Cvar *Spectator::g_spectatorrotation = 0; Spectator::Spectator(core::Player *owner) : core::EntityControlable(owner) { // default properties entity_shape = core::Entity::Diamond; set_radius(0.25f); // the spectator gets player color get_color().assign(owner->color()); get_color_second().assign(owner->color_second()); // set dirty flag set_dirty(); } Spectator::~Spectator() { } void Spectator::frame(float elapsed) { // only update if necessary if (!entity_speed && ! target_thrust && !target_direction && !target_pitch && !target_roll && !target_strafe && !target_afterburner) return; // assign thrust value from input entity_thrust = target_thrust; // rotate according to input float rotation = g_spectatorrotation->value() * elapsed; get_axis().change_direction(target_direction * rotation); get_axis().change_pitch(target_pitch * rotation); get_axis().change_roll(target_roll * rotation); // assign speed from thruster float maxspeed = g_spectatorspeed->value(); entity_speed = entity_thrust * maxspeed; // assign new location if (entity_speed) get_location() += axis().forward() * entity_speed * elapsed; if (target_afterburner) get_location() += axis().forward() * maxspeed * target_afterburner * elapsed; if (target_strafe) get_location() += axis().left() * maxspeed * target_strafe * elapsed; // set dirty flag set_dirty(); } }