2011-07-30 16:55:38 +08:00
/****************************************************************************
Copyright ( c ) 2008 - 2010 Ricardo Quesada
2014-01-07 11:25:07 +08:00
Copyright ( c ) 2010 - 2012 cocos2d - x . org
2011-07-30 16:55:38 +08:00
Copyright ( c ) 2011 Zynga Inc .
2014-01-07 11:25:07 +08:00
Copyright ( c ) 2013 - 2014 Chukong Technologies Inc .
2011-07-30 16:55:38 +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 __CCSCENE_H__
# define __CCSCENE_H__
2014-06-25 11:27:48 +08:00
# include <string>
2014-04-27 01:11:22 +08:00
# include "2d/CCNode.h"
2011-07-30 16:55:38 +08:00
2012-04-18 18:43:45 +08:00
NS_CC_BEGIN
2011-07-30 16:55:38 +08:00
2014-08-07 15:23:31 +08:00
class Camera ;
2014-09-28 16:02:12 +08:00
class BaseLight ;
2014-09-26 09:36:43 +08:00
class Renderer ;
2014-08-26 18:19:28 +08:00
class EventListenerCustom ;
class EventCustom ;
2014-08-27 13:39:50 +08:00
# if CC_USE_PHYSICS
class PhysicsWorld ;
# endif
2012-06-20 18:09:11 +08:00
/**
* @ addtogroup scene
* @ {
*/
2013-06-20 14:13:12 +08:00
/** @brief Scene is a subclass of Node that is used only as an abstract concept.
2011-07-30 16:55:38 +08:00
2013-09-23 02:39:42 +08:00
Scene and Node are almost identical with the difference that Scene has its
2011-07-30 16:55:38 +08:00
anchor point ( by default ) at the center of the screen .
2013-06-20 14:13:12 +08:00
For the moment Scene has no other logic than that , but in future releases it might have
2011-07-30 16:55:38 +08:00
additional logic .
2013-09-22 17:07:21 +08:00
It is a good practice to use a Scene as the parent of all your nodes .
2014-11-13 17:30:49 +08:00
Scene will create a default camera for you .
2011-07-30 16:55:38 +08:00
*/
2013-06-20 14:13:12 +08:00
class CC_DLL Scene : public Node
2011-07-30 16:55:38 +08:00
{
public :
2013-07-16 03:43:22 +08:00
/** creates a new Scene object */
2013-09-10 17:38:47 +08:00
static Scene * create ( ) ;
2013-07-16 03:43:22 +08:00
2014-05-31 07:42:05 +08:00
/** creates a new Scene object with a predefined Size */
static Scene * createWithSize ( const Size & size ) ;
2013-12-22 04:28:49 +08:00
// Overrides
2014-06-17 11:43:03 +08:00
virtual Scene * getScene ( ) const override ;
2013-11-14 07:55:36 +08:00
2013-12-23 16:58:26 +08:00
using Node : : addChild ;
2013-12-13 06:30:22 +08:00
virtual std : : string getDescription ( ) const override ;
2014-03-21 13:44:29 +08:00
2014-08-08 11:49:59 +08:00
/** get all cameras */
const std : : vector < Camera * > & getCameras ( ) const { return _cameras ; }
2014-08-15 14:51:23 +08:00
2014-09-28 16:02:12 +08:00
const std : : vector < BaseLight * > & getLights ( ) const { return _lights ; }
2014-08-07 15:23:31 +08:00
2014-09-26 09:36:43 +08:00
/** render the scene */
void render ( Renderer * renderer ) ;
2014-03-21 13:44:29 +08:00
CC_CONSTRUCTOR_ACCESS :
2013-11-14 07:55:36 +08:00
Scene ( ) ;
virtual ~ Scene ( ) ;
2013-12-26 23:55:05 +08:00
2014-05-31 07:42:05 +08:00
bool init ( ) ;
bool initWithSize ( const Size & size ) ;
2014-08-12 14:42:08 +08:00
void onProjectionChanged ( EventCustom * event ) ;
2014-03-21 13:44:29 +08:00
protected :
2014-05-02 07:42:35 +08:00
friend class Node ;
friend class ProtectedNode ;
2013-10-10 18:31:43 +08:00
friend class SpriteBatchNode ;
2014-08-07 15:23:31 +08:00
friend class Camera ;
2014-09-28 16:02:12 +08:00
friend class BaseLight ;
2014-08-27 12:09:23 +08:00
friend class Renderer ;
2014-08-07 15:23:31 +08:00
std : : vector < Camera * > _cameras ; //weak ref to Camera
2014-08-12 14:42:08 +08:00
Camera * _defaultCamera ; //weak ref, default camera created by scene, _cameras[0], Caution that the default camera can not be added to _cameras before onEnter is called
EventListenerCustom * _event ;
2014-08-15 14:51:23 +08:00
2014-09-28 16:02:12 +08:00
std : : vector < BaseLight * > _lights ;
2013-12-26 23:55:05 +08:00
2013-11-14 07:55:36 +08:00
private :
CC_DISALLOW_COPY_AND_ASSIGN ( Scene ) ;
2014-05-02 07:42:35 +08:00
# if CC_USE_PHYSICS
public :
virtual void addChild ( Node * child , int zOrder , int tag ) override ;
2014-06-25 11:27:48 +08:00
virtual void addChild ( Node * child , int zOrder , const std : : string & name ) override ;
2014-05-02 07:42:35 +08:00
virtual void update ( float delta ) override ;
inline PhysicsWorld * getPhysicsWorld ( ) { return _physicsWorld ; }
static Scene * createWithPhysics ( ) ;
CC_CONSTRUCTOR_ACCESS :
bool initWithPhysics ( ) ;
protected :
void addChildToPhysicsWorld ( Node * child ) ;
PhysicsWorld * _physicsWorld ;
# endif // CC_USE_PHYSICS
2011-07-30 16:55:38 +08:00
} ;
2012-04-18 18:43:45 +08:00
2012-06-20 18:09:11 +08:00
// end of scene group
/// @}
2012-04-18 18:43:45 +08:00
NS_CC_END
2011-07-30 16:55:38 +08:00
# endif // __CCSCENE_H__