Refactored Attract Mode into its own class.

This commit is contained in:
emb 2015-01-01 17:26:02 -06:00
parent 1a9fdabd63
commit b3ed451e4f
5 changed files with 78 additions and 27 deletions

View File

@ -83,6 +83,7 @@ set(RETROFE_HEADERS
"${RETROFE_DIR}/Source/Database/Configuration.h" "${RETROFE_DIR}/Source/Database/Configuration.h"
"${RETROFE_DIR}/Source/Database/DB.h" "${RETROFE_DIR}/Source/Database/DB.h"
"${RETROFE_DIR}/Source/Database/MamelistMetadata.h" "${RETROFE_DIR}/Source/Database/MamelistMetadata.h"
"${RETROFE_DIR}/Source/Execute/AttractMode.h"
"${RETROFE_DIR}/Source/Execute/Launcher.h" "${RETROFE_DIR}/Source/Execute/Launcher.h"
"${RETROFE_DIR}/Source/Graphics/Animate/Tween.h" "${RETROFE_DIR}/Source/Graphics/Animate/Tween.h"
"${RETROFE_DIR}/Source/Graphics/Animate/TweenTypes.h" "${RETROFE_DIR}/Source/Graphics/Animate/TweenTypes.h"
@ -124,6 +125,7 @@ set(RETROFE_SOURCES
"${RETROFE_DIR}/Source/Database/Configuration.cpp" "${RETROFE_DIR}/Source/Database/Configuration.cpp"
"${RETROFE_DIR}/Source/Database/DB.cpp" "${RETROFE_DIR}/Source/Database/DB.cpp"
"${RETROFE_DIR}/Source/Database/MamelistMetadata.cpp" "${RETROFE_DIR}/Source/Database/MamelistMetadata.cpp"
"${RETROFE_DIR}/Source/Execute/AttractMode.cpp"
"${RETROFE_DIR}/Source/Execute/Launcher.cpp" "${RETROFE_DIR}/Source/Execute/Launcher.cpp"
"${RETROFE_DIR}/Source/Graphics/Animate/Tween.cpp" "${RETROFE_DIR}/Source/Graphics/Animate/Tween.cpp"
"${RETROFE_DIR}/Source/Graphics/Font.cpp" "${RETROFE_DIR}/Source/Graphics/Font.cpp"

View File

@ -0,0 +1,49 @@
/* This file is subject to the terms and conditions defined in
* file 'LICENSE.txt', which is part of this source code package.
*/
#include "AttractMode.h"
#include "../Graphics/Page.h"
AttractMode::AttractMode()
: IsActive(false)
, ElapsedTime(0)
, ActiveTime(0)
, IdleTime(0)
{
}
void AttractMode::SetIdleTime(float time)
{
IdleTime = time;
}
void AttractMode::Reset()
{
ElapsedTime = 0;
IsActive = false;
ActiveTime = 0;
}
void AttractMode::Update(float dt, Page &page)
{
ElapsedTime += dt;
// enable attract mode when idling for the expected time. Disable if idle time is set to 0.
if(!IsActive && ElapsedTime > IdleTime && IdleTime > 0)
{
IsActive = true;
ElapsedTime = 0;
ActiveTime = ((float)((1000+rand()) % 5000)) / 1000;
}
if(IsActive)
{
page.SetScrolling(Page::ScrollDirectionForward);
if(ElapsedTime > ActiveTime)
{
ElapsedTime = 0;
IsActive = false;
page.SetScrolling(Page::ScrollDirectionIdle);
}
}
}

View File

@ -0,0 +1,22 @@
/* This file is subject to the terms and conditions defined in
* file 'LICENSE.txt', which is part of this source code package.
*/
#pragma once
class Page;
class AttractMode
{
public:
AttractMode();
void SetIdleTime(float time);
void Reset();
void Update(float dt, Page &page);
private:
bool IsActive;
float ElapsedTime;
float ActiveTime;
float IdleTime;
};

View File

@ -27,8 +27,6 @@ RetroFE::RetroFE(CollectionDatabase &db, Configuration &c)
, CollectionDB(db) , CollectionDB(db)
, Input(Config) , Input(Config)
, KeyInputDisable(0) , KeyInputDisable(0)
, InactiveKeyTime(0)
, AttractMode(false)
, CurrentTime(0) , CurrentTime(0)
, VideoInst(NULL) , VideoInst(NULL)
{ {
@ -159,7 +157,6 @@ void RetroFE::Run()
bool running = true; bool running = true;
Item *nextPageItem = NULL; Item *nextPageItem = NULL;
bool adminMode = false; bool adminMode = false;
float attractModeRandomTime = 0;
bool selectActive = false; bool selectActive = false;
float frameCount = 0; float frameCount = 0;
float fpsStartTime = 0; float fpsStartTime = 0;
@ -168,6 +165,7 @@ void RetroFE::Run()
Config.GetProperty("attractModeTime", attractModeTime); Config.GetProperty("attractModeTime", attractModeTime);
Config.GetProperty("firstCollection", firstCollection); Config.GetProperty("firstCollection", firstCollection);
Attract.SetIdleTime(static_cast<float>(attractModeTime));
LoadPage(firstCollection); LoadPage(firstCollection);
while (running) while (running)
@ -287,26 +285,7 @@ void RetroFE::Run()
frameCount = 0; frameCount = 0;
} }
InactiveKeyTime += deltaTime; Attract.Update(deltaTime, *page);
if(!AttractMode && InactiveKeyTime > attractModeTime && attractModeTime > 0)
{
AttractMode = true;
InactiveKeyTime = 0;
attractModeRandomTime = ((float)((1000+rand()) % 5000)) / 1000;
}
if(AttractMode)
{
page->SetScrolling(Page::ScrollDirectionForward);
if(InactiveKeyTime > attractModeRandomTime)
{
InactiveKeyTime = 0;
AttractMode = false;
page->SetScrolling(Page::ScrollDirectionIdle);
}
}
page->Update(deltaTime); page->Update(deltaTime);
Render(); Render();
@ -353,8 +332,7 @@ RetroFE::RETROFE_STATE RetroFE::ProcessUserInput(Page *page)
{ {
const Uint8 *keys = SDL_GetKeyboardState(NULL); const Uint8 *keys = SDL_GetKeyboardState(NULL);
InactiveKeyTime = 0; Attract.Reset();
AttractMode = false;
if (keys[Input.GetScancode(UserInput::KeyCodePreviousItem)]) if (keys[Input.GetScancode(UserInput::KeyCodePreviousItem)])
{ {

View File

@ -5,6 +5,7 @@
#include "Collection/Item.h" #include "Collection/Item.h"
#include "Control/UserInput.h" #include "Control/UserInput.h"
#include "Execute/AttractMode.h"
#include "Graphics/FontCache.h" #include "Graphics/FontCache.h"
#include "Video/IVideo.h" #include "Video/IVideo.h"
#include <SDL2/SDL.h> #include <SDL2/SDL.h>
@ -54,11 +55,10 @@ private:
UserInput Input; UserInput Input;
std::list<Page *> PageChain; std::list<Page *> PageChain;
float KeyInputDisable; float KeyInputDisable;
float InactiveKeyTime;
bool AttractMode;
float CurrentTime; float CurrentTime;
Item *NextPageItem; Item *NextPageItem;
FontCache FC; FontCache FC;
IVideo *VideoInst; IVideo *VideoInst;
AttractMode Attract;
}; };