mirror of
https://github.com/FunKey-Project/RetroFE.git
synced 2026-02-23 01:31:28 +01:00
Menu configurable scroll speed and velocity.
This commit is contained in:
parent
2cfcf0d713
commit
4a77e3b6a1
@ -51,7 +51,8 @@ ScrollingList::ScrollingList(Configuration &c,
|
||||
, CurrentScrollDirection(ScrollDirectionIdle)
|
||||
, RequestedScrollDirection(ScrollDirectionIdle)
|
||||
, CurrentScrollState(ScrollStateIdle)
|
||||
, ScrollAcceleration(6) // todo: make configurable
|
||||
, ScrollAcceleration(0)
|
||||
, StartScrollTime(0.500)
|
||||
, ScrollPeriod(0)
|
||||
, Config(c)
|
||||
, ScaleX(scaleX)
|
||||
@ -100,6 +101,16 @@ void ScrollingList::SetItems(std::vector<ComponentItemBinding *> *spriteList)
|
||||
AllocateSpritePoints();
|
||||
}
|
||||
|
||||
void ScrollingList::SetScrollAcceleration(float value)
|
||||
{
|
||||
ScrollAcceleration = value;
|
||||
}
|
||||
|
||||
void ScrollingList::SetStartScrollTime(float value)
|
||||
{
|
||||
StartScrollTime = value;
|
||||
}
|
||||
|
||||
void ScrollingList::DeallocateSpritePoints()
|
||||
{
|
||||
if(!SpriteList) { return; }
|
||||
@ -291,7 +302,6 @@ void ScrollingList::FreeGraphicsMemory()
|
||||
CurrentScrollDirection = ScrollDirectionIdle;
|
||||
RequestedScrollDirection = ScrollDirectionIdle;
|
||||
CurrentScrollState = ScrollStateIdle;
|
||||
ScrollAcceleration = 6; // todo: make configurable
|
||||
ScrollPeriod = 0;
|
||||
|
||||
for(unsigned int i = 0; SpriteList && i < SpriteList->size(); i++)
|
||||
@ -386,7 +396,7 @@ void ScrollingList::Update(float dt)
|
||||
}
|
||||
else if(CurrentScrollState == ScrollStateIdle && readyToScroll)
|
||||
{
|
||||
ScrollPeriod = 0.250;
|
||||
ScrollPeriod = StartScrollTime;
|
||||
// check to see if requested to scroll
|
||||
if(RequestedScrollDirection != ScrollDirectionIdle)
|
||||
{
|
||||
@ -426,10 +436,10 @@ void ScrollingList::Update(float dt)
|
||||
|
||||
else if(CurrentScrollState == ScrollStateActive)
|
||||
{
|
||||
ScrollPeriod -= 0.075f;
|
||||
if(ScrollPeriod < 0)
|
||||
ScrollPeriod -= ScrollAcceleration;
|
||||
if(ScrollPeriod < ScrollAcceleration)
|
||||
{
|
||||
ScrollPeriod = 0.00f;
|
||||
ScrollPeriod = ScrollAcceleration;
|
||||
}
|
||||
|
||||
Click(ScrollPeriod);
|
||||
@ -534,18 +544,18 @@ void ScrollingList::ResetTweens(Component *c, TweenSet *sets, ViewInfo *currentV
|
||||
c->UpdateBaseViewInfo(*currentViewInfo);
|
||||
|
||||
std::vector<Tween *> *set = new std::vector<Tween *>();
|
||||
set->push_back(new Tween(TWEEN_PROPERTY_HEIGHT, LINEAR, currentViewInfo->GetHeight(), nextViewInfo->GetHeight(), scrollTime));
|
||||
set->push_back(new Tween(TWEEN_PROPERTY_WIDTH, LINEAR, currentViewInfo->GetWidth(), nextViewInfo->GetWidth(), scrollTime));
|
||||
set->push_back(new Tween(TWEEN_PROPERTY_ANGLE, LINEAR, currentViewInfo->GetAngle(), nextViewInfo->GetAngle(), scrollTime));
|
||||
set->push_back(new Tween(TWEEN_PROPERTY_ALPHA, LINEAR, currentViewInfo->GetAlpha(), nextViewInfo->GetAlpha(), scrollTime));
|
||||
set->push_back(new Tween(TWEEN_PROPERTY_X, LINEAR, currentViewInfo->GetX(), nextViewInfo->GetX(), scrollTime));
|
||||
set->push_back(new Tween(TWEEN_PROPERTY_Y, LINEAR, currentViewInfo->GetY(), nextViewInfo->GetY(), scrollTime));
|
||||
set->push_back(new Tween(TWEEN_PROPERTY_X_ORIGIN, LINEAR, currentViewInfo->GetXOrigin(), nextViewInfo->GetXOrigin(), scrollTime));
|
||||
set->push_back(new Tween(TWEEN_PROPERTY_Y_ORIGIN, LINEAR, currentViewInfo->GetYOrigin(), nextViewInfo->GetYOrigin(), scrollTime));
|
||||
set->push_back(new Tween(TWEEN_PROPERTY_X_OFFSET, LINEAR, currentViewInfo->GetXOffset(), nextViewInfo->GetXOffset(), scrollTime));
|
||||
set->push_back(new Tween(TWEEN_PROPERTY_Y_OFFSET, LINEAR, currentViewInfo->GetYOffset(), nextViewInfo->GetYOffset(), scrollTime));
|
||||
set->push_back(new Tween(TWEEN_PROPERTY_FONT_SIZE, LINEAR, currentViewInfo->GetFontSize(), nextViewInfo->GetFontSize(), scrollTime));
|
||||
set->push_back(new Tween(TWEEN_PROPERTY_BACKGROUND_ALPHA, LINEAR, currentViewInfo->GetBackgroundAlpha(), nextViewInfo->GetBackgroundAlpha(), scrollTime));
|
||||
set->push_back(new Tween(TWEEN_PROPERTY_HEIGHT, EASE_INOUT_QUADRATIC, currentViewInfo->GetHeight(), nextViewInfo->GetHeight(), scrollTime));
|
||||
set->push_back(new Tween(TWEEN_PROPERTY_WIDTH, EASE_INOUT_QUADRATIC, currentViewInfo->GetWidth(), nextViewInfo->GetWidth(), scrollTime));
|
||||
set->push_back(new Tween(TWEEN_PROPERTY_ANGLE, EASE_INOUT_QUADRATIC, currentViewInfo->GetAngle(), nextViewInfo->GetAngle(), scrollTime));
|
||||
set->push_back(new Tween(TWEEN_PROPERTY_ALPHA, EASE_INOUT_QUADRATIC, currentViewInfo->GetAlpha(), nextViewInfo->GetAlpha(), scrollTime));
|
||||
set->push_back(new Tween(TWEEN_PROPERTY_X, EASE_INOUT_QUADRATIC, currentViewInfo->GetX(), nextViewInfo->GetX(), scrollTime));
|
||||
set->push_back(new Tween(TWEEN_PROPERTY_Y, EASE_INOUT_QUADRATIC, currentViewInfo->GetY(), nextViewInfo->GetY(), scrollTime));
|
||||
set->push_back(new Tween(TWEEN_PROPERTY_X_ORIGIN, EASE_INOUT_QUADRATIC, currentViewInfo->GetXOrigin(), nextViewInfo->GetXOrigin(), scrollTime));
|
||||
set->push_back(new Tween(TWEEN_PROPERTY_Y_ORIGIN, EASE_INOUT_QUADRATIC, currentViewInfo->GetYOrigin(), nextViewInfo->GetYOrigin(), scrollTime));
|
||||
set->push_back(new Tween(TWEEN_PROPERTY_X_OFFSET, EASE_INOUT_QUADRATIC, currentViewInfo->GetXOffset(), nextViewInfo->GetXOffset(), scrollTime));
|
||||
set->push_back(new Tween(TWEEN_PROPERTY_Y_OFFSET, EASE_INOUT_QUADRATIC, currentViewInfo->GetYOffset(), nextViewInfo->GetYOffset(), scrollTime));
|
||||
set->push_back(new Tween(TWEEN_PROPERTY_FONT_SIZE, EASE_INOUT_QUADRATIC, currentViewInfo->GetFontSize(), nextViewInfo->GetFontSize(), scrollTime));
|
||||
set->push_back(new Tween(TWEEN_PROPERTY_BACKGROUND_ALPHA, EASE_INOUT_QUADRATIC, currentViewInfo->GetBackgroundAlpha(), nextViewInfo->GetBackgroundAlpha(), scrollTime));
|
||||
scrollTween->push_back(set);
|
||||
}
|
||||
|
||||
|
||||
@ -75,6 +75,8 @@ public:
|
||||
void Update(float dt);
|
||||
void Draw();
|
||||
void Draw(unsigned int layer);
|
||||
void SetScrollAcceleration(float value);
|
||||
void SetStartScrollTime(float value);
|
||||
|
||||
private:
|
||||
void Click(double nextScrollTime);
|
||||
@ -107,6 +109,7 @@ private:
|
||||
ScrollDirection RequestedScrollDirection;
|
||||
ScrollState CurrentScrollState;
|
||||
float ScrollAcceleration;
|
||||
float StartScrollTime;
|
||||
float ScrollPeriod;
|
||||
|
||||
int CircularIncrement(unsigned int index, unsigned int offset, std::vector<ComponentItemBinding *> *list);
|
||||
|
||||
@ -500,6 +500,8 @@ ScrollingList * PageBuilder::BuildMenu(xml_node<> *menuXml)
|
||||
xml_node<> *itemDefaults = menuXml->first_node("itemDefaults");
|
||||
xml_attribute<> *imageTypeXml = menuXml->first_attribute("imageType");
|
||||
xml_attribute<> *menuTypeXml = menuXml->first_attribute("type");
|
||||
xml_attribute<> *scrollTimeXml = menuXml->first_attribute("scrollTime");
|
||||
xml_attribute<> *scrollAccelerationXml = menuXml->first_attribute("scrollAcceleration");
|
||||
|
||||
if(menuTypeXml)
|
||||
{
|
||||
@ -522,6 +524,16 @@ ScrollingList * PageBuilder::BuildMenu(xml_node<> *menuXml)
|
||||
|
||||
menu = new ScrollingList(Config, ScaleX, ScaleY, FC->GetFont(Font), FontColor, LayoutKey, imageType);
|
||||
|
||||
if(scrollTimeXml)
|
||||
{
|
||||
menu->SetStartScrollTime(Utils::ConvertFloat(scrollTimeXml->value()));
|
||||
}
|
||||
|
||||
if(scrollAccelerationXml)
|
||||
{
|
||||
menu->SetScrollAcceleration(Utils::ConvertFloat(scrollAccelerationXml->value()));
|
||||
}
|
||||
|
||||
ViewInfo *v = menu->GetBaseViewInfo();
|
||||
BuildViewInfo(menuXml, v);
|
||||
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user