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