Magic_Game/core/Action/ActionTwo.cpp

96 lines
1.7 KiB
C++
Raw Normal View History

2018-04-21 21:24:46 +08:00
#include "..\e2daction.h"
2017-10-19 00:50:04 +08:00
e2d::ActionTwo::ActionTwo(ActionBase * pActionFirst, ActionBase * pActionSecond, bool bAtSameTime/* = false*/)
2018-05-08 17:40:36 +08:00
: _pFirstAction(pActionFirst)
, _pSecondAction(pActionSecond)
, _bAtSameTime(bAtSameTime)
2017-10-19 00:50:04 +08:00
{
2018-05-08 17:40:36 +08:00
ASSERT(_pFirstAction && _pSecondAction, "ActionTwo NULL pointer exception!");
_pFirstAction->retain();
_pSecondAction->retain();
2017-10-19 00:50:04 +08:00
}
e2d::ActionTwo::~ActionTwo()
2017-10-19 00:50:04 +08:00
{
}
e2d::ActionTwo * e2d::ActionTwo::clone() const
2017-10-19 00:50:04 +08:00
{
2018-05-08 17:40:36 +08:00
return new ActionTwo(_pFirstAction->clone(), _pSecondAction->clone());
2017-10-19 00:50:04 +08:00
}
e2d::ActionTwo * e2d::ActionTwo::reverse(bool actionReverse) const
2017-10-19 00:50:04 +08:00
{
if (actionReverse)
{
2018-05-08 17:40:36 +08:00
return new ActionTwo(_pSecondAction->reverse(), _pFirstAction->reverse());
2017-10-19 00:50:04 +08:00
}
else
{
2018-05-08 17:40:36 +08:00
return new ActionTwo(_pSecondAction->clone(), _pFirstAction->clone());
2017-10-19 00:50:04 +08:00
}
}
void e2d::ActionTwo::_init()
2017-10-19 00:50:04 +08:00
{
ActionBase::_init();
2018-05-08 17:40:36 +08:00
_pFirstAction->_pTarget = _pTarget;
_pSecondAction->_pTarget = _pTarget;
2017-10-19 00:50:04 +08:00
2018-05-08 17:40:36 +08:00
_pFirstAction->_init();
if (_bAtSameTime) _pSecondAction->_init();
2017-10-19 00:50:04 +08:00
}
void e2d::ActionTwo::_update()
2017-10-19 00:50:04 +08:00
{
ActionBase::_update();
2017-11-03 12:51:01 +08:00
2018-05-08 17:40:36 +08:00
if (!_pFirstAction->_isDone())
2017-10-19 00:50:04 +08:00
{
2018-05-08 17:40:36 +08:00
_pFirstAction->_update();
2018-05-08 17:40:36 +08:00
if (!_bAtSameTime && _pFirstAction->_isDone())
2017-10-19 00:50:04 +08:00
{
2018-05-08 17:40:36 +08:00
_pSecondAction->_init();
2017-10-19 00:50:04 +08:00
}
}
2018-05-08 17:40:36 +08:00
if (_bAtSameTime)
{
2018-05-08 17:40:36 +08:00
if (!_pSecondAction->_isDone())
{
2018-05-08 17:40:36 +08:00
_pSecondAction->_update();
}
}
2018-05-08 17:40:36 +08:00
else if (_pFirstAction->_isDone())
2017-10-19 00:50:04 +08:00
{
2018-05-08 17:40:36 +08:00
_pSecondAction->_update();
2017-10-19 00:50:04 +08:00
}
2018-05-08 17:40:36 +08:00
if (_pFirstAction->_isDone() && _pSecondAction->_isDone())
2017-10-19 00:50:04 +08:00
{
this->stop();
}
}
void e2d::ActionTwo::reset()
2017-10-19 00:50:04 +08:00
{
ActionBase::reset();
2017-10-19 00:50:04 +08:00
2018-05-08 17:40:36 +08:00
_pFirstAction->reset();
_pSecondAction->reset();
2017-10-19 00:50:04 +08:00
}
void e2d::ActionTwo::destroy()
{
ActionBase::destroy();
2018-05-08 17:40:36 +08:00
SafeRelease(&_pFirstAction);
SafeRelease(&_pSecondAction);
}
void e2d::ActionTwo::_resetTime()
{
2018-05-08 17:40:36 +08:00
_pFirstAction->_resetTime();
_pSecondAction->_resetTime();
}