mirror of
https://github.com/RetroDECK/ES-DE.git
synced 2024-11-25 23:55:38 +00:00
Some improvements to the cursor logic in SystemView.
This commit is contained in:
parent
0f8cb1d2a1
commit
24a10a7807
|
@ -25,6 +25,7 @@ SystemView::SystemView()
|
||||||
: mRenderer {Renderer::getInstance()}
|
: mRenderer {Renderer::getInstance()}
|
||||||
, mPrimary {nullptr}
|
, mPrimary {nullptr}
|
||||||
, mPrimaryType {PrimaryType::CAROUSEL}
|
, mPrimaryType {PrimaryType::CAROUSEL}
|
||||||
|
, mLastCursor {-1}
|
||||||
, mCamOffset {0.0f}
|
, mCamOffset {0.0f}
|
||||||
, mFadeOpacity {0.0f}
|
, mFadeOpacity {0.0f}
|
||||||
, mPreviousScrollVelocity {0}
|
, mPreviousScrollVelocity {0}
|
||||||
|
@ -137,8 +138,10 @@ void SystemView::update(int deltaTime)
|
||||||
|
|
||||||
mPrimary->update(deltaTime);
|
mPrimary->update(deltaTime);
|
||||||
|
|
||||||
for (auto& video : mSystemElements[mPrimary->getCursor()].videoComponents)
|
for (auto& video : mSystemElements[mPrimary->getCursor()].videoComponents) {
|
||||||
|
if (!isScrolling())
|
||||||
video->update(deltaTime);
|
video->update(deltaTime);
|
||||||
|
}
|
||||||
|
|
||||||
for (auto& anim : mSystemElements[mPrimary->getCursor()].lottieAnimComponents)
|
for (auto& anim : mSystemElements[mPrimary->getCursor()].lottieAnimComponents)
|
||||||
anim->update(deltaTime);
|
anim->update(deltaTime);
|
||||||
|
@ -213,6 +216,12 @@ void SystemView::onCursorChanged(const CursorState& state)
|
||||||
{
|
{
|
||||||
int cursor {mPrimary->getCursor()};
|
int cursor {mPrimary->getCursor()};
|
||||||
|
|
||||||
|
// Avoid double updates.
|
||||||
|
if (cursor == mLastCursor)
|
||||||
|
return;
|
||||||
|
|
||||||
|
mLastCursor = cursor;
|
||||||
|
|
||||||
for (auto& selector : mSystemElements[cursor].gameSelectors) {
|
for (auto& selector : mSystemElements[cursor].gameSelectors) {
|
||||||
if (selector->getGameSelection() == GameSelectorComponent::GameSelection::RANDOM)
|
if (selector->getGameSelection() == GameSelectorComponent::GameSelection::RANDOM)
|
||||||
selector->setNeedsRefresh();
|
selector->setNeedsRefresh();
|
||||||
|
|
|
@ -122,6 +122,7 @@ private:
|
||||||
std::vector<SystemViewElements> mSystemElements;
|
std::vector<SystemViewElements> mSystemElements;
|
||||||
PrimaryComponent<SystemData*>* mPrimary;
|
PrimaryComponent<SystemData*>* mPrimary;
|
||||||
PrimaryType mPrimaryType;
|
PrimaryType mPrimaryType;
|
||||||
|
int mLastCursor;
|
||||||
|
|
||||||
// Dummy entry to keep the default SVG rating images in the texture cache so they don't
|
// Dummy entry to keep the default SVG rating images in the texture cache so they don't
|
||||||
// need to be re-rasterized for each gamelist that is loaded.
|
// need to be re-rasterized for each gamelist that is loaded.
|
||||||
|
|
|
@ -491,10 +491,13 @@ template <typename T> bool CarouselComponent<T>::input(InputConfig* config, Inpu
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
if (config->isMappedLike("up", input) || config->isMappedLike("down", input) ||
|
if (config->isMappedLike("up", input) || config->isMappedLike("down", input) ||
|
||||||
config->isMappedLike("left", input) || config->isMappedLike("right", input))
|
config->isMappedLike("left", input) || config->isMappedLike("right", input)) {
|
||||||
|
if (isScrolling())
|
||||||
|
onCursorChanged(CursorState::CURSOR_STOPPED);
|
||||||
List::listInput(0);
|
List::listInput(0);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
return GuiComponent::input(config, input);
|
return GuiComponent::input(config, input);
|
||||||
}
|
}
|
||||||
|
|
|
@ -268,13 +268,17 @@ template <typename T> bool TextListComponent<T>::input(InputConfig* config, Inpu
|
||||||
config->isMappedLike("rightshoulder", input) ||
|
config->isMappedLike("rightshoulder", input) ||
|
||||||
config->isMappedLike("lefttrigger", input) ||
|
config->isMappedLike("lefttrigger", input) ||
|
||||||
config->isMappedLike("righttrigger", input)) {
|
config->isMappedLike("righttrigger", input)) {
|
||||||
if constexpr (std::is_same_v<T, SystemData*>)
|
if constexpr (std::is_same_v<T, SystemData*>) {
|
||||||
|
if (isScrolling())
|
||||||
|
onCursorChanged(CursorState::CURSOR_STOPPED);
|
||||||
List::listInput(0);
|
List::listInput(0);
|
||||||
else
|
}
|
||||||
|
else {
|
||||||
List::stopScrolling();
|
List::stopScrolling();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
return GuiComponent::input(config, input);
|
return GuiComponent::input(config, input);
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in a new issue