/* 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; entity_radius = 0.25f; // the spectator gets player color entity_color.assign(owner->color()); entity_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; entity_axis.change_direction(target_direction * rotation); entity_axis.change_pitch(target_pitch * rotation); entity_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) entity_location += entity_axis.forward() * entity_speed * elapsed; if (target_afterburner) entity_location += entity_axis.forward() * maxspeed * target_afterburner * elapsed; if (target_strafe) entity_location += entity_axis.left() * maxspeed * target_strafe * elapsed; // set dirty flag set_dirty(); } }