/* game/ship.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 */ // project headers #include "game/game.h" #include "game/ship.h" #include "math/mathlib.h" // C++ headers #include using math::degrees360f; using math::degrees180f; namespace game { Ship::Ship() : core::EntityControlable(0) { type = ship_enttype; // ship specs acceleration = 1.5f; max_speed = 4.0f; turn_speed = 0.5f; } Ship::~Ship() { } void Ship::frame(float seconds) { if (target_thrust < 0) target_thrust = 0.0f; else if(target_thrust > 1) target_thrust = 1.0f; // update direction float direction_offset = degrees180f(target_direction - direction); float d = turn_speed * seconds * direction_offset; direction = degrees360f(direction + d); // update speed if (speed < target_thrust * max_speed) { speed += acceleration * seconds; if (speed > target_thrust * max_speed) { speed = target_thrust * max_speed; } } else if(speed > target_thrust * max_speed) { speed -= acceleration * seconds; if (speed < 0) speed = 0; } // location TODO avoid sin/cos calculations location.x += cosf(direction * M_PI / 180) * speed * seconds; location.z -= sinf(direction * M_PI / 180) * speed * seconds; } } // namespace game