diff --git a/RetroFE/Source/Execute/AttractMode.cpp b/RetroFE/Source/Execute/AttractMode.cpp index 1c32ac1..9a9b82f 100644 --- a/RetroFE/Source/Execute/AttractMode.cpp +++ b/RetroFE/Source/Execute/AttractMode.cpp @@ -25,6 +25,7 @@ AttractMode::AttractMode() , isSet_(false) , elapsedTime_(0) , elapsedPlaylistTime_(0) + , elapsedCollectionTime_(0) , activeTime_(0) { } @@ -36,20 +37,35 @@ void AttractMode::reset( bool set ) isSet_ = set; activeTime_ = 0; if (!set) - elapsedPlaylistTime_ = 0; + { + elapsedPlaylistTime_ = 0; + elapsedCollectionTime_ = 0; + } } -bool AttractMode::update(float dt, Page &page) +int AttractMode::update(float dt, Page &page) { - elapsedTime_ += dt; - elapsedPlaylistTime_ += dt; + elapsedTime_ += dt; + elapsedPlaylistTime_ += dt; + elapsedCollectionTime_ += dt; // Check if it's time to switch playlists if (!isActive_ && elapsedPlaylistTime_ > idlePlaylistTime && idlePlaylistTime > 0) { + elapsedTime_ = 0; elapsedPlaylistTime_ = 0; - return true; + return 1; + } + + + // Check if it's time to switch collections + if (!isActive_ && elapsedCollectionTime_ > idleCollectionTime && idleCollectionTime > 0) + { + elapsedTime_ = 0; + elapsedPlaylistTime_ = 0; + elapsedCollectionTime_ = 0; + return 2; } @@ -81,7 +97,7 @@ bool AttractMode::update(float dt, Page &page) } } - return false; + return 0; } diff --git a/RetroFE/Source/Execute/AttractMode.h b/RetroFE/Source/Execute/AttractMode.h index e11afa7..e96e74a 100644 --- a/RetroFE/Source/Execute/AttractMode.h +++ b/RetroFE/Source/Execute/AttractMode.h @@ -22,10 +22,11 @@ class AttractMode public: AttractMode(); void reset( bool set = false ); - bool update(float dt, Page &page); + int update(float dt, Page &page); float idleTime; float idleNextTime; float idlePlaylistTime; + float idleCollectionTime; bool isActive(); bool isSet(); @@ -34,5 +35,6 @@ private: bool isSet_; float elapsedTime_; float elapsedPlaylistTime_; + float elapsedCollectionTime_; float activeTime_; }; diff --git a/RetroFE/Source/RetroFE.cpp b/RetroFE/Source/RetroFE.cpp index d0885aa..9902fae 100644 --- a/RetroFE/Source/RetroFE.cpp +++ b/RetroFE/Source/RetroFE.cpp @@ -302,21 +302,24 @@ void RetroFE::run( ) return; } - int attractModeTime = 0; - int attractModeNextTime = 0; - int attractModePlaylistTime = 0; - std::string firstCollection = "Main"; - bool running = true; - RETROFE_STATE state = RETROFE_NEW; + int attractModeTime = 0; + int attractModeNextTime = 0; + int attractModePlaylistTime = 0; + int attractModeCollectionTime = 0; + std::string firstCollection = "Main"; + bool running = true; + RETROFE_STATE state = RETROFE_NEW; config_.getProperty( "attractModeTime", attractModeTime ); config_.getProperty( "attractModeNextTime", attractModeNextTime ); config_.getProperty( "attractModePlaylistTime", attractModePlaylistTime ); + config_.getProperty( "attractModeCollectionTime", attractModeCollectionTime ); config_.getProperty( "firstCollection", firstCollection ); - attract_.idleTime = static_cast(attractModeTime); - attract_.idleNextTime = static_cast(attractModeNextTime); - attract_.idlePlaylistTime = static_cast(attractModePlaylistTime); + attract_.idleTime = static_cast(attractModeTime); + attract_.idleNextTime = static_cast(attractModeNextTime); + attract_.idlePlaylistTime = static_cast(attractModePlaylistTime); + attract_.idleCollectionTime = static_cast(attractModeCollectionTime); int initializeStatus = 0; @@ -761,28 +764,40 @@ void RetroFE::run( ) case RETROFE_COLLECTION_UP_SCROLL: if ( currentPage_->isMenuIdle( ) ) { - RETROFE_STATE state_tmp = processUserInput( currentPage_ ); - if ( state_tmp == RETROFE_COLLECTION_UP_REQUEST ) + std::string attractModeSkipCollection = ""; + config_.getProperty( "attractModeSkipCollection", attractModeSkipCollection ); + // Check if we need to skip this collection in attract mode or if we can select it + if ( attractMode_ && currentPage_->getSelectedItem( )->name == attractModeSkipCollection ) { - state = RETROFE_COLLECTION_UP_REQUEST; - } - else if ( state_tmp == RETROFE_COLLECTION_DOWN_REQUEST ) - { - state = RETROFE_COLLECTION_DOWN_REQUEST; + currentPage_->setScrolling(Page::ScrollDirectionForward); + currentPage_->scroll(true); + currentPage_->updateScrollPeriod( ); } else { - currentPage_->setScrolling(Page::ScrollDirectionIdle); // Stop scrolling - nextPageItem_ = currentPage_->getSelectedItem( ); - bool enterOnCollection = true; - config_.getProperty( "enterOnCollection", enterOnCollection ); - if ( currentPage_->getSelectedItem( )->leaf || !enterOnCollection ) // Current selection is a game or enterOnCollection is not set + RETROFE_STATE state_tmp = processUserInput( currentPage_ ); + if ( state_tmp == RETROFE_COLLECTION_UP_REQUEST ) { - state = RETROFE_HIGHLIGHT_REQUEST; + state = RETROFE_COLLECTION_UP_REQUEST; } - else // Current selection is a menu + else if ( state_tmp == RETROFE_COLLECTION_DOWN_REQUEST ) { - state = RETROFE_COLLECTION_HIGHLIGHT_EXIT; + state = RETROFE_COLLECTION_DOWN_REQUEST; + } + else + { + currentPage_->setScrolling(Page::ScrollDirectionIdle); // Stop scrolling + nextPageItem_ = currentPage_->getSelectedItem( ); + bool enterOnCollection = true; + config_.getProperty( "enterOnCollection", enterOnCollection ); + if ( currentPage_->getSelectedItem( )->leaf || !enterOnCollection ) // Current selection is a game or enterOnCollection is not set + { + state = RETROFE_HIGHLIGHT_REQUEST; + } + else // Current selection is a menu + { + state = RETROFE_COLLECTION_HIGHLIGHT_EXIT; + } } } } @@ -1178,7 +1193,8 @@ void RetroFE::run( ) { if (!splashMode) { - if (attract_.update( deltaTime, *currentPage_ )) + int attractReturn = attract_.update( deltaTime, *currentPage_ ); + if (attractReturn == 1) // Change playlist { attract_.reset( attract_.isSet( ) ); currentPage_->nextPlaylist( ); @@ -1188,6 +1204,11 @@ void RetroFE::run( ) currentPage_->nextPlaylist( ); state = RETROFE_PLAYLIST_REQUEST; } + if (attractReturn == 2) // Change collection + { + attract_.reset( attract_.isSet( ) ); + state = RETROFE_COLLECTION_UP_REQUEST; + } } if ( menuMode_ ) { diff --git a/RetroFE/Source/Version.cpp b/RetroFE/Source/Version.cpp index 09aa89b..c2f51d8 100644 --- a/RetroFE/Source/Version.cpp +++ b/RetroFE/Source/Version.cpp @@ -21,7 +21,7 @@ std::string retrofe_version_major = "0"; std::string retrofe_version_minor = "9"; -std::string retrofe_version_build = "11"; +std::string retrofe_version_build = "12"; std::string Version::getString( )