Magic_Game/Easy2D/e2daction.h

313 lines
5.7 KiB
C++

#pragma once
#include <e2dbase.h>
namespace easy2d
{
class Action :
public Object
{
friend class Sprite;
friend class ActionManager;
friend class ActionTwo;
friend class ActionNeverStop;
friend class ActionSequence;
public:
Action();
virtual ~Action();
bool isRunning();
void start();
void resume();
void pause();
void stop();
void setInterval(UINT ms);
virtual Action * copy() = 0;
virtual Action * reverse() const;
protected:
bool m_bRunning;
bool m_bStop;
Sprite * m_pParent;
UINT m_nMilliSeconds;
LARGE_INTEGER m_nLast;
LARGE_INTEGER m_nAnimationInterval;
protected:
virtual void _init() = 0;
virtual bool _exec(LARGE_INTEGER nNow) = 0;
virtual void _reset() = 0;
};
class Animation :
public Action
{
public:
Animation(float duration);
virtual ~Animation();
protected:
UINT m_nDuration;
UINT m_nTotalDuration;
protected:
virtual void _init() override;
virtual bool _exec(LARGE_INTEGER nNow) override;
virtual void _reset() override;
};
class ActionMoveBy :
public Animation
{
public:
ActionMoveBy(float duration, CVector vec);
virtual ~ActionMoveBy();
virtual ActionMoveBy * copy() override;
virtual ActionMoveBy * reverse() const override;
protected:
CPoint m_BeginPos;
CVector m_MoveVector;
protected:
virtual void _init() override;
virtual bool _exec(LARGE_INTEGER nNow) override;
virtual void _reset() override;
};
class ActionMoveTo :
public ActionMoveBy
{
public:
ActionMoveTo(float duration, CPoint pos);
virtual ~ActionMoveTo();
virtual ActionMoveTo * copy() override;
protected:
CPoint m_EndPos;
protected:
virtual void _init() override;
virtual void _reset() override;
};
class ActionScaleBy :
public Animation
{
public:
ActionScaleBy(float duration, float scaleX, float scaleY);
virtual ~ActionScaleBy();
virtual ActionScaleBy * copy() override;
virtual ActionScaleBy * reverse() const override;
protected:
float m_nBeginScaleX;
float m_nBeginScaleY;
float m_nVariationX;
float m_nVariationY;
protected:
virtual void _init() override;
virtual bool _exec(LARGE_INTEGER nNow) override;
virtual void _reset() override;
};
class ActionScaleTo :
public ActionScaleBy
{
public:
ActionScaleTo(float duration, float scaleX, float scaleY);
virtual ~ActionScaleTo();
virtual ActionScaleTo * copy() override;
protected:
float m_nEndScaleX;
float m_nEndScaleY;
protected:
virtual void _init() override;
virtual void _reset() override;
};
class ActionOpacityBy :
public Animation
{
public:
ActionOpacityBy(float duration, float opacity);
virtual ~ActionOpacityBy();
virtual ActionOpacityBy * copy() override;
virtual ActionOpacityBy * reverse() const override;
protected:
float m_nBeginVal;
float m_nVariation;
protected:
virtual void _init() override;
virtual bool _exec(LARGE_INTEGER nNow) override;
virtual void _reset() override;
};
class ActionOpacityTo :
public ActionOpacityBy
{
public:
ActionOpacityTo(float duration, float opacity);
virtual ~ActionOpacityTo();
virtual ActionOpacityTo * copy() override;
protected:
float m_nEndVal;
protected:
virtual void _init() override;
virtual void _reset() override;
};
class ActionFadeIn :
public ActionOpacityTo
{
public:
ActionFadeIn(float duration) : ActionOpacityTo(duration, 1) {}
};
class ActionFadeOut :
public ActionOpacityTo
{
public:
ActionFadeOut(float duration) : ActionOpacityTo(duration, 0) {}
};
class ActionTwo :
public Action
{
public:
ActionTwo(Action * actionFirst, Action * actionSecond);
virtual ~ActionTwo();
virtual ActionTwo * copy() override;
virtual ActionTwo * reverse() const override;
protected:
Action * m_FirstAction;
Action * m_SecondAction;
protected:
virtual void _init() override;
virtual bool _exec(LARGE_INTEGER nNow) override;
virtual void _reset() override;
};
class ActionSequence :
public Action
{
public:
ActionSequence(int number, Action * action1, ...);
virtual ~ActionSequence();
virtual ActionSequence * copy() override;
virtual ActionSequence * reverse() const override;
protected:
UINT m_nActionIndex;
std::vector<Action*> m_vActions;
protected:
virtual void _init() override;
virtual bool _exec(LARGE_INTEGER nNow) override;
virtual void _reset() override;
};
class ActionDelay :
public Action
{
public:
ActionDelay(float duration);
virtual ~ActionDelay();
virtual ActionDelay * copy() override;
protected:
virtual void _init() override;
virtual bool _exec(LARGE_INTEGER nNow) override;
virtual void _reset() override;
};
class ActionNeverStop :
public Action
{
public:
ActionNeverStop(Action * action);
virtual ~ActionNeverStop();
virtual ActionNeverStop * copy() override;
protected:
Action * m_Action;
protected:
virtual void _init() override;
virtual bool _exec(LARGE_INTEGER nNow) override;
virtual void _reset() override;
};
class ActionFrames :
public Action
{
public:
ActionFrames();
~ActionFrames();
void addFrame(Image * frame);
virtual ActionFrames * copy() override;
virtual ActionFrames * reverse() const override;
protected:
UINT m_nFrameIndex;
std::vector<Image*> m_vFrames;
protected:
virtual void _init() override;
virtual bool _exec(LARGE_INTEGER nNow) override;
virtual void _reset() override;
};
class ActionCallback :
public Action
{
public:
ActionCallback(const std::function<void()>& callback);
~ActionCallback();
virtual ActionCallback * copy() override;
protected:
std::function<void()> m_Callback;
protected:
virtual void _init() override;
virtual bool _exec(LARGE_INTEGER nNow) override;
virtual void _reset() override;
};
} // End of easy2d namespace