mirror of
https://github.com/FunKey-Project/RetroFE.git
synced 2026-02-09 16:35:39 +01:00
Support for other tweens to trigger only when specific menu is selected (using menuIndex attribute).
This commit is contained in:
parent
4a77e3b6a1
commit
5790f76f4e
@ -18,103 +18,57 @@
|
|||||||
|
|
||||||
TweenSet::~TweenSet()
|
TweenSet::~TweenSet()
|
||||||
{
|
{
|
||||||
std::map<int, TweenSets *>::iterator it;
|
DestroyTweens();
|
||||||
|
}
|
||||||
it = OnMenuEnterTweens.begin();
|
|
||||||
while(it != OnMenuEnterTweens.end())
|
void TweenSet::DestroyTweens()
|
||||||
{
|
{
|
||||||
delete it->second;
|
std::map<std::string, std::map<int, TweenSets *>>::iterator it = TweenMap.begin();
|
||||||
OnMenuEnterTweens.erase(it);
|
|
||||||
it = OnMenuEnterTweens.begin();
|
|
||||||
}
|
|
||||||
|
|
||||||
it = OnMenuExitTweens.begin();
|
while(it != TweenMap.end())
|
||||||
while(it != OnMenuExitTweens.end())
|
|
||||||
{
|
{
|
||||||
delete it->second;
|
std::map<int, TweenSets *>::iterator it2 = (it->second).begin();
|
||||||
OnMenuExitTweens.erase(it);
|
|
||||||
it = OnMenuExitTweens.begin();
|
while(it2 != (it->second).end())
|
||||||
|
{
|
||||||
|
delete it2->second;
|
||||||
|
(it->second).erase(it2);
|
||||||
|
it2 = (it->second).begin();
|
||||||
|
}
|
||||||
|
|
||||||
|
it =TweenMap.begin();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
TweenSet::TweenSets *TweenSet::GetOnEnterTweens()
|
TweenSet::TweenSets *TweenSet::GetTween(std::string tween)
|
||||||
{
|
{
|
||||||
return &OnEnterTweens;
|
return GetTween(tween, -1);
|
||||||
}
|
|
||||||
TweenSet::TweenSets *TweenSet::GetOnExitTweens()
|
|
||||||
{
|
|
||||||
return &OnExitTweens;
|
|
||||||
}
|
|
||||||
TweenSet::TweenSets *TweenSet::GetOnIdleTweens()
|
|
||||||
{
|
|
||||||
return &OnIdleTweens;
|
|
||||||
}
|
|
||||||
TweenSet::TweenSets *TweenSet::GetOnHighlightEnterTweens()
|
|
||||||
{
|
|
||||||
return &OnHighlightEnterTweens;
|
|
||||||
}
|
|
||||||
TweenSet::TweenSets *TweenSet::GetOnHighlightExitTweens()
|
|
||||||
{
|
|
||||||
return &OnHighlightExitTweens;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
TweenSet::TweenSets *TweenSet::GetOnMenuEnterTweens()
|
TweenSet::TweenSets *TweenSet::GetTween(std::string tween, int index)
|
||||||
{
|
{
|
||||||
return GetOnMenuEnterTweens(-1);
|
return FindTween(TweenMap[tween], index);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
TweenSet::TweenSets *TweenSet::GetOnMenuEnterTweens(int index)
|
|
||||||
{
|
|
||||||
if(OnMenuEnterTweens.find(index) == OnMenuEnterTweens.end())
|
|
||||||
{
|
|
||||||
index = -1;
|
|
||||||
|
|
||||||
if(OnMenuEnterTweens.find(index) == OnMenuEnterTweens.end())
|
|
||||||
{
|
|
||||||
TweenSets *set = new TweenSets();
|
|
||||||
OnMenuEnterTweens[index] = set;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
return OnMenuEnterTweens[index];
|
|
||||||
}
|
|
||||||
|
|
||||||
TweenSet::TweenSets *TweenSet::GetOnMenuScrollTweens()
|
|
||||||
{
|
|
||||||
return &OnMenuScrollTweens;
|
|
||||||
}
|
|
||||||
|
|
||||||
TweenSet::TweenSets *TweenSet::GetOnMenuExitTweens()
|
|
||||||
{
|
|
||||||
return GetOnMenuExitTweens(-1);
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
TweenSet::TweenSets *TweenSet::GetOnMenuExitTweens(int index)
|
|
||||||
{
|
|
||||||
if(OnMenuExitTweens.find(index) == OnMenuExitTweens.end())
|
|
||||||
{
|
|
||||||
index = -1;
|
|
||||||
|
|
||||||
if(OnMenuExitTweens.find(index) == OnMenuExitTweens.end())
|
|
||||||
{
|
|
||||||
TweenSets *set = new TweenSets();
|
|
||||||
OnMenuExitTweens[index] = set;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
return OnMenuExitTweens[index];
|
|
||||||
}
|
|
||||||
|
|
||||||
void TweenSet::SetOnMenuEnterTweens(int index, TweenSets *set)
|
|
||||||
{
|
|
||||||
OnMenuEnterTweens[index] = set;
|
|
||||||
}
|
|
||||||
|
|
||||||
void TweenSet::SetOnMenuExitTweens(int index, TweenSets *set)
|
void TweenSet::SetTween(std::string tween, int index, TweenSets *set)
|
||||||
{
|
{
|
||||||
OnMenuExitTweens[index] = set;
|
TweenMap[tween][index] = set;
|
||||||
|
}
|
||||||
|
|
||||||
|
TweenSet::TweenSets *TweenSet::FindTween(std::map<int, TweenSets *> &tweens, int index)
|
||||||
|
{
|
||||||
|
if(tweens.find(index) == tweens.end())
|
||||||
|
{
|
||||||
|
index = -1;
|
||||||
|
|
||||||
|
if(tweens.find(index) == tweens.end())
|
||||||
|
{
|
||||||
|
TweenSets *set = new TweenSets();
|
||||||
|
tweens[index] = set;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return tweens[index];
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@ -27,29 +27,14 @@ class TweenSet
|
|||||||
public:
|
public:
|
||||||
~TweenSet();
|
~TweenSet();
|
||||||
typedef std::vector<std::vector<Tween *> *> TweenSets;
|
typedef std::vector<std::vector<Tween *> *> TweenSets;
|
||||||
//todo: delete the tweens in a destructor
|
|
||||||
|
|
||||||
TweenSets *GetOnEnterTweens();
|
TweenSets *GetTween(std::string tween);
|
||||||
TweenSets *GetOnExitTweens();
|
TweenSets *GetTween(std::string tween, int index);
|
||||||
TweenSets *GetOnIdleTweens();
|
void SetTween(std::string tween, int index, TweenSets *set);
|
||||||
TweenSets *GetOnHighlightEnterTweens();
|
|
||||||
TweenSets *GetOnHighlightExitTweens();
|
|
||||||
TweenSets *GetOnMenuScrollTweens();
|
|
||||||
TweenSets *GetOnMenuEnterTweens();
|
|
||||||
TweenSets *GetOnMenuExitTweens();
|
|
||||||
TweenSets *GetOnMenuEnterTweens(int index);
|
|
||||||
TweenSets *GetOnMenuExitTweens(int index);
|
|
||||||
void SetOnMenuEnterTweens(int index, TweenSets *set);
|
|
||||||
void SetOnMenuExitTweens(int index, TweenSets *set);
|
|
||||||
|
|
||||||
private:
|
private:
|
||||||
TweenSets OnEnterTweens;
|
TweenSets *FindTween(std::map<int, TweenSets *> &tweens, int index);
|
||||||
TweenSets OnExitTweens;
|
void TweenSet::DestroyTweens();
|
||||||
TweenSets OnIdleTweens;
|
|
||||||
TweenSets OnHighlightEnterTweens;
|
std::map<std::string, std::map<int, TweenSets *>> TweenMap;
|
||||||
TweenSets OnHighlightExitTweens;
|
|
||||||
TweenSets OnMenuScrollTweens;
|
|
||||||
std::map<int, TweenSets *> OnMenuEnterTweens;
|
|
||||||
std::map<int, TweenSets *> OnMenuExitTweens;
|
|
||||||
|
|
||||||
};
|
};
|
||||||
|
|||||||
@ -180,7 +180,7 @@ void Component::Update(float dt)
|
|||||||
|
|
||||||
|
|
||||||
case ENTER:
|
case ENTER:
|
||||||
CurrentTweens = Tweens->GetOnHighlightEnterTweens();
|
CurrentTweens = Tweens->GetTween("enter", MenuEnterIndex);
|
||||||
CurrentAnimationState = HIGHLIGHT_ENTER;
|
CurrentAnimationState = HIGHLIGHT_ENTER;
|
||||||
break;
|
break;
|
||||||
|
|
||||||
@ -190,7 +190,7 @@ void Component::Update(float dt)
|
|||||||
break;
|
break;
|
||||||
|
|
||||||
case HIGHLIGHT_ENTER:
|
case HIGHLIGHT_ENTER:
|
||||||
CurrentTweens = Tweens->GetOnIdleTweens();
|
CurrentTweens = Tweens->GetTween("idle", MenuEnterIndex);
|
||||||
CurrentAnimationState = IDLE;
|
CurrentAnimationState = IDLE;
|
||||||
break;
|
break;
|
||||||
|
|
||||||
@ -204,29 +204,29 @@ void Component::Update(float dt)
|
|||||||
else if(MenuEnterRequested)
|
else if(MenuEnterRequested)
|
||||||
{
|
{
|
||||||
MenuEnterRequested = false;
|
MenuEnterRequested = false;
|
||||||
CurrentTweens = Tweens->GetOnMenuEnterTweens(MenuEnterIndex);
|
CurrentTweens = Tweens->GetTween("menuEnter", MenuEnterIndex);
|
||||||
CurrentAnimationState = MENU_ENTER;
|
CurrentAnimationState = MENU_ENTER;
|
||||||
}
|
}
|
||||||
else if(MenuScrollRequested)
|
else if(MenuScrollRequested)
|
||||||
{
|
{
|
||||||
MenuScrollRequested = false;
|
MenuScrollRequested = false;
|
||||||
CurrentTweens = Tweens->GetOnMenuScrollTweens();
|
CurrentTweens = Tweens->GetTween("menuScroll", MenuEnterIndex);
|
||||||
CurrentAnimationState = MENU_SCROLL;
|
CurrentAnimationState = MENU_SCROLL;
|
||||||
}
|
}
|
||||||
else if(MenuExitRequested)
|
else if(MenuExitRequested)
|
||||||
{
|
{
|
||||||
MenuExitRequested = false;
|
MenuExitRequested = false;
|
||||||
CurrentTweens = Tweens->GetOnMenuExitTweens(MenuExitIndex);
|
CurrentTweens = Tweens->GetTween("menuExit", MenuEnterIndex);
|
||||||
CurrentAnimationState = MENU_EXIT;
|
CurrentAnimationState = MENU_EXIT;
|
||||||
}
|
}
|
||||||
else if(IsScrollActive() || NewItemSelected || ExitRequested)
|
else if(IsScrollActive() || NewItemSelected || ExitRequested)
|
||||||
{
|
{
|
||||||
CurrentTweens = Tweens->GetOnHighlightExitTweens();
|
CurrentTweens = Tweens->GetTween("highlightExit", MenuEnterIndex);
|
||||||
CurrentAnimationState = HIGHLIGHT_EXIT;
|
CurrentAnimationState = HIGHLIGHT_EXIT;
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
CurrentTweens = Tweens->GetOnIdleTweens();
|
CurrentTweens = Tweens->GetTween("idle", MenuEnterIndex);
|
||||||
CurrentAnimationState = IDLE;
|
CurrentAnimationState = IDLE;
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
@ -238,14 +238,14 @@ void Component::Update(float dt)
|
|||||||
|
|
||||||
if(ExitRequested && (CurrentAnimationState == HIGHLIGHT_WAIT))
|
if(ExitRequested && (CurrentAnimationState == HIGHLIGHT_WAIT))
|
||||||
{
|
{
|
||||||
CurrentTweens = Tweens->GetOnHighlightExitTweens();
|
CurrentTweens = Tweens->GetTween("highlightExit", MenuEnterIndex);
|
||||||
CurrentAnimationState = HIGHLIGHT_EXIT;
|
CurrentAnimationState = HIGHLIGHT_EXIT;
|
||||||
|
|
||||||
}
|
}
|
||||||
else if(ExitRequested && (CurrentAnimationState == HIGHLIGHT_EXIT))
|
else if(ExitRequested && (CurrentAnimationState == HIGHLIGHT_EXIT))
|
||||||
{
|
{
|
||||||
|
|
||||||
CurrentTweens = Tweens->GetOnExitTweens();
|
CurrentTweens = Tweens->GetTween("exit", MenuEnterIndex);
|
||||||
CurrentAnimationState = EXIT;
|
CurrentAnimationState = EXIT;
|
||||||
ExitRequested = false;
|
ExitRequested = false;
|
||||||
}
|
}
|
||||||
@ -256,7 +256,7 @@ void Component::Update(float dt)
|
|||||||
}
|
}
|
||||||
else if(NewItemSelected)
|
else if(NewItemSelected)
|
||||||
{
|
{
|
||||||
CurrentTweens = Tweens->GetOnHighlightEnterTweens();
|
CurrentTweens = Tweens->GetTween("highlightEnter", MenuEnterIndex);
|
||||||
CurrentAnimationState = HIGHLIGHT_ENTER;
|
CurrentAnimationState = HIGHLIGHT_ENTER;
|
||||||
HighlightExitComplete = true;
|
HighlightExitComplete = true;
|
||||||
NewItemSelected = false;
|
NewItemSelected = false;
|
||||||
@ -271,18 +271,18 @@ void Component::Update(float dt)
|
|||||||
case HIDDEN:
|
case HIDDEN:
|
||||||
if(EnterRequested || ExitRequested)
|
if(EnterRequested || ExitRequested)
|
||||||
{
|
{
|
||||||
CurrentTweens = Tweens->GetOnEnterTweens();
|
CurrentTweens = Tweens->GetTween("enter", MenuEnterIndex);
|
||||||
CurrentAnimationState = ENTER;
|
CurrentAnimationState = ENTER;
|
||||||
}
|
}
|
||||||
else if(MenuExitRequested)
|
else if(MenuExitRequested)
|
||||||
{
|
{
|
||||||
CurrentTweens = Tweens->GetOnMenuExitTweens();
|
CurrentTweens = Tweens->GetTween("menuExit", MenuEnterIndex);
|
||||||
CurrentAnimationState = MENU_EXIT;
|
CurrentAnimationState = MENU_EXIT;
|
||||||
MenuExitRequested = false;
|
MenuExitRequested = false;
|
||||||
}
|
}
|
||||||
else if(MenuEnterRequested)
|
else if(MenuEnterRequested)
|
||||||
{
|
{
|
||||||
CurrentTweens = Tweens->GetOnMenuEnterTweens();
|
CurrentTweens = Tweens->GetTween("menuEnter", MenuEnterIndex);
|
||||||
CurrentAnimationState = MENU_ENTER;
|
CurrentAnimationState = MENU_ENTER;
|
||||||
MenuEnterRequested = false;
|
MenuEnterRequested = false;
|
||||||
|
|
||||||
@ -290,7 +290,7 @@ void Component::Update(float dt)
|
|||||||
else if(MenuScrollRequested)
|
else if(MenuScrollRequested)
|
||||||
{
|
{
|
||||||
MenuScrollRequested = false;
|
MenuScrollRequested = false;
|
||||||
CurrentTweens = Tweens->GetOnMenuScrollTweens();
|
CurrentTweens = Tweens->GetTween("menuScroll", MenuEnterIndex);
|
||||||
CurrentAnimationState = MENU_SCROLL;
|
CurrentAnimationState = MENU_SCROLL;
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
|
|||||||
@ -522,7 +522,7 @@ void ScrollingList::ResetTweens(Component *c, TweenSet *sets, ViewInfo *currentV
|
|||||||
//todo: delete properly, memory leak (big), proof of concept
|
//todo: delete properly, memory leak (big), proof of concept
|
||||||
c->SetTweens(sets);
|
c->SetTweens(sets);
|
||||||
|
|
||||||
TweenSets *scrollTween = sets->GetOnMenuScrollTweens();
|
TweenSets *scrollTween = sets->GetTween("menuScroll");
|
||||||
TweenSets::iterator it = scrollTween->begin();
|
TweenSets::iterator it = scrollTween->begin();
|
||||||
|
|
||||||
while(it != scrollTween->end())
|
while(it != scrollTween->end())
|
||||||
|
|||||||
@ -460,36 +460,30 @@ TweenSet *PageBuilder::CreateTweenInstance(xml_node<> *componentXml)
|
|||||||
{
|
{
|
||||||
TweenSet *tweens = new TweenSet();
|
TweenSet *tweens = new TweenSet();
|
||||||
|
|
||||||
GetTweenSets(componentXml->first_node("onEnter"), tweens->GetOnEnterTweens());
|
BuildTweenSets(tweens, componentXml, "onEnter", "enter");
|
||||||
GetTweenSets(componentXml->first_node("onExit"), tweens->GetOnExitTweens());
|
BuildTweenSets(tweens, componentXml, "onExit", "exit");
|
||||||
GetTweenSets(componentXml->first_node("onIdle"), tweens->GetOnIdleTweens());
|
BuildTweenSets(tweens, componentXml, "onIdle", "idle");
|
||||||
GetTweenSets(componentXml->first_node("onHighlightEnter"), tweens->GetOnHighlightEnterTweens());
|
BuildTweenSets(tweens, componentXml, "onHighlightEnter", "highlightEnter");
|
||||||
GetTweenSets(componentXml->first_node("onHighlightExit"), tweens->GetOnHighlightExitTweens());
|
BuildTweenSets(tweens, componentXml, "onHighlightExit", "highlightExit");
|
||||||
|
BuildTweenSets(tweens, componentXml, "onMenuEnter", "menuEnter");
|
||||||
for(xml_node<> *menuEnter = componentXml->first_node("onMenuEnter"); menuEnter; menuEnter = menuEnter->next_sibling("onMenuEnter"))
|
BuildTweenSets(tweens, componentXml, "onMenuExit", "menuExit");
|
||||||
{
|
|
||||||
xml_attribute<> *indexXml = menuEnter->first_attribute("menuIndex");
|
|
||||||
int index = (indexXml) ? Utils::ConvertInt(indexXml->value()) : -1;
|
|
||||||
|
|
||||||
TweenSet::TweenSets *sets = new TweenSet::TweenSets();
|
|
||||||
GetTweenSets(menuEnter, sets);
|
|
||||||
tweens->SetOnMenuEnterTweens(index, sets);
|
|
||||||
}
|
|
||||||
|
|
||||||
for(xml_node<> *menuExit = componentXml->first_node("onMenuExit"); menuExit; menuExit = menuExit->next_sibling("onMenuExit"))
|
|
||||||
{
|
|
||||||
xml_attribute<> *indexXml = menuExit->first_attribute("menuIndex");
|
|
||||||
int index = (indexXml) ? Utils::ConvertInt(indexXml->value()) : -1;
|
|
||||||
|
|
||||||
TweenSet::TweenSets *sets = new TweenSet::TweenSets();
|
|
||||||
GetTweenSets(menuExit, sets);
|
|
||||||
tweens->SetOnMenuExitTweens(index, sets);
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
return tweens;
|
return tweens;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void PageBuilder::BuildTweenSets(TweenSet *tweens, xml_node<> *componentXml, std::string tagName, std::string tweenName)
|
||||||
|
{
|
||||||
|
for(componentXml = componentXml->first_node(tagName.c_str()); componentXml; componentXml = componentXml->next_sibling(tweenName.c_str()))
|
||||||
|
{
|
||||||
|
xml_attribute<> *indexXml = componentXml->first_attribute("menuIndex");
|
||||||
|
int index = (indexXml) ? Utils::ConvertInt(indexXml->value()) : -1;
|
||||||
|
|
||||||
|
TweenSet::TweenSets *sets = new TweenSet::TweenSets();
|
||||||
|
GetTweenSets(componentXml, sets);
|
||||||
|
tweens->SetTween(tweenName, index, sets);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
ScrollingList * PageBuilder::BuildMenu(xml_node<> *menuXml)
|
ScrollingList * PageBuilder::BuildMenu(xml_node<> *menuXml)
|
||||||
{
|
{
|
||||||
|
|||||||
@ -54,6 +54,7 @@ private:
|
|||||||
bool BuildComponents(rapidxml::xml_node<> *layout, Page *page);
|
bool BuildComponents(rapidxml::xml_node<> *layout, Page *page);
|
||||||
void LoadTweens(Component *c, rapidxml::xml_node<> *componentXml);
|
void LoadTweens(Component *c, rapidxml::xml_node<> *componentXml);
|
||||||
TweenSet *CreateTweenInstance(rapidxml::xml_node<> *componentXml);
|
TweenSet *CreateTweenInstance(rapidxml::xml_node<> *componentXml);
|
||||||
|
void BuildTweenSets(TweenSet *tweens, rapidxml::xml_node<> *componentXml, std::string tagName, std::string tweenName);
|
||||||
ScrollingList * BuildMenu(rapidxml::xml_node<> *menuXml);
|
ScrollingList * BuildMenu(rapidxml::xml_node<> *menuXml);
|
||||||
void BuildCustomMenu(ScrollingList *menu, rapidxml::xml_node<> *menuXml, rapidxml::xml_node<> *itemDefaults);
|
void BuildCustomMenu(ScrollingList *menu, rapidxml::xml_node<> *menuXml, rapidxml::xml_node<> *itemDefaults);
|
||||||
void BuildVerticalMenu(ScrollingList *menu, rapidxml::xml_node<> *menuXml, rapidxml::xml_node<> *itemDefaults);
|
void BuildVerticalMenu(ScrollingList *menu, rapidxml::xml_node<> *menuXml, rapidxml::xml_node<> *itemDefaults);
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user