From fdcbafda0fa42b959d7ac2c7555747ce2e5f1251 Mon Sep 17 00:00:00 2001 From: Walzer Date: Fri, 9 Jul 2010 03:26:56 +0000 Subject: [PATCH] issue #5, add CCLayer.h, add @todo --- cocos2dx/include/CCAtlasNode.h | 8 - cocos2dx/include/CCLayer.h | 140 ++++++++++++++++++ cocos2dx/include/CCNode.h | 83 ++--------- .../CCLayer.cpp | 27 ++++ 4 files changed, 181 insertions(+), 77 deletions(-) create mode 100644 cocos2dx/include/CCLayer.h create mode 100644 cocos2dx/layers_scenes_transitions_nodes/CCLayer.cpp diff --git a/cocos2dx/include/CCAtlasNode.h b/cocos2dx/include/CCAtlasNode.h index bfbe7ccaae..3f42f03013 100644 --- a/cocos2dx/include/CCAtlasNode.h +++ b/cocos2dx/include/CCAtlasNode.h @@ -40,8 +40,6 @@ All features from CCNode are valid, plus the following features: class CCAtlasNode : public CCNode, public CCRGBAProtocol, public CCTextureProtocol { protected: - // texture atlas - //CCTextureAtlas *textureAtlas_; // chars per row int m_iItemsPerRow; @@ -58,12 +56,6 @@ protected: // height of each char int m_iItemHeight; - // blend function - //ccBlendFunc blendFunc_; - - // texture RGBA. - //GLubyte opacity_; - //ccColor3B color_; ccColor3B m_tColorUnmodified; bool m_bOpacityModifyRGB; diff --git a/cocos2dx/include/CCLayer.h b/cocos2dx/include/CCLayer.h new file mode 100644 index 0000000000..9f7c6771d3 --- /dev/null +++ b/cocos2dx/include/CCLayer.h @@ -0,0 +1,140 @@ +/**************************************************************************** +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 __CCLAYER_H__ +#define __CCLAYER_H__ + +#include "Cocos2dDefine.h" +#include "CCNode.h" +/// @todo CCTexture2D.h +//#include "CCProtocols.h" + +// +// CCLayer +// +/** CCLayer is a subclass of CCNode that implements the TouchEventsDelegate protocol. + +All features from CCNode are valid, plus the following new features: +- It can receive iPhone Touches +- It can receive Accelerometer input +*/ +/// @todo public UIAccelerometerDelegate, public CCStandardTouchDelegate, public CCTargetedTouchDelegate +class CCLayer : public CCNode//, public UIAccelerometerDelegate, public CCStandardTouchDelegate, public CCTargetedTouchDelegate +{ +public: + /** If isTouchEnabled, this method is called onEnter. Override it to change the + way CCLayer receives touch events. + ( Default: [[TouchDispatcher sharedDispatcher] addStandardDelegate:self priority:0] ) + Example: + -(void) registerWithTouchDispatcher + { + [[TouchDispatcher sharedDispatcher] addTargetedDelegate:self priority:INT_MIN+1 swallowsTouches:YES]; + } + @since v0.8.0 + */ + void registerWithTouchDispatcher(void); + + /** 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 + */ + CCX_DECLARE_VAR_READWRITE_INLINE(bool, m_bIsTouchEnabled, IsTouchEnabled) + /** whether or not it will receive Accelerometer events + You can enable / disable accelerometer events with this property. + @since v0.8.1 + */ + CCX_DECLARE_VAR_READWRITE(bool, m_bIsAccelerometerEnabled, IsAccelerometerEnabled) +}; + +// +// CCColorLayer +// +/** CCColorLayer is a subclass of CCLayer that implements the CCRGBAProtocol protocol. + +All features from CCLayer are valid, plus the following new features: +- opacity +- RGB colors +*/ +/// @todo public CCRGBAProtocol, public CCBlendProtocol +class CCColorLayer : public CCLayer //, public CCRGBAProtocol, public CCBlendProtocol +{ +protected: + GLfloat m_fSquareVertices[4 * 2]; + GLubyte m_cSquareColors[4 * 4]; + +public: + /** creates a CCLayer with color, width and height */ + static void* layerWithColorWidthHeight(ccColor4B color, GLfloat width, GLfloat height); + /** creates a CCLayer with color. Width and height are the window size. */ + static void* layerWithColor(ccColor4B color); + + /** initializes a CCLayer with color, width and height */ + void* initWithColorWidthHeight(ccColor4B color, GLfloat width, GLfloat height); + /** initializes a CCLayer with color. Width and height are the window size. */ + void* initWithColor(ccColor4B color); + + /** change width */ + void changeWidth(GLfloat w); + /** change height */ + void changeHeight(GLfloat h); + /** change width and height + @since v0.8 + */ + void changeWidthAndHeight(GLfloat w ,GLfloat h); + + /** Opacity: conforms to CCRGBAProtocol protocol */ + CCX_DECLARE_VAR_READONLY(GLubyte, m_cOpacity, Opacity) + /** Opacity: conforms to CCRGBAProtocol protocol */ + CCX_DECLARE_VAR_READONLY(ccColor3B, m_tColor, Color) + /** BlendFunction. Conforms to CCBlendProtocol protocol */ + CCX_DECLARE_VAR_READWRITE(ccBlendFunc, m_tBlendFunc, BlendFunc) +}; + +/** CCMultipleLayer is a CCLayer with the ability to multiplex it's children. +Features: +- It supports one or more children +- Only one children will be active a time +*/ +class CCMultiplexLayer : public CCLayer +{ +protected: + unsigned int enabledLayer; + NSMutableArray *layers; +public: + /** creates a CCMultiplexLayer with one or more layers using a variable argument list. */ + static void* layerWithLayers(CCLayer* layer, ... ); + /** initializes a MultiplexLayer with one or more layers using a variable argument list. */ + void* initWithLayers(CCLayer* layer, va_list params); + /** switches to a certain layer indexed by n. + The current (old) layer will be removed from it's parent with 'cleanup:YES'. + */ + void switchTo(unsigned int n); + /** 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:YES'. + */ + void switchToAndReleaseMe(unsigned int n); +}; + +#endif \ No newline at end of file diff --git a/cocos2dx/include/CCNode.h b/cocos2dx/include/CCNode.h index 7a334fff27..219decbcdf 100644 --- a/cocos2dx/include/CCNode.h +++ b/cocos2dx/include/CCNode.h @@ -96,62 +96,6 @@ class CCNode{ protected: - // rotation angle - //float m_fRotation; - - // scaling factors - //float m_fScaleX, m_fScaleY; - - // position of the node - //CGPoint m_tPosition; - - // is visible - //bool m_bIsVisible; - - // anchor point in pixels - //CGPoint m_tAnchorPointInPixels; - - // anchor point normalized - //CGPoint m_tAnchorPoint; - - // If true the transformtions will be relative to (-transform.x, -transform.y). - // Sprites, Labels and any other "small" object uses it. - // Scenes, Layers and other "whole screen" object don't use it. - //bool m_bIsRelativeAnchorPoint; - - // untransformed size of the node - //CGSize m_tContentSize; - - // transform - //CGAffineTransform m_tTransform, m_tInverse; - - // openGL real Z vertex - //float m_fVertexZ; - - // a Camera - //CCCamera * m_pCamera; - - // a Grid - //CCGridBase * m_pGrid; - - // z-order value - //int m_iZOrder; - - // array of children - //NSMutableArray * m_pChildren; - - // weakref to parent - //CCNode * m_pParent; - - // a tag. any number you want to assign to the node - //int m_iTag; - - // user data field - //void *m_pUserData; - - // Is running - //bool m_bIsRunning; - #ifdef CCX_NODE_TRANSFORM_USING_AFFINE_MATRIX GLfloat m_pTransformGL[16]; #endif @@ -378,13 +322,14 @@ public: @since v0.7.1 @return An Action pointer */ -// CCAction* runAction(CCAction* action); + +/// @todo CCAction* runAction(CCAction* action); /** Removes all actions from the running action list */ void stopAllActions(void); /** Removes an action from the running action list */ -// void stopAction(CCAction* action); +/// @todo void stopAction(CCAction* action); /** Removes an action from the running action list given its tag @since v0.7.1 @@ -395,7 +340,7 @@ public: @since v0.7.1 @return the Action the with the given tag */ -// CCAction* getActionByTag(int tag); +/// @todo CCAction* getActionByTag(int tag); /** Returns the numbers of actions that are running plus the ones that are schedule to run (actions in actionsToAdd and actions arrays). * Composable actions are counted as 1 action. Example: @@ -408,7 +353,7 @@ public: // timers /** check whether a selector is scheduled. */ -// bool isScheduled(SEL selector); +/// @todo bool isScheduled(SEL selector); /** schedules the "update" method. It will use the order number 0. This method will be called every frame. Scheduled methods with a lower order value will be called before the ones that have a higher order value. @@ -435,16 +380,16 @@ public: /** schedules a selector. The scheduled selector will be ticked every frame */ -// void schedule(SEL selector); +/// @todo void schedule(SEL selector); /** schedules a custom selector with an interval time in seconds. If time is 0 it will be ticked every frame. If tiem is 0, it is recommended to use 'scheduleUpdate' instead. */ -// void schedule(SEL selector, ccTime seconds); +/// @todo void schedule(SEL selector, ccTime seconds); /** unschedules a custom selector.*/ -// void unschedule(SEL selector); +/// @todo void unschedule(SEL selector); /** unschedule all scheduled selectors: custom selectors, and the 'update' selector. Actions are not affected by this method. @@ -467,22 +412,22 @@ public: /** Returns the local affine transform matrix @since v0.7.1 */ -// CGAffineTransform nodeToParentTransform(void); +/// @todo CGAffineTransform nodeToParentTransform(void); /** Returns the inverse local affine transform matrix @since v0.7.1 */ -// CGAffineTransform parentToNodeTransform(void); +/// @todo CGAffineTransform parentToNodeTransform(void); /** Retrusn the world affine transform matrix @since v0.7.1 */ -// CGAffineTransform nodeToWorldTransform(void); +/// @todo CGAffineTransform nodeToWorldTransform(void); /** Returns the inverse world affine transform matrix @since v0.7.1 */ -// CGAffineTransform worldToNodeTransform(void); +/// @todo CGAffineTransform worldToNodeTransform(void); /** converts a world coordinate to local coordinate @since v0.7.1 @@ -505,12 +450,12 @@ public: /** convenience methods which take a UITouch instead of CGPoint @since v0.7.1 */ -// CGPoint convertTouchToNodeSpace(UITouch * touch); +/// @todo CGPoint convertTouchToNodeSpace(UITouch * touch); /** converts a UITouch (world coordinates) into a local coordiante. This method is AR (Anchor Relative). @since v0.7.1 */ -// CGPoint convertTouchToNodeSpaceAR:(UITouch * touch); +/// @todo CGPoint convertTouchToNodeSpaceAR:(UITouch * touch); }; diff --git a/cocos2dx/layers_scenes_transitions_nodes/CCLayer.cpp b/cocos2dx/layers_scenes_transitions_nodes/CCLayer.cpp new file mode 100644 index 0000000000..ecd6b6dc1e --- /dev/null +++ b/cocos2dx/layers_scenes_transitions_nodes/CCLayer.cpp @@ -0,0 +1,27 @@ +/**************************************************************************** +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 "CCLayer.h" + +using namespace std; \ No newline at end of file