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/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"
|
||||||
|
|||||||
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)
|
, 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)])
|
||||||
{
|
{
|
||||||
|
|||||||
@ -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;
|
||||||
|
|
||||||
};
|
};
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user