Put the variables of the ship as static members of ShipEntity, introduced variable ship_maxattackrate
parent
dd70d90ba5
commit
567bb432ef
|
@ -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
|
||||||
|
|
|
@ -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;
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -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;
|
||||||
};
|
};
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue