#include "datahpp/elemPropertyData.h" #include "plisthpp/redream.h" #include "datahpp/dataManager.h" #include ElemPropertyData::ElemPropertyData() { iconPath = ":/icon/icon/菜狗.png"; labelName = "0"; maxLayer = "1"; score = "50"; dropConfig = DROPOPT::BYSTATE; canBeLinked = false; canMoveAway = false; } int ElemPropertyData::getKeyIndex(int poolIndex, QString key) { for(int i = 0;i ElemPropertyData::getTimelineList(QString filePath) { if(timelineListMap.find(filePath) == timelineListMap.end()){ QList list = Redream::getInstance()->getTimelineFromRedream(filePath.toStdString()); timelineListMap[filePath] = list; return list; } return timelineListMap[filePath]; } void ElemPropertyData::readData(const QJsonObject &json) { if(json.contains("labelName") && json["labelName"].isString()){ labelName = json["labelName"].toString(); } if(json.contains("pos") && json["pos"].isString()){ pos = json["pos"].toString(); } if(json.contains("maxLayer") && json["maxLayer"].isString()){ maxLayer = json["maxLayer"].toString(); } if(json.contains("score") && json["score"].isString()){ score = json["score"].toString(); } if(json.contains("dropConfig") && json["maxLayer"].isString()){ dropConfig = static_cast(json["dropConfig"].toInt()); } if(json.contains("iconPath") && json["iconPath"].isString()){ iconPath = json["iconPath"].toString(); } if(json.contains("canBeLinked") && json["canBeLinked"].isBool()){ canBeLinked = json["canBeLinked"].toBool(); } if(json.contains("canMoveAway") && json["canMoveAway"].isBool()){ canMoveAway = json["canMoveAway"].toBool(); } if(json.contains("isContainer") && json["isContainer"].isBool()){ isContainer = json["isContainer"].toBool(); } if(json.contains("beatByOrder") && json["isContainer"].isBool()){ beatByOrder = json["beatByOrder"].toBool(); } //状态与效果动画 if(json.contains("anims") && json["anims"].isArray()){ readStatusEffect(json["anims"].toArray()); } //收集动画 if(json.contains("collAnim") && json["collAnim"].isArray()){ readCollAnim(json["collAnim"].toArray()); } //状态配置 if(json.contains("statusConfig") && json["statusConfig"].isArray()){ readStatusConfigData(json["statusConfig"].toArray()); } //容器配置 if(json.contains("container") && json["container"].isArray()){ readContainerConfig(json["container"].toArray()); } //子元素配置 if(json.contains("childElem") && json["childElem"].isArray()){ readChildElem(json["childElem"].toArray()); } } void ElemPropertyData::writeData(QJsonObject &json) const { //基础属性 json["labelName"] = labelName; json["pos"] = pos; json["maxLayer"] = maxLayer; json["score"] = score; json["dropConfig"] = static_cast(dropConfig); json["iconPath"] = iconPath; json["canBeLinked"] = canBeLinked; json["canMoveAway"] = canMoveAway; json["isContainer"] = isContainer; json["beatByOrder"] = beatByOrder; json.insert("anims",writeStatusEffect()); json.insert("collAnim",writeCollAnim()); json.insert("statusConfig",writeStatusConfigData()); json.insert("container",writeContainerConfig()); json.insert("childElem",writeChildElem()); } ///读入状态与效果动画数据 void ElemPropertyData::readStatusEffect(const QJsonArray &arr) { statusEffect.clear(); statusEffect.reserve(arr.size()); for(int i = 0;i < arr.size();i++){ QJsonObject animObj = arr[i].toObject(); StatusEffect anim(animObj["name"].toString()); anim.res = animObj["res"].toString(); anim.timeline = animObj["timeline"].toString(); anim.zOrder = animObj["zOrder"].toString(); anim.audio = animObj["audio"].toString(); statusEffect.append(anim); } } ///写入状态与效果动画数据 QJsonArray ElemPropertyData::writeStatusEffect() const { QJsonArray animArray; for(const StatusEffect &anim:statusEffect) { QJsonObject animObj; animObj["name"] = anim.name; animObj["res"] = anim.res; animObj["timeline"] = anim.timeline; animObj["zOrder"] = anim.zOrder; animObj["audio"] = anim.audio; animArray.append(animObj); } return animArray; } ///读入收集动画数据 void ElemPropertyData::readCollAnim(const QJsonArray &arr) { collAnim.clear(); collAnim.reserve(arr.size()); for(int i=0;i ElemPropertyData::readStrStrMap(const QJsonObject &obj) { QMap data; QStringList keys = obj.keys(); for(int i=0;i &data) const { QStringList keys = data.keys(); QJsonObject dataObj; for(int i=0;i ElemPropertyData::readEventConfig(const QJsonArray &arr) { QVector eventTable; eventTable.reserve(arr.size()); for(int i=0;i &eventConfig) const { QJsonArray eventArray; for(const EventConfig &event:eventConfig){ QJsonObject eventObj; eventObj["name"] = event.name; eventObj["consisColor"] = event.consisColor; eventObj["changeMagnitude"] = event.changeMagnitude; eventObj["specialEffect"] = event.specialEffect; eventObj["elimATLattices"] = event.elimATLattices; eventArray.append(eventObj); } return eventArray; } ///读容器池数据 void ElemPropertyData::readContainerConfig(const QJsonArray &arr) { container.clear(); container.reserve(arr.size()); for(int i=0;i ElemPropertyData::readContainerTable(const QJsonArray &arr) { QVector table; for(int i=0;i &containTable) const { QJsonArray tableArray; for(const ContainTable &table:containTable){ QJsonObject tableObj; tableObj["key"] = table.key; tableObj["res"] = table.res; tableObj["initTimeline"] = table.initTimeline; tableObj["clickTimeline"] = table.clickTimeline; tableObj["effectTimeline"] = table.effectTimeline; tableObj["vanishTimeline"] = table.vanishTimeline; tableObj["zOrder"] = table.zOrder; tableObj["audio"] = table.audio; tableArray.append(tableObj); } return tableArray; } ///读子元素数据 void ElemPropertyData::readChildElem(const QJsonArray &arr) { childElem.clear(); childElem.reserve(arr.size()); for(int i=0;i> posVec = DataManager::getGridPos(pos); for(int i=0;i data = statusConfig[i].actionConfig; QStringList dataKeys = data.keys(); for(int j=0;jgetTempFieldId("actionTemp", statusConfig[i].action, dataKey); cfgObj[objKey] = data[dataKey]; } auto id = DataManager::getInstance()->getTempId("actionTemp", statusConfig[i].action); actionObj[id] = cfgObj; statusObj["action"] = actionObj; } else { QJsonObject actionObj; statusObj["action"] = actionObj; } //事件 QJsonObject eventObj; QVector eventVec = statusConfig[i].eventConfig; for(int j=0;jgetTempId("eventTemp",eventVec[j].name),obj); } statusObj["eventHandlers"] = eventObj; json.insert(statusConfig[i].statusValue,statusObj); } return json; } ///导出容器池 QJsonObject ElemPropertyData::exportPools() const { QJsonObject obj; for(int i=0;igetTempId("poolTemp",container[i].type); QJsonObject tableObj; QVector table = container[i].table; for(int j=0;jgetTempId("collAnimTemp",collAnim[i].type); QMap data = collAnim[i].dataMap; QStringList dataKeys = data.keys(); for(int j=0;jgetTempFieldId("collAnimTemp",collAnim[i].type,dataKey); collAnimObj[objKey] = data[dataKey]; } obj[collAnim[i].name] = collAnimObj; } return obj; }