2017-10-19 00:50:04 +08:00
|
|
|
|
#include "..\eactions.h"
|
2018-03-06 09:56:17 +08:00
|
|
|
|
#include "..\emanagers.h"
|
2017-10-19 00:50:04 +08:00
|
|
|
|
|
2018-02-07 16:37:12 +08:00
|
|
|
|
e2d::Action::Action()
|
2018-01-30 16:45:38 +08:00
|
|
|
|
: m_bRunning(false)
|
|
|
|
|
|
, m_bEnding(false)
|
|
|
|
|
|
, m_bInit(false)
|
|
|
|
|
|
, m_pTarget(nullptr)
|
|
|
|
|
|
, m_pParentScene(nullptr)
|
|
|
|
|
|
, m_fLast(0)
|
2017-10-19 00:50:04 +08:00
|
|
|
|
{
|
2018-03-06 09:56:17 +08:00
|
|
|
|
ActionManager::__add(this);
|
2017-10-19 00:50:04 +08:00
|
|
|
|
}
|
|
|
|
|
|
|
2018-02-07 16:37:12 +08:00
|
|
|
|
e2d::Action::~Action()
|
2017-10-19 00:50:04 +08:00
|
|
|
|
{
|
2018-03-06 09:56:17 +08:00
|
|
|
|
ActionManager::__remove(this);
|
2017-10-19 00:50:04 +08:00
|
|
|
|
}
|
|
|
|
|
|
|
2018-02-07 16:37:12 +08:00
|
|
|
|
bool e2d::Action::isRunning()
|
2017-10-19 00:50:04 +08:00
|
|
|
|
{
|
2017-10-20 00:59:26 +08:00
|
|
|
|
return m_bRunning;
|
2017-10-19 00:50:04 +08:00
|
|
|
|
}
|
|
|
|
|
|
|
2018-02-07 16:37:12 +08:00
|
|
|
|
bool e2d::Action::_isEnding()
|
2017-10-19 00:50:04 +08:00
|
|
|
|
{
|
|
|
|
|
|
return m_bEnding;
|
|
|
|
|
|
}
|
|
|
|
|
|
|
2018-03-06 09:56:17 +08:00
|
|
|
|
void e2d::Action::setTarget(Node* pTarget)
|
2017-10-19 00:50:04 +08:00
|
|
|
|
{
|
2018-03-06 09:56:17 +08:00
|
|
|
|
if (pTarget)
|
|
|
|
|
|
{
|
|
|
|
|
|
m_bRunning = true;
|
|
|
|
|
|
m_pTarget = pTarget;
|
|
|
|
|
|
this->reset();
|
|
|
|
|
|
}
|
2017-10-19 00:50:04 +08:00
|
|
|
|
}
|
|
|
|
|
|
|
2018-02-07 16:37:12 +08:00
|
|
|
|
void e2d::Action::resume()
|
2017-10-19 00:50:04 +08:00
|
|
|
|
{
|
|
|
|
|
|
m_bRunning = true;
|
2018-02-07 16:37:12 +08:00
|
|
|
|
m_fLast = Time::getTotalTime();
|
2017-10-19 00:50:04 +08:00
|
|
|
|
}
|
|
|
|
|
|
|
2018-02-07 16:37:12 +08:00
|
|
|
|
void e2d::Action::pause()
|
2017-10-19 00:50:04 +08:00
|
|
|
|
{
|
|
|
|
|
|
m_bRunning = false;
|
|
|
|
|
|
}
|
|
|
|
|
|
|
2018-02-07 16:37:12 +08:00
|
|
|
|
void e2d::Action::stop()
|
2017-10-19 00:50:04 +08:00
|
|
|
|
{
|
|
|
|
|
|
m_bEnding = true;
|
|
|
|
|
|
}
|
|
|
|
|
|
|
2018-03-06 09:56:17 +08:00
|
|
|
|
e2d::String e2d::Action::getName() const
|
|
|
|
|
|
{
|
|
|
|
|
|
return m_sName;
|
|
|
|
|
|
}
|
|
|
|
|
|
|
2018-03-28 17:56:04 +08:00
|
|
|
|
void e2d::Action::setName(String& name)
|
2018-03-06 09:56:17 +08:00
|
|
|
|
{
|
|
|
|
|
|
m_sName = name;
|
|
|
|
|
|
}
|
|
|
|
|
|
|
2018-02-07 16:37:12 +08:00
|
|
|
|
e2d::Action * e2d::Action::reverse() const
|
2017-10-19 00:50:04 +08:00
|
|
|
|
{
|
2018-02-07 16:37:12 +08:00
|
|
|
|
ASSERT(false, "Action cannot be reversed!");
|
2017-10-19 00:50:04 +08:00
|
|
|
|
return nullptr;
|
|
|
|
|
|
}
|
|
|
|
|
|
|
2018-02-07 16:37:12 +08:00
|
|
|
|
e2d::Node * e2d::Action::getTarget()
|
2017-10-19 00:50:04 +08:00
|
|
|
|
{
|
|
|
|
|
|
return m_pTarget;
|
|
|
|
|
|
}
|
|
|
|
|
|
|
2018-02-07 16:37:12 +08:00
|
|
|
|
void e2d::Action::_init()
|
2017-10-19 00:50:04 +08:00
|
|
|
|
{
|
|
|
|
|
|
m_bInit = true;
|
2017-10-21 19:09:31 +08:00
|
|
|
|
// <20><>¼<EFBFBD><C2BC>ǰʱ<C7B0><CAB1>
|
2018-02-07 16:37:12 +08:00
|
|
|
|
m_fLast = Time::getTotalTime();
|
2017-10-19 00:50:04 +08:00
|
|
|
|
}
|
|
|
|
|
|
|
2018-02-07 16:37:12 +08:00
|
|
|
|
void e2d::Action::_update()
|
2017-11-03 12:51:01 +08:00
|
|
|
|
{
|
|
|
|
|
|
if (!m_bInit)
|
|
|
|
|
|
{
|
|
|
|
|
|
_init();
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
|
2018-02-07 16:37:12 +08:00
|
|
|
|
void e2d::Action::reset()
|
2017-10-19 00:50:04 +08:00
|
|
|
|
{
|
|
|
|
|
|
m_bInit = false;
|
|
|
|
|
|
m_bEnding = false;
|
2018-02-07 16:37:12 +08:00
|
|
|
|
m_fLast = Time::getTotalTime();
|
2017-12-04 10:03:14 +08:00
|
|
|
|
}
|
|
|
|
|
|
|
2018-02-07 16:37:12 +08:00
|
|
|
|
void e2d::Action::_resetTime()
|
2017-12-04 10:03:14 +08:00
|
|
|
|
{
|
2018-02-07 16:37:12 +08:00
|
|
|
|
m_fLast = Time::getTotalTime();
|
2017-10-19 00:50:04 +08:00
|
|
|
|
}
|
2018-03-28 17:56:04 +08:00
|
|
|
|
|
|
|
|
|
|
e2d::ActionMoveBy * e2d::action::MoveBy(double duration, Vector vector)
|
|
|
|
|
|
{
|
|
|
|
|
|
return new (std::nothrow) ActionMoveBy(duration, vector);
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
e2d::ActionMoveTo * e2d::action::MoveTo(double duration, Point pos)
|
|
|
|
|
|
{
|
|
|
|
|
|
return new (std::nothrow) ActionMoveTo(duration, pos);
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
e2d::ActionScaleBy * e2d::action::ScaleBy(double duration, double scale)
|
|
|
|
|
|
{
|
|
|
|
|
|
return new (std::nothrow) ActionScaleBy(duration, scale);
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
e2d::ActionScaleBy * e2d::action::ScaleBy(double duration, double scaleX, double scaleY)
|
|
|
|
|
|
{
|
|
|
|
|
|
return new (std::nothrow) ActionScaleBy(duration, scaleX, scaleY);
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
e2d::ActionScaleTo * e2d::action::ScaleTo(double duration, double scale)
|
|
|
|
|
|
{
|
|
|
|
|
|
return new (std::nothrow) ActionScaleTo(duration, scale);
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
e2d::ActionScaleTo * e2d::action::ScaleTo(double duration, double scaleX, double scaleY)
|
|
|
|
|
|
{
|
|
|
|
|
|
return new (std::nothrow) ActionScaleTo(duration, scaleX, scaleY);
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
e2d::ActionOpacityBy * e2d::action::OpacityBy(double duration, double opacity)
|
|
|
|
|
|
{
|
|
|
|
|
|
return new (std::nothrow) ActionOpacityBy(duration, opacity);
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
e2d::ActionOpacityTo * e2d::action::OpacityTo(double duration, double opacity)
|
|
|
|
|
|
{
|
|
|
|
|
|
return new (std::nothrow) ActionOpacityTo(duration, opacity);
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
e2d::ActionFadeIn * e2d::action::FadeIn(double duration)
|
|
|
|
|
|
{
|
|
|
|
|
|
return new (std::nothrow) ActionFadeIn(duration);
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
e2d::ActionFadeOut * e2d::action::FadeOut(double duration)
|
|
|
|
|
|
{
|
|
|
|
|
|
return new (std::nothrow) ActionFadeOut(duration);
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
e2d::ActionRotateBy * e2d::action::RotateBy(double duration, double rotation)
|
|
|
|
|
|
{
|
|
|
|
|
|
return new (std::nothrow) ActionRotateBy(duration, rotation);
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
e2d::ActionRotateTo * e2d::action::RotateTo(double duration, double rotation)
|
|
|
|
|
|
{
|
|
|
|
|
|
return new (std::nothrow) ActionRotateTo(duration, rotation);
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
e2d::ActionTwo * e2d::action::Two(Action * pActionFirst, Action * pActionSecond, bool bAtSameTime)
|
|
|
|
|
|
{
|
|
|
|
|
|
return new (std::nothrow) ActionTwo(pActionFirst, pActionSecond, bAtSameTime);
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
e2d::ActionSequence * e2d::action::Sequence(int number, Action * action1, ...)
|
|
|
|
|
|
{
|
|
|
|
|
|
auto action = new (std::nothrow) ActionSequence();
|
|
|
|
|
|
if (action)
|
|
|
|
|
|
{
|
|
|
|
|
|
Action ** ppAction = &action1;
|
|
|
|
|
|
|
|
|
|
|
|
while (number > 0)
|
|
|
|
|
|
{
|
|
|
|
|
|
ASSERT((*ppAction) != nullptr, "ActionSequence NULL pointer exception!");
|
|
|
|
|
|
action->add(*ppAction);
|
|
|
|
|
|
ppAction++;
|
|
|
|
|
|
number--;
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
return action;
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
e2d::ActionDelay * e2d::action::Delay(double duration)
|
|
|
|
|
|
{
|
|
|
|
|
|
return new (std::nothrow) ActionDelay(duration);
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
e2d::ActionLoop * e2d::action::Loop(Action * action, int times)
|
|
|
|
|
|
{
|
|
|
|
|
|
return new (std::nothrow) ActionLoop(action, times);
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
e2d::Animation * e2d::action::Animate(double interval, int number, Image * frame, ...)
|
|
|
|
|
|
{
|
|
|
|
|
|
auto animation = new (std::nothrow) Animation(interval);
|
|
|
|
|
|
if (animation)
|
|
|
|
|
|
{
|
|
|
|
|
|
Image ** ppImage = &frame;
|
|
|
|
|
|
|
|
|
|
|
|
while (number > 0)
|
|
|
|
|
|
{
|
|
|
|
|
|
ASSERT((*ppImage) != nullptr, "Animation NULL pointer exception!");
|
|
|
|
|
|
animation->addKeyframe(*ppImage);
|
|
|
|
|
|
ppImage++;
|
|
|
|
|
|
number--;
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
return animation;
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
e2d::ActionFunc * e2d::action::Func(Function func)
|
|
|
|
|
|
{
|
|
|
|
|
|
return new (std::nothrow) ActionFunc(func);
|
|
|
|
|
|
}
|