player sounds and controls get reset when player dies or the game ends

This commit is contained in:
2010-12-01 10:02:26 +01:00
parent 083617ea64
commit 05b30a5b1d
4 changed files with 37 additions and 7 deletions
+20
View File
@@ -1,5 +1,8 @@
#include "Game.h"
#include "Controller.h"
#include "AsteroidsEvents.h"
#include "Model.h"
namespace asteroids {
@@ -29,4 +32,21 @@ bool Controller::OnReceiveEvent (const Engine::EventBasePtr &event) {
return false;
}
void Controller::ResetPlayerEntity () {
Engine::HaltSoundLoop("./data/sounds/thrust.wav");
Engine::EntityBase *player_entity = GetModel()->GetEntity(GetModel()->GetPlayerEntityId());
// if we were unable to get the player then there is no need to invalidate
// the state
if (!player_entity)
return;
int i;
for (i = 0; i < EntityControllerMaxKeyStates; i++)
player_entity->UnsetControllerKeyState(i);
GetModel()->SetPlayerEntityId(Engine::NullEntityId);
}
}
+2
View File
@@ -21,6 +21,8 @@ enum EntityControllerKeyState {
class Controller : public Engine::ControllerBase {
public:
Controller () {};
void ResetPlayerEntity ();
protected:
/** \brief Set up basic keybindings */
virtual int OnInit (int argc, char* argv[]);
+3 -5
View File
@@ -100,7 +100,7 @@ bool View::OnReceiveEvent (const Engine::EventBasePtr &event) {
break;
case EventLevelComplete:
PushViewState(ViewStateLevelComplete);
GetModel()->SetPlayerEntityId(Engine::NullEntityId);
GetController()->ResetPlayerEntity();
break;
case EventGameOver:
@@ -108,15 +108,13 @@ bool View::OnReceiveEvent (const Engine::EventBasePtr &event) {
PopViewState();
PushViewState(ViewStateGameOver);
GetModel()->SetPlayerEntityId(Engine::NullEntityId);
GetController()->ResetPlayerEntity();
break;
case EventPlayerDied:
mFadeTimerSecValue = 2.;
PushViewState(ViewStatePlayerDied);
GetModel()->SetPlayerEntityId(Engine::NullEntityId);
GetController()->ResetPlayerEntity();
break;
case EventShipExplode: {