|
@@ -1,5 +1,6 @@
|
|
|
#include "elemPropertyData.h"
|
|
|
#include "plisthpp/redream.h"
|
|
|
+#include <QJsonArray>
|
|
|
|
|
|
ElemPropertyData::ElemPropertyData()
|
|
|
{
|
|
@@ -76,7 +77,7 @@ QList<QString> ElemPropertyData::getTimelineList(QString filePath)
|
|
|
return timelineListMap[filePath];
|
|
|
}
|
|
|
|
|
|
-void ElemPropertyData::readFundData(const QJsonObject &json)
|
|
|
+void ElemPropertyData::readData(const QJsonObject &json)
|
|
|
{
|
|
|
if(json.contains("labelName") && json["labelName"].isString()){
|
|
|
labelName = json["labelName"].toString();
|
|
@@ -96,14 +97,283 @@ void ElemPropertyData::readFundData(const QJsonObject &json)
|
|
|
if(json.contains("iconPath") && json["iconPath"].isString()){
|
|
|
iconPath = json["iconPath"].toString();
|
|
|
}
|
|
|
+ //状态与效果动画
|
|
|
+ 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::writeFundData(QJsonObject &json) const
|
|
|
+void ElemPropertyData::writeData(QJsonObject &json) const
|
|
|
{
|
|
|
+ //基础属性
|
|
|
json["labelName"] = labelName;
|
|
|
json["size"] = size;
|
|
|
json["maxLayer"] = maxLayer;
|
|
|
json["score"] = score;
|
|
|
json["dropConfig"] = dropConfig;
|
|
|
json["iconPath"] = iconPath;
|
|
|
+ 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();
|
|
|
+ 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;
|
|
|
+ animArray.append(animObj);
|
|
|
+ }
|
|
|
+ return animArray;
|
|
|
+}
|
|
|
+
|
|
|
+///读入收集动画数据
|
|
|
+void ElemPropertyData::readCollAnim(const QJsonArray &arr)
|
|
|
+{
|
|
|
+ collAnim.clear();
|
|
|
+ collAnim.reserve(arr.size());
|
|
|
+ for(int i=0;i<arr.size();i++){
|
|
|
+ QJsonObject collAnimObj = arr[i].toObject();
|
|
|
+ CollAnim coll(collAnimObj["name"].toString());
|
|
|
+ coll.type = collAnimObj["type"].toString();
|
|
|
+ coll.dataMap = readStrStrMap(collAnimObj["dataMap"].toObject());
|
|
|
+ collAnim.append(coll);
|
|
|
+ }
|
|
|
+}
|
|
|
+
|
|
|
+///读一个string-string map数据
|
|
|
+QMap<QString,QString> ElemPropertyData::readStrStrMap(const QJsonObject &obj)
|
|
|
+{
|
|
|
+ QMap<QString,QString> data;
|
|
|
+ QStringList keys = obj.keys();
|
|
|
+ for(int i=0;i<keys.size();i++)
|
|
|
+ {
|
|
|
+ QString key = keys[i];
|
|
|
+ data[key] = obj[key].toString();
|
|
|
+ }
|
|
|
+ return data;
|
|
|
+}
|
|
|
+
|
|
|
+///写收集动画数据
|
|
|
+QJsonArray ElemPropertyData::writeCollAnim() const
|
|
|
+{
|
|
|
+ QJsonArray collAnimArray;
|
|
|
+ for(const CollAnim &coll:collAnim){
|
|
|
+ QJsonObject collAnimObj;
|
|
|
+ collAnimObj["name"] = coll.name;
|
|
|
+ collAnimObj["type"] = coll.type;
|
|
|
+ collAnimObj["dataMap"] = writeStrStrMap(coll.dataMap);
|
|
|
+ collAnimArray.append(collAnimObj);
|
|
|
+ }
|
|
|
+ return collAnimArray;
|
|
|
+}
|
|
|
+///写string-string map数据
|
|
|
+QJsonObject ElemPropertyData::writeStrStrMap(const QMap<QString,QString> &data) const
|
|
|
+{
|
|
|
+ QStringList keys = data.keys();
|
|
|
+ QJsonObject dataObj;
|
|
|
+ for(int i=0;i<keys.size();i++)
|
|
|
+ {
|
|
|
+ QString key = keys[i];
|
|
|
+ dataObj.insert(key,data[key]);
|
|
|
+ }
|
|
|
+ return dataObj;
|
|
|
+}
|
|
|
+///读状态配置数据
|
|
|
+void ElemPropertyData::readStatusConfigData(const QJsonArray &arr)
|
|
|
+{
|
|
|
+ statusConfig.clear();
|
|
|
+ statusConfig.reserve(arr.size());
|
|
|
+ for(int i=0;i<arr.size();i++){
|
|
|
+ QJsonObject statusConfigObj = arr[i].toObject();
|
|
|
+ StatusConfig configData(statusConfigObj["statusValue"].toString());
|
|
|
+ configData.initAnim = statusConfigObj["initAnim"].toString();
|
|
|
+ configData.clickAnim = statusConfigObj["clickAnim"].toString();
|
|
|
+ configData.multiHit = statusConfigObj["multiHit"].toBool();
|
|
|
+ configData.dropable = statusConfigObj["dropable"].toBool();
|
|
|
+ configData.needCollect = statusConfigObj["needCollect"].toBool();
|
|
|
+ configData.collTargetType = statusConfigObj["collTargetType"].toString();
|
|
|
+ configData.collAnim = statusConfigObj["collAnim"].toString();
|
|
|
+ configData.eventConfig = readEventConfig(statusConfigObj["eventConfig"].toArray());
|
|
|
+ statusConfig.append(configData);
|
|
|
+ }
|
|
|
+}
|
|
|
+///读事件配置表格数据
|
|
|
+QVector<ElemPropertyData::EventConfig> ElemPropertyData::readEventConfig(const QJsonArray &arr)
|
|
|
+{
|
|
|
+ QVector<ElemPropertyData::EventConfig> eventTable;
|
|
|
+ eventTable.reserve(arr.size());
|
|
|
+ for(int i=0;i<arr.size();i++){
|
|
|
+ QJsonObject eventObj = arr[i].toObject();
|
|
|
+ EventConfig event;
|
|
|
+ event.name = eventObj["name"].toString();
|
|
|
+ event.consisColor = eventObj["consisColor"].toBool();
|
|
|
+ event.changeMagnitude = eventObj["changeMagnitude"].toInt();
|
|
|
+ event.specialEffect = eventObj["specialEffect"].toString();
|
|
|
+ event.elimATLattices = eventObj["elimATLattices"].toBool();
|
|
|
+ event.triggerAction = eventObj["triggerAction"].toString();
|
|
|
+ event.actionConfig = readStrStrMap(eventObj["actionConfig"].toObject());
|
|
|
+ eventTable.append(event);
|
|
|
+ }
|
|
|
+ return eventTable;
|
|
|
+}
|
|
|
+///写状态配置数据
|
|
|
+QJsonArray ElemPropertyData::writeStatusConfigData() const
|
|
|
+{
|
|
|
+ QJsonArray statusConfigArray;
|
|
|
+ for(const StatusConfig &status:statusConfig){
|
|
|
+ QJsonObject statusObj;
|
|
|
+ statusObj["statusValue"] = status.statusValue;
|
|
|
+ statusObj["initAnim"] = status.initAnim;
|
|
|
+ statusObj["clickAnim"] = status.clickAnim;
|
|
|
+ statusObj["multiHit"] = status.multiHit;
|
|
|
+ statusObj["dropable"] = status.dropable;
|
|
|
+ statusObj["needCollect"] = status.needCollect;
|
|
|
+ statusObj["collTargetType"] = status.collTargetType;
|
|
|
+ statusObj["collAnim"] = status.collAnim;
|
|
|
+ statusObj.insert("eventConfig",writeEventConfig(status.eventConfig));
|
|
|
+ statusConfigArray.append(statusObj);
|
|
|
+ }
|
|
|
+ return statusConfigArray;
|
|
|
+}
|
|
|
+///写事件配置表格数据
|
|
|
+QJsonArray ElemPropertyData::writeEventConfig(const QVector<EventConfig> &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;
|
|
|
+ eventObj["triggerAction"] = event.triggerAction;
|
|
|
+ eventObj.insert("actionConfig",writeStrStrMap(event.actionConfig));
|
|
|
+ eventArray.append(eventObj);
|
|
|
+ }
|
|
|
+ return eventArray;
|
|
|
+}
|
|
|
+///读容器池数据
|
|
|
+void ElemPropertyData::readContainerConfig(const QJsonArray &arr)
|
|
|
+{
|
|
|
+ container.clear();
|
|
|
+ container.reserve(arr.size());
|
|
|
+ for(int i=0;i<arr.size();i++){
|
|
|
+ QJsonObject poolObj = arr[i].toObject();
|
|
|
+ ContainerConfig pool(poolObj["poolName"].toString());
|
|
|
+ pool.type = poolObj["type"].toString();
|
|
|
+ pool.table = readContainerTable(poolObj["table"].toArray());
|
|
|
+ container.append(pool);
|
|
|
+ }
|
|
|
+}
|
|
|
+///读容器池表格数据
|
|
|
+QVector<ElemPropertyData::ContainTable> ElemPropertyData::readContainerTable(const QJsonArray &arr)
|
|
|
+{
|
|
|
+ QVector<ContainTable> table;
|
|
|
+ for(int i=0;i<arr.size();i++){
|
|
|
+ QJsonObject containObj = arr[i].toObject();
|
|
|
+ ContainTable contain(containObj["key"].toString());
|
|
|
+ contain.res = containObj["res"].toString();
|
|
|
+ contain.initTimeline = containObj["initTimeline"].toString();
|
|
|
+ contain.clickTimeline = containObj["clickTimeline"].toString();
|
|
|
+ contain.effectTimeline = containObj["effectTimeline"].toString();
|
|
|
+ contain.vanishTimeline = containObj["vanishTimeline"].toString();
|
|
|
+ contain.zOrder = containObj["zOrder"].toString();
|
|
|
+ table.append(contain);
|
|
|
+ }
|
|
|
+ return table;
|
|
|
+}
|
|
|
+///写容器池数据
|
|
|
+QJsonArray ElemPropertyData::writeContainerConfig() const
|
|
|
+{
|
|
|
+ QJsonArray containConfigArray;
|
|
|
+ for(const ContainerConfig &contain:container){
|
|
|
+ QJsonObject containObj;
|
|
|
+ containObj["poolName"] = contain.poolName;
|
|
|
+ containObj["type"] = contain.type;
|
|
|
+ containObj["table"] = writeContainerTable(contain.table);
|
|
|
+ containConfigArray.append(containObj);
|
|
|
+ }
|
|
|
+ return containConfigArray;
|
|
|
+}
|
|
|
+///写容器池表格数据
|
|
|
+QJsonArray ElemPropertyData::writeContainerTable(const QVector<ContainTable> &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;
|
|
|
+ tableArray.append(tableObj);
|
|
|
+ }
|
|
|
+ return tableArray;
|
|
|
+}
|
|
|
+///读子元素数据
|
|
|
+void ElemPropertyData::readChildElem(const QJsonArray &arr)
|
|
|
+{
|
|
|
+ childElem.clear();
|
|
|
+ childElem.reserve(arr.size());
|
|
|
+ for(int i=0;i<arr.size();i++)
|
|
|
+ {
|
|
|
+ QJsonObject childElemObj = arr[i].toObject();
|
|
|
+ ChildElem elem(childElemObj["name"].toString());
|
|
|
+ elem.container = childElemObj["container"].toString();
|
|
|
+ childElem.append(elem);
|
|
|
+ }
|
|
|
+}
|
|
|
+///写子元素数据
|
|
|
+QJsonArray ElemPropertyData::writeChildElem() const
|
|
|
+{
|
|
|
+ QJsonArray elemArray;
|
|
|
+ for(const ChildElem &elem:childElem){
|
|
|
+ QJsonObject childElemObj;
|
|
|
+ childElemObj["name"] = elem.name;
|
|
|
+ childElemObj["container"] = elem.container;
|
|
|
+ elemArray.append(childElemObj);
|
|
|
+ }
|
|
|
+ return elemArray;
|
|
|
}
|