/* ** Copyright (C) 1999 Microsoft Corporation. All Rights Reserved. ** ** File: resetaction.cpp ** ** Author: ** ** Description: ** Implementation of the training library "resetaction" interface. ** ** History: */ #include "pch.h" #include "ResetAction.h" #include "PlaySoundAction.h" #include "SuspendedSoundFinishedCondition.h" #include "MessageAction.h" #include "TrainingMission.h" #include "ConditionalAction.h" #include "ProxyAction.h" namespace Training { //------------------------------------------------------------------------------ // global variabes //------------------------------------------------------------------------------ extern TrainingMission* g_pMission; //------------------------------------------------------------------------------ // class static variables //------------------------------------------------------------------------------ int ResetAction::m_iResetCount; //------------------------------------------------------------------------------ // class methods //------------------------------------------------------------------------------ /* void */ ResetAction::ResetAction (Goal* pGoal, SoundID soundID) : m_pGoal (pGoal), m_soundID (soundID), m_resetStage (RESET_START) { } //------------------------------------------------------------------------------ /* void */ ResetAction::~ResetAction (void) { } //------------------------------------------------------------------------------ void ResetAction::Execute (void) { // XXX this functionality now allows the game engine to continue to run while we reset, thus // keeping the reset from looking like a lockup. However, it would still be nice to disable controls // and such during the reset, and possibly switch to a different screen. Maybe set ship velocity to 0. /* SoundID resetSoundID[] = {tm_reset_0Sound, tm_reset_1Sound, tm_reset_2Sound, tm_reset_3Sound, tm_reset_4Sound}; switch (m_resetStage) { case RESET_START: // play a "unique" sound m_iResetCount++; PlaySound (resetSoundID[0], RESET_NOTIFY); break; case RESET_NOTIFY: // play the mission reset voice over PlaySound (resetSoundID[m_iResetCount], (m_iResetCount < 4) ? RESET_SPECIFIC_NOTIFY : RESET_COMPLETE); break; case RESET_SPECIFIC_NOTIFY: // play a goal specific reset voice over PlaySound (m_soundID, RESET_COMPLETE); break; case RESET_COMPLETE: // finish up the reset if (m_iResetCount < 4) { MessageAction messageAction ("Mission stage reset."); messageAction.Execute (); m_resetStage = RESET_START; m_pGoal->Start (); } else g_pMission->Terminate (); break; } */ } //------------------------------------------------------------------------------ void ResetAction::Initialize (void) { m_iResetCount = 0; } //------------------------------------------------------------------------------ void ResetAction::PlaySound (SoundID soundID, ResetStage nextStage) { if (m_soundID != NA) { PlaySoundAction* pPlaySoundAction = new PlaySoundAction (soundID); // make sure the play sound action is deleted when it is done SoundFinishedCondition* pSoundFinishedCondition = new SuspendedSoundFinishedCondition (pPlaySoundAction); ConditionalAction* pConditionalAction = new ConditionalAction (pSoundFinishedCondition, new ProxyAction (this)); g_pMission->AddWaitCondition (pConditionalAction); pPlaySoundAction->Execute (); } m_resetStage = nextStage; } //------------------------------------------------------------------------------ }