/* ship.cc This file is part of the Osirion project */ // C++ headers #include // project headers #include "common/functions.h" #include "common/osirion.h" #include "ship.h" Ship::Ship() { speed = 0; yaw = 0; yaw_offset = 0; thrust = 0; // ship specs acceleration = 6 * GAMESCALE; max_speed = 16.0f * GAMESCALE; max_yaw_offset = 45; yaw_speed = 4; } Ship::~Ship() { } void Ship::update(float elapsed) { // update yaw float d = yaw_speed * elapsed * yaw_offset; yaw_offset -= d; yaw +=d; // update thrust if (speed < thrust * max_speed) { speed += acceleration * elapsed; if (speed > thrust * max_speed) { speed = thrust * max_speed; } } else if(speed > thrust * max_speed) { speed -= acceleration * elapsed; if (speed < 0) speed = 0; } // location TODO avoid sin/cos calculations location.x += cosf(yaw * M_PI / 180) * speed * elapsed; location.z -= sinf(yaw * M_PI / 180) * speed * elapsed; } void Ship::thrust_increase() { thrust += 0.05; if (thrust > 1) thrust = 1; } void Ship::thrust_decrease() { thrust -= 0.08; if (thrust < 0) thrust = 0; } void Ship::turn_left() { //yaw = degreesf(yaw + 2); yaw_offset += 2; if (yaw_offset > max_yaw_offset) yaw_offset = max_yaw_offset; } void Ship::turn_right() { //yaw = degreesf(yaw - 2); yaw_offset -= 2; if (yaw_offset < -max_yaw_offset) yaw_offset = - max_yaw_offset; }