Put the variables of the ship as static members of ShipEntity, introduced variable ship_maxattackrate

main
Martin Felis (berta) 2010-04-08 19:03:16 +02:00
parent dd70d90ba5
commit 567bb432ef
3 changed files with 28 additions and 9 deletions

View File

@ -8,3 +8,4 @@ bind space attack
set ship_maxspeed 10 set ship_maxspeed 10
set ship_acceleration 10 set ship_acceleration 10
set ship_rotationspeed 180 set ship_rotationspeed 180
set ship_maxattackrate 10

View File

@ -11,9 +11,10 @@
namespace asteroids { namespace asteroids {
static Engine::Variable var_ship_acceleration ("ship_acceleration", "10"); Engine::Variable ShipEntity::VarAcceleration ("ship_acceleration", "10");
static Engine::Variable var_ship_maxspeed ("ship_maxspeed", "10"); Engine::Variable ShipEntity::VarMaxSpeed ("ship_maxspeed", "10");
static Engine::Variable var_ship_rotationspeed ("ship_rotationspeed", "180"); Engine::Variable ShipEntity::VarRotationSpeed ("ship_rotationspeed", "180");
Engine::Variable ShipEntity::VarMaxAttackRate ("ship_maxattackrate", "10");
void ShipEntity::Update (float delta_sec) { void ShipEntity::Update (float delta_sec) {
if (!mPhysicState || !mControllerState) if (!mPhysicState || !mControllerState)
@ -38,7 +39,7 @@ void ShipEntity::Update (float delta_sec) {
// set the local velocity as the current state of the keys are // set the local velocity as the current state of the keys are
if (mControllerState->GetKey (EntityKeyStateForward)) { if (mControllerState->GetKey (EntityKeyStateForward)) {
local_velocity[0] += delta_sec * var_ship_acceleration.GetFloatValue(); local_velocity[0] += delta_sec * ShipEntity::VarAcceleration.GetFloatValue();
mState = Accelerating; mState = Accelerating;
} }
@ -49,17 +50,21 @@ void ShipEntity::Update (float delta_sec) {
mPhysicState->SetVelocity(local_velocity); mPhysicState->SetVelocity(local_velocity);
if (mControllerState->GetKey (EntityKeyStateTurnLeft)) { if (mControllerState->GetKey (EntityKeyStateTurnLeft)) {
mPhysicState->mOrientation[1] += delta_sec * var_ship_rotationspeed.GetFloatValue(); mPhysicState->mOrientation[1] += delta_sec * ShipEntity::VarRotationSpeed.GetFloatValue();
} }
if (mControllerState->GetKey (EntityKeyStateTurnRight)) { if (mControllerState->GetKey (EntityKeyStateTurnRight)) {
mPhysicState->mOrientation[1] -= delta_sec * var_ship_rotationspeed.GetFloatValue(); mPhysicState->mOrientation[1] -= delta_sec * ShipEntity::VarRotationSpeed.GetFloatValue();
} }
// Check for the maximum speed // Check for the maximum speed
float speed = mPhysicState->mVelocity.length(); float speed = mPhysicState->mVelocity.length();
if (speed > var_ship_maxspeed.GetFloatValue()) { if (speed > ShipEntity::VarMaxSpeed.GetFloatValue()) {
mPhysicState->mVelocity *= var_ship_maxspeed.GetFloatValue() / speed; mPhysicState->mVelocity *= ShipEntity::VarMaxSpeed.GetFloatValue() / speed;
} }
// update the attack timer if neccessary
if (mAttackTimer > 0.)
mAttackTimer -= delta_sec;
} }
bool ShipEntity::CollisionEvent (Engine::EntityBase* entity) { bool ShipEntity::CollisionEvent (Engine::EntityBase* entity) {
@ -99,6 +104,12 @@ void ShipEntity::Attack () {
if (!mAlive) if (!mAlive)
return; return;
// skip the attack if we still have to wait
if (mAttackTimer > 0.)
return;
mAttackTimer = 1. / ShipEntity::VarMaxAttackRate.GetFloatValue();
Engine::EntityPhysicState* entity_physic = Engine::GetEntityPhysicState (mId); Engine::EntityPhysicState* entity_physic = Engine::GetEntityPhysicState (mId);
vector3d attack_dir (1., 0., 0.); vector3d attack_dir (1., 0., 0.);
@ -114,7 +125,7 @@ void ShipEntity::Attack () {
rocket_physics->mPosition += entity_physic->mPosition; rocket_physics->mPosition += entity_physic->mPosition;
rocket_physics->mOrientation = entity_physic->mOrientation; rocket_physics->mOrientation = entity_physic->mOrientation;
rocket_physics->mVelocity = attack_dir.normalize(); rocket_physics->mVelocity = attack_dir.normalize();
rocket_physics->mVelocity *= var_ship_maxspeed.GetFloatValue() + 0.1; rocket_physics->mVelocity *= ShipEntity::VarMaxSpeed.GetFloatValue() + 0.1;
} }
} }

View File

@ -40,6 +40,7 @@ struct ShipEntity: public Engine::EntityBase {
mAlive = true; mAlive = true;
mFadeTimer = 0.; mFadeTimer = 0.;
mState = Idle; mState = Idle;
mAttackTimer = 0.;
} }
virtual ~ShipEntity() {}; virtual ~ShipEntity() {};
@ -50,7 +51,13 @@ struct ShipEntity: public Engine::EntityBase {
bool mAlive; bool mAlive;
float mFadeTimer; float mFadeTimer;
float mAttackTimer;
State mState; State mState;
static Engine::Variable VarAcceleration;
static Engine::Variable VarMaxSpeed;
static Engine::Variable VarRotationSpeed;
static Engine::Variable VarMaxAttackRate;
}; };
} }