working on explicit profile load/saves: do this in a screen, not implicitly
as part of other operations separate profile loads/locks for each player
This commit is contained in:
+77
-28
@@ -229,7 +229,8 @@ void GameState::Reset()
|
|||||||
m_bSideIsJoined[p] = false;
|
m_bSideIsJoined[p] = false;
|
||||||
FOREACH_MultiPlayer( p )
|
FOREACH_MultiPlayer( p )
|
||||||
m_MultiPlayerStatus[p] = MultiPlayerStatus_NotJoined;
|
m_MultiPlayerStatus[p] = MultiPlayerStatus_NotJoined;
|
||||||
MEMCARDMAN->UnlockCards();
|
FOREACH_PlayerNumber( pn )
|
||||||
|
MEMCARDMAN->UnlockCard( pn );
|
||||||
// m_iCoins = 0; // don't reset coin count!
|
// m_iCoins = 0; // don't reset coin count!
|
||||||
m_MasterPlayerNumber = PLAYER_INVALID;
|
m_MasterPlayerNumber = PLAYER_INVALID;
|
||||||
m_bMultiplayer = false;
|
m_bMultiplayer = false;
|
||||||
@@ -331,6 +332,12 @@ void GameState::JoinPlayer( PlayerNumber pn )
|
|||||||
if( GetNumSidesJoined() == 1 )
|
if( GetNumSidesJoined() == 1 )
|
||||||
BeginGame();
|
BeginGame();
|
||||||
|
|
||||||
|
/* Count each player join as a play. */
|
||||||
|
{
|
||||||
|
Profile* pMachineProfile = PROFILEMAN->GetMachineProfile();
|
||||||
|
pMachineProfile->m_iTotalPlays++;
|
||||||
|
}
|
||||||
|
|
||||||
// Set the current style to something appropriate for the new number of joined players.
|
// Set the current style to something appropriate for the new number of joined players.
|
||||||
if( ALLOW_LATE_JOIN && GAMESTATE->m_pCurStyle != NULL )
|
if( ALLOW_LATE_JOIN && GAMESTATE->m_pCurStyle != NULL )
|
||||||
{
|
{
|
||||||
@@ -345,6 +352,8 @@ void GameState::JoinPlayer( PlayerNumber pn )
|
|||||||
|
|
||||||
void GameState::UnjoinPlayer( PlayerNumber pn )
|
void GameState::UnjoinPlayer( PlayerNumber pn )
|
||||||
{
|
{
|
||||||
|
PROFILEMAN->UnloadProfile( pn );
|
||||||
|
|
||||||
m_bSideIsJoined[pn] = false;
|
m_bSideIsJoined[pn] = false;
|
||||||
m_iPlayerCurrentStageIndexForCurrentCredit[pn] = 0;
|
m_iPlayerCurrentStageIndexForCurrentCredit[pn] = 0;
|
||||||
|
|
||||||
@@ -399,7 +408,7 @@ int GameState::GetCoinsNeededToJoin() const
|
|||||||
*
|
*
|
||||||
* BeginGame() - the first player has joined; the game is starting.
|
* BeginGame() - the first player has joined; the game is starting.
|
||||||
*
|
*
|
||||||
* PlayersFinalized() - no more players may join (because the style is set)
|
* PlayersFinalized() - player memory cards are loaded; later joins won't have memory cards this stage
|
||||||
*
|
*
|
||||||
* BeginStage() - gameplay is beginning
|
* BeginStage() - gameplay is beginning
|
||||||
*
|
*
|
||||||
@@ -425,30 +434,82 @@ void GameState::BeginGame()
|
|||||||
// even if attract sounds are set to off.
|
// even if attract sounds are set to off.
|
||||||
m_iNumTimesThroughAttract = -1;
|
m_iNumTimesThroughAttract = -1;
|
||||||
|
|
||||||
MEMCARDMAN->UnlockCards();
|
FOREACH_PlayerNumber( pn )
|
||||||
|
MEMCARDMAN->UnlockCard( pn );
|
||||||
}
|
}
|
||||||
|
|
||||||
void GameState::PlayersFinalized()
|
void GameState::LoadProfiles()
|
||||||
{
|
{
|
||||||
// If cards are already locked, this was already called.
|
/* Unlock any cards that we might want to load. */
|
||||||
if( MEMCARDMAN->GetCardsLocked() )
|
FOREACH_HumanPlayer( pn )
|
||||||
return;
|
if( !PROFILEMAN->IsPersistentProfile(pn) )
|
||||||
|
MEMCARDMAN->UnlockCard( pn );
|
||||||
|
|
||||||
MEMCARDMAN->LockCards();
|
MEMCARDMAN->WaitForCheckingToComplete();
|
||||||
|
|
||||||
|
FOREACH_PlayerNumber( pn )
|
||||||
|
MEMCARDMAN->LockCard( pn );
|
||||||
|
|
||||||
// apply saved default modifiers if any
|
|
||||||
FOREACH_HumanPlayer( pn )
|
FOREACH_HumanPlayer( pn )
|
||||||
{
|
{
|
||||||
|
// If a profile is already loaded, this was already called.
|
||||||
|
if( PROFILEMAN->IsPersistentProfile(pn) )
|
||||||
|
continue;
|
||||||
|
|
||||||
MEMCARDMAN->MountCard( pn );
|
MEMCARDMAN->MountCard( pn );
|
||||||
|
|
||||||
PROFILEMAN->LoadFirstAvailableProfile( pn ); // load full profile
|
PROFILEMAN->LoadFirstAvailableProfile( pn ); // load full profile
|
||||||
|
|
||||||
MEMCARDMAN->UnmountCard( pn );
|
MEMCARDMAN->UnmountCard( pn );
|
||||||
|
|
||||||
LoadCurrentSettingsFromProfile( pn );
|
LoadCurrentSettingsFromProfile( pn );
|
||||||
|
|
||||||
|
Profile* pPlayerProfile = PROFILEMAN->GetProfile( pn );
|
||||||
|
if( pPlayerProfile )
|
||||||
|
pPlayerProfile->m_iTotalPlays++;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void GameState::SaveProfiles()
|
||||||
|
{
|
||||||
|
FOREACH_HumanPlayer( pn )
|
||||||
|
{
|
||||||
|
if( !PROFILEMAN->IsPersistentProfile(pn) )
|
||||||
|
continue;
|
||||||
|
|
||||||
|
bool bWasMemoryCard = PROFILEMAN->ProfileWasLoadedFromMemoryCard(pn);
|
||||||
|
if( bWasMemoryCard )
|
||||||
|
MEMCARDMAN->MountCard( pn );
|
||||||
|
PROFILEMAN->SaveProfile( pn );
|
||||||
|
if( bWasMemoryCard )
|
||||||
|
MEMCARDMAN->UnmountCard( pn );
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
bool GameState::HaveProfileToLoad()
|
||||||
|
{
|
||||||
|
FOREACH_HumanPlayer( pn )
|
||||||
|
{
|
||||||
|
/* We won't load this profile if it's already loaded. */
|
||||||
|
if( PROFILEMAN->IsPersistentProfile(pn) )
|
||||||
|
continue;
|
||||||
|
|
||||||
|
/* If a memory card is inserted, we'l try to load it. */
|
||||||
|
if( MEMCARDMAN->CardInserted(pn) )
|
||||||
|
return true;
|
||||||
|
if( !PROFILEMAN->m_sDefaultLocalProfileID[pn].Get().empty() )
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
bool GameState::HaveProfileToSave()
|
||||||
|
{
|
||||||
|
FOREACH_HumanPlayer( pn )
|
||||||
|
if( PROFILEMAN->IsPersistentProfile(pn) )
|
||||||
|
return true;
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
void GameState::EndGame()
|
void GameState::EndGame()
|
||||||
{
|
{
|
||||||
LOG->Trace( "GameState::EndGame" );
|
LOG->Trace( "GameState::EndGame" );
|
||||||
@@ -463,34 +524,21 @@ void GameState::EndGame()
|
|||||||
|
|
||||||
Profile* pMachineProfile = PROFILEMAN->GetMachineProfile();
|
Profile* pMachineProfile = PROFILEMAN->GetMachineProfile();
|
||||||
pMachineProfile->m_iTotalPlaySeconds += iPlaySeconds;
|
pMachineProfile->m_iTotalPlaySeconds += iPlaySeconds;
|
||||||
pMachineProfile->m_iTotalPlays++;
|
|
||||||
|
|
||||||
FOREACH_HumanPlayer( p )
|
FOREACH_HumanPlayer( p )
|
||||||
{
|
{
|
||||||
Profile* pPlayerProfile = PROFILEMAN->GetProfile( p );
|
Profile* pPlayerProfile = PROFILEMAN->GetProfile( p );
|
||||||
if( pPlayerProfile )
|
if( pPlayerProfile )
|
||||||
{
|
|
||||||
pPlayerProfile->m_iTotalPlaySeconds += iPlaySeconds;
|
pPlayerProfile->m_iTotalPlaySeconds += iPlaySeconds;
|
||||||
pPlayerProfile->m_iTotalPlays++;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
BOOKKEEPER->WriteToDisk();
|
BOOKKEEPER->WriteToDisk();
|
||||||
|
|
||||||
|
SaveProfiles();
|
||||||
|
|
||||||
FOREACH_HumanPlayer( pn )
|
FOREACH_HumanPlayer( pn )
|
||||||
{
|
UnjoinPlayer( pn );
|
||||||
if( !PROFILEMAN->IsPersistentProfile(pn) )
|
|
||||||
continue;
|
|
||||||
|
|
||||||
bool bWasMemoryCard = PROFILEMAN->ProfileWasLoadedFromMemoryCard(pn);
|
|
||||||
if( bWasMemoryCard )
|
|
||||||
MEMCARDMAN->MountCard( pn );
|
|
||||||
PROFILEMAN->SaveProfile( pn );
|
|
||||||
if( bWasMemoryCard )
|
|
||||||
MEMCARDMAN->UnmountCard( pn );
|
|
||||||
|
|
||||||
PROFILEMAN->UnloadProfile( pn );
|
|
||||||
}
|
|
||||||
|
|
||||||
PROFILEMAN->SaveMachineProfile();
|
PROFILEMAN->SaveMachineProfile();
|
||||||
|
|
||||||
@@ -668,6 +716,7 @@ void GameState::LoadCurrentSettingsFromProfile( PlayerNumber pn )
|
|||||||
|
|
||||||
const Profile *pProfile = PROFILEMAN->GetProfile(pn);
|
const Profile *pProfile = PROFILEMAN->GetProfile(pn);
|
||||||
|
|
||||||
|
// apply saved default modifiers if any
|
||||||
RString sModifiers;
|
RString sModifiers;
|
||||||
if( pProfile->GetDefaultModifiers( m_pCurGame, sModifiers ) )
|
if( pProfile->GetDefaultModifiers( m_pCurGame, sModifiers ) )
|
||||||
{
|
{
|
||||||
|
|||||||
@@ -43,7 +43,10 @@ public:
|
|||||||
void JoinPlayer( PlayerNumber pn );
|
void JoinPlayer( PlayerNumber pn );
|
||||||
void UnjoinPlayer( PlayerNumber pn );
|
void UnjoinPlayer( PlayerNumber pn );
|
||||||
bool JoinInput( PlayerNumber pn );
|
bool JoinInput( PlayerNumber pn );
|
||||||
void PlayersFinalized(); // called after a style is chosen, which means the number of players is finalized
|
void LoadProfiles();
|
||||||
|
void SaveProfiles();
|
||||||
|
bool HaveProfileToLoad();
|
||||||
|
bool HaveProfileToSave();
|
||||||
void EndGame(); // called on ScreenGameOver, ScreenMusicScroll, ScreenCredits
|
void EndGame(); // called on ScreenGameOver, ScreenMusicScroll, ScreenCredits
|
||||||
void LoadCurrentSettingsFromProfile( PlayerNumber pn );
|
void LoadCurrentSettingsFromProfile( PlayerNumber pn );
|
||||||
void SaveCurrentSettingsToProfile( PlayerNumber pn ); // called at the beginning of each stage
|
void SaveCurrentSettingsToProfile( PlayerNumber pn ); // called at the beginning of each stage
|
||||||
|
|||||||
@@ -270,9 +270,9 @@ MemoryCardManager::MemoryCardManager()
|
|||||||
|
|
||||||
g_pWorker = new ThreadedMemoryCardWorker;
|
g_pWorker = new ThreadedMemoryCardWorker;
|
||||||
|
|
||||||
m_bCardsLocked = false;
|
|
||||||
FOREACH_PlayerNumber( p )
|
FOREACH_PlayerNumber( p )
|
||||||
{
|
{
|
||||||
|
m_bCardLocked[p] = false;
|
||||||
m_bMounted[p] = false;
|
m_bMounted[p] = false;
|
||||||
m_State[p] = MemoryCardState_NoCard;
|
m_State[p] = MemoryCardState_NoCard;
|
||||||
}
|
}
|
||||||
@@ -414,7 +414,7 @@ void MemoryCardManager::CheckStateChanges()
|
|||||||
MemoryCardState state = MemoryCardState_Invalid;
|
MemoryCardState state = MemoryCardState_Invalid;
|
||||||
RString sError;
|
RString sError;
|
||||||
|
|
||||||
if( m_bCardsLocked )
|
if( m_bCardLocked[p] )
|
||||||
{
|
{
|
||||||
if( m_FinalDevice[p].m_State == UsbStorageDevice::STATE_NONE )
|
if( m_FinalDevice[p].m_State == UsbStorageDevice::STATE_NONE )
|
||||||
{
|
{
|
||||||
@@ -500,11 +500,8 @@ void MemoryCardManager::CheckStateChanges()
|
|||||||
SCREENMAN->RefreshCreditsMessages();
|
SCREENMAN->RefreshCreditsMessages();
|
||||||
}
|
}
|
||||||
|
|
||||||
void MemoryCardManager::LockCards()
|
void MemoryCardManager::WaitForCheckingToComplete()
|
||||||
{
|
{
|
||||||
if( m_bCardsLocked )
|
|
||||||
return;
|
|
||||||
|
|
||||||
g_pWorker->SetTimeout( 5 );
|
g_pWorker->SetTimeout( 5 );
|
||||||
|
|
||||||
/* If either player's card is in STATE_CHECKING, we need to give it a chance
|
/* If either player's card is in STATE_CHECKING, we need to give it a chance
|
||||||
@@ -538,27 +535,36 @@ void MemoryCardManager::LockCards()
|
|||||||
}
|
}
|
||||||
|
|
||||||
g_pWorker->SetTimeout( -1 );
|
g_pWorker->SetTimeout( -1 );
|
||||||
|
}
|
||||||
|
|
||||||
|
bool MemoryCardManager::CardInserted( PlayerNumber pn )
|
||||||
|
{
|
||||||
|
return m_Device[pn].m_State == UsbStorageDevice::STATE_CHECKING ||
|
||||||
|
m_Device[pn].m_State == UsbStorageDevice::STATE_READY;
|
||||||
|
}
|
||||||
|
|
||||||
|
void MemoryCardManager::LockCard( PlayerNumber pn )
|
||||||
|
{
|
||||||
|
if( m_bCardLocked[pn] )
|
||||||
|
return;
|
||||||
|
|
||||||
/* Set the final state. */
|
/* Set the final state. */
|
||||||
CheckStateChanges();
|
CheckStateChanges();
|
||||||
|
|
||||||
FOREACH_PlayerNumber( p )
|
|
||||||
{
|
|
||||||
/* If the card in this player's slot is ready, then use it. If there is
|
/* If the card in this player's slot is ready, then use it. If there is
|
||||||
* no card ready when we finalize, clear m_FinalDevice. */
|
* no card ready when we finalize, clear m_FinalDevice. */
|
||||||
if( m_Device[p].m_State == UsbStorageDevice::STATE_READY )
|
if( m_Device[pn].m_State == UsbStorageDevice::STATE_READY )
|
||||||
m_FinalDevice[p] = m_Device[p];
|
m_FinalDevice[pn] = m_Device[pn];
|
||||||
else
|
else
|
||||||
m_FinalDevice[p] = UsbStorageDevice();
|
m_FinalDevice[pn] = UsbStorageDevice();
|
||||||
}
|
|
||||||
|
|
||||||
/* Set this last, since it changes the behavior of CheckStateChanges. */
|
/* Set this last, since it changes the behavior of CheckStateChanges. */
|
||||||
m_bCardsLocked = true;
|
m_bCardLocked[pn] = true;
|
||||||
}
|
}
|
||||||
|
|
||||||
void MemoryCardManager::UnlockCards()
|
void MemoryCardManager::UnlockCard( PlayerNumber pn )
|
||||||
{
|
{
|
||||||
m_bCardsLocked = false;
|
m_bCardLocked[pn] = false;
|
||||||
|
|
||||||
g_pWorker->SetMountThreadState( ThreadedMemoryCardWorker::detect_and_mount );
|
g_pWorker->SetMountThreadState( ThreadedMemoryCardWorker::detect_and_mount );
|
||||||
|
|
||||||
|
|||||||
@@ -21,8 +21,10 @@ public:
|
|||||||
MemoryCardState GetCardState( PlayerNumber pn ) const { return m_State[pn]; }
|
MemoryCardState GetCardState( PlayerNumber pn ) const { return m_State[pn]; }
|
||||||
RString GetCardError( PlayerNumber pn ) const { return m_sError[pn]; }
|
RString GetCardError( PlayerNumber pn ) const { return m_sError[pn]; }
|
||||||
|
|
||||||
void LockCards(); // prevent removing or changing of memory cards
|
void WaitForCheckingToComplete();
|
||||||
void UnlockCards();
|
bool CardInserted( PlayerNumber pn );
|
||||||
|
void LockCard( PlayerNumber pn ); // prevent removing or changing of memory card
|
||||||
|
void UnlockCard( PlayerNumber pn );
|
||||||
bool MountCard( PlayerNumber pn, int iTimeout = 10 );
|
bool MountCard( PlayerNumber pn, int iTimeout = 10 );
|
||||||
bool MountCard( PlayerNumber pn, const UsbStorageDevice &d, int iTimeout = 10 );
|
bool MountCard( PlayerNumber pn, const UsbStorageDevice &d, int iTimeout = 10 );
|
||||||
void UnmountCard( PlayerNumber pn );
|
void UnmountCard( PlayerNumber pn );
|
||||||
@@ -33,7 +35,7 @@ public:
|
|||||||
void PauseMountingThread( int iTimeout = 20 );
|
void PauseMountingThread( int iTimeout = 20 );
|
||||||
void UnPauseMountingThread();
|
void UnPauseMountingThread();
|
||||||
|
|
||||||
bool GetCardsLocked() const { return m_bCardsLocked; }
|
bool GetCardLocked( PlayerNumber pn ) const { return m_bCardLocked[pn]; }
|
||||||
|
|
||||||
bool PathIsMemCard( RString sDir ) const;
|
bool PathIsMemCard( RString sDir ) const;
|
||||||
|
|
||||||
@@ -58,7 +60,7 @@ protected:
|
|||||||
|
|
||||||
vector<UsbStorageDevice> m_vStorageDevices; // all currently connected
|
vector<UsbStorageDevice> m_vStorageDevices; // all currently connected
|
||||||
|
|
||||||
bool m_bCardsLocked;
|
bool m_bCardLocked[NUM_PLAYERS];
|
||||||
bool m_bMounted[NUM_PLAYERS]; // card is currently mounted
|
bool m_bMounted[NUM_PLAYERS]; // card is currently mounted
|
||||||
|
|
||||||
UsbStorageDevice m_Device[NUM_PLAYERS]; // device in the memory card slot, blank if none
|
UsbStorageDevice m_Device[NUM_PLAYERS]; // device in the memory card slot, blank if none
|
||||||
|
|||||||
@@ -0,0 +1,89 @@
|
|||||||
|
#include "global.h"
|
||||||
|
#include "ScreenProfileLoad.h"
|
||||||
|
#include "GameState.h"
|
||||||
|
#include "MemoryCardManager.h"
|
||||||
|
#include "ScreenManager.h"
|
||||||
|
|
||||||
|
REGISTER_SCREEN_CLASS( ScreenProfileLoad );
|
||||||
|
|
||||||
|
void ScreenProfileLoad::BeginScreen()
|
||||||
|
{
|
||||||
|
m_bHaveProfileToLoad = GAMESTATE->HaveProfileToLoad();
|
||||||
|
if( !m_bHaveProfileToLoad )
|
||||||
|
{
|
||||||
|
/* We have nothing to load, so just lock the cards. */
|
||||||
|
FOREACH_PlayerNumber( pn )
|
||||||
|
MEMCARDMAN->LockCard( pn );
|
||||||
|
}
|
||||||
|
|
||||||
|
ScreenWithMenuElements::BeginScreen();
|
||||||
|
}
|
||||||
|
|
||||||
|
void ScreenProfileLoad::Input( const InputEventPlus &input )
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
|
void ScreenProfileLoad::Continue()
|
||||||
|
{
|
||||||
|
if( m_bHaveProfileToLoad )
|
||||||
|
{
|
||||||
|
GAMESTATE->LoadProfiles();
|
||||||
|
SCREENMAN->ZeroNextUpdate();
|
||||||
|
}
|
||||||
|
|
||||||
|
StartTransitioningScreen( SM_GoToNextScreen );
|
||||||
|
}
|
||||||
|
|
||||||
|
// lua start
|
||||||
|
#include "LuaBinding.h"
|
||||||
|
|
||||||
|
class LunaScreenProfileLoad: public Luna<ScreenProfileLoad>
|
||||||
|
{
|
||||||
|
public:
|
||||||
|
static int Continue( T* p, lua_State *L )
|
||||||
|
{
|
||||||
|
LUA->YieldLua();
|
||||||
|
p->Continue();
|
||||||
|
LUA->UnyieldLua();
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
static int HaveProfileToLoad( T* p, lua_State *L )
|
||||||
|
{
|
||||||
|
LuaHelpers::Push( L, p->m_bHaveProfileToLoad );
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
LunaScreenProfileLoad()
|
||||||
|
{
|
||||||
|
ADD_METHOD( Continue );
|
||||||
|
ADD_METHOD( HaveProfileToLoad );
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
LUA_REGISTER_DERIVED_CLASS( ScreenProfileLoad, ScreenWithMenuElements )
|
||||||
|
// lua end
|
||||||
|
|
||||||
|
/*
|
||||||
|
* (c) 2007 Glenn Maynard
|
||||||
|
* All rights reserved.
|
||||||
|
*
|
||||||
|
* Permission is hereby granted, free of charge, to any person obtaining a
|
||||||
|
* copy of this software and associated documentation files (the
|
||||||
|
* "Software"), to deal in the Software without restriction, including
|
||||||
|
* without limitation the rights to use, copy, modify, merge, publish,
|
||||||
|
* distribute, and/or sell copies of the Software, and to permit persons to
|
||||||
|
* whom the Software is furnished to do so, provided that the above
|
||||||
|
* copyright notice(s) and this permission notice appear in all copies of
|
||||||
|
* the Software and that both the above copyright notice(s) and this
|
||||||
|
* permission notice appear in supporting documentation.
|
||||||
|
*
|
||||||
|
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
|
||||||
|
* OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
|
||||||
|
* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT OF
|
||||||
|
* THIRD PARTY RIGHTS. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR HOLDERS
|
||||||
|
* INCLUDED IN THIS NOTICE BE LIABLE FOR ANY CLAIM, OR ANY SPECIAL INDIRECT
|
||||||
|
* OR CONSEQUENTIAL DAMAGES, OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS
|
||||||
|
* OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR
|
||||||
|
* OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
|
||||||
|
* PERFORMANCE OF THIS SOFTWARE.
|
||||||
|
*/
|
||||||
@@ -0,0 +1,43 @@
|
|||||||
|
#ifndef SCREEN_PROFILE_LOAD_H
|
||||||
|
#define SCREEN_PROFILE_LOAD_H
|
||||||
|
|
||||||
|
#include "ScreenWithMenuElements.h"
|
||||||
|
|
||||||
|
class ScreenProfileLoad: public ScreenWithMenuElements
|
||||||
|
{
|
||||||
|
public:
|
||||||
|
virtual void BeginScreen();
|
||||||
|
virtual void Input( const InputEventPlus &input );
|
||||||
|
void Continue();
|
||||||
|
|
||||||
|
virtual void PushSelf( lua_State *L );
|
||||||
|
|
||||||
|
bool m_bHaveProfileToLoad;
|
||||||
|
};
|
||||||
|
|
||||||
|
#endif
|
||||||
|
|
||||||
|
/*
|
||||||
|
* (c) 2007 Glenn Maynard
|
||||||
|
* All rights reserved.
|
||||||
|
*
|
||||||
|
* Permission is hereby granted, free of charge, to any person obtaining a
|
||||||
|
* copy of this software and associated documentation files (the
|
||||||
|
* "Software"), to deal in the Software without restriction, including
|
||||||
|
* without limitation the rights to use, copy, modify, merge, publish,
|
||||||
|
* distribute, and/or sell copies of the Software, and to permit persons to
|
||||||
|
* whom the Software is furnished to do so, provided that the above
|
||||||
|
* copyright notice(s) and this permission notice appear in all copies of
|
||||||
|
* the Software and that both the above copyright notice(s) and this
|
||||||
|
* permission notice appear in supporting documentation.
|
||||||
|
*
|
||||||
|
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
|
||||||
|
* OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
|
||||||
|
* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT OF
|
||||||
|
* THIRD PARTY RIGHTS. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR HOLDERS
|
||||||
|
* INCLUDED IN THIS NOTICE BE LIABLE FOR ANY CLAIM, OR ANY SPECIAL INDIRECT
|
||||||
|
* OR CONSEQUENTIAL DAMAGES, OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS
|
||||||
|
* OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR
|
||||||
|
* OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
|
||||||
|
* PERFORMANCE OF THIS SOFTWARE.
|
||||||
|
*/
|
||||||
@@ -0,0 +1,77 @@
|
|||||||
|
#include "global.h"
|
||||||
|
#include "ScreenProfileSave.h"
|
||||||
|
#include "GameState.h"
|
||||||
|
#include "ScreenManager.h"
|
||||||
|
|
||||||
|
REGISTER_SCREEN_CLASS( ScreenProfileSave );
|
||||||
|
|
||||||
|
void ScreenProfileSave::BeginScreen()
|
||||||
|
{
|
||||||
|
ScreenWithMenuElements::BeginScreen();
|
||||||
|
}
|
||||||
|
|
||||||
|
void ScreenProfileSave::Input( const InputEventPlus &input )
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
|
void ScreenProfileSave::Continue()
|
||||||
|
{
|
||||||
|
GAMESTATE->SaveProfiles();
|
||||||
|
SCREENMAN->ZeroNextUpdate();
|
||||||
|
|
||||||
|
StartTransitioningScreen( SM_GoToNextScreen );
|
||||||
|
}
|
||||||
|
|
||||||
|
// lua start
|
||||||
|
#include "LuaBinding.h"
|
||||||
|
|
||||||
|
class LunaScreenProfileSave: public Luna<ScreenProfileSave>
|
||||||
|
{
|
||||||
|
public:
|
||||||
|
static int Continue( T* p, lua_State *L )
|
||||||
|
{
|
||||||
|
LUA->YieldLua();
|
||||||
|
p->Continue();
|
||||||
|
LUA->UnyieldLua();
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
static int HaveProfileToSave( T* p, lua_State *L )
|
||||||
|
{
|
||||||
|
LuaHelpers::Push( L, GAMESTATE->HaveProfileToSave() );
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
LunaScreenProfileSave()
|
||||||
|
{
|
||||||
|
ADD_METHOD( Continue );
|
||||||
|
ADD_METHOD( HaveProfileToSave );
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
LUA_REGISTER_DERIVED_CLASS( ScreenProfileSave, ScreenWithMenuElements )
|
||||||
|
// lua end
|
||||||
|
|
||||||
|
/*
|
||||||
|
* (c) 2007 Glenn Maynard
|
||||||
|
* All rights reserved.
|
||||||
|
*
|
||||||
|
* Permission is hereby granted, free of charge, to any person obtaining a
|
||||||
|
* copy of this software and associated documentation files (the
|
||||||
|
* "Software"), to deal in the Software without restriction, including
|
||||||
|
* without limitation the rights to use, copy, modify, merge, publish,
|
||||||
|
* distribute, and/or sell copies of the Software, and to permit persons to
|
||||||
|
* whom the Software is furnished to do so, provided that the above
|
||||||
|
* copyright notice(s) and this permission notice appear in all copies of
|
||||||
|
* the Software and that both the above copyright notice(s) and this
|
||||||
|
* permission notice appear in supporting documentation.
|
||||||
|
*
|
||||||
|
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
|
||||||
|
* OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
|
||||||
|
* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT OF
|
||||||
|
* THIRD PARTY RIGHTS. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR HOLDERS
|
||||||
|
* INCLUDED IN THIS NOTICE BE LIABLE FOR ANY CLAIM, OR ANY SPECIAL INDIRECT
|
||||||
|
* OR CONSEQUENTIAL DAMAGES, OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS
|
||||||
|
* OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR
|
||||||
|
* OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
|
||||||
|
* PERFORMANCE OF THIS SOFTWARE.
|
||||||
|
*/
|
||||||
@@ -0,0 +1,41 @@
|
|||||||
|
#ifndef SCREEN_PROFILE_SAVE_H
|
||||||
|
#define SCREEN_PROFILE_SAVE_H
|
||||||
|
|
||||||
|
#include "ScreenWithMenuElements.h"
|
||||||
|
|
||||||
|
class ScreenProfileSave: public ScreenWithMenuElements
|
||||||
|
{
|
||||||
|
public:
|
||||||
|
virtual void BeginScreen();
|
||||||
|
virtual void Input( const InputEventPlus &input );
|
||||||
|
void Continue();
|
||||||
|
|
||||||
|
virtual void PushSelf( lua_State *L );
|
||||||
|
};
|
||||||
|
|
||||||
|
#endif
|
||||||
|
|
||||||
|
/*
|
||||||
|
* (c) 2007 Glenn Maynard
|
||||||
|
* All rights reserved.
|
||||||
|
*
|
||||||
|
* Permission is hereby granted, free of charge, to any person obtaining a
|
||||||
|
* copy of this software and associated documentation files (the
|
||||||
|
* "Software"), to deal in the Software without restriction, including
|
||||||
|
* without limitation the rights to use, copy, modify, merge, publish,
|
||||||
|
* distribute, and/or sell copies of the Software, and to permit persons to
|
||||||
|
* whom the Software is furnished to do so, provided that the above
|
||||||
|
* copyright notice(s) and this permission notice appear in all copies of
|
||||||
|
* the Software and that both the above copyright notice(s) and this
|
||||||
|
* permission notice appear in supporting documentation.
|
||||||
|
*
|
||||||
|
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
|
||||||
|
* OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
|
||||||
|
* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT OF
|
||||||
|
* THIRD PARTY RIGHTS. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR HOLDERS
|
||||||
|
* INCLUDED IN THIS NOTICE BE LIABLE FOR ANY CLAIM, OR ANY SPECIAL INDIRECT
|
||||||
|
* OR CONSEQUENTIAL DAMAGES, OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS
|
||||||
|
* OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR
|
||||||
|
* OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
|
||||||
|
* PERFORMANCE OF THIS SOFTWARE.
|
||||||
|
*/
|
||||||
Reference in New Issue
Block a user