mirror of
https://github.com/FunKey-Project/RetroFE.git
synced 2026-01-25 17:25:06 +01:00
Refactored Attract Mode into its own class.
This commit is contained in:
parent
1a9fdabd63
commit
b3ed451e4f
@ -83,6 +83,7 @@ set(RETROFE_HEADERS
|
||||
"${RETROFE_DIR}/Source/Database/Configuration.h"
|
||||
"${RETROFE_DIR}/Source/Database/DB.h"
|
||||
"${RETROFE_DIR}/Source/Database/MamelistMetadata.h"
|
||||
"${RETROFE_DIR}/Source/Execute/AttractMode.h"
|
||||
"${RETROFE_DIR}/Source/Execute/Launcher.h"
|
||||
"${RETROFE_DIR}/Source/Graphics/Animate/Tween.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/DB.cpp"
|
||||
"${RETROFE_DIR}/Source/Database/MamelistMetadata.cpp"
|
||||
"${RETROFE_DIR}/Source/Execute/AttractMode.cpp"
|
||||
"${RETROFE_DIR}/Source/Execute/Launcher.cpp"
|
||||
"${RETROFE_DIR}/Source/Graphics/Animate/Tween.cpp"
|
||||
"${RETROFE_DIR}/Source/Graphics/Font.cpp"
|
||||
|
||||
49
Source/Execute/AttractMode.cpp
Normal file
49
Source/Execute/AttractMode.cpp
Normal 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);
|
||||
}
|
||||
}
|
||||
}
|
||||
22
Source/Execute/AttractMode.h
Normal file
22
Source/Execute/AttractMode.h
Normal 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;
|
||||
|
||||
};
|
||||
@ -27,8 +27,6 @@ RetroFE::RetroFE(CollectionDatabase &db, Configuration &c)
|
||||
, CollectionDB(db)
|
||||
, Input(Config)
|
||||
, KeyInputDisable(0)
|
||||
, InactiveKeyTime(0)
|
||||
, AttractMode(false)
|
||||
, CurrentTime(0)
|
||||
, VideoInst(NULL)
|
||||
{
|
||||
@ -159,7 +157,6 @@ void RetroFE::Run()
|
||||
bool running = true;
|
||||
Item *nextPageItem = NULL;
|
||||
bool adminMode = false;
|
||||
float attractModeRandomTime = 0;
|
||||
bool selectActive = false;
|
||||
float frameCount = 0;
|
||||
float fpsStartTime = 0;
|
||||
@ -168,6 +165,7 @@ void RetroFE::Run()
|
||||
Config.GetProperty("attractModeTime", attractModeTime);
|
||||
Config.GetProperty("firstCollection", firstCollection);
|
||||
|
||||
Attract.SetIdleTime(static_cast<float>(attractModeTime));
|
||||
LoadPage(firstCollection);
|
||||
|
||||
while (running)
|
||||
@ -287,26 +285,7 @@ void RetroFE::Run()
|
||||
frameCount = 0;
|
||||
}
|
||||
|
||||
InactiveKeyTime += deltaTime;
|
||||
|
||||
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);
|
||||
}
|
||||
}
|
||||
Attract.Update(deltaTime, *page);
|
||||
|
||||
page->Update(deltaTime);
|
||||
Render();
|
||||
@ -353,8 +332,7 @@ RetroFE::RETROFE_STATE RetroFE::ProcessUserInput(Page *page)
|
||||
{
|
||||
const Uint8 *keys = SDL_GetKeyboardState(NULL);
|
||||
|
||||
InactiveKeyTime = 0;
|
||||
AttractMode = false;
|
||||
Attract.Reset();
|
||||
|
||||
if (keys[Input.GetScancode(UserInput::KeyCodePreviousItem)])
|
||||
{
|
||||
|
||||
@ -5,6 +5,7 @@
|
||||
|
||||
#include "Collection/Item.h"
|
||||
#include "Control/UserInput.h"
|
||||
#include "Execute/AttractMode.h"
|
||||
#include "Graphics/FontCache.h"
|
||||
#include "Video/IVideo.h"
|
||||
#include <SDL2/SDL.h>
|
||||
@ -54,11 +55,10 @@ private:
|
||||
UserInput Input;
|
||||
std::list<Page *> PageChain;
|
||||
float KeyInputDisable;
|
||||
float InactiveKeyTime;
|
||||
bool AttractMode;
|
||||
float CurrentTime;
|
||||
Item *NextPageItem;
|
||||
FontCache FC;
|
||||
IVideo *VideoInst;
|
||||
AttractMode Attract;
|
||||
|
||||
};
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user