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

main
Martin Felis (berta) 2010-12-01 10:02:26 +01:00
parent 083617ea64
commit 05b30a5b1d
4 changed files with 37 additions and 7 deletions

View File

@ -1,5 +1,8 @@
#include "Game.h"
#include "Controller.h" #include "Controller.h"
#include "AsteroidsEvents.h" #include "AsteroidsEvents.h"
#include "Model.h"
namespace asteroids { namespace asteroids {
@ -29,4 +32,21 @@ bool Controller::OnReceiveEvent (const Engine::EventBasePtr &event) {
return false; 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);
}
} }

View File

@ -21,6 +21,8 @@ enum EntityControllerKeyState {
class Controller : public Engine::ControllerBase { class Controller : public Engine::ControllerBase {
public: public:
Controller () {}; Controller () {};
void ResetPlayerEntity ();
protected: protected:
/** \brief Set up basic keybindings */ /** \brief Set up basic keybindings */
virtual int OnInit (int argc, char* argv[]); virtual int OnInit (int argc, char* argv[]);

View File

@ -100,7 +100,7 @@ bool View::OnReceiveEvent (const Engine::EventBasePtr &event) {
break; break;
case EventLevelComplete: case EventLevelComplete:
PushViewState(ViewStateLevelComplete); PushViewState(ViewStateLevelComplete);
GetModel()->SetPlayerEntityId(Engine::NullEntityId); GetController()->ResetPlayerEntity();
break; break;
case EventGameOver: case EventGameOver:
@ -108,15 +108,13 @@ bool View::OnReceiveEvent (const Engine::EventBasePtr &event) {
PopViewState(); PopViewState();
PushViewState(ViewStateGameOver); PushViewState(ViewStateGameOver);
GetController()->ResetPlayerEntity();
GetModel()->SetPlayerEntityId(Engine::NullEntityId);
break; break;
case EventPlayerDied: case EventPlayerDied:
mFadeTimerSecValue = 2.; mFadeTimerSecValue = 2.;
PushViewState(ViewStatePlayerDied); PushViewState(ViewStatePlayerDied);
GetController()->ResetPlayerEntity();
GetModel()->SetPlayerEntityId(Engine::NullEntityId);
break; break;
case EventShipExplode: { case EventShipExplode: {

View File

@ -127,9 +127,19 @@ bool Sprite::LoadFromPNG (const char *filename) {
//Now generate the OpenGL texture object //Now generate the OpenGL texture object
glGenTextures(1, &mGlTextureName); glGenTextures(1, &mGlTextureName);
glBindTexture(GL_TEXTURE_2D, mGlTextureName); glBindTexture(GL_TEXTURE_2D, mGlTextureName);
bool mipmap = false;
if (mipmap) {
gluBuild2DMipmaps(GL_TEXTURE_2D, GL_RGBA, mWidth, mHeight,
GL_RGBA, GL_UNSIGNED_BYTE, (GLvoid*) image_data);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_NEAREST_MIPMAP_NEAREST);
} else {
glTexImage2D(GL_TEXTURE_2D,0, GL_RGBA, mWidth, mHeight, 0, glTexImage2D(GL_TEXTURE_2D,0, GL_RGBA, mWidth, mHeight, 0,
GL_RGBA, GL_UNSIGNED_BYTE, (GLvoid*) image_data); GL_RGBA, GL_UNSIGNED_BYTE, (GLvoid*) image_data);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_NEAREST); glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR);
}
//clean up memory and close stuff //clean up memory and close stuff
png_destroy_read_struct(&png_ptr, &info_ptr, &end_info); png_destroy_read_struct(&png_ptr, &info_ptr, &end_info);