1
0
Fork 0
mirror of https://github.com/AquariaOSE/Aquaria.git synced 2025-07-03 06:24:32 +00:00

Continue implementing support for multiple ActionSets

This commit is contained in:
fgenesis 2016-07-16 03:09:44 +02:00
parent 520239a845
commit b438064517
12 changed files with 104 additions and 133 deletions

View file

@ -31,19 +31,32 @@ ActionMapper::~ActionMapper()
clearCreatedEvents();
}
ActionData *ActionMapper::getActionDataByID(int actionID)
ActionData *ActionMapper::getActionDataByIDAndSource(int actionID, int source)
{
for (ActionDataSet::iterator i = actionData.begin(); i != actionData.end(); i++)
for (ActionDataSet::iterator i = actionData.begin(); i != actionData.end(); ++i)
{
if ((*i).id == actionID)
if (i->id == actionID && i->source == source)
return &(*i);
}
return 0;
}
bool ActionMapper::isActing(int actionID)
bool ActionMapper::isActing(int actionID, int source)
{
ActionData *ad = getActionDataByID(actionID);
if(source < 0)
{
for (ActionDataSet::iterator i = actionData.begin(); i != actionData.end(); ++i)
{
ActionData& ad = *i;
if(ad.id == actionID)
for (ButtonList::iterator ii = ad.buttonList.begin(); ii != ad.buttonList.end(); ++ii)
if (keyDownMap[*ii])
return true;
}
return false;
}
ActionData *ad = getActionDataByIDAndSource(actionID, source);
if (ad)
{
ButtonList::iterator i = ad->buttonList.begin();
@ -58,21 +71,15 @@ bool ActionMapper::isActing(int actionID)
void ActionMapper::addAction(int actionID, int k, int source)
{
ActionData *ad = getActionDataByID(actionID);
ActionData *ad = getActionDataByIDAndSource(actionID, source);
if (!ad)
{
ActionData data;
data.id = actionID;
data.source = source;
actionData.push_back(data);
ad = getActionDataByID(actionID);
if (!ad)
{
std::ostringstream os;
os << "Could not create action for Action ID [" << actionID << "]";
errorLog(os.str());
return;
}
ad = &actionData.back();
}
if (ad)
@ -83,8 +90,6 @@ void ActionMapper::addAction(int actionID, int k, int source)
}
}
void ActionMapper::addAction(Event *event, int k, int state)
{
ActionData data;
@ -116,8 +121,6 @@ void ActionMapper::clearCreatedEvents()
createdEvents.clear();
}
void ActionMapper::enableInput()
{
inputEnabled = true;
@ -128,52 +131,27 @@ void ActionMapper::disableInput()
inputEnabled = false;
}
void ActionMapper::removeAction(int actionID)
bool ActionMapper::pollAction(int actionID, int source)
{
ActionData *ad = getActionDataByID(actionID);
if (ad)
if(source < 0)
{
ButtonList::iterator i = ad->buttonList.begin();
for (; i != ad->buttonList.end(); i++)
{
int k = (*i);
cleared = true; // it's a hack, but it works
keyDownMap.erase(k);
}
for (ActionDataSet::iterator i = actionData.begin(); i != actionData.end();)
{
if (i->id == actionID)
i = actionData.erase(i);
else
i++;
}
for (ActionDataSet::iterator i = actionData.begin(); i != actionData.end(); i++)
if(i->id == actionID && _pollActionData(*i))
return true;
return false;
}
ActionData *ad = getActionDataByIDAndSource(actionID, source);
return ad && _pollActionData(*ad);
}
bool ActionMapper::pollAction(int actionID)
bool ActionMapper::_pollActionData(const ActionData& ad)
{
bool down = false;
ActionData *ad = getActionDataByID(actionID);
if (ad)
{
ButtonList *blist = &ad->buttonList;
ButtonList::iterator j;
j = blist->begin();
for (; j != blist->end(); j++)
{
if (getKeyState((*j)))
{
down = true;
break;
}
}
}
return down;
const ButtonList& blist = ad.buttonList;
for (ButtonList::const_iterator j = blist.begin(); j != blist.end(); j++)
if (getKeyState((*j)))
return true;
return false;
}
bool ActionMapper::getKeyState(int k)
@ -296,18 +274,3 @@ void ActionMapper::clearActions()
keyDownMap.clear();
actionData.clear();
}
void ActionMapper::removeAllActions()
{
std::vector <int> deleteList;
ActionDataSet::iterator i;
for (i = actionData.begin(); i != actionData.end(); i++)
{
deleteList.push_back(i->id);
}
for (int c = 0; c < deleteList.size(); c++)
{
removeAction (deleteList[c]);
}
actionData.clear();
}