diff options
Diffstat (limited to 'sons_of_sol/private_db/PlayerShip.cpp')
| -rw-r--r-- | sons_of_sol/private_db/PlayerShip.cpp | 235 |
1 files changed, 117 insertions, 118 deletions
diff --git a/sons_of_sol/private_db/PlayerShip.cpp b/sons_of_sol/private_db/PlayerShip.cpp index 14eff74..6e2fb23 100644 --- a/sons_of_sol/private_db/PlayerShip.cpp +++ b/sons_of_sol/private_db/PlayerShip.cpp @@ -1,161 +1,160 @@ #include "sons_of_sol/PlayerShip.hpp" -#include "glox/GloxCommon.hpp" #include "glox/GloxColor.hpp" +#include "glox/GloxCommon.hpp" using namespace glox; using namespace std; - -float randomJitter( float jitter ) { - return (( rand() % 2000 - 1000 ) / 1000.0) * jitter ; +float randomJitter(float jitter) { + return ((rand() % 2000 - 1000) / 1000.0) * jitter; } -void PlayerShip::pitch( float angle ) { - /* Update the forward vector */ - m_forward *= (float)GloxCos( angle ); - m_forward += ( m_up * (float)GloxSin( angle ) ); - m_forward.normalize(); +void PlayerShip::pitch(float angle) { + /* Update the forward vector */ + m_forward *= (float)GloxCos(angle); + m_forward += (m_up * (float)GloxSin(angle)); + m_forward.normalize(); - m_up = m_right.cross( m_forward ); + m_up = m_right.cross(m_forward); } -void PlayerShip::roll( float angle ) { - m_right *= (float)GloxCos( angle ); - m_right += m_up * GloxSin( angle ); - m_right.normalize(); +void PlayerShip::roll(float angle) { + m_right *= (float)GloxCos(angle); + m_right += m_up * GloxSin(angle); + m_right.normalize(); - m_up = m_right.cross( m_forward ); + m_up = m_right.cross(m_forward); } -void PlayerShip::yaw( float angle ) { - m_right *= (float)GloxCos( angle ); - m_right += m_forward * GloxSin( angle ); - m_right.normalize(); +void PlayerShip::yaw(float angle) { + m_right *= (float)GloxCos(angle); + m_right += m_forward * GloxSin(angle); + m_right.normalize(); - m_forward = m_up.cross( m_right ); + m_forward = m_up.cross(m_right); } -void PlayerShip::renderPerspective( ) { +void PlayerShip::renderPerspective() { - GloxPoint<> noise( randomJitter( m_jitter ), randomJitter( m_jitter ), randomJitter( m_jitter ) ) ; - if( m_is_firing ) { - noise += GloxPointf( randomJitter(0.01),randomJitter(0.01),randomJitter(0.01) ); - } - m_perspective.setLookAtPoint( m_position + m_forward.toPoint() + noise ); - m_perspective.setPosition( m_position + (m_forward.toPoint() * 0.2f) ); - m_perspective.setUpVector( m_up.toPoint() ); - - GloxColor( 255,255,255 ).render(); - GloxWith( GL_LINES, - GloxPoint<>( 0,0,0 ).plot(); - m_position.plot() ); -} - -void PlayerShip::drawHUD() { + GloxPoint<> noise(randomJitter(m_jitter), randomJitter(m_jitter), + randomJitter(m_jitter)); + if (m_is_firing) { + noise += + GloxPointf(randomJitter(0.01), randomJitter(0.01), randomJitter(0.01)); + } + m_perspective.setLookAtPoint(m_position + m_forward.toPoint() + noise); + m_perspective.setPosition(m_position + (m_forward.toPoint() * 0.2f)); + m_perspective.setUpVector(m_up.toPoint()); + GloxColor(255, 255, 255).render(); + GloxWith(GL_LINES, GloxPoint<>(0, 0, 0).plot(); m_position.plot()); } -static inline float update_val( float to, float x, int inertia ) { - return ( to + (inertia - 1) * x ) / inertia; +void PlayerShip::drawHUD() {} + +static inline float update_val(float to, float x, int inertia) { + return (to + (inertia - 1) * x) / inertia; } -void PlayerShip::onControlMotion( const ControlMotionEvent& evt ) { - //printf( "Event Mag: %f\n", evt.getMagnitude() ); +void PlayerShip::onControlMotion(const ControlMotionEvent& evt) { + //printf( "Event Mag: %f\n", evt.getMagnitude() ); - if( evt.getType() == ControlMotionEvent::PITCH ) { - m_dpitch = update_val( evt.getMagnitude(), m_dpitch, 10 ); - } + if (evt.getType() == ControlMotionEvent::PITCH) { + m_dpitch = update_val(evt.getMagnitude(), m_dpitch, 10); + } - else if( evt.getType() == ControlMotionEvent::THROTTLE ) { - m_dforward_to = evt.getMagnitude(); - } + else if (evt.getType() == ControlMotionEvent::THROTTLE) { + m_dforward_to = evt.getMagnitude(); + } - else if( evt.getType() == ControlMotionEvent::YAW ) { - m_dyaw = update_val( evt.getMagnitude(), m_dyaw, 10 ); - } + else if (evt.getType() == ControlMotionEvent::YAW) { + m_dyaw = update_val(evt.getMagnitude(), m_dyaw, 10); + } - else if( evt.getType() == ControlMotionEvent::ROLL ) { - m_droll_to = evt.getMagnitude(); - } + else if (evt.getType() == ControlMotionEvent::ROLL) { + m_droll_to = evt.getMagnitude(); + } - else if( evt.getType() == ControlMotionEvent::STRAFE_SIDE ) { - m_dright_to = evt.getMagnitude(); - } + else if (evt.getType() == ControlMotionEvent::STRAFE_SIDE) { + m_dright_to = evt.getMagnitude(); + } - else if( evt.getType() == ControlMotionEvent::STRAFE_UP ) { - m_dup_to = evt.getMagnitude(); - } + else if (evt.getType() == ControlMotionEvent::STRAFE_UP) { + m_dup_to = evt.getMagnitude(); + } - else if( evt.getType() == ControlMotionEvent::FIRE_PRIMARY ) { - m_is_firing = evt.getMagnitude() != 0 ; - } + else if (evt.getType() == ControlMotionEvent::FIRE_PRIMARY) { + m_is_firing = evt.getMagnitude() != 0; + } } void PlayerShip::update() { - static const float projectile_speed = 150; - // printf( "dpitch: %f, droll: %f, dyaw: %f, dforward: %f, dright: %f, dup: %f\n", - // m_dpitch, m_droll, m_dyaw, m_dforward, m_dright, m_dup ); - - pitch( m_dpitch ); - roll( m_droll ); - yaw( m_dyaw ); - - int i = 0; - for( vector<Projectile>::iterator itr = m_living_projectiles.begin(); - itr != m_living_projectiles.end() ; ++ itr ) { - if( ! (*itr).isDead() ) { - (*itr).update(); - if( (*itr).isDead() ) { - m_open_positions.push( i ); - } - } - ++ i; + static const float projectile_speed = 150; + // printf( "dpitch: %f, droll: %f, dyaw: %f, dforward: %f, dright: %f, dup: %f\n", + // m_dpitch, m_droll, m_dyaw, m_dforward, m_dright, m_dup ); + + pitch(m_dpitch); + roll(m_droll); + yaw(m_dyaw); + + int i = 0; + for (vector<Projectile>::iterator itr = m_living_projectiles.begin(); + itr != m_living_projectiles.end(); ++itr) { + if (!(*itr).isDead()) { + (*itr).update(); + if ((*itr).isDead()) { + m_open_positions.push(i); + } } - - m_position += (m_forward * m_dforward).toPoint(); - m_position += (m_right * m_dright).toPoint(); - m_position += (m_up * m_dup).toPoint(); - - m_droll = update_val( m_droll_to, m_droll, 20 ); - m_dup = update_val( m_dup_to, m_dup, 20 ); - m_dright = update_val( m_dright_to, m_dright, 20 ); - - float last_dforward = m_dforward ; - m_dforward = update_val( m_dforward_to, m_dforward, 200 ); - - float accel = m_dforward - last_dforward ; - if( accel > 0 ) { - m_jitter = accel / 40.0 ; + ++i; + } + + m_position += (m_forward * m_dforward).toPoint(); + m_position += (m_right * m_dright).toPoint(); + m_position += (m_up * m_dup).toPoint(); + + m_droll = update_val(m_droll_to, m_droll, 20); + m_dup = update_val(m_dup_to, m_dup, 20); + m_dright = update_val(m_dright_to, m_dright, 20); + + float last_dforward = m_dforward; + m_dforward = update_val(m_dforward_to, m_dforward, 200); + + float accel = m_dforward - last_dforward; + if (accel > 0) { + m_jitter = accel / 40.0; + } else { + m_jitter = 0.0; + } + + // This is only the case if we are using a mouse + m_dpitch = update_val(0, m_dpitch, 100); + m_dyaw = update_val(0, m_dyaw, 100); + // m_droll = (m_droll_to * ( 1 - exp( - m_droll_count ) ) + m_droll * ( 1 - exp( - m_droll_count ) ) )/ 2.0; + if (m_is_firing) { + GloxPointf spread(randomJitter(0.03), randomJitter(0.03), + randomJitter(0.03)); + Projectile proj((m_position - m_up.toPoint() - m_right.toPoint()), + (m_forward.toPoint() + spread) * projectile_speed); + + if (m_open_positions.empty()) { + m_living_projectiles.push_back(proj); } else { - m_jitter = 0.0 ; - } - - // This is only the case if we are using a mouse - m_dpitch = update_val( 0, m_dpitch, 100 ); - m_dyaw = update_val( 0, m_dyaw, 100 ); - // m_droll = (m_droll_to * ( 1 - exp( - m_droll_count ) ) + m_droll * ( 1 - exp( - m_droll_count ) ) )/ 2.0; - if( m_is_firing ) { - GloxPointf spread( randomJitter(0.03), randomJitter(0.03), randomJitter(0.03) ); - Projectile proj( (m_position - m_up.toPoint() - m_right.toPoint()), (m_forward.toPoint() + spread) * projectile_speed ) ; - - if( m_open_positions.empty() ) { - m_living_projectiles.push_back( proj ); - } else { - int idx = m_open_positions.front(); - m_open_positions.pop(); - m_living_projectiles[idx] = proj; - } + int idx = m_open_positions.front(); + m_open_positions.pop(); + m_living_projectiles[idx] = proj; } + } - renderPerspective(); + renderPerspective(); } void PlayerShip::drawProjectiles() { - for( vector<Projectile>::iterator itr = m_living_projectiles.begin(); - itr != m_living_projectiles.end() ; ++ itr ) { - if( ! (*itr).isDead() ) { - itr->draw(); - } + for (vector<Projectile>::iterator itr = m_living_projectiles.begin(); + itr != m_living_projectiles.end(); ++itr) { + if (!(*itr).isDead()) { + itr->draw(); } + } } |