static sdkbox::FBShareInfo luaValueMap_to_FBShareInfo(const LuaValueDict &dict) { sdkbox::FBShareInfo info; if (dict.find("title") != dict.end()) { info.title = dict.find("title")->second.stringValue(); } if (dict.find("link") != dict.end()) { info.link = dict.find("link")->second.stringValue(); } if (dict.find("text") != dict.end()) { info.text = dict.find("text")->second.stringValue(); } if (dict.find("image") != dict.end()) { info.image = dict.find("image")->second.stringValue(); } if (dict.find("type") != dict.end()) { std::string type = dict.find("type")->second.stringValue(); if (type.compare("link") == 0) { info.type = sdkbox::FB_LINK; } else if (type.compare("photo") == 0) { info.type = sdkbox::FB_PHOTO; } } return info; }
static sdkbox::FBAPIParam luaValueMap_to_APIParam(const LuaValueDict &dict) { sdkbox::FBAPIParam param; for (LuaValueDictIterator it = dict.begin(); it != dict.end(); it++) { param[it->first] = it->second.stringValue(); } return param; }
void LuaStack::pushLuaValueDict(const LuaValueDict& dict) { lua_newtable(_state); /* L: table */ for (LuaValueDictIterator it = dict.begin(); it != dict.end(); ++it) { lua_pushstring(_state, it->first.c_str()); /* L: table key */ pushLuaValue(it->second); /* L: table key value */ lua_rawset(_state, -3); /* table.key = value, L: table */ } }
int executeSpineEvent(LuaSkeletonAnimation* skeletonAnimation, int handler, spEventType eventType, int trackIndex , int loopCount = 0, spEvent* event = nullptr ) { if (nullptr == skeletonAnimation || 0 == handler) return 0; LuaStack* stack = LuaEngine::getInstance()->getLuaStack(); if (nullptr == stack) return 0; lua_State* L = LuaEngine::getInstance()->getLuaStack()->getLuaState(); if (nullptr == L) return 0; int ret = 0; spTrackEntry* entry = spAnimationState_getCurrent(skeletonAnimation->getState(), trackIndex); std::string animationName = (entry && entry->animation) ? entry->animation->name : ""; std::string eventTypeName = ""; switch (eventType) { case spEventType::SP_ANIMATION_START: { eventTypeName = "start"; } break; case spEventType::SP_ANIMATION_END: { eventTypeName = "end"; } break; case spEventType::SP_ANIMATION_COMPLETE: { eventTypeName = "complete"; } break; case spEventType::SP_ANIMATION_EVENT: { eventTypeName = "event"; } break; default: break; } LuaValueDict spineEvent; spineEvent.insert(spineEvent.end(), LuaValueDict::value_type("type", LuaValue::stringValue(eventTypeName))); spineEvent.insert(spineEvent.end(), LuaValueDict::value_type("trackIndex", LuaValue::intValue(trackIndex))); spineEvent.insert(spineEvent.end(), LuaValueDict::value_type("animation", LuaValue::stringValue(animationName))); spineEvent.insert(spineEvent.end(), LuaValueDict::value_type("loopCount", LuaValue::intValue(loopCount))); if (nullptr != event) { LuaValueDict eventData; eventData.insert(eventData.end(), LuaValueDict::value_type("name", LuaValue::stringValue(event->data->name))); eventData.insert(eventData.end(), LuaValueDict::value_type("intValue", LuaValue::intValue(event->intValue))); eventData.insert(eventData.end(), LuaValueDict::value_type("floatValue", LuaValue::floatValue(event->floatValue))); eventData.insert(eventData.end(), LuaValueDict::value_type("stringValue", LuaValue::stringValue(event->stringValue))); spineEvent.insert(spineEvent.end(), LuaValueDict::value_type("eventData", LuaValue::dictValue(eventData))); } stack->pushLuaValueDict(spineEvent); ret = stack->executeFunctionByHandler(handler, 1); return ret; }
static int SendSpineEventToLua(int nHandler, spine::SkeletonAnimation* node, int trackIndex, spEventType type, spEvent* event, int loopCount) { if (nHandler <= 0) { return 0; } if (NULL == ScriptEngineManager::getInstance()->getScriptEngine()) { return 0; } LuaStack *pStack = LuaEngine::getInstance()->getLuaStack(); if (NULL == pStack) { return 0; } lua_State *tolua_s = pStack->getLuaState(); if (NULL == tolua_s) { return 0; } int nRet = 0; spTrackEntry* entry = spAnimationState_getCurrent(node->state, trackIndex); std::string animationName = (entry && entry->animation) ? entry->animation->name : ""; std::string eventType = ""; switch (type) { case ANIMATION_START: eventType = "start"; break; case ANIMATION_END: eventType = "end"; break; case ANIMATION_COMPLETE: eventType = "complete"; break; case ANIMATION_EVENT: eventType = "event"; break; } LuaValueDict spineEvent; spineEvent.insert(spineEvent.end(), LuaValueDict::value_type("type", LuaValue::stringValue(eventType))); spineEvent.insert(spineEvent.end(), LuaValueDict::value_type("trackIndex", LuaValue::intValue(trackIndex))); spineEvent.insert(spineEvent.end(), LuaValueDict::value_type("animation", LuaValue::stringValue(animationName))); spineEvent.insert(spineEvent.end(), LuaValueDict::value_type("loopCount", LuaValue::intValue(loopCount))); if (NULL != event) { LuaValueDict eventData; eventData.insert(eventData.end(), LuaValueDict::value_type("name", LuaValue::stringValue(event->data->name))); eventData.insert(eventData.end(), LuaValueDict::value_type("intValue", LuaValue::intValue(event->intValue))); eventData.insert(eventData.end(), LuaValueDict::value_type("floatValue", LuaValue::floatValue(event->floatValue))); eventData.insert(eventData.end(), LuaValueDict::value_type("stringValue", LuaValue::stringValue(event->stringValue))); spineEvent.insert(spineEvent.end(), LuaValueDict::value_type("eventData", LuaValue::dictValue(eventData))); } pStack->pushLuaValueDict(spineEvent); nRet = pStack->executeFunctionByHandler(nHandler, 1); pStack->clean(); return nRet; }