diff --git a/RetroFE/Source/Graphics/Component/ScrollingList.cpp b/RetroFE/Source/Graphics/Component/ScrollingList.cpp index d2eb849..34829ae 100644 --- a/RetroFE/Source/Graphics/Component/ScrollingList.cpp +++ b/RetroFE/Source/Graphics/Component/ScrollingList.cpp @@ -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 *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 *set = new std::vector(); - 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); } diff --git a/RetroFE/Source/Graphics/Component/ScrollingList.h b/RetroFE/Source/Graphics/Component/ScrollingList.h index 6980723..4c4ebfd 100644 --- a/RetroFE/Source/Graphics/Component/ScrollingList.h +++ b/RetroFE/Source/Graphics/Component/ScrollingList.h @@ -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 *list); diff --git a/RetroFE/Source/Graphics/PageBuilder.cpp b/RetroFE/Source/Graphics/PageBuilder.cpp index 0069d05..132accf 100644 --- a/RetroFE/Source/Graphics/PageBuilder.cpp +++ b/RetroFE/Source/Graphics/PageBuilder.cpp @@ -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);