Magic_Game/Easy2D/Tool/ActionManager.cpp

176 lines
2.6 KiB
C++
Raw Normal View History

2017-09-27 17:56:28 +08:00
#include "..\easy2d.h"
#include <assert.h>
2017-09-27 17:56:28 +08:00
static std::vector<Action*> s_vActions;
void ActionManager::__exec()
{
// <20><>ȡ<EFBFBD><C8A1>ǰʱ<C7B0><CAB1>
static LARGE_INTEGER nNow;
QueryPerformanceCounter(&nNow);
// ѭ<><D1AD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>еĶ<D0B5><C4B6><EFBFBD>
for (size_t i = 0; i < s_vActions.size(); i++)
2017-09-27 17:56:28 +08:00
{
auto a = s_vActions[i];
if (a->isRunning() && a->_exec(nNow))
2017-09-27 17:56:28 +08:00
{
// _exec <20><><EFBFBD><EFBFBD> true ʱ˵<CAB1><CBB5><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ѿ<EFBFBD><D1BE><EFBFBD><EFBFBD><EFBFBD>
a->release();
s_vActions.erase(s_vActions.begin() + i);
2017-09-27 17:56:28 +08:00
}
}
}
void ActionManager::addAction(Action * action)
{
if (action)
{
#ifdef _DEBUG
for (auto a : s_vActions)
{
assert(a != action);
}
#endif
action->m_pParentScene = App::getCurrentScene();
action->_init();
s_vActions.push_back(action);
}
}
void ActionManager::bindActionsWithScene(Scene * scene)
{
for (auto action : s_vActions)
{
if (!action->m_pParentScene)
{
action->m_pParentScene = App::getCurrentScene();
}
}
}
void ActionManager::stopAllSceneActions(Scene * scene)
{
for (auto action : s_vActions)
{
if (action->m_pParentScene == scene)
{
action->stop();
}
2017-09-27 17:56:28 +08:00
}
}
void ActionManager::startAction(Action * action)
{
resumeAction(action);
}
void ActionManager::resumeAction(Action * action)
{
for (auto act : s_vActions)
{
if (act == action)
{
act->resume();
}
}
}
void ActionManager::pauseAction(Action * action)
{
for (auto act : s_vActions)
{
if (act == action)
{
act->pause();
}
}
}
void ActionManager::stopAction(Action * action)
{
for (auto act : s_vActions)
{
if (act == action)
{
act->stop();
}
}
}
void ActionManager::startSpriteAllActions(Sprite * sprite)
{
resumeSpriteAllActions(sprite);
}
void ActionManager::resumeSpriteAllActions(Sprite * sprite)
{
for (auto action : s_vActions)
{
if (action->m_pTargetSprite == sprite)
2017-09-27 17:56:28 +08:00
{
action->resume();
}
}
}
void ActionManager::pauseSpriteAllActions(Sprite * sprite)
{
for (auto action : s_vActions)
{
if (action->m_pTargetSprite == sprite)
2017-09-27 17:56:28 +08:00
{
action->pause();
}
}
}
void ActionManager::stopSpriteAllActions(Sprite * sprite)
{
for (auto action : s_vActions)
{
if (action->m_pTargetSprite == sprite)
2017-09-27 17:56:28 +08:00
{
action->stop();
}
}
}
void ActionManager::startAllActions()
{
resumeAllActions();
}
void ActionManager::resumeAllActions()
{
for (auto action : s_vActions)
{
action->resume();
}
}
void ActionManager::pauseAllActions()
{
for (auto action : s_vActions)
{
action->pause();
}
}
void ActionManager::stopAllActions()
{
for (auto action : s_vActions)
{
action->stop();
}
}
void ActionManager::clearAllActions()
{
for (auto action : s_vActions)
{
action->autoRelease();
action->release();
}
s_vActions.clear();
}