mirror of
https://github.com/FunKey-Project/RetroFE.git
synced 2026-01-29 19:15:37 +01:00
MenuIndex tag to allow for other components to have animations based on menu selection.
This commit is contained in:
parent
08b4aaec5e
commit
2cfcf0d713
@ -16,6 +16,26 @@
|
||||
|
||||
#include "TweenSet.h"
|
||||
|
||||
TweenSet::~TweenSet()
|
||||
{
|
||||
std::map<int, TweenSets *>::iterator it;
|
||||
|
||||
it = OnMenuEnterTweens.begin();
|
||||
while(it != OnMenuEnterTweens.end())
|
||||
{
|
||||
delete it->second;
|
||||
OnMenuEnterTweens.erase(it);
|
||||
it = OnMenuEnterTweens.begin();
|
||||
}
|
||||
|
||||
it = OnMenuExitTweens.begin();
|
||||
while(it != OnMenuExitTweens.end())
|
||||
{
|
||||
delete it->second;
|
||||
OnMenuExitTweens.erase(it);
|
||||
it = OnMenuExitTweens.begin();
|
||||
}
|
||||
}
|
||||
|
||||
TweenSet::TweenSets *TweenSet::GetOnEnterTweens()
|
||||
{
|
||||
@ -37,16 +57,64 @@ TweenSet::TweenSets *TweenSet::GetOnHighlightExitTweens()
|
||||
{
|
||||
return &OnHighlightExitTweens;
|
||||
}
|
||||
|
||||
TweenSet::TweenSets *TweenSet::GetOnMenuEnterTweens()
|
||||
{
|
||||
return &OnMenuEnterTweens;
|
||||
return GetOnMenuEnterTweens(-1);
|
||||
}
|
||||
|
||||
|
||||
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 &OnMenuExitTweens;
|
||||
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)
|
||||
{
|
||||
OnMenuExitTweens[index] = set;
|
||||
}
|
||||
|
||||
|
||||
|
||||
@ -18,24 +18,29 @@
|
||||
#include "Tween.h"
|
||||
#include <string>
|
||||
#include <vector>
|
||||
#include <map>
|
||||
|
||||
|
||||
|
||||
class TweenSet
|
||||
{
|
||||
public:
|
||||
~TweenSet();
|
||||
typedef std::vector<std::vector<Tween *> *> TweenSets;
|
||||
//todo: delete the tweens in a destructor
|
||||
|
||||
|
||||
TweenSets *GetOnEnterTweens();
|
||||
TweenSets *GetOnExitTweens();
|
||||
TweenSets *GetOnIdleTweens();
|
||||
TweenSets *GetOnHighlightEnterTweens();
|
||||
TweenSets *GetOnHighlightExitTweens();
|
||||
TweenSets *GetOnMenuEnterTweens();
|
||||
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:
|
||||
TweenSets OnEnterTweens;
|
||||
@ -43,8 +48,8 @@ private:
|
||||
TweenSets OnIdleTweens;
|
||||
TweenSets OnHighlightEnterTweens;
|
||||
TweenSets OnHighlightExitTweens;
|
||||
TweenSets OnMenuEnterTweens;
|
||||
TweenSets OnMenuScrollTweens;
|
||||
TweenSets OnMenuExitTweens;
|
||||
std::map<int, TweenSets *> OnMenuEnterTweens;
|
||||
std::map<int, TweenSets *> OnMenuExitTweens;
|
||||
|
||||
};
|
||||
|
||||
@ -40,8 +40,10 @@ void Component::FreeGraphicsMemory()
|
||||
EnterRequested = false;
|
||||
ExitRequested = false;
|
||||
MenuEnterRequested = false;
|
||||
MenuEnterIndex = -1;
|
||||
MenuScrollRequested = false;
|
||||
MenuExitRequested = false;
|
||||
MenuExitIndex = -1;
|
||||
|
||||
NewItemSelected = false;
|
||||
HighlightExitComplete = false;
|
||||
@ -90,9 +92,10 @@ void Component::TriggerExitEvent()
|
||||
|
||||
|
||||
|
||||
void Component::TriggerMenuEnterEvent()
|
||||
void Component::TriggerMenuEnterEvent(int menuIndex)
|
||||
{
|
||||
MenuEnterRequested = true;
|
||||
MenuEnterIndex = menuIndex;
|
||||
}
|
||||
|
||||
void Component::TriggerMenuScrollEvent()
|
||||
@ -101,9 +104,10 @@ void Component::TriggerMenuScrollEvent()
|
||||
}
|
||||
|
||||
|
||||
void Component::TriggerMenuExitEvent()
|
||||
void Component::TriggerMenuExitEvent(int menuIndex)
|
||||
{
|
||||
MenuExitRequested = true;
|
||||
MenuExitIndex = menuIndex;
|
||||
}
|
||||
void Component::TriggerHighlightEvent(Item *selectedItem)
|
||||
{
|
||||
@ -200,7 +204,7 @@ void Component::Update(float dt)
|
||||
else if(MenuEnterRequested)
|
||||
{
|
||||
MenuEnterRequested = false;
|
||||
CurrentTweens = Tweens->GetOnMenuEnterTweens();
|
||||
CurrentTweens = Tweens->GetOnMenuEnterTweens(MenuEnterIndex);
|
||||
CurrentAnimationState = MENU_ENTER;
|
||||
}
|
||||
else if(MenuScrollRequested)
|
||||
@ -212,7 +216,7 @@ void Component::Update(float dt)
|
||||
else if(MenuExitRequested)
|
||||
{
|
||||
MenuExitRequested = false;
|
||||
CurrentTweens = Tweens->GetOnMenuExitTweens();
|
||||
CurrentTweens = Tweens->GetOnMenuExitTweens(MenuExitIndex);
|
||||
CurrentAnimationState = MENU_EXIT;
|
||||
}
|
||||
else if(IsScrollActive() || NewItemSelected || ExitRequested)
|
||||
|
||||
@ -35,8 +35,8 @@ public:
|
||||
virtual void LaunchExit() {}
|
||||
void TriggerEnterEvent();
|
||||
void TriggerExitEvent();
|
||||
void TriggerMenuEnterEvent();
|
||||
void TriggerMenuExitEvent();
|
||||
void TriggerMenuEnterEvent(int menuIndex = -1);
|
||||
void TriggerMenuExitEvent(int menuIndex = -1);
|
||||
void TriggerMenuScrollEvent();
|
||||
void TriggerHighlightEvent(Item *selectedItem);
|
||||
bool IsIdle();
|
||||
@ -107,8 +107,10 @@ protected:
|
||||
bool EnterRequested;
|
||||
bool ExitRequested;
|
||||
bool MenuEnterRequested;
|
||||
int MenuEnterIndex;
|
||||
bool MenuScrollRequested;
|
||||
bool MenuExitRequested;
|
||||
int MenuExitIndex;
|
||||
bool NewItemSelected;
|
||||
bool HighlightExitComplete;
|
||||
bool NewItemSelectedSinceEnter;
|
||||
|
||||
@ -329,13 +329,20 @@ bool Page::PushCollection(CollectionInfo *collection)
|
||||
Collections.push_back(collection);
|
||||
std::vector<ComponentItemBinding *> *sprites = ComponentItemBindingBuilder::BuildCollectionItems(collection->GetItems());
|
||||
|
||||
int menuExitIndex = -1;
|
||||
int menuEnterIndex = -1;
|
||||
|
||||
if(ActiveMenu)
|
||||
{
|
||||
ActiveMenu->TriggerMenuExitEvent();
|
||||
}
|
||||
|
||||
if(MenuDepth > 0)
|
||||
{
|
||||
menuExitIndex = MenuDepth - 1;
|
||||
}
|
||||
|
||||
ActiveMenu = Menus[MenuDepth];
|
||||
|
||||
ActiveMenu->SetCollectionName(collection->GetName());
|
||||
ActiveMenu->DestroyItems();
|
||||
ActiveMenu->SetItems(sprites);
|
||||
@ -343,6 +350,7 @@ bool Page::PushCollection(CollectionInfo *collection)
|
||||
|
||||
if(MenuDepth < Menus.size())
|
||||
{
|
||||
menuEnterIndex = MenuDepth;
|
||||
MenuDepth++;
|
||||
}
|
||||
|
||||
@ -351,6 +359,15 @@ bool Page::PushCollection(CollectionInfo *collection)
|
||||
for(std::vector<Component *>::iterator it = LayerComponents[i].begin(); it != LayerComponents[i].end(); ++it)
|
||||
{
|
||||
(*it)->SetCollectionName(collection->GetName());
|
||||
if(menuEnterIndex >= 0)
|
||||
{
|
||||
(*it)->TriggerMenuEnterEvent(menuEnterIndex);
|
||||
}
|
||||
|
||||
if(menuExitIndex >= 0)
|
||||
{
|
||||
(*it)->TriggerMenuExitEvent(menuExitIndex);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@ -359,6 +376,9 @@ bool Page::PushCollection(CollectionInfo *collection)
|
||||
|
||||
bool Page::PopCollection()
|
||||
{
|
||||
int menuExitIndex = -1;
|
||||
int menuEnterIndex = -1;
|
||||
|
||||
if(MenuDepth > 1)
|
||||
{
|
||||
if(Collections.size() > 1)
|
||||
@ -372,15 +392,34 @@ bool Page::PopCollection()
|
||||
}
|
||||
|
||||
MenuDepth--;
|
||||
|
||||
menuExitIndex = MenuDepth;
|
||||
menuEnterIndex = menuExitIndex - 1;
|
||||
ActiveMenu = Menus[MenuDepth - 1];
|
||||
if(ActiveMenu)
|
||||
{
|
||||
ActiveMenu->TriggerMenuEnterEvent();
|
||||
}
|
||||
|
||||
for(unsigned int i = 0; i < NUM_LAYERS; ++i)
|
||||
{
|
||||
for(std::vector<Component *>::iterator it = LayerComponents[i].begin(); it != LayerComponents[i].end(); ++it)
|
||||
{
|
||||
if(menuEnterIndex >= 0)
|
||||
{
|
||||
(*it)->TriggerMenuEnterEvent(menuEnterIndex);
|
||||
}
|
||||
|
||||
if(menuExitIndex >= 0)
|
||||
{
|
||||
(*it)->TriggerMenuExitEvent(menuExitIndex);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
|
||||
@ -465,8 +465,27 @@ TweenSet *PageBuilder::CreateTweenInstance(xml_node<> *componentXml)
|
||||
GetTweenSets(componentXml->first_node("onIdle"), tweens->GetOnIdleTweens());
|
||||
GetTweenSets(componentXml->first_node("onHighlightEnter"), tweens->GetOnHighlightEnterTweens());
|
||||
GetTweenSets(componentXml->first_node("onHighlightExit"), tweens->GetOnHighlightExitTweens());
|
||||
GetTweenSets(componentXml->first_node("onMenuEnter"), tweens->GetOnMenuEnterTweens());
|
||||
GetTweenSets(componentXml->first_node("onMenuExit"), tweens->GetOnMenuExitTweens());
|
||||
|
||||
for(xml_node<> *menuEnter = componentXml->first_node("onMenuEnter"); menuEnter; menuEnter = menuEnter->next_sibling("onMenuEnter"))
|
||||
{
|
||||
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;
|
||||
}
|
||||
@ -725,7 +744,6 @@ void PageBuilder::BuildViewInfo(xml_node<> *componentXml, ViewInfo *info, xml_no
|
||||
info->SetX(GetHorizontalAlignment(x, 0));
|
||||
info->SetY(GetVerticalAlignment(y, 0));
|
||||
|
||||
|
||||
info->SetXOffset( GetHorizontalAlignment(xOffset, 0));
|
||||
info->SetYOffset( GetVerticalAlignment(yOffset, 0));
|
||||
float xOriginRelative = GetHorizontalAlignment(xOrigin, 0);
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user