mirror of https://github.com/axmolengine/axmol.git
This commit is contained in:
parent
bd0bdae530
commit
f410fcd737
|
@ -427,11 +427,37 @@ ActionTimeline* ActionTimelineCache::loadAnimationActionWithFlatBuffersFile(cons
|
||||||
CC_ASSERT(FileUtils::getInstance()->isFileExist(fullPath));
|
CC_ASSERT(FileUtils::getInstance()->isFileExist(fullPath));
|
||||||
|
|
||||||
Data buf = FileUtils::getInstance()->getDataFromFile(fullPath);
|
Data buf = FileUtils::getInstance()->getDataFromFile(fullPath);
|
||||||
|
action = createActionWithDataBuffer(buf);
|
||||||
|
_animationActions.insert(fileName, action);
|
||||||
|
|
||||||
auto csparsebinary = GetCSParseBinary(buf.getBytes());
|
return action;
|
||||||
|
}
|
||||||
|
|
||||||
|
ActionTimeline* ActionTimelineCache::loadAnimationWithDataBuffer(const cocos2d::Data data, const std::string fileName)
|
||||||
|
{
|
||||||
|
// if already exists an action with filename, then return this action
|
||||||
|
ActionTimeline* action = _animationActions.at(fileName);
|
||||||
|
if (action)
|
||||||
|
return action;
|
||||||
|
|
||||||
|
std::string path = fileName;
|
||||||
|
|
||||||
|
std::string fullPath = FileUtils::getInstance()->fullPathForFilename(fileName.c_str());
|
||||||
|
|
||||||
|
CC_ASSERT(FileUtils::getInstance()->isFileExist(fullPath));
|
||||||
|
|
||||||
|
action = createActionWithDataBuffer(data);
|
||||||
|
_animationActions.insert(fileName, action);
|
||||||
|
|
||||||
|
return action;
|
||||||
|
}
|
||||||
|
|
||||||
|
inline ActionTimeline* ActionTimelineCache::createActionWithDataBuffer(const cocos2d::Data data)
|
||||||
|
{
|
||||||
|
auto csparsebinary = GetCSParseBinary(data.getBytes());
|
||||||
|
|
||||||
auto nodeAction = csparsebinary->action();
|
auto nodeAction = csparsebinary->action();
|
||||||
action = ActionTimeline::create();
|
auto action = ActionTimeline::create();
|
||||||
|
|
||||||
int duration = nodeAction->duration();
|
int duration = nodeAction->duration();
|
||||||
action->setDuration(duration);
|
action->setDuration(duration);
|
||||||
|
@ -461,8 +487,6 @@ ActionTimeline* ActionTimelineCache::loadAnimationActionWithFlatBuffersFile(cons
|
||||||
action->addTimeline(timeline);
|
action->addTimeline(timeline);
|
||||||
}
|
}
|
||||||
|
|
||||||
_animationActions.insert(fileName, action);
|
|
||||||
|
|
||||||
return action;
|
return action;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -31,6 +31,7 @@ THE SOFTWARE.
|
||||||
#include "cocostudio/DictionaryHelper.h"
|
#include "cocostudio/DictionaryHelper.h"
|
||||||
#include "CCTimelineMacro.h"
|
#include "CCTimelineMacro.h"
|
||||||
#include "cocostudio/CocosStudioExport.h"
|
#include "cocostudio/CocosStudioExport.h"
|
||||||
|
#include "cocos2d.h"
|
||||||
|
|
||||||
namespace flatbuffers
|
namespace flatbuffers
|
||||||
{
|
{
|
||||||
|
@ -82,6 +83,7 @@ public:
|
||||||
|
|
||||||
ActionTimeline* createActionWithFlatBuffersFile(const std::string& fileName);
|
ActionTimeline* createActionWithFlatBuffersFile(const std::string& fileName);
|
||||||
ActionTimeline* loadAnimationActionWithFlatBuffersFile(const std::string& fileName);
|
ActionTimeline* loadAnimationActionWithFlatBuffersFile(const std::string& fileName);
|
||||||
|
ActionTimeline* loadAnimationWithDataBuffer(const cocos2d::Data data, const std::string fileName);
|
||||||
|
|
||||||
ActionTimeline* createActionWithFlatBuffersForSimulator(const std::string& fileName);
|
ActionTimeline* createActionWithFlatBuffersForSimulator(const std::string& fileName);
|
||||||
|
|
||||||
|
@ -119,6 +121,7 @@ protected:
|
||||||
|
|
||||||
void loadEasingDataWithFlatBuffers(Frame* frame, const flatbuffers::EasingData* flatbuffers);
|
void loadEasingDataWithFlatBuffers(Frame* frame, const flatbuffers::EasingData* flatbuffers);
|
||||||
|
|
||||||
|
inline ActionTimeline* createActionWithDataBuffer(const cocos2d::Data data);
|
||||||
protected:
|
protected:
|
||||||
|
|
||||||
typedef std::function<Frame*(const rapidjson::Value& json)> FrameCreateFunc;
|
typedef std::function<Frame*(const rapidjson::Value& json)> FrameCreateFunc;
|
||||||
|
|
|
@ -288,11 +288,20 @@ Node* CSLoader::createNode(const std::string &filename, const ccNodeLoadCallback
|
||||||
return nullptr;
|
return nullptr;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
std::string CSLoader::getExtentionName(const std::string& name)
|
||||||
|
{
|
||||||
|
std::string result = "";
|
||||||
|
|
||||||
|
std::string path = name;
|
||||||
|
size_t pos = path.find_last_of('.');
|
||||||
|
result = path.substr(pos + 1, path.length());
|
||||||
|
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
|
||||||
ActionTimeline* CSLoader::createTimeline(const std::string &filename)
|
ActionTimeline* CSLoader::createTimeline(const std::string &filename)
|
||||||
{
|
{
|
||||||
std::string path = filename;
|
std::string suffix = getExtentionName(filename);
|
||||||
size_t pos = path.find_last_of('.');
|
|
||||||
std::string suffix = path.substr(pos + 1, path.length());
|
|
||||||
CCLOG("suffix = %s", suffix.c_str());
|
CCLOG("suffix = %s", suffix.c_str());
|
||||||
|
|
||||||
ActionTimelineCache* cache = ActionTimelineCache::getInstance();
|
ActionTimelineCache* cache = ActionTimelineCache::getInstance();
|
||||||
|
@ -309,6 +318,27 @@ ActionTimeline* CSLoader::createTimeline(const std::string &filename)
|
||||||
return nullptr;
|
return nullptr;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
ActionTimeline* CSLoader::createTimelineWithDataBuffer(const Data data, const std::string& filename)
|
||||||
|
{
|
||||||
|
std::string suffix = getExtentionName(filename);
|
||||||
|
CCLOG("suffix = %s", suffix.c_str());
|
||||||
|
|
||||||
|
ActionTimelineCache* cache = ActionTimelineCache::getInstance();
|
||||||
|
|
||||||
|
if (suffix == "csb")
|
||||||
|
{
|
||||||
|
return cache->loadAnimationWithDataBuffer(data, filename);
|
||||||
|
}
|
||||||
|
else if (suffix == "json" || suffix == "ExportJson")
|
||||||
|
{
|
||||||
|
std::string content((char *)data.getBytes(), data.getSize());
|
||||||
|
return cache->loadAnimationActionWithContent(filename, content);
|
||||||
|
}
|
||||||
|
|
||||||
|
return nullptr;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
ActionTimelineNode* CSLoader::createActionTimelineNode(const std::string& filename)
|
ActionTimelineNode* CSLoader::createActionTimelineNode(const std::string& filename)
|
||||||
{
|
{
|
||||||
|
@ -794,6 +824,54 @@ Component* CSLoader::loadComAudio(const rapidjson::Value &json)
|
||||||
return audio;
|
return audio;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
cocos2d::Node* CSLoader::createNodeWithDataBuffer(const Data data)
|
||||||
|
{
|
||||||
|
return createNodeWithDataBuffer(data, nullptr);
|
||||||
|
}
|
||||||
|
|
||||||
|
Node * CSLoader::createNodeWithDataBuffer(const Data data, const ccNodeLoadCallback &callback)
|
||||||
|
{
|
||||||
|
CSLoader * loader = CSLoader::getInstance();
|
||||||
|
Node * node = nullptr;
|
||||||
|
do
|
||||||
|
{
|
||||||
|
CC_BREAK_IF(data.isNull() || data.getSize() <= 0);
|
||||||
|
auto csparsebinary = GetCSParseBinary(data.getBytes());
|
||||||
|
CC_BREAK_IF(nullptr == csparsebinary);
|
||||||
|
auto csBuildId = csparsebinary->version();
|
||||||
|
if (csBuildId)
|
||||||
|
{
|
||||||
|
CCASSERT(strcmp(loader->_csBuildID.c_str(), csBuildId->c_str()) == 0,
|
||||||
|
StringUtils::format("%s%s%s%s%s%s%s%s%s%s",
|
||||||
|
"The reader build id of your Cocos exported file(",
|
||||||
|
csBuildId->c_str(),
|
||||||
|
") and the reader build id in your Cocos2d-x(",
|
||||||
|
loader->_csBuildID.c_str(),
|
||||||
|
") are not match.\n",
|
||||||
|
"Please get the correct reader(build id ",
|
||||||
|
csBuildId->c_str(),
|
||||||
|
")from ",
|
||||||
|
"http://www.cocos2d-x.org/filedown/cocos-reader",
|
||||||
|
" and replace it in your Cocos2d-x").c_str());
|
||||||
|
}
|
||||||
|
|
||||||
|
// decode plist
|
||||||
|
auto textures = csparsebinary->textures();
|
||||||
|
int textureSize = csparsebinary->textures()->size();
|
||||||
|
CCLOG("textureSize = %d", textureSize);
|
||||||
|
for (int i = 0; i < textureSize; ++i)
|
||||||
|
{
|
||||||
|
SpriteFrameCache::getInstance()->addSpriteFramesWithFile(textures->Get(i)->c_str());
|
||||||
|
}
|
||||||
|
|
||||||
|
node = loader->nodeWithFlatBuffers(csparsebinary->nodeTree(), callback);
|
||||||
|
} while (0);
|
||||||
|
|
||||||
|
loader->reconstructNestNode(node);
|
||||||
|
|
||||||
|
return node;
|
||||||
|
}
|
||||||
|
|
||||||
Node* CSLoader::createNodeWithFlatBuffersFile(const std::string &filename)
|
Node* CSLoader::createNodeWithFlatBuffersFile(const std::string &filename)
|
||||||
{
|
{
|
||||||
return createNodeWithFlatBuffersFile(filename, nullptr);
|
return createNodeWithFlatBuffersFile(filename, nullptr);
|
||||||
|
@ -803,6 +881,13 @@ Node* CSLoader::createNodeWithFlatBuffersFile(const std::string &filename, const
|
||||||
{
|
{
|
||||||
Node* node = nodeWithFlatBuffersFile(filename, callback);
|
Node* node = nodeWithFlatBuffersFile(filename, callback);
|
||||||
|
|
||||||
|
reconstructNestNode(node);
|
||||||
|
|
||||||
|
return node;
|
||||||
|
}
|
||||||
|
|
||||||
|
inline void CSLoader::reconstructNestNode(cocos2d::Node * node)
|
||||||
|
{
|
||||||
/* To reconstruct nest node as WidgetCallBackHandlerProtocol. */
|
/* To reconstruct nest node as WidgetCallBackHandlerProtocol. */
|
||||||
auto callbackHandler = dynamic_cast<WidgetCallBackHandlerProtocol *>(node);
|
auto callbackHandler = dynamic_cast<WidgetCallBackHandlerProtocol *>(node);
|
||||||
if (callbackHandler)
|
if (callbackHandler)
|
||||||
|
@ -819,9 +904,6 @@ Node* CSLoader::createNodeWithFlatBuffersFile(const std::string &filename, const
|
||||||
CCLOG("after pop back _rootNode name = %s", _rootNode->getName().c_str());
|
CCLOG("after pop back _rootNode name = %s", _rootNode->getName().c_str());
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
/**/
|
|
||||||
|
|
||||||
return node;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
Node* CSLoader::nodeWithFlatBuffersFile(const std::string &fileName)
|
Node* CSLoader::nodeWithFlatBuffersFile(const std::string &fileName)
|
||||||
|
@ -896,8 +978,9 @@ Node* CSLoader::nodeWithFlatBuffers(const flatbuffers::NodeTree *nodetree, const
|
||||||
cocostudio::timeline::ActionTimeline* action = nullptr;
|
cocostudio::timeline::ActionTimeline* action = nullptr;
|
||||||
if (filePath != "" && FileUtils::getInstance()->isFileExist(filePath))
|
if (filePath != "" && FileUtils::getInstance()->isFileExist(filePath))
|
||||||
{
|
{
|
||||||
node = createNodeWithFlatBuffersFile(filePath, callback);
|
Data buf = FileUtils::getInstance()->getDataFromFile(filePath);
|
||||||
action = cocostudio::timeline::ActionTimelineCache::getInstance()->createActionWithFlatBuffersFile(filePath);
|
node = createNodeWithDataBuffer(buf, callback);
|
||||||
|
action = timeline::ActionTimelineCache::getInstance()->loadAnimationWithDataBuffer(buf, filePath);
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
|
|
|
@ -79,7 +79,11 @@ public:
|
||||||
|
|
||||||
static cocos2d::Node* createNode(const std::string& filename);
|
static cocos2d::Node* createNode(const std::string& filename);
|
||||||
static cocos2d::Node* createNode(const std::string& filename, const ccNodeLoadCallback& callback);
|
static cocos2d::Node* createNode(const std::string& filename, const ccNodeLoadCallback& callback);
|
||||||
|
static cocos2d::Node* createNodeWithDataBuffer(const Data data);
|
||||||
|
static cocos2d::Node* createNodeWithDataBuffer(const Data data, const ccNodeLoadCallback &callback);
|
||||||
|
|
||||||
static cocostudio::timeline::ActionTimeline* createTimeline(const std::string& filename);
|
static cocostudio::timeline::ActionTimeline* createTimeline(const std::string& filename);
|
||||||
|
static cocostudio::timeline::ActionTimeline* createTimelineWithDataBuffer(const Data data, const std::string& filename);
|
||||||
|
|
||||||
/*
|
/*
|
||||||
static cocostudio::timeline::ActionTimelineNode* createActionTimelineNode(const std::string& filename);
|
static cocostudio::timeline::ActionTimelineNode* createActionTimelineNode(const std::string& filename);
|
||||||
|
@ -143,6 +147,9 @@ protected:
|
||||||
std::string getGUIClassName(const std::string &name);
|
std::string getGUIClassName(const std::string &name);
|
||||||
std::string getWidgetReaderClassName(cocos2d::ui::Widget *widget);
|
std::string getWidgetReaderClassName(cocos2d::ui::Widget *widget);
|
||||||
|
|
||||||
|
inline void reconstructNestNode(cocos2d::Node * node);
|
||||||
|
static inline std::string getExtentionName(const std::string& name);
|
||||||
|
|
||||||
typedef std::function<cocos2d::Node*(const rapidjson::Value& json)> NodeCreateFunc;
|
typedef std::function<cocos2d::Node*(const rapidjson::Value& json)> NodeCreateFunc;
|
||||||
typedef std::pair<std::string, NodeCreateFunc> Pair;
|
typedef std::pair<std::string, NodeCreateFunc> Pair;
|
||||||
|
|
||||||
|
|
|
@ -66,11 +66,11 @@ void TestActionTimeline::onEnter()
|
||||||
{
|
{
|
||||||
ActionTimelineBaseTest::onEnter();
|
ActionTimelineBaseTest::onEnter();
|
||||||
|
|
||||||
Node* node = CSLoader::createNode("ActionTimeline/DemoPlayer.csb");
|
Data data = FileUtils::getInstance()->getDataFromFile("ActionTimeline/DemoPlayer.csb");
|
||||||
ActionTimeline* action = CSLoader::createTimeline("ActionTimeline/DemoPlayer.csb");
|
Node* node = CSLoader::createNodeWithDataBuffer(data);
|
||||||
|
ActionTimeline* action = CSLoader::createTimelineWithDataBuffer(data, "ActionTimeline/DemoPlayer.csb");
|
||||||
node->runAction(action);
|
node->runAction(action);
|
||||||
action->gotoFrameAndPlay(0);
|
action->gotoFrameAndPlay(0);
|
||||||
// ActionTimelineNode* node = CSLoader::createActionTimelineNode("ActionTimeline/DemoPlayer.csb", 0, 40, true);
|
|
||||||
|
|
||||||
node->setScale(0.2f);
|
node->setScale(0.2f);
|
||||||
node->setPosition(VisibleRect::center());
|
node->setPosition(VisibleRect::center());
|
||||||
|
|
Loading…
Reference in New Issue