360 lines
6.1 KiB
C++
360 lines
6.1 KiB
C++
#pragma once
|
|
#include "enodes.h"
|
|
#include "etools.h"
|
|
|
|
namespace e2d
|
|
{
|
|
|
|
class EActionTwo;
|
|
class EActionNeverStop;
|
|
class EActionSequence;
|
|
|
|
class EAction :
|
|
public EObject
|
|
{
|
|
friend ENode;
|
|
friend EActionManager;
|
|
friend EActionTwo;
|
|
friend EActionNeverStop;
|
|
friend EActionSequence;
|
|
|
|
public:
|
|
EAction();
|
|
|
|
virtual ~EAction();
|
|
|
|
// 获取动作运行状态
|
|
virtual bool isRunning();
|
|
|
|
// 获取动作结束状态
|
|
virtual bool isEnding();
|
|
|
|
// 继续动作
|
|
virtual void start();
|
|
|
|
// 继续动作
|
|
virtual void resume();
|
|
|
|
// 暂停动作
|
|
virtual void pause();
|
|
|
|
// 停止动作
|
|
virtual void stop();
|
|
|
|
// 设置动作每一帧的时间间隔
|
|
virtual void setInterval(
|
|
LONGLONG milliSeconds
|
|
);
|
|
|
|
// 获取一个新的拷贝动作
|
|
virtual EAction * copy() const = 0;
|
|
|
|
// 获取一个新的逆向动作
|
|
virtual EAction * reverse() const;
|
|
// 获取执行该动作的目标
|
|
virtual ENode * getTarget();
|
|
|
|
protected:
|
|
// 初始化动作
|
|
virtual void _init();
|
|
|
|
// 执行动作
|
|
virtual void _exec() = 0;
|
|
|
|
// 重置动作
|
|
virtual void _reset();
|
|
|
|
// 进入等待状态
|
|
virtual void wait();
|
|
|
|
// 唤醒
|
|
virtual void notify();
|
|
|
|
protected:
|
|
bool m_bRunning;
|
|
bool m_bWaiting;
|
|
bool m_bEnding;
|
|
bool m_bInit;
|
|
ENode * m_pTarget;
|
|
EScene * m_pParentScene;
|
|
LONGLONG m_nAnimationInterval;
|
|
std::chrono::steady_clock::time_point m_nLast;
|
|
};
|
|
|
|
|
|
class EAnimation :
|
|
public EAction
|
|
{
|
|
public:
|
|
EAnimation(float duration);
|
|
virtual ~EAnimation();
|
|
|
|
protected:
|
|
LONGLONG m_nDuration;
|
|
LONGLONG m_nTotalDuration;
|
|
|
|
protected:
|
|
bool _isEnd() const;
|
|
bool _isDelayEnough();
|
|
virtual void _init() override;
|
|
virtual void _reset() override;
|
|
};
|
|
|
|
|
|
class EActionMoveBy :
|
|
public EAnimation
|
|
{
|
|
public:
|
|
EActionMoveBy(float duration, EVec vector);
|
|
virtual ~EActionMoveBy();
|
|
|
|
virtual EActionMoveBy * copy() const override;
|
|
virtual EActionMoveBy * reverse() const override;
|
|
|
|
protected:
|
|
EPoint m_BeginPos;
|
|
EVec m_MoveVector;
|
|
|
|
protected:
|
|
virtual void _init() override;
|
|
virtual void _exec() override;
|
|
virtual void _reset() override;
|
|
};
|
|
|
|
|
|
class EActionMoveTo :
|
|
public EActionMoveBy
|
|
{
|
|
public:
|
|
EActionMoveTo(float duration, EPoint pos);
|
|
virtual ~EActionMoveTo();
|
|
|
|
virtual EActionMoveTo * copy() const override;
|
|
|
|
protected:
|
|
EPoint m_EndPos;
|
|
|
|
protected:
|
|
virtual void _init() override;
|
|
virtual void _reset() override;
|
|
};
|
|
|
|
|
|
class EActionScaleBy :
|
|
public EAnimation
|
|
{
|
|
public:
|
|
EActionScaleBy(float duration, float scaleX, float scaleY);
|
|
virtual ~EActionScaleBy();
|
|
|
|
virtual EActionScaleBy * copy() const override;
|
|
virtual EActionScaleBy * reverse() const override;
|
|
|
|
protected:
|
|
float m_nBeginScaleX;
|
|
float m_nBeginScaleY;
|
|
float m_nVariationX;
|
|
float m_nVariationY;
|
|
|
|
protected:
|
|
virtual void _init() override;
|
|
virtual void _exec() override;
|
|
virtual void _reset() override;
|
|
};
|
|
|
|
|
|
class EActionScaleTo :
|
|
public EActionScaleBy
|
|
{
|
|
public:
|
|
EActionScaleTo(float duration, float scaleX, float scaleY);
|
|
virtual ~EActionScaleTo();
|
|
|
|
virtual EActionScaleTo * copy() const override;
|
|
|
|
protected:
|
|
float m_nEndScaleX;
|
|
float m_nEndScaleY;
|
|
|
|
protected:
|
|
virtual void _init() override;
|
|
virtual void _reset() override;
|
|
};
|
|
|
|
|
|
class EActionOpacityBy :
|
|
public EAnimation
|
|
{
|
|
public:
|
|
EActionOpacityBy(float duration, float opacity);
|
|
virtual ~EActionOpacityBy();
|
|
|
|
virtual EActionOpacityBy * copy() const override;
|
|
virtual EActionOpacityBy * reverse() const override;
|
|
|
|
protected:
|
|
float m_nBeginVal;
|
|
float m_nVariation;
|
|
|
|
protected:
|
|
virtual void _init() override;
|
|
virtual void _exec() override;
|
|
virtual void _reset() override;
|
|
};
|
|
|
|
|
|
class EActionOpacityTo :
|
|
public EActionOpacityBy
|
|
{
|
|
public:
|
|
EActionOpacityTo(float duration, float opacity);
|
|
virtual ~EActionOpacityTo();
|
|
|
|
virtual EActionOpacityTo * copy() const override;
|
|
|
|
protected:
|
|
float m_nEndVal;
|
|
|
|
protected:
|
|
virtual void _init() override;
|
|
virtual void _reset() override;
|
|
};
|
|
|
|
|
|
class ActionFadeIn :
|
|
public EActionOpacityTo
|
|
{
|
|
public:
|
|
ActionFadeIn(float duration) : EActionOpacityTo(duration, 1) {}
|
|
};
|
|
|
|
|
|
class ActionFadeOut :
|
|
public EActionOpacityTo
|
|
{
|
|
public:
|
|
ActionFadeOut(float duration) : EActionOpacityTo(duration, 0) {}
|
|
};
|
|
|
|
|
|
class EActionTwo :
|
|
public EAction
|
|
{
|
|
public:
|
|
EActionTwo(EAction * actionFirst, EAction * actionSecond);
|
|
virtual ~EActionTwo();
|
|
|
|
virtual EActionTwo * copy() const override;
|
|
virtual EActionTwo * reverse(bool actionReverse = true) const;
|
|
|
|
protected:
|
|
EAction * m_FirstAction;
|
|
EAction * m_SecondAction;
|
|
|
|
protected:
|
|
virtual void _init() override;
|
|
virtual void _exec() override;
|
|
virtual void _reset() override;
|
|
};
|
|
|
|
|
|
class EActionSequence :
|
|
public EAction
|
|
{
|
|
public:
|
|
EActionSequence();
|
|
EActionSequence(int number, EAction * action1, ...);
|
|
virtual ~EActionSequence();
|
|
|
|
void addAction(EAction * action);
|
|
virtual EActionSequence * copy() const override;
|
|
virtual EActionSequence * reverse(bool actionReverse = true) const;
|
|
|
|
protected:
|
|
UINT m_nActionIndex;
|
|
std::vector<EAction*> m_vActions;
|
|
|
|
protected:
|
|
virtual void _init() override;
|
|
virtual void _exec() override;
|
|
virtual void _reset() override;
|
|
};
|
|
|
|
|
|
class EActionDelay :
|
|
public EAction
|
|
{
|
|
public:
|
|
EActionDelay(float duration);
|
|
virtual ~EActionDelay();
|
|
|
|
virtual EActionDelay * copy() const override;
|
|
|
|
protected:
|
|
virtual void _init() override;
|
|
virtual void _exec() override;
|
|
virtual void _reset() override;
|
|
};
|
|
|
|
|
|
class EActionNeverStop :
|
|
public EAction
|
|
{
|
|
public:
|
|
EActionNeverStop(EAction * action);
|
|
virtual ~EActionNeverStop();
|
|
|
|
virtual EActionNeverStop * copy() const override;
|
|
|
|
protected:
|
|
EAction * m_Action;
|
|
|
|
protected:
|
|
virtual void _init() override;
|
|
virtual void _exec() override;
|
|
virtual void _reset() override;
|
|
};
|
|
|
|
|
|
class EActionFrames :
|
|
public EAction
|
|
{
|
|
public:
|
|
EActionFrames();
|
|
EActionFrames(LONGLONG frameDelay);
|
|
~EActionFrames();
|
|
|
|
void addFrame(ESpriteFrame * frame);
|
|
virtual EActionFrames * copy() const override;
|
|
virtual EActionFrames * reverse() const override;
|
|
|
|
protected:
|
|
UINT m_nFrameIndex;
|
|
EVector<ESpriteFrame*> m_vFrames;
|
|
|
|
protected:
|
|
virtual void _init() override;
|
|
virtual void _exec() override;
|
|
virtual void _reset() override;
|
|
};
|
|
|
|
|
|
class EActionCallback :
|
|
public EAction
|
|
{
|
|
public:
|
|
EActionCallback(const std::function<void()>& callback);
|
|
~EActionCallback();
|
|
|
|
virtual EActionCallback * copy() const override;
|
|
|
|
protected:
|
|
std::function<void()> m_Callback;
|
|
|
|
protected:
|
|
virtual void _init() override;
|
|
virtual void _exec() override;
|
|
virtual void _reset() override;
|
|
};
|
|
|
|
} |