Skip to content

Commit a25e422

Browse files
committed
strength cocosbuilder for lua
1 parent fb0fffb commit a25e422

File tree

4 files changed

+204
-27
lines changed

4 files changed

+204
-27
lines changed

Diff for: cocos/editor-support/cocosbuilder/CCBReader.cpp

+44-2
Original file line numberDiff line numberDiff line change
@@ -27,7 +27,12 @@ namespace cocosbuilder {
2727
Implementation of CCBFile
2828
*************************************************************************/
2929

30-
CCBFile::CCBFile():_CCBFileNode(nullptr) {}
30+
CCBFile::CCBFile():_CCBFileNode(nullptr), _CCBReader(nullptr) {}
31+
CCBFile::~CCBFile()
32+
{
33+
CC_SAFE_RELEASE(_CCBFileNode);
34+
CC_SAFE_RELEASE(_CCBReader);
35+
}
3136

3237
CCBFile* CCBFile::create()
3338
{
@@ -40,7 +45,7 @@ CCBFile* CCBFile::create()
4045

4146
return ret;
4247
}
43-
48+
4449
Node* CCBFile::getCCBFileNode()
4550
{
4651
return _CCBFileNode;
@@ -53,6 +58,18 @@ void CCBFile::setCCBFileNode(Node *pNode)
5358
CC_SAFE_RETAIN(_CCBFileNode);
5459
}
5560

61+
CCBReader* CCBFile::getCCBReader()
62+
{
63+
return _CCBReader;
64+
}
65+
66+
void CCBFile::setCCBReader(CCBReader *pReader)
67+
{
68+
CC_SAFE_RELEASE(_CCBReader);
69+
_CCBReader = pReader;
70+
CC_SAFE_RETAIN(_CCBReader);
71+
}
72+
5673
/*************************************************************************
5774
Implementation of CCBReader
5875
*************************************************************************/
@@ -119,6 +136,7 @@ CCBReader::~CCBReader()
119136

120137
_ownerOutletNames.clear();
121138
_ownerCallbackNames.clear();
139+
_subCCBFiles.clear();
122140

123141
// Clear string cache.
124142
this->_stringCache.clear();
@@ -608,6 +626,12 @@ Node * CCBReader::readNodeGraph(Node * pParent)
608626

609627
_animationManager->moveAnimationsFromNode(ccbFileNode, embeddedNode);
610628

629+
//Jennal added
630+
CCBReader* reader = ccbFileNode->getCCBReader();
631+
// reader->setMemberName(memberVarAssignmentName);
632+
if (reader != nullptr)
633+
this->addSubCCBFile(reader);
634+
ccbFileNode->setCCBReader(nullptr);
611635
ccbFileNode->setCCBFileNode(nullptr);
612636

613637
node = embeddedNode;
@@ -1067,6 +1091,24 @@ void CCBReader::addOwnerOutletNode(Node *node)
10671091
_ownerOutletNodes.pushBack(node);
10681092
}
10691093

1094+
/*
1095+
Jennal added
1096+
*/
1097+
void CCBReader::addSubCCBFile(CCBReader* v)
1098+
{
1099+
_subCCBFiles.pushBack(v);
1100+
}
1101+
1102+
cocos2d::Vector<CCBReader*>& CCBReader::getSubCCBFiles()
1103+
{
1104+
return _subCCBFiles;
1105+
}
1106+
1107+
std::string CCBReader::getDocumentControllerName()
1108+
{
1109+
return _animationManager->getDocumentControllerName();
1110+
}
1111+
10701112
/************************************************************************
10711113
Static functions
10721114
************************************************************************/

Diff for: cocos/editor-support/cocosbuilder/CCBReader.h

