|
@@ -98,9 +98,9 @@ void DataManager::changeMarkValue(QString elem, QString val)
|
|
|
elements[elem]->labelName = val;
|
|
|
}
|
|
|
|
|
|
-void DataManager::changeSize(QString elem, QString val)
|
|
|
+void DataManager::changePos(QString elem, QString val)
|
|
|
{
|
|
|
- elements[elem]->size = val;
|
|
|
+ elements[elem]->pos = val;
|
|
|
}
|
|
|
|
|
|
void DataManager::changeMaxLayer(QString elem, QString val)
|
|
@@ -112,7 +112,7 @@ void DataManager::changeScore(QString elem, QString val)
|
|
|
{
|
|
|
elements[elem]->score = val;
|
|
|
}
|
|
|
-void DataManager::changeDropConfig(QString elem, int val)
|
|
|
+void DataManager::changeDropConfig(QString elem, QString val)
|
|
|
{
|
|
|
elements[elem]->dropConfig = val;
|
|
|
}
|
|
@@ -120,13 +120,21 @@ void DataManager::changeIconPath(QString elem, QString iconPath)
|
|
|
{
|
|
|
elements[elem]->iconPath = iconPath;
|
|
|
}
|
|
|
+void DataManager::changeLinkedState(QString elem, int state)
|
|
|
+{
|
|
|
+ elements[elem]->canBeLinked = state;
|
|
|
+}
|
|
|
+void DataManager::changeMoveAwayState(QString elem, int state)
|
|
|
+{
|
|
|
+ elements[elem]->canMoveAway = state;
|
|
|
+}
|
|
|
QString DataManager::getMarkValue(QString elem)
|
|
|
{
|
|
|
return elements[elem]->labelName;
|
|
|
}
|
|
|
-QString DataManager::getSize(QString elem)
|
|
|
+QString DataManager::getPos(QString elem)
|
|
|
{
|
|
|
- return elements[elem]->size;
|
|
|
+ return elements[elem]->pos;
|
|
|
}
|
|
|
QString DataManager::getMaxLayer(QString elem)
|
|
|
{
|
|
@@ -136,7 +144,7 @@ QString DataManager::getScore(QString elem)
|
|
|
{
|
|
|
return elements[elem]->score;
|
|
|
}
|
|
|
-int DataManager::getDropConfig(QString elem)
|
|
|
+QString DataManager::getDropConfig(QString elem)
|
|
|
{
|
|
|
return elements[elem]->dropConfig;
|
|
|
}
|
|
@@ -144,6 +152,14 @@ QString DataManager::getIconPath(QString elem)
|
|
|
{
|
|
|
return elements[elem]->iconPath;
|
|
|
}
|
|
|
+bool DataManager::getMoveAwayState(QString elem)
|
|
|
+{
|
|
|
+ return elements[elem]->canMoveAway;
|
|
|
+}
|
|
|
+bool DataManager::getLinkedState(QString elem)
|
|
|
+{
|
|
|
+ return elements[elem]->canBeLinked;
|
|
|
+}
|
|
|
|
|
|
//状态与效果动画
|
|
|
QVector<ElemPropertyData::StatusEffect> DataManager::getAnimVec(QString elem)
|
|
@@ -250,6 +266,8 @@ bool DataManager::existStatusVal(QString elem, QString statusVal)
|
|
|
void DataManager::addStatus(QString elem, QString statusVal)
|
|
|
{
|
|
|
ElemPropertyData::StatusConfig status(statusVal);
|
|
|
+ if(elements[elem]->dropConfig == "可掉落") status.dropable = true;
|
|
|
+ if(elements[elem]->dropConfig == "不可掉落") status.dropable = false;
|
|
|
elements[elem]->statusConfig.push_back(status);
|
|
|
}
|
|
|
//TODO: 删除状态值时出现数组越界
|
|
@@ -280,6 +298,13 @@ void DataManager::delEvent(QString elem, int statusIndex, int row)
|
|
|
{
|
|
|
elements[elem]->statusConfig[statusIndex].eventConfig.remove(row);
|
|
|
}
|
|
|
+void DataManager::updateAllDropState(QString elem, bool state)
|
|
|
+{
|
|
|
+ int size = elements[elem]->statusConfig.size();
|
|
|
+ for(int i=0;i<size;i++){
|
|
|
+ elements[elem]->statusConfig[i].dropable = state;
|
|
|
+ }
|
|
|
+}
|
|
|
|
|
|
//容器池
|
|
|
ElemPropertyData::ContainerConfig DataManager::getContainData(QString elem,int index)
|
|
@@ -365,7 +390,7 @@ void DataManager::delChildElem(QString elem, int index)
|
|
|
bool DataManager::loadData()
|
|
|
{
|
|
|
// QFile loadFile(":/file/file/data.json");
|
|
|
- QFile loadFile("/Users/menglanluo/Desktop/export.json");
|
|
|
+ QFile loadFile("/Users/menglanluo/Desktop/data.json");
|
|
|
if(!loadFile.open(QIODevice::ReadOnly)){
|
|
|
qWarning("can't open data file!");
|
|
|
return false;
|
|
@@ -409,6 +434,202 @@ bool DataManager::saveData()
|
|
|
write(dataObj);
|
|
|
//资源文件不支持写?
|
|
|
// QFile file(":/file/file/data.json");
|
|
|
+ QFile file("/Users/menglanluo/Desktop/data.json");
|
|
|
+ if(!file.open(QIODevice::WriteOnly)){
|
|
|
+ qDebug()<<"file open failed!";
|
|
|
+ return false;
|
|
|
+ }
|
|
|
+ QJsonDocument jdoc;
|
|
|
+ jdoc.setObject(dataObj);
|
|
|
+ file.write(jdoc.toJson(QJsonDocument::Indented));
|
|
|
+ file.close();
|
|
|
+ return true;
|
|
|
+}
|
|
|
+
|
|
|
+
|
|
|
+//导出数据
|
|
|
+///数据导出合法性检查
|
|
|
+bool DataManager::exportIsValid()
|
|
|
+{
|
|
|
+ QStringList elems= elements.keys();
|
|
|
+ for(int i=0;i<elems.size();i++)
|
|
|
+ {
|
|
|
+ QString key = elems[i];
|
|
|
+ ElemPropertyData* data = elements[key];
|
|
|
+ QString elemMessage = "元素"+key+"导出错误!";
|
|
|
+ //基础属性合法性检查
|
|
|
+ if(data->labelName.toInt() <= 0){
|
|
|
+ exportMessage = elemMessage+"\n标识值必须是大于0的数字!";
|
|
|
+ return false;
|
|
|
+ }
|
|
|
+ if(data->maxLayer.toInt() <= 0){
|
|
|
+ exportMessage = elemMessage+"\n最大层数必须是大于0的数字!";
|
|
|
+ return false;
|
|
|
+ }
|
|
|
+ if(data->score.toInt() <= 0){
|
|
|
+ exportMessage = elemMessage+"\n分数必须是大于0的数字!";
|
|
|
+ return false;
|
|
|
+ }
|
|
|
+ if(data->pos.isEmpty() || getGridPos(data->pos).isEmpty()){
|
|
|
+ exportMessage = elemMessage+"\n位置数据不合法!";
|
|
|
+ return false;
|
|
|
+ }
|
|
|
+
|
|
|
+ //状态与效果动画检查
|
|
|
+ QVector<ElemPropertyData::StatusEffect> animVec = data->statusEffect;
|
|
|
+ for(int j=0;j<animVec.size();j++)
|
|
|
+ {
|
|
|
+ if(animVec[j].res == "双击添加资源文件"){
|
|
|
+ exportMessage = elemMessage+"\n动画"+animVec[j].name+"未添加资源文件!";
|
|
|
+ return false;
|
|
|
+ }
|
|
|
+ if(animVec[j].timeline == "尚未选择"){
|
|
|
+ exportMessage = elemMessage+"\n动画"+animVec[j].name+"未选择时间线!";
|
|
|
+ return false;
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ //收集动画
|
|
|
+ QVector<ElemPropertyData::CollAnim> collAnimVec = data->collAnim;
|
|
|
+ for(int j=0;j<collAnimVec.size();j++)
|
|
|
+ {
|
|
|
+ if(collAnimVec[j].type == "尚未选择"){
|
|
|
+ exportMessage = elemMessage+"\n收集动画"+collAnimVec[j].name+"未选择动画类型";
|
|
|
+ return false;
|
|
|
+ }
|
|
|
+ QMap<QString,QString> collMap = collAnimVec[j].dataMap;
|
|
|
+ QStringList collMapKeys = collMap.keys();
|
|
|
+ for(int k=0;k<collMapKeys.size();k++)
|
|
|
+ {
|
|
|
+ QString collMapKey = collMapKeys[k];
|
|
|
+ //检查动态配置选项中有没有为空的单行输入或未选择的下拉选项
|
|
|
+ if(collMap[collMapKey].isEmpty() || collMap[collMapKey] == "尚未选择"){
|
|
|
+ exportMessage = elemMessage+"\n收集动画"+collAnimVec[j].name+collMapKey+"属性配置不完全";
|
|
|
+ return false;
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ //状态配置
|
|
|
+ QVector<ElemPropertyData::StatusConfig> statusVec = data->statusConfig;
|
|
|
+ for(int j=0;j<statusVec.size();j++)
|
|
|
+ {
|
|
|
+ //基础属性
|
|
|
+ if(statusVec[j].initAnim == "尚未选择"){
|
|
|
+ exportMessage = elemMessage+"\n状态"+statusVec[j].statusValue+"未选择初始动画";
|
|
|
+ return false;
|
|
|
+ }
|
|
|
+ if(statusVec[j].clickAnim == "尚未选择"){
|
|
|
+ exportMessage = elemMessage+"\n状态"+statusVec[j].statusValue+"未选择点击动画";
|
|
|
+ return false;
|
|
|
+ }
|
|
|
+ if(statusVec[j].needCollect){
|
|
|
+ if(statusVec[j].collTargetType.isEmpty() || statusVec[j].collTargetType.toInt() <= 0){
|
|
|
+ exportMessage = elemMessage+"\n状态"+statusVec[j].statusValue+"收集的目标类型必须是大于0的数字";
|
|
|
+ return false;
|
|
|
+ }
|
|
|
+ if(statusVec[j].collAnim == "尚未选择"){
|
|
|
+ exportMessage = elemMessage+"\n状态"+statusVec[j].statusValue+"未选择收集动画";
|
|
|
+ return false;
|
|
|
+ }
|
|
|
+ }
|
|
|
+ //事件配置
|
|
|
+ QVector<ElemPropertyData::EventConfig> eventVec = statusVec[j].eventConfig;
|
|
|
+ for(int k=0;k<eventVec.size();k++)
|
|
|
+ {
|
|
|
+ if(eventVec[k].name == "尚未选择"){
|
|
|
+ exportMessage = elemMessage+"\n状态"+statusVec[j].statusValue+"事件配置未选择事件名称";
|
|
|
+ return false;
|
|
|
+ }
|
|
|
+ if(eventVec[k].specialEffect == "尚未选择"){
|
|
|
+ exportMessage = elemMessage+"\n状态"+statusVec[j].statusValue+"事件配置未选择特效";
|
|
|
+ return false;
|
|
|
+ }
|
|
|
+ //触发动作暂不处理
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ //容器池配置
|
|
|
+ QVector<ElemPropertyData::ContainerConfig> poolVec = data->container;
|
|
|
+ for(int j=0;j<poolVec.size();j++)
|
|
|
+ {
|
|
|
+ if(poolVec[j].type == "尚未选择"){
|
|
|
+ exportMessage = elemMessage+"\n容器"+poolVec[j].poolName+"未选择类型";
|
|
|
+ return false;
|
|
|
+ }
|
|
|
+ QVector<ElemPropertyData::ContainTable> table = poolVec[j].table;
|
|
|
+ for(int k=0;k<table.size();k++)
|
|
|
+ {
|
|
|
+ if(table[k].res == "双击添加资源文件"){
|
|
|
+ exportMessage = elemMessage+"\n容器"+poolVec[j].poolName+"键"+table[k].key+"未选择资源文件";
|
|
|
+ return false;
|
|
|
+ }
|
|
|
+ if(table[k].initTimeline == "尚未选择" || table[k].clickTimeline == "尚未选择" || table[k].effectTimeline == "尚未选择" || table[k].vanishTimeline == "尚未选择"){
|
|
|
+ exportMessage = elemMessage+"\n容器"+poolVec[j].poolName+"键"+table[k].key+"未选择时间线";
|
|
|
+ return false;
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ //子元素配置
|
|
|
+ QVector<ElemPropertyData::ChildElem> childElemVec = data->childElem;
|
|
|
+ for(int j=0;j<childElemVec.size();j++)
|
|
|
+ {
|
|
|
+ if(childElemVec[j].container == "尚未选择"){
|
|
|
+ exportMessage = elemMessage+"\n容器"+poolVec[j].poolName+"子元素"+childElemVec[j].name+"使用的池子未选择";
|
|
|
+ return false;
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+ return true;
|
|
|
+}
|
|
|
+
|
|
|
+QString DataManager::getExportMessage()
|
|
|
+{
|
|
|
+ return exportMessage;
|
|
|
+}
|
|
|
+
|
|
|
+///将位置字符串拆分成多对坐标
|
|
|
+QVector<QVector<int>> DataManager::getGridPos(QString str)
|
|
|
+{
|
|
|
+ //转换失败返回空数组
|
|
|
+ QVector<QVector<int>> nullAns;
|
|
|
+ QVector<QVector<int>> posNumPairs;
|
|
|
+ //依据逗号分割
|
|
|
+ QStringList posStrPairs = str.split(QLatin1Char(','));
|
|
|
+ for(int i=0;i<posStrPairs.size();i++)
|
|
|
+ {
|
|
|
+ //依据:分割,若分割组数不为2说明输入不合法
|
|
|
+ QStringList posStrPair = posStrPairs[i].split(QLatin1Char(':'));
|
|
|
+ if(posStrPair.size()!=2) return nullAns;
|
|
|
+ QVector<int> posNumPair;
|
|
|
+ //检查第一个字符串是否为数字
|
|
|
+ bool ok;
|
|
|
+ int num1 = posStrPair[0].toInt(&ok);
|
|
|
+ if(!ok) return nullAns;
|
|
|
+ posNumPair.push_back(num1);
|
|
|
+ //检查第二个字符串是否为数字
|
|
|
+ int num2 = posStrPair[1].toInt(&ok);
|
|
|
+ if(!ok) return nullAns;
|
|
|
+ posNumPair.push_back(num2);
|
|
|
+ posNumPairs.push_back(posNumPair);
|
|
|
+ }
|
|
|
+ return posNumPairs;
|
|
|
+}
|
|
|
+
|
|
|
+bool DataManager::exportData()
|
|
|
+{
|
|
|
+ if(!exportIsValid()) return false;
|
|
|
+ //导出为json
|
|
|
+ QJsonObject dataObj;
|
|
|
+ QStringList keys = elements.keys();
|
|
|
+ for(int i=0;i<keys.size();i++)
|
|
|
+ {
|
|
|
+ QString elem = keys[i];
|
|
|
+ QJsonObject obj;
|
|
|
+ elements[elem]->exportData(obj);
|
|
|
+ dataObj.insert(elements[elem]->labelName,obj);
|
|
|
+ }
|
|
|
QFile file("/Users/menglanluo/Desktop/export.json");
|
|
|
if(!file.open(QIODevice::WriteOnly)){
|
|
|
qDebug()<<"file open failed!";
|
|
@@ -420,3 +641,9 @@ bool DataManager::saveData()
|
|
|
file.close();
|
|
|
return true;
|
|
|
}
|
|
|
+
|
|
|
+QString DataManager::getTempId(QString key, QString name)
|
|
|
+{
|
|
|
+ int index = jsonTemp->getTemplateIndex(key,name);
|
|
|
+ return jsonTemp->templateMap[key][index].id;
|
|
|
+}
|