diff --git a/cocos2dx/actions/CCIntervalAction.cpp b/cocos2dx/actions/CCIntervalAction.cpp new file mode 100644 index 0000000000..aca3f7e332 --- /dev/null +++ b/cocos2dx/actions/CCIntervalAction.cpp @@ -0,0 +1,679 @@ +/**************************************************************************** +Copyright (c) 2010 cocos2d-x.org + +http://www.cocos2d-x.org + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in +all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +THE SOFTWARE. +****************************************************************************/ + +#include "CCIntervalAction.h" +#include "CCSprite.h" +#include "CCNode.h" +#include "support/CGPointExtension.h" + +namespace cocos2d { + +// +// IntervalAction +// +CCIntervalAction* CCIntervalAction::actionWithDuration(ccTime d) +{ + return NULL; +} + +CCIntervalAction* CCIntervalAction::initWithDuration(cocos2d::ccTime d) +{ + return NULL; +} + +NSObject* CCIntervalAction::copyWithZone(NSZone *pZone) +{ + return NULL; +} + +bool CCIntervalAction::isDone(void) +{ + return false; +} + +void CCIntervalAction::step(ccTime dt) +{ +} + +void CCIntervalAction::startWithTarget(NSObject *pTarget) +{ +} + +CCIntervalAction* CCIntervalAction::reverse(void) +{ + return NULL; +} + +// +// Sequence +// +CCSequence* CCSequence::actionOneTwo(cocos2d::CCFiniteTimeAction *pActionOne, cocos2d::CCFiniteTimeAction *pActionTwo) +{ + return NULL; +} + +CCSequence* CCSequence::actions(cocos2d::CCFiniteTimeAction *pAction1, ...) +{ + return NULL; +} + +CCSequence* CCSequence::initOneTwo(cocos2d::CCFiniteTimeAction *pActionOne, cocos2d::CCFiniteTimeAction *pActionTwo) +{ + return NULL; +} + +NSObject* CCSequence::copyWithZone(NSZone *pZone) +{ + return NULL; +} + +CCSequence::~CCSequence(void) +{ +} + +void CCSequence::startWithTarget(cocos2d::NSObject *pTarget) +{ +} + +void CCSequence::stop(void) +{ +} + +void CCSequence::update(cocos2d::ccTime time) +{ +} + +CCIntervalAction* CCSequence::reverse(void) +{ + return NULL; +} + +// +// Repeat +// +CCRepeat* CCRepeat::actionWithAction(cocos2d::CCFiniteTimeAction *pAction, unsigned int times) +{ + return NULL; +} + +CCRepeat* CCRepeat::initWithAction(cocos2d::CCFiniteTimeAction *pAction, unsigned int times) +{ + return NULL; +} + +NSObject* CCRepeat::copyWithZone(cocos2d::NSZone *pZone) +{ + return NULL; +} + +CCRepeat::~CCRepeat(void) +{ +} + +void CCRepeat::startWithTarget(cocos2d::NSObject *pTarget) +{ +} + +void CCRepeat::stop(void) +{ +} + +// issue #80. Instead of hooking step:, hook update: since it can be called by any +// container action like Repeat, Sequence, AccelDeccel, etc.. +void CCRepeat::update(cocos2d::ccTime time) +{ +} + +bool CCRepeat::isDone(void) +{ + return false; +} + +CCIntervalAction* CCRepeat::reverse(void) +{ + return NULL; +} + +// +// Spawn +// +CCSpawn* CCSpawn::actions(cocos2d::CCFiniteTimeAction *pAction1, ...) +{ + return NULL; +} + +CCSpawn* CCSpawn::initOneTwo(cocos2d::CCFiniteTimeAction *pAction1, cocos2d::CCFiniteTimeAction *pAction2) +{ + return NULL; +} + +NSObject* CCSpawn::copyWithZone(cocos2d::NSZone *pZone) +{ + return NULL; +} + +CCSpawn::~CCSpawn(void) +{ +} + +void CCSpawn::startWithTarget(cocos2d::NSObject *pTarget) +{ +} + +void CCSpawn::stop(void) +{ +} + +void CCSpawn::update(cocos2d::ccTime time) +{ +} + +CCIntervalAction* CCSpawn::reverse(void) +{ + return NULL; +} + +// +// RotateTo +// +CCRotateTo* CCRotateTo::actionWithDuration(cocos2d::ccTime duration, float fDeltaAngle) +{ + return NULL; +} + +CCRotateTo* CCRotateTo::initWithDuration(cocos2d::ccTime duration, float fDeltaAngle) +{ + return NULL; +} + +NSObject* CCRotateTo::copyWithZone(cocos2d::NSZone *pZone) +{ + return NULL; +} + +void CCRotateTo::startWithTarget(cocos2d::NSObject *pTarget) +{ +} + +void CCRotateTo::update(cocos2d::ccTime time) +{ +} + +// +// RotateBy +// +CCRotateBy* CCRotateBy::actionWithDuration(cocos2d::ccTime duration, float fDeltaAngle) +{ + return NULL; +} + +CCRotateBy* CCRotateBy::initWithDuration(cocos2d::ccTime duration, float fDeltaAngle) +{ + return NULL; +} + +NSObject* CCRotateBy::copyWithZone(cocos2d::NSZone *pZone) +{ + return NULL; +} + +void CCRotateBy::startWithTarget(cocos2d::NSObject *pTarget) +{ +} + +void CCRotateBy::update(cocos2d::ccTime time) +{ +} + +CCIntervalAction* CCRotateBy::reverse(void) +{ + return NULL; +} + +// +// MoveTo +// +CCMoveTo* CCMoveTo::actionWithDuration(cocos2d::ccTime duration, cocos2d::CGPoint position) +{ + return NULL; +} + +CCMoveTo* CCMoveTo::initWithDuration(cocos2d::ccTime duration, cocos2d::CGPoint position) +{ + return NULL; +} + +NSObject* CCMoveTo::copyWithZone(cocos2d::NSZone *pZone) +{ + return NULL; +} + +void CCMoveTo::update(cocos2d::ccTime time) +{ +} + +// +// MoveBy +// +CCMoveBy* CCMoveBy::actionWithDuration(cocos2d::ccTime duration, cocos2d::CGPoint position) +{ + return NULL; +} + +CCMoveBy* CCMoveBy::initWithDuration(cocos2d::ccTime duration, cocos2d::CGPoint position) +{ + return NULL; +} + +NSObject* CCMoveBy::copyWithZone(cocos2d::NSZone *pZone) +{ + return NULL; +} + +void CCMoveBy::startWithTarget(cocos2d::NSObject *pTarget) +{ +} + +CCIntervalAction* CCMoveBy::reverse(void) +{ + return NULL; +} + +// +// JumpBy +// +CCJumpBy* CCJumpBy::actionWithDuration(cocos2d::ccTime duration, cocos2d::CGPoint position, cocos2d::ccTime height, int jumps) +{ + return NULL; +} + +CCJumpBy* CCJumpBy::initWithDuration(cocos2d::ccTime duration, cocos2d::CGPoint position, cocos2d::ccTime height, int jumps) +{ + return NULL; +} + +NSObject* CCJumpBy::copyWithZone(cocos2d::NSZone *pZone) +{ + return NULL; +} + +void CCJumpBy::startWithTarget(cocos2d::NSObject *pTarget) +{ +} + +void CCJumpBy::update(cocos2d::ccTime time) +{ +} + +CCIntervalAction* CCJumpBy::reverse(void) +{ + return NULL; +} + +// +// JumpTo +// +void CCJumpTo::startWithTarget(cocos2d::NSObject *pTarget) +{ +} + +// Bezier cubic formula: +// ((1 - t) + t)3 = 1 +// Expands toĦ­ +// (1 - t)3 + 3t(1-t)2 + 3t2(1 - t) + t3 = 1 +static inline float bezierat( float a, float b, float c, float d, ccTime t ) +{ + return (powf(1-t,3) * a + + 3*t*(powf(1-t,2))*b + + 3*powf(t,2)*(1-t)*c + + powf(t,3)*d ); +} + +// +// BezierBy +// +CCBezierBy* CCBezierBy::actionWithDuration(cocos2d::ccTime t, cocos2d::ccBezierConfig c) +{ + return NULL; +} + +CCBezierBy* CCBezierBy::initWithDuration(cocos2d::ccTime t, cocos2d::ccBezierConfig c) +{ + return NULL; +} + +void CCBezierBy::startWithTarget(cocos2d::NSObject *pTarget) +{ + +} + +void CCBezierBy::update(cocos2d::ccTime time) +{ +} + +CCIntervalAction* CCBezierBy::reverse(void) +{ + return NULL; +} + +// +// BezierTo +// +void CCBezierTo::startWithTarget(cocos2d::NSObject *pTarget) +{ +} + +// +// ScaleTo +// +CCScaleTo* CCScaleTo::actionWithDuration(cocos2d::ccTime duration, float s) +{ + return NULL; +} + +CCScaleTo* CCScaleTo::initWithDuration(cocos2d::ccTime duration, float s) +{ + return NULL; +} + +CCScaleTo* CCScaleTo::actionWithDuration(cocos2d::ccTime duration, float sx, float sy) +{ + return NULL; +} + +CCScaleTo* CCScaleTo::initWithDuration(cocos2d::ccTime duration, float sx, float sy) +{ + return NULL; +} + +NSObject* CCScaleTo::copyWithZone(cocos2d::NSZone *pZone) +{ + return NULL; +} + +void CCScaleTo::startWithTarget(cocos2d::NSObject *pTarget) +{ +} + +void CCScaleTo::update(cocos2d::ccTime time) +{ +} + +// +// ScaleBy +// +void CCScaleBy::startWithTarget(cocos2d::NSObject *pTarget) +{ +} + +CCIntervalAction* CCScaleBy::reverse(void) +{ + return NULL; +} + +// +// Blink +// +CCBlink* CCBlink::actionWithDuration(cocos2d::ccTime duration, unsigned int uBlinks) +{ + return NULL; +} + +CCBlink* CCBlink::initWithDuration(cocos2d::ccTime duration, unsigned int uBlinks) +{ + return NULL; +} + +NSObject* CCBlink::copyWithZone(cocos2d::NSZone *pZone) +{ + return NULL; +} + +void CCBlink::update(cocos2d::ccTime time) +{ +} + +CCIntervalAction* CCBlink::reverse(void) +{ + return NULL; +} + +// +// FadeIn +// +void CCFadeIn::update(cocos2d::ccTime time) +{ +} + +CCIntervalAction* CCFadeIn::reverse(void) +{ + return NULL; +} + +// +// FadeOut +// +void CCFadeOut::update(cocos2d::ccTime time) +{ +} + +CCIntervalAction* CCFadeOut::reverse(void) +{ + return NULL; +} + +// +// FadeTo +// +CCFadeTo* CCFadeTo::actionWithDuration(cocos2d::ccTime duration, GLubyte opacity) +{ + return NULL; +} + +CCFadeTo* CCFadeTo::initWithDuration(cocos2d::ccTime duration, GLubyte opacity) +{ + return NULL; +} + +NSObject* CCFadeTo::copyWithZone(cocos2d::NSZone *pZone) +{ + return NULL; +} + +void CCFadeTo::startWithTarget(cocos2d::NSObject *pTarget) +{ +} + +void CCFadeTo::update(cocos2d::ccTime time) +{ +} + +// +// TintTo +// +CCTintTo* CCTintTo::actionWithDuration(cocos2d::ccTime duration, GLubyte red, GLubyte green, GLubyte blue) +{ + return NULL; +} + +CCTintTo* CCTintTo::initWithDuration(cocos2d::ccTime duration, GLubyte red, GLubyte green, GLubyte blue) +{ + return NULL; +} + +NSObject* CCTintTo::copyWithZone(cocos2d::NSZone *pZone) +{ + return NULL; +} + +void CCTintTo::startWithTarget(cocos2d::NSObject *pTarget) +{ +} + +void CCTintTo::update(cocos2d::ccTime time) +{ +} + +// +// TintBy +// +CCTintBy* CCTintBy::actionWithDuration(cocos2d::ccTime duration, GLshort deltaRed, GLshort deltaGreen, GLshort deltaBlue) +{ + return NULL; +} + +CCTintBy* CCTintBy::initWithDuration(cocos2d::ccTime duration, GLshort deltaRed, GLshort deltaGreen, GLshort deltaBlue) +{ + return NULL; +} + +NSObject* CCTintBy::copyWithZone(cocos2d::NSZone *pZone) +{ + return NULL; +} + +void CCTintBy::startWithTarget(cocos2d::NSObject *pTarget) +{ +} + +void CCTintBy::update(cocos2d::ccTime time) +{ +} + +CCIntervalAction* CCTintBy::reverse(void) +{ + return NULL; +} + +// +// DelayTime +// +void CCDelayTime::update(cocos2d::ccTime time) +{ +} + +CCIntervalAction* CCDelayTime::reverse(void) +{ + return NULL; +} + +// +// ReverseTime +// +CCReverseTime* CCReverseTime::actionWithAction(cocos2d::CCFiniteTimeAction *pAction) +{ + return NULL; +} + +CCReverseTime* CCReverseTime::initWithAction(cocos2d::CCFiniteTimeAction *pAction) +{ + return NULL; +} + +NSObject* CCReverseTime::copyWithZone(cocos2d::NSZone *pZone) +{ + return NULL; +} + +CCReverseTime::~CCReverseTime(void) +{ +} + +void CCReverseTime::startWithTarget(cocos2d::NSObject *pTarget) +{ +} + +void CCReverseTime::stop(void) +{ +} + +void CCReverseTime::update(cocos2d::ccTime time) +{ +} + +CCIntervalAction* CCReverseTime::reverse(void) +{ + return NULL; +} + +// +// Animate +// +CCAnimate* CCAnimate::actionWithAnimation(cocos2d::CCAnimation *pAnimation) +{ + return NULL; +} + +CCAnimate* CCAnimate::initWithAnimation(cocos2d::CCAnimation *pAnimation) +{ + return NULL; +} + +CCAnimate* CCAnimate::actionWithAnimation(cocos2d::CCAnimation *pAnimation, bool bRestoreOriginalFrame) +{ + return NULL; +} + +CCAnimate* CCAnimate::initWithAnimation(cocos2d::CCAnimation *pAnimation, bool bRestoreOriginalFrame) +{ + return NULL; +} + +CCAnimate* CCAnimate::actionWithDuration(cocos2d::ccTime duration, cocos2d::CCAnimation *pAnimation, bool bRestoreOriginalFrame) +{ + return NULL; +} + +CCAnimate* CCAnimate::initWithDuration(cocos2d::ccTime duration, cocos2d::CCAnimation *pAnimation, bool bRestoreOriginalFrame) +{ + return NULL; +} + +NSObject* CCAnimate::copyWithZone(cocos2d::NSZone *pZone) +{ + return NULL; +} + +CCAnimate::~CCAnimate(void) +{ +} + +void CCAnimate::startWithTarget(cocos2d::NSObject *pTarget) +{ +} + +void CCAnimate::stop(void) +{ +} + +void CCAnimate::update(cocos2d::ccTime time) +{ +} + +CCIntervalAction* CCAnimate::reverse(void) +{ + return NULL; +} + +} diff --git a/cocos2dx/cocos2dx-uphone.vcproj b/cocos2dx/cocos2dx-uphone.vcproj index 779c77ee57..5e3ff00a39 100644 --- a/cocos2dx/cocos2dx-uphone.vcproj +++ b/cocos2dx/cocos2dx-uphone.vcproj @@ -200,6 +200,10 @@ RelativePath=".\actions\CCActionManager.h" > + + + + diff --git a/cocos2dx/include/CCIntervalAction.h b/cocos2dx/include/CCIntervalAction.h new file mode 100644 index 0000000000..f4ac5ea1b6 --- /dev/null +++ b/cocos2dx/include/CCIntervalAction.h @@ -0,0 +1,572 @@ +/**************************************************************************** +Copyright (c) 2010 cocos2d-x.org + +http://www.cocos2d-x.org + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in +all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +THE SOFTWARE. +****************************************************************************/ + +#ifndef __ACTION_CCINTERVAL_ACTION_H__ +#define __ACTION_CCINTERVAL_ACTION_H__ + +#include "CCNode.h" +#include "CCAction.h" +#include "CCProtocols.h" +#include "CCSpriteFrame.h" + +// #include + +/** An interval action is an action that takes place within a certain period of time. +It has an start time, and a finish time. The finish time is the parameter +duration plus the start time. + +These CCIntervalAction actions have some interesting properties, like: + - They can run normally (default) + - They can run reversed with the reverse method + - They can run with the time altered with the Accelerate, AccelDeccel and Speed actions. + +For example, you can simulate a Ping Pong effect running the action normally and +then running it again in Reverse mode. + +Example: + + CCAction * pingPongAction = [CCSequence actions: action, [action reverse], nil]; +*/ + +namespace cocos2d { + +class CCIntervalAction : public CCFiniteTimeAction +{ +public: + /** how many seconds had elapsed since the actions started to run. */ + inline ccTime getElapsed(void) { return m_elapsed; } + + /** initializes the action */ + CCIntervalAction* initWithDuration(ccTime d); + + /** returns YES if the action has finished */ + virtual bool isDone(void); + + virtual NSObject* copyWithZone(NSZone* pZone); + virtual void step(ccTime dt); + virtual void startWithTarget(NSObject *pTarget); + virtual CCIntervalAction* reverse(void); + +public: + /** creates the action */ + static CCIntervalAction* actionWithDuration(ccTime d); + +protected: + ccTime m_elapsed; + bool m_bFirstTick; +}; + +/** Runs actions sequentially, one after another + */ +class CCSequence : public CCIntervalAction +{ +public: + ~CCSequence(void); + + /** initializes the action */ + CCSequence* initOneTwo(CCFiniteTimeAction *pActionOne, CCFiniteTimeAction *pActionTwo); + + virtual NSObject* copyWithZone(NSZone* pZone); + virtual void startWithTarget(NSObject *pTarget); + virtual void stop(void); + virtual void update(ccTime time); + virtual CCIntervalAction* reverse(void); + +public: + /** helper contructor to create an array of sequenceable actions */ + static CCSequence* actions(CCFiniteTimeAction *pAction1, ...); + + /** creates the action */ + static CCSequence* actionOneTwo(CCFiniteTimeAction *pActionOne, CCFiniteTimeAction *pActionTwo); +protected: + CCFiniteTimeAction *m_pActions[2]; + ccTime m_split; + int m_last; +}; + +/** Repeats an action a number of times. + * To repeat an action forever use the CCRepeatForever action. + */ +class CCRepeat : public CCIntervalAction +{ +public: + ~CCRepeat(void); + + /** initializes a CCRepeat action. Times is an unsigned integer between 1 and pow(2,30) */ + CCRepeat* initWithAction(CCFiniteTimeAction *pAction, unsigned int times); + + virtual NSObject* copyWithZone(NSZone* pZone); + virtual void startWithTarget(NSObject *pTarget); + virtual void stop(void); + virtual void update(ccTime time); + virtual bool isDone(void); + virtual CCIntervalAction* reverse(void); + +public: + /** creates a CCRepeat action. Times is an unsigned integer between 1 and pow(2,30) */ + static CCRepeat* actionWithAction(CCFiniteTimeAction *pAction, unsigned int times); + +protected: + unsigned int m_uTimes; + unsigned int m_uTotal; + CCFiniteTimeAction *m_pOther; +}; + +/** Spawn a new action immediately + */ +class CCSpawn : public CCIntervalAction +{ +public: + ~CCSpawn(void); + + /** initializes the Spawn action with the 2 actions to spawn */ + CCSpawn* initOneTwo(CCFiniteTimeAction *pAction1, CCFiniteTimeAction *pAction2); + + virtual NSObject* copyWithZone(NSZone* pZone); + virtual void startWithTarget(NSObject *pTarget); + virtual void stop(void); + virtual void update(ccTime time); + virtual CCIntervalAction* reverse(void); + +public: + /** helper constructor to create an array of spawned actions */ + static CCSpawn* actions(CCFiniteTimeAction *pAction1, ...); + + /** creates the Spawn action */ + static CCSpawn* actionOneTwo(CCFiniteTimeAction *pAction1, CCFiniteTimeAction *pAction2); + +protected: + CCFiniteTimeAction *m_pOne; + CCFiniteTimeAction *m_pTwo; +}; + +/** Rotates a CCNode object to a certain angle by modifying it's + rotation attribute. + The direction will be decided by the shortest angle. +*/ +class CCRotateTo : public CCIntervalAction +{ +public: + /** initializes the action */ + CCRotateTo* initWithDuration(ccTime duration, float fDeltaAngle); + + virtual NSObject* copyWithZone(NSZone* pZone); + virtual void startWithTarget(NSObject *pTarget); + virtual void update(ccTime time); + +public: + /** creates the action */ + static CCRotateTo* actionWithDuration(ccTime duration, float fDeltaAngle); + +protected: + float m_fDstAngle; + float m_fStartAngle; + float m_fDiffAngle; +}; + +/** Rotates a CCNode object clockwise a number of degrees by modiying it's rotation attribute. +*/ +class CCRotateBy : public CCIntervalAction +{ +public: + /** initializes the action */ + CCRotateBy* initWithDuration(ccTime duration, float fDeltaAngle); + + virtual NSObject* copyWithZone(NSZone* pZone); + virtual void startWithTarget(NSObject *pTarget); + virtual void update(ccTime time); + virtual CCIntervalAction* reverse(void); + +public: + + /** creates the action */ + static CCRotateBy* actionWithDuration(ccTime duration, float fDeltaAngle); + +protected: + float m_fAngle; + float m_fStartAngle; +}; + +/** Moves a CCNode object to the position x,y. x and y are absolute coordinates by modifying it's position attribute. +*/ +class CCMoveTo : public CCIntervalAction +{ +public: + /** initializes the action */ + CCMoveTo* initWithDuration(ccTime duration, CGPoint position); + + virtual NSObject* copyWithZone(NSZone* pZone); + virtual void startWithTarget(NSObject *pTarget); + virtual void update(ccTime time); + +public: + /** creates the action */ + static CCMoveTo* actionWithDuration(ccTime duration, CGPoint position); + +protected: + CGPoint m_endPosition; + CGPoint m_startPosition; + CGPoint m_delta; +}; + +/** Moves a CCNode object x,y pixels by modifying it's position attribute. + x and y are relative to the position of the object. + Duration is is seconds. +*/ +class CCMoveBy : public CCMoveTo +{ +public: + /** initializes the action */ + CCMoveBy* initWithDuration(ccTime duration, CGPoint position); + + virtual NSObject* copyWithZone(NSZone* pZone); + virtual void startWithTarget(NSObject *pTarget); + virtual CCIntervalAction* reverse(void); + +public: + /** creates the action */ + static CCMoveBy* actionWithDuration(ccTime duration, CGPoint position); +}; + +/** Moves a CCNode object simulating a parabolic jump movement by modifying it's position attribute. +*/ +class CCJumpBy : public CCIntervalAction +{ +public: + /** initializes the action */ + CCJumpBy* initWithDuration(ccTime duration, CGPoint position, ccTime height, int jumps); + + virtual NSObject* copyWithZone(NSZone* pZone); + virtual void startWithTarget(NSObject *pTarget); + virtual void update(ccTime time); + virtual CCIntervalAction* reverse(void); + +public: + /** creates the action */ + static CCJumpBy* actionWithDuration(ccTime duration, CGPoint position, ccTime height, int jumps); + +protected: + CGPoint m_startPosition; + CGPoint m_delta; + ccTime height; + int jumps; +}; + +/** Moves a CCNode object to a parabolic position simulating a jump movement by modifying it's position attribute. +*/ +class CCJumpTo : public CCJumpBy +{ +public: + virtual void startWithTarget(NSObject *pTarget); +}; + +/** bezier configuration structure + */ +typedef struct _ccBezierConfig { + //! end position of the bezier + CGPoint endPosition; + //! Bezier control point 1 + CGPoint controlPoint_1; + //! Bezier control point 2 + CGPoint controlPoint_2; +} ccBezierConfig; + +/** An action that moves the target with a cubic Bezier curve by a certain distance. + */ +class CCBezierBy : public CCIntervalAction +{ +public: + /** initializes the action with a duration and a bezier configuration */ + CCBezierBy* initWithDuration(ccTime t, ccBezierConfig c); + + virtual NSObject* copyWithZone(NSZone* pZone); + virtual void startWithTarget(NSObject *pTarget); + virtual void update(ccTime time); + virtual CCIntervalAction* reverse(void); + +public: + /** creates the action with a duration and a bezier configuration */ + static CCBezierBy* actionWithDuration(ccTime t, ccBezierConfig c); + +protected: + ccBezierConfig m_sConfig; + CGPoint m_startPosition; +}; + +/** An action that moves the target with a cubic Bezier curve to a destination point. + @since v0.8.2 + */ +class CCBezierTo : public CCBezierBy +{ +public: + virtual void startWithTarget(NSObject *pTarget); +}; + +/** Scales a CCNode object to a zoom factor by modifying it's scale attribute. + @warning This action doesn't support "reverse" + */ +class CCScaleTo : public CCIntervalAction +{ +public: + /** initializes the action with the same scale factor for X and Y */ + CCScaleTo* initWithDuration(ccTime duration, float s); + + /** initializes the action with and X factor and a Y factor */ + CCScaleTo* initWithDuration(ccTime duration, float sx, float sy); + + virtual NSObject* copyWithZone(NSZone* pZone); + virtual void startWithTarget(NSObject *pTarget); + virtual void update(ccTime time); + +public: + /** creates the action with the same scale factor for X and Y */ + static CCScaleTo* actionWithDuration(ccTime duration, float s); + + /** creates the action with and X factor and a Y factor */ + static CCScaleTo* actionWithDuration(ccTime duration, float sx, float sy); +protected: + float m_fScaleX; + float m_fScaleY; + float m_fStartScaleX; + float m_fStartScaleY; + float m_fEndScaleX; + float m_fEndScaleY; + float m_fDletaX; + float m_fDeltaY; +}; + +/** Scales a CCNode object a zoom factor by modifying it's scale attribute. +*/ +class CCScaleBy : public CCScaleTo +{ +public: + virtual void startWithTarget(NSObject *pTarget); + virtual CCIntervalAction* reverse(void); +}; + +/** Blinks a CCNode object by modifying it's visible attribute +*/ +class CCBlink : public CCIntervalAction +{ +public: + /** initilizes the action */ + CCBlink* initWithDuration(ccTime duration, unsigned int uBlinks); + + virtual NSObject* copyWithZone(NSZone* pZone); + virtual void update(ccTime time); + virtual CCIntervalAction* reverse(void); + +public: + /** creates the action */ + static CCBlink* actionWithDuration(ccTime duration, unsigned int uBlinks); +protected: + int m_nTimes; +}; + +/** Fades In an object that implements the CCRGBAProtocol protocol. It modifies the opacity from 0 to 255. + The "reverse" of this action is FadeOut + */ +class CCFadeIn : public CCIntervalAction +{ +public: + virtual void update(ccTime time); + virtual CCIntervalAction* reverse(void); +}; + +/** Fades Out an object that implements the CCRGBAProtocol protocol. It modifies the opacity from 255 to 0. + The "reverse" of this action is FadeIn +*/ +class CCFadeOut : public CCIntervalAction +{ +public: + virtual void update(ccTime time); + virtual CCIntervalAction* reverse(void); +}; + +/** Fades an object that implements the CCRGBAProtocol protocol. It modifies the opacity from the current value to a custom one. + @warning This action doesn't support "reverse" + */ +class CCFadeTo : public CCIntervalAction +{ +public: + /** initializes the action with duration and opacity */ + CCFadeTo* initWithDuration(ccTime duration, GLubyte opacity); + + virtual NSObject* copyWithZone(NSZone* pZone); + virtual void startWithTarget(NSObject *pTarget); + virtual void update(ccTime time); + +public: + /** creates an action with duration and opactiy */ + static CCFadeTo* actionWithDuration(ccTime duration, GLubyte opacity); + +protected: + GLubyte m_toOpacity; + GLubyte m_fromOpacity; +}; + +/** Tints a CCNode that implements the CCNodeRGB protocol from current tint to a custom one. + @warning This action doesn't support "reverse" + @since v0.7.2 +*/ +class CCTintTo : public CCIntervalAction +{ +public: + /** initializes the action with duration and color */ + CCTintTo* initWithDuration(ccTime duration, GLubyte red, GLubyte green, GLubyte blue); + + virtual NSObject* copyWithZone(NSZone* pZone); + virtual void startWithTarget(NSObject *pTarget); + virtual void update(ccTime time); + +public: + /** creates an action with duration and color */ + static CCTintTo* actionWithDuration(ccTime duration, GLubyte red, GLubyte green, GLubyte blue); + +protected: + ccColor3B m_to; + ccColor3B m_from; +}; + +/** Tints a CCNode that implements the CCNodeRGB protocol from current tint to a custom one. + @since v0.7.2 + */ +class CCTintBy : public CCIntervalAction +{ +public: + /** initializes the action with duration and color */ + CCTintBy* initWithDuration(ccTime duration, GLshort deltaRed, GLshort deltaGreen, GLshort deltaBlue); + + virtual NSObject* copyWithZone(NSZone* pZone); + virtual void startWithTarget(NSObject *pTarget); + virtual void update(ccTime time); + virtual CCIntervalAction* reverse(void); + +public: + /** creates an action with duration and color */ + static CCTintBy* actionWithDuration(ccTime duration, GLshort deltaRed, GLshort deltaGreen, GLshort deltaBlue); + +protected: + GLshort m_deltaR; + GLshort m_deltaG; + GLshort m_deltaB; + + GLshort m_fromR; + GLshort m_fromG; + GLshort m_fromB; +}; + +/** Delays the action a certain amount of seconds +*/ +class CCDelayTime : public CCIntervalAction +{ +public: + virtual void update(ccTime time); + virtual CCIntervalAction* reverse(void); +}; + +/** Executes an action in reverse order, from time=duration to time=0 + + @warning Use this action carefully. This action is not + sequenceable. Use it as the default "reversed" method + of your own actions, but using it outside the "reversed" + scope is not recommended. +*/ +class CCReverseTime : public CCIntervalAction +{ +public: + ~CCReverseTime(void); + + /** initializes the action */ + CCReverseTime* initWithAction(CCFiniteTimeAction *pAction); + + virtual NSObject* copyWithZone(NSZone* pZone); + virtual void startWithTarget(NSObject *pTarget); + virtual void stop(void); + virtual void update(ccTime time); + virtual CCIntervalAction* reverse(void); + +public: + /** creates the action */ + static CCReverseTime* actionWithAction(CCFiniteTimeAction *pAction); + +protected: + CCFiniteTimeAction *m_pOther; +}; + +class CCTexture2D; +/** Animates a sprite given the name of an Animation */ +class CCAnimate : public CCIntervalAction +{ +public: + ~CCAnimate(void); + + /** animation used for the animage, retain */ + inline CCAnimation* getAnimation(void) { return m_pAnimation; } + inline void setAnimation(CCAnimation *pAnimation) + { + m_pAnimation = pAnimation; + pAnimation->retain(); + } + + /** initializes the action with an Animation and will restore the original frame when the animtion is over */ + CCAnimate* initWithAnimation(CCAnimation *pAnimation); + + /** initializes the action with an Animation */ + CCAnimate* initWithAnimation(CCAnimation *pAnimation, bool bRestoreOriginalFrame); + + /** initializes an action with a duration, animation and depending of the restoreOriginalFrame, it will restore the original frame or not. + The 'delay' parameter of the animation will be overrided by the duration parameter. + @since v0.99.0 + */ + CCAnimate* initWithDuration(ccTime duration, CCAnimation *pAnimation, bool bRestoreOriginalFrame); + + virtual NSObject* copyWithZone(NSZone* pZone); + virtual void startWithTarget(NSObject *pTarget); + virtual void stop(void); + virtual void update(ccTime time); + virtual CCIntervalAction* reverse(void); + +public: + /** creates the action with an Animation and will restore the original frame when the animation is over */ + static CCAnimate* actionWithAnimation(CCAnimation *pAnimation); + + /** creates the action with an Animation */ + static CCAnimate* actionWithAnimation(CCAnimation *pAnimation, bool bRestoreOriginalFrame); + + /** creates an action with a duration, animation and depending of the restoreOriginalFrame, it will restore the original frame or not. + The 'delay' parameter of the animation will be overrided by the duration parameter. + @since v0.99.0 + */ + + static CCAnimate* actionWithDuration(ccTime duration, CCAnimation *pAnimation, bool bRestoreOriginalFrame); +protected: + CCAnimation *m_pAnimation; + NSObject *m_pOrigFrame; + bool m_bRestoreOriginalFrame; +}; + +} + +#endif //__ACTION_CCINTERVAL_ACTION_H__