2012-02-01 16:45:23 +08:00
/****************************************************************************
Copyright ( c ) 2008 - 2010 Ricardo Quesada
2014-01-07 11:25:07 +08:00
Copyright ( c ) 2010 - 2012 cocos2d - x . org
2012-02-01 16:45:23 +08:00
Copyright ( c ) 2011 Zynga Inc .
2018-01-29 16:25:32 +08:00
Copyright ( c ) 2013 - 2016 Chukong Technologies Inc .
Copyright ( c ) 2017 - 2018 Xiamen Yaji Software Co . , Ltd .
2012-02-01 16:45:23 +08:00
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 __CCLAYER_H__
# define __CCLAYER_H__
2014-04-27 01:11:22 +08:00
# include "2d/CCNode.h"
2014-05-17 05:36:00 +08:00
# include "base/CCProtocols.h"
2014-04-30 08:37:36 +08:00
# include "renderer/CCCustomCommand.h"
2013-09-15 17:48:29 +08:00
2014-04-15 03:21:18 +08:00
2012-04-18 18:43:45 +08:00
NS_CC_BEGIN
2012-02-01 16:45:23 +08:00
2012-06-20 18:09:11 +08:00
/**
2015-03-24 10:34:41 +08:00
* @ addtogroup _2d
2012-06-20 18:09:11 +08:00
* @ {
*/
2014-04-09 22:30:49 +08:00
class __Set ;
2013-06-20 14:13:12 +08:00
class TouchScriptHandlerEntry ;
2012-02-07 11:43:29 +08:00
2013-11-19 13:56:30 +08:00
class EventListenerTouch ;
class EventListenerKeyboard ;
class EventListenerAcceleration ;
2014-08-27 13:39:50 +08:00
class Touch ;
2012-02-01 16:45:23 +08:00
//
2013-06-20 14:13:12 +08:00
// Layer
2012-02-01 16:45:23 +08:00
//
2015-03-19 21:32:19 +08:00
/** @class Layer
* @ brief Layer is a subclass of Node that implements the TouchEventsDelegate protocol .
2012-02-01 16:45:23 +08:00
2013-06-20 14:13:12 +08:00
All features from Node are valid , plus the following new features :
2012-02-01 16:45:23 +08:00
- It can receive iPhone Touches
- It can receive Accelerometer input
*/
2013-09-03 18:22:03 +08:00
class CC_DLL Layer : public Node
2012-02-01 16:45:23 +08:00
{
2013-07-26 10:06:32 +08:00
public :
2015-03-19 21:32:19 +08:00
/** Creates a fullscreen black layer.
*
* @ return An autoreleased Layer object .
*/
2013-11-14 07:55:36 +08:00
static Layer * create ( ) ;
2013-09-03 18:22:03 +08:00
// Deprecated touch callbacks.
2016-11-16 09:48:37 +08:00
CC_DEPRECATED_ATTRIBUTE virtual bool ccTouchBegan ( Touch * pTouch , Event * pEvent ) final ;
CC_DEPRECATED_ATTRIBUTE virtual void ccTouchMoved ( Touch * pTouch , Event * pEvent ) final ;
CC_DEPRECATED_ATTRIBUTE virtual void ccTouchEnded ( Touch * pTouch , Event * pEvent ) final ;
CC_DEPRECATED_ATTRIBUTE virtual void ccTouchCancelled ( Touch * pTouch , Event * pEvent ) final ;
2013-09-03 18:22:03 +08:00
2016-11-16 09:48:37 +08:00
CC_DEPRECATED_ATTRIBUTE virtual void ccTouchesBegan ( __Set * pTouches , Event * pEvent ) final ;
CC_DEPRECATED_ATTRIBUTE virtual void ccTouchesMoved ( __Set * pTouches , Event * pEvent ) final ;
CC_DEPRECATED_ATTRIBUTE virtual void ccTouchesEnded ( __Set * pTouches , Event * pEvent ) final ;
CC_DEPRECATED_ATTRIBUTE virtual void ccTouchesCancelled ( __Set * pTouches , Event * pEvent ) final ;
2013-09-03 18:22:03 +08:00
2014-04-09 22:30:49 +08:00
/* Callback function should not be deprecated, it will generate lots of warnings.
Since ' setTouchEnabled ' was deprecated , it will make warnings if developer overrides onTouchXXX and invokes setTouchEnabled ( true ) instead of using EventDispatcher : : addEventListenerWithXXX .
2013-11-20 11:19:51 +08:00
*/
2015-03-19 21:32:19 +08:00
/** Callback function for touch began.
*
2015-09-09 11:37:41 +08:00
* @ param touch Touch information .
2015-03-19 21:32:19 +08:00
* @ param unused_event Event information .
* @ return if return false , onTouchMoved , onTouchEnded , onTouchCancelled will never called .
2015-03-21 10:23:42 +08:00
* @ js NA
2015-03-19 21:32:19 +08:00
*/
virtual bool onTouchBegan ( Touch * touch , Event * unused_event ) ;
/** Callback function for touch moved.
*
2015-09-09 11:37:41 +08:00
* @ param touch Touch information .
2015-03-19 21:32:19 +08:00
* @ param unused_event Event information .
2015-03-21 10:23:42 +08:00
* @ js NA
2015-03-19 21:32:19 +08:00
*/
virtual void onTouchMoved ( Touch * touch , Event * unused_event ) ;
/** Callback function for touch ended.
*
2015-09-09 11:37:41 +08:00
* @ param touch Touch information .
2015-03-19 21:32:19 +08:00
* @ param unused_event Event information .
2015-03-21 10:23:42 +08:00
* @ js NA
2015-03-19 21:32:19 +08:00
*/
virtual void onTouchEnded ( Touch * touch , Event * unused_event ) ;
/** Callback function for touch cancelled.
*
2015-09-09 11:37:41 +08:00
* @ param touch Touch information .
2015-03-19 21:32:19 +08:00
* @ param unused_event Event information .
2015-03-21 10:23:42 +08:00
* @ js NA
2015-03-19 21:32:19 +08:00
*/
2013-11-20 10:26:00 +08:00
virtual void onTouchCancelled ( Touch * touch , Event * unused_event ) ;
2013-11-19 16:06:27 +08:00
2015-03-19 21:32:19 +08:00
/** Callback function for multiple touches began.
*
* @ param touches Touches information .
* @ param unused_event Event information .
2015-03-21 10:23:42 +08:00
* @ js NA
2015-03-19 21:32:19 +08:00
*/
2013-11-20 11:19:51 +08:00
virtual void onTouchesBegan ( const std : : vector < Touch * > & touches , Event * unused_event ) ;
2015-03-19 21:32:19 +08:00
/** Callback function for multiple touches moved.
*
* @ param touches Touches information .
* @ param unused_event Event information .
2015-03-21 10:23:42 +08:00
* @ js NA
2015-03-19 21:32:19 +08:00
*/
2013-11-20 11:19:51 +08:00
virtual void onTouchesMoved ( const std : : vector < Touch * > & touches , Event * unused_event ) ;
2015-03-19 21:32:19 +08:00
/** Callback function for multiple touches ended.
*
* @ param touches Touches information .
* @ param unused_event Event information .
2015-03-21 10:23:42 +08:00
* @ js NA
2015-03-19 21:32:19 +08:00
*/
2013-11-20 11:19:51 +08:00
virtual void onTouchesEnded ( const std : : vector < Touch * > & touches , Event * unused_event ) ;
2015-03-19 21:32:19 +08:00
/** Callback function for multiple touches cancelled.
*
* @ param touches Touches information .
* @ param unused_event Event information .
2015-03-21 10:23:42 +08:00
* @ js NA
2015-03-19 21:32:19 +08:00
*/
2013-11-20 11:19:51 +08:00
virtual void onTouchesCancelled ( const std : : vector < Touch * > & touches , Event * unused_event ) ;
2015-03-21 10:23:42 +08:00
/**
@ deprecated Please override onAcceleration
@ js NA
*/
2016-11-09 10:34:50 +08:00
CC_DEPRECATED_ATTRIBUTE virtual void didAccelerate ( Acceleration * /*accelerationValue*/ ) final { } ;
2012-02-01 16:45:23 +08:00
2013-11-20 11:19:51 +08:00
/* Callback function should not be deprecated, it will generate lots of warnings.
Since ' setAccelerometerEnabled ' was deprecated , it will make warnings if developer overrides onAcceleration and invokes setAccelerometerEnabled ( true ) instead of using EventDispatcher : : addEventListenerWithXXX .
*/
2015-09-09 11:37:41 +08:00
/** Callback function for acceleration.
2015-03-19 21:32:19 +08:00
* @ param acc Acceleration information .
* @ param unused_event Event information .
2015-03-21 10:23:42 +08:00
* @ js NA
2015-03-19 21:32:19 +08:00
*/
2013-11-20 11:19:51 +08:00
virtual void onAcceleration ( Acceleration * acc , Event * unused_event ) ;
2013-11-19 13:56:30 +08:00
2012-04-19 14:35:52 +08:00
/** If isTouchEnabled, this method is called onEnter. Override it to change the
2013-06-20 14:13:12 +08:00
way Layer receives touch events .
( Default : TouchDispatcher : : sharedDispatcher ( ) - > addStandardDelegate ( this , 0 ) ; )
2012-04-19 14:35:52 +08:00
Example :
2013-06-20 14:13:12 +08:00
void Layer : : registerWithTouchDispatcher ( )
2012-04-19 14:35:52 +08:00
{
2013-06-20 14:13:12 +08:00
TouchDispatcher : : sharedDispatcher ( ) - > addTargetedDelegate ( this , INT_MIN + 1 , true ) ;
2012-04-19 14:35:52 +08:00
}
@ since v0 .8 .0
2015-03-21 10:23:42 +08:00
@ js NA
2012-04-19 14:35:52 +08:00
*/
2013-09-03 18:22:03 +08:00
CC_DEPRECATED_ATTRIBUTE virtual void registerWithTouchDispatcher ( ) final { } ;
2012-02-01 16:45:23 +08:00
2013-11-19 13:56:30 +08:00
/** whether or not it will receive Touch events.
You can enable / disable touch events with this property .
Only the touches of this node will be affected . This " method " is not propagated to it ' s children .
@ since v0 .8 .1
2015-03-21 10:23:42 +08:00
@ js NA
2013-11-19 13:56:30 +08:00
*/
2013-11-20 11:35:04 +08:00
CC_DEPRECATED_ATTRIBUTE bool isTouchEnabled ( ) const ;
CC_DEPRECATED_ATTRIBUTE void setTouchEnabled ( bool value ) ;
2013-09-17 23:21:45 +08:00
2013-11-19 13:56:30 +08:00
CC_DEPRECATED_ATTRIBUTE virtual void setTouchMode ( Touch : : DispatchMode mode ) ;
CC_DEPRECATED_ATTRIBUTE virtual Touch : : DispatchMode getTouchMode ( ) const ;
2015-03-21 10:23:42 +08:00
/**
swallowsTouches of the touch events . Default is true
@ js NA
*/
2013-11-19 13:56:30 +08:00
CC_DEPRECATED_ATTRIBUTE virtual void setSwallowsTouches ( bool swallowsTouches ) ;
CC_DEPRECATED_ATTRIBUTE virtual bool isSwallowsTouches ( ) const ;
/** whether or not it will receive Accelerometer events
You can enable / disable accelerometer events with this property .
@ since v0 .8 .1
2015-03-21 10:23:42 +08:00
@ js NA
2013-11-19 13:56:30 +08:00
*/
CC_DEPRECATED_ATTRIBUTE virtual bool isAccelerometerEnabled ( ) const ;
CC_DEPRECATED_ATTRIBUTE virtual void setAccelerometerEnabled ( bool value ) ;
CC_DEPRECATED_ATTRIBUTE virtual void setAccelerometerInterval ( double interval ) ;
/** whether or not it will receive keyboard or keypad events
You can enable / disable accelerometer events with this property .
it ' s new in cocos2d - x
2015-03-21 10:23:42 +08:00
@ js NA
2013-11-19 13:56:30 +08:00
*/
CC_DEPRECATED_ATTRIBUTE virtual bool isKeyboardEnabled ( ) const ;
CC_DEPRECATED_ATTRIBUTE virtual void setKeyboardEnabled ( bool value ) ;
2015-03-21 10:23:42 +08:00
/**
Please use onKeyPressed instead .
@ js NA
*/
2016-11-09 10:34:50 +08:00
CC_DEPRECATED_ATTRIBUTE virtual void keyPressed ( int /*keyCode*/ ) final { } ;
2013-09-03 18:22:03 +08:00
2015-03-21 10:23:42 +08:00
/**
Please use onKeyReleased instead .
@ js NA
*/
2016-11-09 10:34:50 +08:00
CC_DEPRECATED_ATTRIBUTE virtual void keyReleased ( int /*keyCode*/ ) final { } ;
2013-07-01 16:48:42 +08:00
2013-11-20 11:19:51 +08:00
/* Callback function should not be deprecated, it will generate lots of warnings.
Since ' setKeyboardEnabled ' was deprecated , it will make warnings if developer overrides onKeyXXX and invokes setKeyboardEnabled ( true ) instead of using EventDispatcher : : addEventListenerWithXXX .
*/
2015-03-19 21:32:19 +08:00
/** Callback function for key pressed.
* @ param keyCode KeyCode information .
* @ param event Event information .
2015-03-21 10:23:42 +08:00
* @ js NA
2015-03-19 21:32:19 +08:00
*/
2013-11-20 11:19:51 +08:00
virtual void onKeyPressed ( EventKeyboard : : KeyCode keyCode , Event * event ) ;
2015-03-19 21:32:19 +08:00
/** Callback function for key released.
* @ param keyCode KeyCode information .
* @ param event Event information .
2015-03-21 10:23:42 +08:00
* @ js NA
2015-03-19 21:32:19 +08:00
*/
2013-11-20 11:19:51 +08:00
virtual void onKeyReleased ( EventKeyboard : : KeyCode keyCode , Event * event ) ;
2013-11-19 13:56:30 +08:00
2013-11-20 10:26:00 +08:00
CC_DEPRECATED_ATTRIBUTE virtual bool isKeypadEnabled ( ) const final { return _keyboardEnabled ; }
2013-11-19 13:56:30 +08:00
CC_DEPRECATED_ATTRIBUTE virtual void setKeypadEnabled ( bool value ) ;
2012-12-02 15:17:34 +08:00
2015-03-21 10:23:42 +08:00
/**
@ deprecated Please override onKeyReleased and check the keycode of KeyboardEvent : : KeyCode : : Menu ( KEY_BACKSPACE ) instead .
@ js NA
*/
2013-09-03 18:22:03 +08:00
CC_DEPRECATED_ATTRIBUTE virtual void keyBackClicked ( ) final { } ;
CC_DEPRECATED_ATTRIBUTE virtual void keyMenuClicked ( ) final { } ;
2013-11-14 07:55:36 +08:00
2013-12-13 06:30:22 +08:00
// Overrides
virtual std : : string getDescription ( ) const override ;
2014-03-21 13:44:29 +08:00
CC_CONSTRUCTOR_ACCESS :
2013-11-14 07:55:36 +08:00
Layer ( ) ;
virtual ~ Layer ( ) ;
2014-03-21 13:44:29 +08:00
virtual bool init ( ) override ;
protected :
2013-11-21 03:23:03 +08:00
//add the api for avoid use deprecated api
2014-07-11 10:19:49 +08:00
CC_DEPRECATED_ATTRIBUTE void _addTouchListener ( ) { }
2013-11-20 05:13:57 +08:00
2014-07-11 10:19:49 +08:00
CC_DEPRECATED_ATTRIBUTE void addTouchListener ( ) { }
2014-03-04 13:42:06 +08:00
CC_DEPRECATED_ATTRIBUTE int executeScriptTouchHandler ( EventTouch : : EventCode eventType , Touch * touch , Event * event ) ;
CC_DEPRECATED_ATTRIBUTE int executeScriptTouchesHandler ( EventTouch : : EventCode eventType , const std : : vector < Touch * > & touches , Event * event ) ;
2013-11-19 13:56:30 +08:00
bool _touchEnabled ;
bool _accelerometerEnabled ;
bool _keyboardEnabled ;
EventListener * _touchListener ;
EventListenerKeyboard * _keyboardListener ;
EventListenerAcceleration * _accelerationListener ;
2013-11-19 15:41:22 +08:00
2013-11-19 13:56:30 +08:00
Touch : : DispatchMode _touchMode ;
bool _swallowsTouches ;
2013-11-14 07:55:36 +08:00
private :
CC_DISALLOW_COPY_AND_ASSIGN ( Layer ) ;
2013-11-20 05:13:57 +08:00
2012-02-01 16:45:23 +08:00
} ;
2012-07-13 09:53:38 +08:00
2013-12-09 11:32:28 +08:00
2015-03-19 21:32:19 +08:00
/** @class __LayerRGBA
* @ brief LayerRGBA is a subclass of Layer that implements the RGBAProtocol protocol using a solid color as the background .
2013-12-09 11:32:28 +08:00
All features from Layer are valid , plus the following new features that propagate into children that conform to the RGBAProtocol :
- opacity
- RGB colors
@ since 2.1
2015-03-21 10:23:42 +08:00
@ js NA
2013-12-09 11:32:28 +08:00
*/
2013-12-13 10:10:49 +08:00
class CC_DLL __LayerRGBA : public Layer , public __RGBAProtocol
2013-12-09 11:32:28 +08:00
{
public :
2013-12-13 10:10:49 +08:00
CREATE_FUNC ( __LayerRGBA ) ;
2013-12-09 11:32:28 +08:00
//
// Overrides
//
virtual GLubyte getOpacity ( ) const override { return Layer : : getOpacity ( ) ; }
virtual GLubyte getDisplayedOpacity ( ) const override { return Layer : : getDisplayedOpacity ( ) ; }
2015-09-02 05:29:09 +08:00
virtual void setOpacity ( GLubyte opacity ) override { Layer : : setOpacity ( opacity ) ; }
virtual void updateDisplayedOpacity ( GLubyte parentOpacity ) override { Layer : : updateDisplayedOpacity ( parentOpacity ) ; }
2013-12-09 11:32:28 +08:00
virtual bool isCascadeOpacityEnabled ( ) const override { return Layer : : isCascadeOpacityEnabled ( ) ; }
2015-09-02 05:29:09 +08:00
virtual void setCascadeOpacityEnabled ( bool cascadeOpacityEnabled ) override { Layer : : setCascadeOpacityEnabled ( cascadeOpacityEnabled ) ; }
2013-12-09 11:32:28 +08:00
virtual const Color3B & getColor ( ) const override { return Layer : : getColor ( ) ; }
virtual const Color3B & getDisplayedColor ( ) const override { return Layer : : getDisplayedColor ( ) ; }
2015-09-02 05:29:09 +08:00
virtual void setColor ( const Color3B & color ) override { Layer : : setColor ( color ) ; }
virtual void updateDisplayedColor ( const Color3B & parentColor ) override { Layer : : updateDisplayedColor ( parentColor ) ; }
2013-12-09 11:32:28 +08:00
virtual bool isCascadeColorEnabled ( ) const override { return Layer : : isCascadeOpacityEnabled ( ) ; }
2015-09-02 05:29:09 +08:00
virtual void setCascadeColorEnabled ( bool cascadeColorEnabled ) override { Layer : : setCascadeColorEnabled ( cascadeColorEnabled ) ; }
2013-12-09 11:32:28 +08:00
2015-09-02 05:29:09 +08:00
virtual void setOpacityModifyRGB ( bool bValue ) override { Layer : : setOpacityModifyRGB ( bValue ) ; }
2013-12-09 11:32:28 +08:00
virtual bool isOpacityModifyRGB ( ) const override { return Layer : : isOpacityModifyRGB ( ) ; }
2014-08-21 15:11:33 +08:00
CC_CONSTRUCTOR_ACCESS :
2013-12-16 03:42:54 +08:00
__LayerRGBA ( ) ;
2013-12-13 10:10:49 +08:00
virtual ~ __LayerRGBA ( ) { }
2013-12-09 11:32:28 +08:00
private :
2013-12-13 10:10:49 +08:00
CC_DISALLOW_COPY_AND_ASSIGN ( __LayerRGBA ) ;
2013-12-09 11:32:28 +08:00
} ;
2012-02-01 16:45:23 +08:00
//
2013-06-20 14:13:12 +08:00
// LayerColor
2012-02-01 16:45:23 +08:00
//
2015-03-19 21:32:19 +08:00
/** @class LayerColor
* @ brief LayerColor is a subclass of Layer that implements the RGBAProtocol protocol .
2012-02-01 16:45:23 +08:00
2013-06-20 14:13:12 +08:00
All features from Layer are valid , plus the following new features :
2012-02-01 16:45:23 +08:00
- opacity
- RGB colors
*/
2013-12-06 18:07:16 +08:00
class CC_DLL LayerColor : public Layer , public BlendProtocol
2012-02-01 16:45:23 +08:00
{
public :
2015-03-19 21:32:19 +08:00
/** Creates a fullscreen black layer.
*
* @ return An autoreleased LayerColor object .
*/
2013-06-20 14:13:12 +08:00
static LayerColor * create ( ) ;
2015-03-19 21:32:19 +08:00
/** Creates a Layer with color, width and height in Points.
*
* @ param color The color of layer .
* @ param width The width of layer .
* @ param height The height of layer .
* @ return An autoreleased LayerColor object .
*/
2013-07-05 16:49:22 +08:00
static LayerColor * create ( const Color4B & color , GLfloat width , GLfloat height ) ;
2015-03-19 21:32:19 +08:00
/** Creates a Layer with color. Width and height are the window size.
*
* @ param color The color of layer .
* @ return An autoreleased LayerColor object .
*/
2013-07-05 16:49:22 +08:00
static LayerColor * create ( const Color4B & color ) ;
2012-04-19 14:35:52 +08:00
2015-03-19 21:32:19 +08:00
/** Change width in Points.
*
* @ param w The width of layer .
*/
2012-04-19 14:35:52 +08:00
void changeWidth ( GLfloat w ) ;
2015-03-19 21:32:19 +08:00
/** Change height in Points.
*
* @ param h The height of layer .
*/
2012-04-19 14:35:52 +08:00
void changeHeight ( GLfloat h ) ;
2015-03-19 21:32:19 +08:00
/** Change width and height in Points.
*
* @ param w The width of layer .
* @ param h The Height of layer .
2012-04-19 14:35:52 +08:00
@ since v0 .8
*/
void changeWidthAndHeight ( GLfloat w , GLfloat h ) ;
2013-07-16 03:43:22 +08:00
//
// Overrides
//
2014-05-31 07:42:05 +08:00
virtual void draw ( Renderer * renderer , const Mat4 & transform , uint32_t flags ) override ;
2014-03-06 07:49:08 +08:00
2013-07-18 07:56:19 +08:00
virtual void setContentSize ( const Size & var ) override ;
2013-07-23 21:51:19 +08:00
/** BlendFunction. Conforms to BlendProtocol protocol */
2013-09-13 11:41:20 +08:00
/**
* @ lua NA
*/
2013-07-23 21:51:19 +08:00
virtual const BlendFunc & getBlendFunc ( ) const override ;
2013-09-13 11:41:20 +08:00
/**
* @ code
* When this function bound into js or lua , the parameter will be changed
* In js : var setBlendFunc ( var src , var dst )
* In lua : local setBlendFunc ( local src , local dst )
* @ endcode
*/
2013-07-23 21:51:19 +08:00
virtual void setBlendFunc ( const BlendFunc & blendFunc ) override ;
2012-11-01 22:17:12 +08:00
2013-12-13 06:30:22 +08:00
virtual std : : string getDescription ( ) const override ;
2014-03-21 13:44:29 +08:00
CC_CONSTRUCTOR_ACCESS :
2013-11-14 07:55:36 +08:00
LayerColor ( ) ;
virtual ~ LayerColor ( ) ;
2014-03-21 13:44:29 +08:00
2015-03-15 02:33:15 +08:00
bool init ( ) override ;
2013-11-14 07:55:36 +08:00
bool initWithColor ( const Color4B & color , GLfloat width , GLfloat height ) ;
bool initWithColor ( const Color4B & color ) ;
2014-03-21 13:44:29 +08:00
protected :
2014-05-31 07:42:05 +08:00
void onDraw ( const Mat4 & transform , uint32_t flags ) ;
2014-03-21 13:44:29 +08:00
2013-12-11 16:12:14 +08:00
virtual void updateColor ( ) override ;
2013-07-18 07:56:19 +08:00
2013-07-23 18:26:26 +08:00
BlendFunc _blendFunc ;
2014-05-15 01:07:09 +08:00
Vec2 _squareVertices [ 4 ] ;
2013-07-18 07:56:19 +08:00
Color4F _squareColors [ 4 ] ;
2013-12-26 21:19:12 +08:00
CustomCommand _customCommand ;
2014-05-15 01:07:09 +08:00
Vec3 _noMVPVertices [ 4 ] ;
2013-11-14 07:55:36 +08:00
private :
CC_DISALLOW_COPY_AND_ASSIGN ( LayerColor ) ;
2012-02-01 16:45:23 +08:00
} ;
//
2013-06-20 14:13:12 +08:00
// LayerGradient
2012-02-01 16:45:23 +08:00
//
2015-03-19 21:32:19 +08:00
/** @class LayerGradient
* @ brief LayerGradient is a subclass of LayerColor that draws gradients across the background .
2012-02-01 16:45:23 +08:00
2013-06-20 14:13:12 +08:00
All features from LayerColor are valid , plus the following new features :
2012-02-01 16:45:23 +08:00
- direction
- final color
- interpolation mode
Color is interpolated between the startColor and endColor along the given
vector ( starting at the origin , ending at the terminus ) . If no vector is
supplied , it defaults to ( 0 , - 1 ) - - a fade from top to bottom .
If ' compressedInterpolation ' is disabled , you will not see either the start or end color for
non - cardinal vectors ; a smooth gradient implying both end points will be still
be drawn , however .
If ' compressedInterpolation ' is enabled ( default mode ) you will see both the start and end colors of the gradient .
@ since v0 .99 .5
*/
2013-06-20 14:13:12 +08:00
class CC_DLL LayerGradient : public LayerColor
2012-02-01 16:45:23 +08:00
{
public :
2015-03-19 21:32:19 +08:00
/** Creates a fullscreen black layer.
*
* @ return An autoreleased LayerGradient object .
*/
2013-06-29 10:02:10 +08:00
static LayerGradient * create ( ) ;
2015-03-19 21:32:19 +08:00
/** Creates a full-screen Layer with a gradient between start and end.
*
* @ param start The start color .
* @ param end The end color .
* @ return An autoreleased LayerGradient object .
*/
2013-07-05 16:49:22 +08:00
static LayerGradient * create ( const Color4B & start , const Color4B & end ) ;
2012-02-01 16:45:23 +08:00
2015-03-19 21:32:19 +08:00
/** Creates a full-screen Layer with a gradient between start and end in the direction of v.
*
* @ param start The start color .
* @ param end The end color .
* @ param v The direction of gradient color .
* @ return An autoreleased LayerGradient object .
*/
2014-05-15 01:07:09 +08:00
static LayerGradient * create ( const Color4B & start , const Color4B & end , const Vec2 & v ) ;
2013-07-04 12:50:17 +08:00
2015-03-19 21:32:19 +08:00
/** Whether or not the interpolation will be compressed in order to display all the colors of the gradient both in canonical and non canonical vectors.
Default : true .
*
* @ param compressedInterpolation The interpolation will be compressed if true .
2013-07-04 12:50:17 +08:00
*/
2013-12-18 17:47:20 +08:00
void setCompressedInterpolation ( bool compressedInterpolation ) ;
2015-03-19 21:32:19 +08:00
/** Get the compressedInterpolation
*
* @ return The interpolation will be compressed if true .
*/
2013-07-20 04:16:38 +08:00
bool isCompressedInterpolation ( ) const ;
2015-03-19 21:32:19 +08:00
/** Sets the start color of the gradient.
*
* @ param startColor The start color .
*/
2013-07-20 04:16:38 +08:00
void setStartColor ( const Color3B & startColor ) ;
2015-03-19 21:32:19 +08:00
/** Returns the start color of the gradient.
*
* @ return The start color .
*/
2013-07-20 04:16:38 +08:00
const Color3B & getStartColor ( ) const ;
2015-03-19 21:32:19 +08:00
/** Sets the end color of the gradient.
*
* @ param endColor The end color .
*/
2013-07-20 04:16:38 +08:00
void setEndColor ( const Color3B & endColor ) ;
2015-03-19 21:32:19 +08:00
/** Returns the end color of the gradient.
*
* @ return The end color .
*/
2013-07-20 04:16:38 +08:00
const Color3B & getEndColor ( ) const ;
2015-03-19 21:32:19 +08:00
/** Returns the start opacity of the gradient.
*
* @ param startOpacity The start opacity , from 0 to 255.
*/
2013-07-20 04:16:38 +08:00
void setStartOpacity ( GLubyte startOpacity ) ;
2015-03-19 21:32:19 +08:00
/** Returns the start opacity of the gradient.
*
* @ return The start opacity .
*/
2013-07-20 04:16:38 +08:00
GLubyte getStartOpacity ( ) const ;
2015-03-19 21:32:19 +08:00
/** Returns the end opacity of the gradient.
*
* @ param endOpacity The end opacity , from 0 to 255.
*/
2013-07-20 04:16:38 +08:00
void setEndOpacity ( GLubyte endOpacity ) ;
2015-03-19 21:32:19 +08:00
/** Returns the end opacity of the gradient.
*
* @ return The end opacity .
*/
2013-07-20 04:16:38 +08:00
GLubyte getEndOpacity ( ) const ;
/** Sets the directional vector that will be used for the gradient.
The default value is vertical direction ( 0 , - 1 ) .
2015-03-19 21:32:19 +08:00
*
* @ param alongVector The direction of gradient .
2013-07-20 04:16:38 +08:00
*/
2014-05-15 01:07:09 +08:00
void setVector ( const Vec2 & alongVector ) ;
2015-03-19 21:32:19 +08:00
/** Returns the directional vector used for the gradient.
*
* @ return The direction of gradient .
*/
2014-05-15 01:07:09 +08:00
const Vec2 & getVector ( ) const ;
2012-02-01 16:45:23 +08:00
2013-12-13 06:30:22 +08:00
virtual std : : string getDescription ( ) const override ;
2014-03-26 18:45:08 +08:00
CC_CONSTRUCTOR_ACCESS :
LayerGradient ( ) ;
virtual ~ LayerGradient ( ) ;
2014-03-27 10:55:41 +08:00
2015-03-15 02:33:15 +08:00
virtual bool init ( ) override ;
2014-03-27 10:55:41 +08:00
/** Initializes the Layer with a gradient between start and end.
* @ js init
* @ lua init
*/
bool initWithColor ( const Color4B & start , const Color4B & end ) ;
/** Initializes the Layer with a gradient between start and end in the direction of v.
* @ js init
* @ lua init
*/
2014-05-15 01:07:09 +08:00
bool initWithColor ( const Color4B & start , const Color4B & end , const Vec2 & v ) ;
2013-12-13 06:30:22 +08:00
2013-07-18 07:56:19 +08:00
protected :
virtual void updateColor ( ) override ;
2013-07-20 04:16:38 +08:00
Color3B _startColor ;
Color3B _endColor ;
GLubyte _startOpacity ;
GLubyte _endOpacity ;
2014-05-15 01:07:09 +08:00
Vec2 _alongVector ;
2013-07-20 04:16:38 +08:00
bool _compressedInterpolation ;
2012-02-01 16:45:23 +08:00
} ;
2012-07-13 09:53:38 +08:00
2017-05-22 13:42:00 +08:00
/** @class LayerRadialGradient
* @ brief LayerRadialGradient is a subclass of Layer that draws radial gradients across the background .
@ since v3 .16
*/
class CC_DLL LayerRadialGradient : public Layer
{
public :
/** Create a LayerRadialGradient
* @ param startColor the inner color of the gradient
* @ param endColor the out color of the gradient
* @ param radius the radius of the gradient ( length from center of gradient to outer color )
* @ param center the position of the center of the gradient
* @ param expand an alpha value ( 0.f - 1.f ) that specifies how much of that radius in only inner color ( the gradient
starts outside of that amount )
*/
static LayerRadialGradient * create ( const Color4B & startColor , const Color4B & endColor , float radius , const Vec2 & center , float expand ) ;
static LayerRadialGradient * create ( ) ;
//
// overrides
//
virtual void draw ( Renderer * renderer , const Mat4 & transform , uint32_t flags ) override ;
virtual void setContentSize ( const Size & size ) override ;
void setStartOpacity ( GLubyte opacity ) ;
GLubyte getStartOpacity ( ) const ;
void setEndOpacity ( GLubyte opacity ) ;
GLubyte getEndOpacity ( ) const ;
void setRadius ( float radius ) ;
float getRadius ( ) const ;
void setCenter ( const Vec2 & center ) ;
Vec2 getCenter ( ) const ;
void setExpand ( float expand ) ;
float getExpand ( ) const ;
void setStartColor ( const Color3B & color ) ;
void setStartColor ( const Color4B & color ) ;
Color4B getStartColor ( ) const ;
Color3B getStartColor3B ( ) const ;
void setEndColor ( const Color3B & color ) ;
void setEndColor ( const Color4B & color ) ;
Color4B getEndColor ( ) const ;
Color3B getEndColor3B ( ) const ;
void setBlendFunc ( const BlendFunc & blendFunc ) ;
BlendFunc getBlendFunc ( ) const ;
CC_CONSTRUCTOR_ACCESS :
LayerRadialGradient ( ) ;
virtual ~ LayerRadialGradient ( ) ;
bool initWithColor ( const Color4B & startColor , const Color4B & endColor , float radius , const Vec2 & center , float expand ) ;
protected :
void onDraw ( const Mat4 & transform , uint32_t flags ) ;
private :
void convertColor4B24F ( Color4F & outColor , const Color4B & inColor ) ;
Color4B _startColor ;
Color4F _startColorRend ; // start color used in shader
Color4B _endColor ;
Color4F _endColorRend ; // end color used in shader
Vec2 _center ;
float _radius ;
float _expand ;
Vec2 _vertices [ 4 ] ;
CustomCommand _customCommand ;
GLint _uniformLocationStartColor ;
GLint _uniformLocationEndColor ;
GLint _uniformLocationCenter ;
GLint _uniformLocationRadius ;
GLint _uniformLocationExpand ;
BlendFunc _blendFunc ;
} ;
2015-03-19 21:32:19 +08:00
/** @class LayerMultiplex
* @ brief MultipleLayer is a Layer with the ability to multiplex it ' s children .
2012-02-01 16:45:23 +08:00
Features :
- It supports one or more children
- Only one children will be active a time
*/
2013-06-20 14:13:12 +08:00
class CC_DLL LayerMultiplex : public Layer
2012-02-01 16:45:23 +08:00
{
public :
2015-03-19 21:32:19 +08:00
/** Creates and initializes a LayerMultiplex object.
2013-09-13 11:41:20 +08:00
* @ lua NA
2015-03-19 21:32:19 +08:00
*
* @ return An autoreleased LayerMultiplex object .
2013-09-13 11:41:20 +08:00
*/
2013-06-20 14:13:12 +08:00
static LayerMultiplex * create ( ) ;
2013-07-18 07:56:19 +08:00
2015-03-19 21:32:19 +08:00
/** Creates a LayerMultiplex with an array of layers.
2013-02-27 18:21:35 +08:00
@ since v2 .1
2013-09-13 11:41:20 +08:00
* @ js NA
2015-03-19 21:32:19 +08:00
*
* @ param arrayOfLayers An array of layers .
* @ return An autoreleased LayerMultiplex object .
2013-02-27 18:21:35 +08:00
*/
2013-11-29 11:36:42 +08:00
static LayerMultiplex * createWithArray ( const Vector < Layer * > & arrayOfLayers ) ;
2012-02-01 16:45:23 +08:00
2015-03-19 21:32:19 +08:00
/** Creates a LayerMultiplex with one or more layers using a variable argument list.
2013-09-13 11:41:20 +08:00
* @ code
* When this function bound to lua or js , the input params are changed .
* In js : var create ( . . . )
* In lua : local create ( . . . )
* @ endcode
*/
2015-05-09 00:19:13 +08:00
# if (CC_TARGET_PLATFORM == CC_PLATFORM_WINRT)
// VS2013 does not support nullptr in variable args lists and variadic templates are also not supported
2014-03-25 06:09:24 +08:00
typedef Layer * M ;
static LayerMultiplex * create ( M m1 , std : : nullptr_t listEnd ) { return createVariadic ( m1 , NULL ) ; }
static LayerMultiplex * create ( M m1 , M m2 , std : : nullptr_t listEnd ) { return createVariadic ( m1 , m2 , NULL ) ; }
static LayerMultiplex * create ( M m1 , M m2 , M m3 , std : : nullptr_t listEnd ) { return createVariadic ( m1 , m2 , m3 , NULL ) ; }
static LayerMultiplex * create ( M m1 , M m2 , M m3 , M m4 , std : : nullptr_t listEnd ) { return createVariadic ( m1 , m2 , m3 , m4 , NULL ) ; }
static LayerMultiplex * create ( M m1 , M m2 , M m3 , M m4 , M m5 , std : : nullptr_t listEnd ) { return createVariadic ( m1 , m2 , m3 , m4 , m5 , NULL ) ; }
static LayerMultiplex * create ( M m1 , M m2 , M m3 , M m4 , M m5 , M m6 , std : : nullptr_t listEnd ) { return createVariadic ( m1 , m2 , m3 , m4 , m5 , m6 , NULL ) ; }
static LayerMultiplex * create ( M m1 , M m2 , M m3 , M m4 , M m5 , M m6 , M m7 , std : : nullptr_t listEnd ) { return createVariadic ( m1 , m2 , m3 , m4 , m5 , m6 , m7 , NULL ) ; }
static LayerMultiplex * create ( M m1 , M m2 , M m3 , M m4 , M m5 , M m6 , M m7 , M m8 , std : : nullptr_t listEnd ) { return createVariadic ( m1 , m2 , m3 , m4 , m5 , m6 , m7 , m8 , NULL ) ; }
static LayerMultiplex * create ( M m1 , M m2 , M m3 , M m4 , M m5 , M m6 , M m7 , M m8 , M m9 , std : : nullptr_t listEnd ) { return createVariadic ( m1 , m2 , m3 , m4 , m5 , m6 , m7 , m8 , m9 , NULL ) ; }
static LayerMultiplex * create ( M m1 , M m2 , M m3 , M m4 , M m5 , M m6 , M m7 , M m8 , M m9 , M m10 , std : : nullptr_t listEnd ) { return createVariadic ( m1 , m2 , m3 , m4 , m5 , m6 , m7 , m8 , m9 , m10 , NULL ) ; }
// On WP8 for variable argument lists longer than 10 items, use createWithArray or createVariadic with NULL as the last argument
static LayerMultiplex * createVariadic ( Layer * item , . . . ) CC_REQUIRES_NULL_TERMINATION ;
# else
2013-06-20 14:13:12 +08:00
static LayerMultiplex * create ( Layer * layer , . . . ) ;
2014-03-25 06:09:24 +08:00
# endif
2012-02-01 16:45:23 +08:00
2015-03-19 21:32:19 +08:00
/** Creates a LayerMultiplex with one layer.
* Lua script can not init with undetermined number of variables
2012-09-17 15:02:24 +08:00
* so add these functions to be used with lua .
2013-09-13 11:41:20 +08:00
* @ js NA
* @ lua NA
2015-03-19 21:32:19 +08:00
*
* @ param layer A certain layer .
* @ return An autoreleased LayerMultiplex object .
2012-04-19 14:35:52 +08:00
*/
2013-06-20 14:13:12 +08:00
static LayerMultiplex * createWithLayer ( Layer * layer ) ;
2013-11-29 11:36:42 +08:00
2015-03-19 21:32:19 +08:00
/** Add a certain layer to LayerMultiplex.
*
* @ param layer A layer need to be added to the LayerMultiplex .
*/
2013-11-29 11:36:42 +08:00
void addLayer ( Layer * layer ) ;
2015-03-19 21:32:19 +08:00
/** Switches to a certain layer indexed by n.
2013-11-29 11:36:42 +08:00
The current ( old ) layer will be removed from it ' s parent with ' cleanup = true ' .
2015-03-19 21:32:19 +08:00
*
* @ param n The layer indexed by n will display .
2013-11-29 11:36:42 +08:00
*/
void switchTo ( int n ) ;
2017-09-08 09:28:57 +08:00
/** The same as switchTo(int), but has a parameter to set if need to clean up child.
*/
void switchTo ( int n , bool cleanup ) ;
2013-11-29 11:36:42 +08:00
/** release the current layer and switches to another layer indexed by n.
The current ( old ) layer will be removed from it ' s parent with ' cleanup = true ' .
2015-03-19 21:32:19 +08:00
*
* @ param n The layer indexed by n will display .
*/
2013-11-29 11:36:42 +08:00
void switchToAndReleaseMe ( int n ) ;
2013-12-13 06:30:22 +08:00
virtual std : : string getDescription ( ) const override ;
2013-11-29 11:36:42 +08:00
2014-03-21 13:44:29 +08:00
CC_CONSTRUCTOR_ACCESS :
2013-09-13 16:46:31 +08:00
/**
* @ js ctor
*/
2013-07-18 07:56:19 +08:00
LayerMultiplex ( ) ;
2013-09-13 11:41:20 +08:00
/**
* @ js NA
* @ lua NA
*/
2013-07-18 07:56:19 +08:00
virtual ~ LayerMultiplex ( ) ;
2013-11-29 11:36:42 +08:00
2015-03-15 02:33:15 +08:00
virtual bool init ( ) override ;
2013-11-29 11:36:42 +08:00
/** initializes a MultiplexLayer with one or more layers using a variable argument list.
2013-09-13 11:41:20 +08:00
* @ js NA
* @ lua NA
*/
2013-06-20 14:13:12 +08:00
bool initWithLayers ( Layer * layer , va_list params ) ;
2013-11-29 11:36:42 +08:00
2013-06-20 14:13:12 +08:00
/** initializes a MultiplexLayer with an array of layers
2013-07-18 07:56:19 +08:00
@ since v2 .1
*/
2013-11-29 11:36:42 +08:00
bool initWithArray ( const Vector < Layer * > & arrayOfLayers ) ;
2014-03-21 13:44:29 +08:00
protected :
2013-07-18 07:56:19 +08:00
unsigned int _enabledLayer ;
2013-11-29 11:36:42 +08:00
Vector < Layer * > _layers ;
private :
CC_DISALLOW_COPY_AND_ASSIGN ( LayerMultiplex ) ;
2012-02-01 16:45:23 +08:00
} ;
2012-07-13 09:53:38 +08:00
2015-03-24 10:34:41 +08:00
// end of _2d group
2012-06-20 18:09:11 +08:00
/// @}
2012-04-18 18:43:45 +08:00
NS_CC_END
2012-02-01 16:45:23 +08:00
# endif // __CCLAYER_H__