123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114 |
- /*
- ** 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;
- }
- //------------------------------------------------------------------------------
- }
|