+16
Original file line numberDiff line numberDiff line change
@@ -38,18 +38,25 @@ namespace cocosbuilder {
3838
* @{
3939
*/
4040

41+
class CCBReader;
42+
4143
class CCBFile : public cocos2d::Node
4244
{
4345
private:
4446
cocos2d::Node *_CCBFileNode;
47+
CCBReader *_CCBReader;
4548

4649
public:
4750
CCBFile();
51+
~CCBFile();
4852

4953
static CCBFile* create();
5054

5155
cocos2d::Node* getCCBFileNode();
5256
void setCCBFileNode(Node *pNode); // retain
57+
58+
CCBReader* getCCBReader();
59+
void setCCBReader(CCBReader *pReader); // retain
5360
};
5461

5562
/* Forward declaration. */
@@ -301,6 +308,11 @@ class CCBReader : public cocos2d::Ref
301308
typedef cocos2d::Map<cocos2d::Node*, CCBAnimationManager*> CCBAnimationManagerMap;
302309
typedef std::shared_ptr<CCBAnimationManagerMap> CCBAnimationManagerMapPtr;
303310

311+
/* Jennal added */
312+
std::string getDocumentControllerName();
313+
void addSubCCBFile(CCBReader*);
314+
cocos2d::Vector<CCBReader*>& getSubCCBFiles();
315+
304316
/**
305317
* @js NA
306318
* @lua NA
@@ -395,6 +407,10 @@ class CCBReader : public cocos2d::Ref
395407
std::vector<std::string> _ownerCallbackNames;
396408
cocos2d::Vector<cocos2d::Node*> _ownerCallbackNodes;
397409
cocos2d::ValueVector _ownerOwnerCallbackControlEvents;
410+
411+
/* Jennal added */
412+
cocos2d::Vector<CCBReader*> _subCCBFiles;
413+
398414
std::string _CCBRootPath;
399415

400416
bool _jsControlled;

Diff for: cocos/editor-support/cocosbuilder/CCNodeLoader.cpp

+35-24
Original file line numberDiff line numberDiff line change
@@ -960,37 +960,48 @@ Node * NodeLoader::parsePropTypeCCBFile(Node * pNode, Node * pParent, CCBReader
960960
reader->getAnimationManager()->runAnimationsForSequenceIdTweenDuration(reader->getAnimationManager()->getAutoPlaySequenceId(), 0);
961961
}
962962

963-
if (reader->isJSControlled() && pCCBReader->isJSControlled() && nullptr == reader->_owner)
963+
if (reader->isJSControlled() && pCCBReader->isJSControlled())
964964
{
965-
//set variables and callback to owner
966-
//set callback
967-
auto ownerCallbackNames = reader->getOwnerCallbackNames();
968-
auto& ownerCallbackNodes = reader->getOwnerCallbackNodes();
969-
if (!ownerCallbackNames.empty() && !ownerCallbackNodes.empty())
965+
//Jennal Modified: need to check this??
966+
if (reader->_owner == nullptr)
970967
{
971-
CCASSERT(ownerCallbackNames.size() == ownerCallbackNodes.size(), "");
972-
ssize_t nCount = ownerCallbackNames.size();
973-
974-
for (ssize_t i = 0 ; i < nCount; i++)
968+
//set variables and callback to owner
969+
//set callback
970+
auto ownerCallbackNames = reader->getOwnerCallbackNames();
971+
auto& ownerCallbackNodes = reader->getOwnerCallbackNodes();
972+
if (!ownerCallbackNames.empty() && !ownerCallbackNodes.empty())
975973
{
976-
pCCBReader->addOwnerCallbackName(ownerCallbackNames[i].asString());
977-
pCCBReader->addOwnerCallbackNode(ownerCallbackNodes.at(i));
974+
CCASSERT(ownerCallbackNames.size() == ownerCallbackNodes.size(), "");
975+
ssize_t nCount = ownerCallbackNames.size();
976+
977+
for (ssize_t i = 0 ; i < nCount; i++)
978+
{
979+
pCCBReader->addOwnerCallbackName(ownerCallbackNames[i].asString());
980+
pCCBReader->addOwnerCallbackNode(ownerCallbackNodes.at(i));
981+
}
978982
}
979-
}
980-
//set variables
981-
auto ownerOutletNames = reader->getOwnerOutletNames();
982-
auto ownerOutletNodes = reader->getOwnerOutletNodes();
983-
if (!ownerOutletNames.empty() && !ownerOutletNodes.empty())
984-
{
985-
CCASSERT(ownerOutletNames.size() == ownerOutletNodes.size(), "");
986-
ssize_t nCount = ownerOutletNames.size();
987-
988-
for (ssize_t i = 0 ; i < nCount; i++)
983+
//set variables
984+
auto ownerOutletNames = reader->getOwnerOutletNames();
985+
auto ownerOutletNodes = reader->getOwnerOutletNodes();
986+
if (!ownerOutletNames.empty() && !ownerOutletNodes.empty())
989987
{
990-
pCCBReader->addOwnerOutletName(ownerOutletNames.at(i).asString());
991-
pCCBReader->addOwnerOutletNode(ownerOutletNodes.at(i));
988+
CCASSERT(ownerOutletNames.size() == ownerOutletNodes.size(), "");
989+
ssize_t nCount = ownerOutletNames.size();
990+
991+
for (ssize_t i = 0 ; i < nCount; i++)
992+
{
993+
pCCBReader->addOwnerOutletName(ownerOutletNames.at(i).asString());
994+
pCCBReader->addOwnerOutletNode(ownerOutletNodes.at(i));
995+
}
992996
}
993997
}
998+
999+
//Jennal added
1000+
CCBFile* ccbFile = dynamic_cast<CCBFile*>(pNode);
1001+
if (ccbFile != nullptr) ccbFile->setCCBReader(reader);
1002+
1003+
// auto subFiles = reader->getSubCCBFiles();
1004+
// pCCBReader->addSubCCBFiles(subFiles);
9941005
}
9951006
return ccbFileNode;
9961007
}

Diff for: cocos/scripting/lua-bindings/manual/lua_cocos2dx_extension_manual.cpp

+109-1
Original file line numberDiff line numberDiff line change
@@ -795,14 +795,122 @@ static int tolua_cocos2d_CCBReader_load(lua_State* tolua_S)
795795
#endif
796796
}
797797

