123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135 |
- #include "RuntimeCCSImpl.h"
- #include "ConfigParser.h"
- #include "cocostudio/CocoStudio.h"
- #include "ui/UIHelper.h"
- #include "tinyxml2.h"
- ////////////////////////////////////////
- RuntimeCCSImpl *RuntimeCCSImpl::create()
- {
- auto instance = new RuntimeCCSImpl();
- return instance;
- }
- void RuntimeCCSImpl::onStartDebuger(const rapidjson::Document& dArgParse, rapidjson::Document& dReplyParse)
- {
- }
- void RuntimeCCSImpl::onReload(const rapidjson::Document &dArgParse, rapidjson::Document &dReplyParse)
- {
- }
- void RuntimeCCSImpl::startScript(const std::string& file)
- {
- std::string filename(file);
- if (filename.empty())
- {
- filename = ConfigParser::getInstance()->getEntryFile();
- }
-
- if (filename.rfind(".csd") != std::string::npos)
- {
- loadCSDProject(filename);
- }
- else if (filename.rfind(".csb") != std::string::npos)
- {
- loadCSBProject(filename);
- }
- }
- void RuntimeCCSImpl::loadCSDProject(const std::string& file)
- {
- CCLOG("------------------------------------------------");
- CCLOG("LOAD Cocos Studio FILE (.csd): %s", file.c_str());
- CCLOG("------------------------------------------------");
-
- auto node = CSLoader::getInstance()->createNodeWithFlatBuffersForSimulator(file.c_str());
- auto action = cocostudio::timeline::ActionTimelineCache::getInstance()->createActionWithFlatBuffersForSimulator(file.c_str());
- if (action)
- {
- node->runAction(action);
- action->gotoFrameAndPlay(0);
- }
-
- if (node)
- {
- Size frameSize = Director::getInstance()->getVisibleSize();
- node->setContentSize(frameSize);
- ui::Helper::doLayout(node);
- std::string inFullpath = FileUtils::getInstance()->fullPathForFilename(file).c_str();
- std::string content = FileUtils::getInstance()->getStringFromFile(file);
- tinyxml2::XMLDocument* document = new tinyxml2::XMLDocument();
- document->Parse(content.c_str());
- const tinyxml2::XMLElement* rootElement = document->RootElement();
- const tinyxml2::XMLElement* element = rootElement->FirstChildElement();
- if(element)
- {
- if (strcmp("PropertyGroup", element->Name()) == 0)
- {
- const tinyxml2::XMLAttribute* attribute = element->FirstAttribute();
- while (attribute != nullptr)
- {
- std::string csdType = attribute->Name();
- if (csdType.compare("Type") == 0)
- {
- std::string csdValue = attribute->Value();
- if (csdValue.compare("Skeleton") == 0 || csdValue.compare("Node") == 0)
- {
- node->setPosition(cocos2d::Vec2(frameSize.width / 2.0f, frameSize.height / 2.0f));
- }
- break;
- }
- attribute = attribute->Next();
- }
- }
- }
- delete document;
- if (Director::getInstance()->getRunningScene())
- {
- auto scene = Scene::create();
- scene->addChild(node);
- Director::getInstance()->replaceScene(scene);
- }
- else
- {
- auto scene = Scene::create();
- scene->addChild(node);
- Director::getInstance()->runWithScene(scene);
- }
- }
- }
- void RuntimeCCSImpl::loadCSBProject(const std::string& file)
- {
- CCLOG("\n------------------------------------------------\n");
- CCLOG("[WARNING]: using **SUITABLE** Cocos Studio generate csb file!!");
- CCLOG("LOAD Cocos Studio FILE (.csb): %s", file.c_str());
- CCLOG("\n------------------------------------------------\n");
-
- auto node = CSLoader::getInstance()->createNode(file);
- if (node)
- {
- Size frameSize = Director::getInstance()->getVisibleSize();
- node->setContentSize(frameSize);
- ui::Helper::doLayout(node);
- if (Director::getInstance()->getRunningScene())
- {
- auto scene = Scene::create();
- scene->addChild(node);
- Director::getInstance()->replaceScene(scene);
- }
- else
- {
- auto scene = Scene::create();
- scene->addChild(node);
- Director::getInstance()->runWithScene(scene);
- }
- }
- }
|