798+
static int tolua_cocos2d_CCBReader_getSubReaders(lua_State* tolua_S)
799+
{
800+
if (nullptr == tolua_S)
801+
return 0;
802+
803+
int argc = 0;
804+
CCBReader* self = nullptr;
805+
806+
#if COCOS2D_DEBUG >= 1
807+
tolua_Error tolua_err;
808+
if (!tolua_isusertype(tolua_S,1,"cc.CCBReader",0,&tolua_err)) goto tolua_lerror;
809+
#endif
810+
811+
self = static_cast<CCBReader*>(tolua_tousertype(tolua_S,1,0));
812+
#if COCOS2D_DEBUG >= 1
813+
if (nullptr == self) {
814+
tolua_error(tolua_S,"invalid 'self' in function 'tolua_cocos2d_CCBReader_getSubReaders'\n", NULL);
815+
return 0;
816+
}
817+
#endif
818+
819+
argc = lua_gettop(tolua_S) - 1;
820+
821+
if (argc == 0)
822+
{
823+
auto tolua_ret = self->getSubCCBFiles();
824+
if (tolua_ret.empty()) {
825+
return 0;
826+
}
827+
828+
int i = 1;
829+
lua_newtable(tolua_S);
830+
for(auto item : tolua_ret)
831+
{
832+
auto reader = item;
833+
int ID = (reader) ? (int)reader->_ID : -1;
834+
int* luaID = (reader) ? &reader->_luaID : NULL;
835+
836+
toluafix_pushusertype_ccobject(tolua_S, ID, luaID, (void*)reader,"cc.CCBReader");
837+
lua_rawseti(tolua_S, -2, i);
838+
++i;
839+
}
840+
return 1;
841+
842+
}
843+
844+
CCLOG("'getSubReaders' function of CCBReader has wrong number of arguments: %d, was expecting %d\n", argc, 0);
845+
return 0;
846+
847+
#if COCOS2D_DEBUG >= 1
848+
tolua_lerror:
849+
tolua_error(tolua_S,"#ferror in function 'getSubReaders'.",&tolua_err);
850+
return 0;
851+
#endif
852+
}
853+
854+
static int tolua_cocos2d_CCBReader_getDocumentControllerName(lua_State* tolua_S)
855+
{
856+
if (nullptr == tolua_S)
857+
return 0;
858+
859+
int argc = 0;
860+
CCBReader* self = nullptr;
861+
862+
#if COCOS2D_DEBUG >= 1
863+
tolua_Error tolua_err;
864+
if (!tolua_isusertype(tolua_S,1,"cc.CCBReader",0,&tolua_err)) goto tolua_lerror;
865+
#endif
866+
867+
self = static_cast<CCBReader*>(tolua_tousertype(tolua_S,1,0));
868+
#if COCOS2D_DEBUG >= 1
869+
if (nullptr == self) {
870+
tolua_error(tolua_S,"invalid 'self' in function 'tolua_cocos2d_CCBReader_getSubReaders'\n", NULL);
871+
return 0;
872+
}
873+
#endif
874+
875+
argc = lua_gettop(tolua_S) - 1;
876+
877+
if (argc == 0)
878+
{
879+
auto tolua_ret = self->getDocumentControllerName();
880+
if (tolua_ret.empty()) {
881+
return 0;
882+
}
883+
884+
lua_pushstring(tolua_S, tolua_ret.c_str());
885+
return 1;
886+
}
887+
888+
CCLOG("'getDocumentControllerName' function of CCBReader has wrong number of arguments: %d, was expecting %d\n", argc, 0);
889+
return 0;
890+
891+
#if COCOS2D_DEBUG >= 1
892+
tolua_lerror:
893+
tolua_error(tolua_S,"#ferror in function 'getDocumentControllerName'.",&tolua_err);
894+
return 0;
895+
#endif
896+
}
897+
798898
static void extendCCBReader(lua_State* tolua_S)
799899
{
800900
lua_pushstring(tolua_S, "cc.CCBReader");
801901
lua_rawget(tolua_S, LUA_REGISTRYINDEX);
802902
if (lua_istable(tolua_S,-1))
803903
{
804904
lua_pushstring(tolua_S,"load");
805-
lua_pushcfunction(tolua_S,tolua_cocos2d_CCBReader_load );
905+
lua_pushcfunction(tolua_S,tolua_cocos2d_CCBReader_load);
906+
lua_rawset(tolua_S,-3);
907+
908+
lua_pushstring(tolua_S,"getSubReaders");
909+
lua_pushcfunction(tolua_S,tolua_cocos2d_CCBReader_getSubReaders);
910+
lua_rawset(tolua_S,-3);
911+
912+
lua_pushstring(tolua_S,"getDocumentControllerName");
913+
lua_pushcfunction(tolua_S,tolua_cocos2d_CCBReader_getDocumentControllerName);
806914
lua_rawset(tolua_S,-3);
807915
}
808916
lua_pop(tolua_S, 1);

0 commit comments

Comments
 (0)