7 Commits 2be117a2e7 ... 554cc4ecae

Author SHA1 Message Date
  xlxin 554cc4ecae 开发:完善bezier的配置参数 2 years ago
  xlxin 4c38128bad 开发:将触发动作从事件中提到状态本身 2 years ago
  xlxin 2a008e0c88 开发:支持beatByOrder属性 2 years ago
  xlxin 05afe19744 开发:增加几个属性 2 years ago
  xlxin 34b45d44b0 开发:最多支持n+1个状态 2 years ago
  xlxin 650a495ba1 开发:去掉后缀 2 years ago
  xlxin 1afa714496 开发:统一一下名字 2 years ago

+ 3 - 4
actionSettingDialog.cpp

@@ -22,14 +22,13 @@ ActionSettingDialog::~ActionSettingDialog()
     delete ui;
 }
 
-void ActionSettingDialog::setDialogUi(QString actionName,QString elem,int statusIndex, int row)
+void ActionSettingDialog::setDialogUi(QString actionName,QString elem,int statusIndex)
 {
-    curRow = row;
     curStatusIndex = statusIndex;
     curElem = elem;
     curActionName = actionName;
     QFormLayout* formlayout = new QFormLayout();
-    QMap<QString,QString> data = DataManager::getInstance()->getStatusConfigData(elem,statusIndex).eventConfig[row].actionConfig;
+    QMap<QString,QString> data = DataManager::getInstance()->getStatusConfigData(elem,statusIndex).actionConfig;
     for(const auto &i:DataManager::getInstance()->getTempFields("actionTemp",actionName)){
         if(i.type == "list"){
             QComboBox* combo = new QComboBox;
@@ -74,6 +73,6 @@ void ActionSettingDialog::on_buttonBox_accepted()
             std::cout<<qPrintable(fieldVec[i].name)<<": "<<qPrintable(edit->text())<<std::endl;
         }
     }
-    DataManager::getInstance()->changeActionConfigData(curElem,curStatusIndex,curRow,dataMap);
+    DataManager::getInstance()->changeActionConfigData(curElem,curStatusIndex,dataMap);
 }
 

+ 1 - 2
actionSettingDialog.h

@@ -16,14 +16,13 @@ public:
     explicit ActionSettingDialog(QWidget *parent = nullptr);
     ~ActionSettingDialog();
 //    void setDialogUi(QVector<ReadJsonSrc::Fields> fields,QMap<QString,QString> data,QStringList listItems);
-    void setDialogUi(QString actionName,QString elem,int statusIndex,int row);
+    void setDialogUi(QString actionName,QString elem,int statusIndex);
 
 private slots:
     void on_buttonBox_accepted();
 
 private:
     Ui::ActionSettingDialog *ui;
-    int curRow;
     int curStatusIndex;
     QString curActionName;
     QString curElem;

+ 33 - 5
datacpp/dataManager.cpp

@@ -38,7 +38,10 @@ QString DataManager::getFileName(QString filePath)
     for(int i=pos;i<size;i++){
         fileName.push_back(filePath[i]);
     }
-    return fileName;
+
+    // 去掉后缀
+    auto p = fileName.lastIndexOf(".");
+    return fileName.left(p);
 }
 
 //模板配置
@@ -147,6 +150,14 @@ void DataManager::changeMoveAwayState(QString elem, int state)
 {
     elements[elem]->canMoveAway = state;
 }
+void DataManager::changeIsContainerState(QString elem, int state)
+{
+    elements[elem]->isContainer = state;
+}
+void DataManager::changeBeatByOrderState(QString elem, int state)
+{
+    elements[elem]->beatByOrder = state;
+}
 QString DataManager::getMarkValue(QString elem)
 {
     return elements[elem]->labelName;
@@ -179,6 +190,14 @@ bool DataManager::getLinkedState(QString elem)
 {
     return elements[elem]->canBeLinked;
 }
+bool DataManager::getIsContainerState(QString elem)
+{
+    return elements[elem]->isContainer;
+}
+bool DataManager::getBeatByOrderState(QString elem)
+{
+    return elements[elem]->beatByOrder;
+}
 
 //状态与效果动画
 QVector<ElemPropertyData::StatusEffect> DataManager::getAnimVec(QString elem)
@@ -268,11 +287,14 @@ void DataManager::changeEventTable(QString elem,QString newData,int statusIndex,
     if(column == 0) eventTable[row].name = newData;
     else if(column == 2) eventTable[row].changeMagnitude = newData.toInt();
     else if(column == 3) eventTable[row].specialEffect = newData;
-    else if(column == 5) eventTable[row].triggerAction = newData;
 }
-void DataManager::changeActionConfigData(QString elem, int statusIndex, int row, QMap<QString, QString> data)
+void DataManager::changeAction(QString elem,QString newData,int statusIndex)
+{
+    elements[elem]->statusConfig[statusIndex].action = newData;
+}
+void DataManager::changeActionConfigData(QString elem, int statusIndex, QMap<QString, QString> data)
 {
-    elements[elem]->statusConfig[statusIndex].eventConfig[row].actionConfig = data;
+    elements[elem]->statusConfig[statusIndex].actionConfig = data;
 }
 void DataManager::setEventTableCheckBox(QString elem, int statusIndex, int row, int column, int state)
 {
@@ -284,6 +306,7 @@ void DataManager::setFundCheckBox(QString elem, int statusIndex, CheckType check
 {
     if(checkType == CheckType::Dropable) elements[elem]->statusConfig[statusIndex].dropable = state;
     else if(checkType == CheckType::MultiHit) elements[elem]->statusConfig[statusIndex].multiHit = state;
+    else if(checkType == CheckType::BeatSubitem) elements[elem]->statusConfig[statusIndex].beatSubItem = state;
     else if(checkType == CheckType::NeedColl) elements[elem]->statusConfig[statusIndex].needCollect = state;
 }
 bool DataManager::existStatusVal(QString elem, QString statusVal)
@@ -337,11 +360,14 @@ void DataManager::copyStatus(QString elem, QString statusVal, int copyIndex)
     status.clickAnim = copyData.clickAnim;
     status.multiHit = copyData.multiHit;
     status.dropable = copyData.dropable;
+    status.beatSubItem = copyData.beatSubItem;
     if(copyData.needCollect){
         status.needCollect = true;
         status.collTargetType = copyData.collTargetType;
         status.collAnim = copyData.collAnim;
     }
+    status.action = copyData.action;
+    status.actionConfig = copyData.actionConfig;
     status.eventConfig = copyData.eventConfig;
     elements[elem]->statusConfig.push_back(status);
 }
@@ -605,6 +631,8 @@ bool DataManager::exportIsValid()
                     return false;
                 }
             }
+            //触发动作暂不处理
+
             //事件配置
             QVector<ElemPropertyData::EventConfig> eventVec = statusVec[j].eventConfig;
             for(int k=0;k<eventVec.size();k++)
@@ -617,7 +645,6 @@ bool DataManager::exportIsValid()
                     exportMessage = elemMessage+"\n状态"+statusVec[j].statusValue+"事件配置未选择特效";
                     return false;
                 }
-                //触发动作暂不处理
             }
         }
 
@@ -731,6 +758,7 @@ QString DataManager::getTempFieldId(QString key, QString name, QString fieldName
         if(fields[i].name == fieldName)
             return fields[i].id;
     }
+
     QString str;
     return str;
 }

+ 54 - 4
datacpp/elemPropertyData.cpp

@@ -109,6 +109,12 @@ void ElemPropertyData::readData(const QJsonObject &json)
     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());
@@ -142,6 +148,8 @@ void ElemPropertyData::writeData(QJsonObject &json) const
     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());
@@ -243,10 +251,12 @@ void ElemPropertyData::readStatusConfigData(const QJsonArray &arr)
         configData.initAnim = statusConfigObj["initAnim"].toString();
         configData.clickAnim = statusConfigObj["clickAnim"].toString();
         configData.multiHit = statusConfigObj["multiHit"].toBool();
+        configData.beatSubItem = statusConfigObj["beatSubItem"].toBool();
         configData.dropable = statusConfigObj["dropable"].toBool();
         configData.needCollect = statusConfigObj["needCollect"].toBool();
         configData.collTargetType = statusConfigObj["collTargetType"].toString();
         configData.collAnim = statusConfigObj["collAnim"].toString();
+        readAction(statusConfigObj["action"].toObject(), configData);
         configData.eventConfig = readEventConfig(statusConfigObj["eventConfig"].toArray());
         statusConfig.append(configData);
     }
@@ -264,12 +274,20 @@ QVector<ElemPropertyData::EventConfig> ElemPropertyData::readEventConfig(const Q
         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;
 }
+void ElemPropertyData::readAction(const QJsonObject &arr, StatusConfig& status)
+{
+    if (arr.isEmpty()) {
+        return;
+    }
+    for (const QString& k : arr.keys()) {
+        status.action = k;
+        status.actionConfig = readStrStrMap(arr[k].toObject());
+    }
+}
 ///写状态配置数据
 QJsonArray ElemPropertyData::writeStatusConfigData() const
 {
@@ -280,15 +298,27 @@ QJsonArray ElemPropertyData::writeStatusConfigData() const
         statusObj["initAnim"] = status.initAnim;
         statusObj["clickAnim"] = status.clickAnim;
         statusObj["multiHit"] = status.multiHit;
+        statusObj["beatSubItem"] = status.beatSubItem;
         statusObj["dropable"] = status.dropable;
         statusObj["needCollect"] = status.needCollect;
         statusObj["collTargetType"] = status.collTargetType;
         statusObj["collAnim"] = status.collAnim;
+        statusObj["action"] =  writeAction(status);
         statusObj.insert("eventConfig",writeEventConfig(status.eventConfig));
         statusConfigArray.append(statusObj);
     }
     return statusConfigArray;
 }
+
+QJsonObject ElemPropertyData::writeAction(const StatusConfig &status) const
+{
+    QJsonObject actionObj;
+    if (status.action != "尚未选择") {
+        actionObj[status.action] = writeStrStrMap(status.actionConfig);
+    }
+    return actionObj;
+}
+
 ///写事件配置表格数据
 QJsonArray ElemPropertyData::writeEventConfig(const QVector<EventConfig> &eventConfig) const
 {
@@ -300,8 +330,6 @@ QJsonArray ElemPropertyData::writeEventConfig(const QVector<EventConfig> &eventC
         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;
@@ -401,6 +429,8 @@ void ElemPropertyData::exportData(QJsonObject &json) const
     json["canBeLinked"] = canBeLinked;
     //canDrop是一个bool值,导出的什么数据?在状态配置中导出?
     json["canMoveAway"] = canMoveAway;
+    json["isContainer"] = isContainer;
+    json["beatByOrder"] = beatByOrder;
     json["beatScore"] = score.toInt();
     json["gridPos"] = exportGridPos();
     json["animation"] = exportAnim();
@@ -451,6 +481,7 @@ QJsonObject ElemPropertyData::exportAnim() const
          statusObj["tapAnim"] = statusConfig[i].clickAnim;
          statusObj["supportMutliBeats"] = statusConfig[i].multiHit;
          statusObj["canDrop"] = statusConfig[i].dropable;
+         statusObj["beatSubItem"] = statusConfig[i].beatSubItem;
          //收集
         if(statusConfig[i].needCollect){
             QJsonObject collObj;
@@ -460,6 +491,25 @@ QJsonObject ElemPropertyData::exportAnim() const
             }
             statusObj["collect"] = collObj;
         }
+        //动作
+        if (statusConfig[i].action != "尚未选择") {
+            QJsonObject actionObj;
+            QJsonObject cfgObj;
+            QMap<QString,QString> data = statusConfig[i].actionConfig;
+            QStringList dataKeys = data.keys();
+            for(int j=0;j<dataKeys.size();j++)
+            {
+                QString dataKey = dataKeys[j];
+                QString objKey = DataManager::getInstance()->getTempFieldId("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<EventConfig> eventVec = statusConfig[i].eventConfig;

+ 7 - 2
datahpp/dataManager.h

@@ -34,6 +34,8 @@ public:
     void changeIconPath(QString elem,QString iconPath);
     void changeLinkedState(QString elem,int state);
     void changeMoveAwayState(QString elem,int state);
+    void changeIsContainerState(QString elem,int state);
+    void changeBeatByOrderState(QString elem, int state);
     //基础属性值获取
     QString getMarkValue(QString elem);
     QString getPos(QString elem);
@@ -43,6 +45,8 @@ public:
     QString getIconPath(QString elem);
     bool getLinkedState(QString elem);
     bool getMoveAwayState(QString elem);
+    bool getIsContainerState(QString elem);
+    bool getBeatByOrderState(QString elem);
 
     //状态与效果动画
     QVector<ElemPropertyData::StatusEffect> getAnimVec(QString elem);
@@ -66,7 +70,8 @@ public:
     //状态配置
     ElemPropertyData::StatusConfig getStatusConfigData(QString elem,int index);
     void changeEventTable(QString elem,QString newData,int statusIndex, int row,int column);
-    void changeActionConfigData(QString elem,int statusIndex,int row,QMap<QString,QString> data);
+    void changeAction(QString elem,QString newData,int statusIndex);
+    void changeActionConfigData(QString elem,int statusIndex,QMap<QString,QString> data);
     void setEventTableCheckBox(QString elem,int statusIndex,int row,int column,int state);
     bool existStatusVal(QString elem,QString statusVal);
     void addStatus(QString elem,QString statusVal);
@@ -75,7 +80,7 @@ public:
     enum class StatusDataType {InitAnim,ClickAnim,CollTar,CollAnim};
     ///改变基础属性值(表格以外)
     void changeStatusFundVal(QString elem,StatusDataType type,QString newData,int index);
-    enum class CheckType{MultiHit,Dropable,NeedColl,Color,Lattice};
+    enum class CheckType{MultiHit,Dropable,BeatSubitem,NeedColl,Color,Lattice};
     ///改变基础属性中的勾选值
     void setFundCheckBox(QString elem,int statusIndex,CheckType checkType,int state);
     void addEvent(QString elem,int index);

+ 10 - 4
datahpp/elemPropertyData.h

@@ -19,6 +19,8 @@ public:
     QString iconPath;
     bool canBeLinked;
     bool canMoveAway;
+    bool isContainer;
+    bool beatByOrder;
 
     //状态与效果动画
     struct StatusEffect{
@@ -47,9 +49,7 @@ public:
         int changeMagnitude;
         QString specialEffect;
         bool elimATLattices;
-        QString triggerAction;
-        QMap<QString,QString> actionConfig;
-        EventConfig():name("尚未选择"),specialEffect("尚未选择"),triggerAction("尚未选择"),consisColor(false),changeMagnitude(1),elimATLattices(false){}
+        EventConfig():name("尚未选择"),specialEffect("尚未选择"),consisColor(false),changeMagnitude(1),elimATLattices(false){}
     };
     struct StatusConfig{
         QString statusValue;
@@ -58,10 +58,13 @@ public:
         bool multiHit;
         bool dropable;
         bool needCollect;
+        bool beatSubItem;
         QString collTargetType;
         QString collAnim;
+        QString action;
+        QMap<QString,QString> actionConfig;
         QVector<EventConfig> eventConfig;
-        StatusConfig(QString statusVal):statusValue(statusVal),multiHit(false),dropable(false),needCollect(false),initAnim("尚未选择"),clickAnim("尚未选择"),collAnim("尚未选择"){}
+        StatusConfig(QString statusVal):statusValue(statusVal),multiHit(false),beatSubItem(false),dropable(false),needCollect(false),action("尚未选择"),initAnim("尚未选择"),clickAnim("尚未选择"),collAnim("尚未选择"){}
     };
     QVector<StatusConfig> statusConfig;
 
@@ -117,6 +120,9 @@ public:
     //读写状态配置数据
     void readStatusConfigData(const QJsonArray &arr);
     QJsonArray writeStatusConfigData() const;
+    //读写动作配置数据
+    QJsonObject writeAction(const StatusConfig &status) const;
+    void readAction(const QJsonObject &arr, StatusConfig& status);
     //读写事件配置表格数据
     QVector<EventConfig> readEventConfig(const QJsonArray &arr);
     QJsonArray writeEventConfig(const QVector<EventConfig> &eventConfig) const;

+ 12 - 9
file/template.json

@@ -2,11 +2,11 @@
         "pool_template":[
                 {
                         "name":"随机",
-                        "id":"1"
+                        "id":"random"
                 },
                 {
                         "name":"按颜色",
-                        "id":"2"
+                        "id":"byColor"
                 }
         ],
         "coll_template":[
@@ -14,11 +14,14 @@
                         "name":"贝塞尔飞行收集",
                         "id":"bezier",
                         "fields":{
-                                "动画":{"id":"anim","type":"list", "src":"animations"},
-                                "曲度":{"id":"p1","type":"input","default":"1.2"},
-                                "下探幅度":{"id":"p2","type":"input","default":"1.0"},
+                                "动画":{"id":"efx","type":"list", "src":"animations"},
+                                "延时":{"id":"delay","type":"input","default":"0.1"},
                                 "节点":{"id":"node","type":"input"},
-                                "阴影":{"id":"shade","type":"input"}
+                                "阴影":{"id":"shadow","type":"input"},
+                                "曲度":{"id":"bezierCur","type":"input","default":"1.2"},
+                                "下探幅度":{"id":"bezierDec","type":"input","default":"1.0"},
+                                "曲线的重合度":{"id":"bezierTrackCoin","type":"input","default":"10"},
+                                "时长倍率":{"id":"durationRatio","type":"input","default":"0.1"}
                         }
                 },
                 {
@@ -34,11 +37,11 @@
         "event_template": [
                 {
                         "name":"旁消",
-                        "id":"adj"
+                        "id":"adjBeat"
                 },
                 {
                         "name":"特殊消",
-                        "id":"stamp"
+                        "id":"stampBeat"
                 }
         ],
         "action_template":[
@@ -46,7 +49,7 @@
                         "name":"目标达成",
                         "id":"goalFinished",
                         "fields":{
-                                "执行动作":{"id":"action","type":"list","src":"animations","default":""}
+                                "状态变化":{"id":"dataDec","type":"input","default":"1"}
                         }
                 },
                 {

+ 24 - 0
mainwindow.cpp

@@ -66,11 +66,19 @@ void MainWindow::setUi(QString elem)
     ui->lineEdit_maxlayer->setText(DataManager::getInstance()->getMaxLayer(elem));
     ui->lineEdit_score->setText(DataManager::getInstance()->getScore(elem));
     ui->comboBox_dropConfig->setCurrentIndex(DataManager::getInstance()->getDropConfig(elem));
+
     if(DataManager::getInstance()->getLinkedState(elem)) ui->checkBox_canBeLinked->setCheckState(Qt::Checked);
     else ui->checkBox_canBeLinked->setCheckState(Qt::Unchecked);
+
     if(DataManager::getInstance()->getMoveAwayState(elem)) ui->checkBox_canMoveAway->setCheckState(Qt::Checked);
     else ui->checkBox_canMoveAway->setCheckState(Qt::Unchecked);
 
+    if(DataManager::getInstance()->getIsContainerState(elem)) ui->checkBox_isContainer->setCheckState(Qt::Checked);
+    else ui->checkBox_isContainer->setCheckState(Qt::Unchecked);
+
+    if(DataManager::getInstance()->getBeatByOrderState(elem)) ui->checkBox_beatByOrder->setCheckState(Qt::Checked);
+    else ui->checkBox_beatByOrder->setCheckState(Qt::Unchecked);
+
     //设置四个子界面显示
     animUi->setUi(elem);
     collAnimUi->setUi(elem);
@@ -231,6 +239,22 @@ void MainWindow::on_checkBox_canMoveAway_stateChanged(int arg1)
     DataManager::getInstance()->changeMoveAwayState(key,arg1);
 }
 
+///容器类型改变
+void MainWindow::on_checkBox_isContainer_stateChanged(int arg1)
+{
+    if(ui->listWidget_elem->currentItem() == nullptr) return;
+    QString key = ui->listWidget_elem->currentItem()->text();
+    DataManager::getInstance()->changeIsContainerState(key,arg1);
+}
+
+///容器类型改变
+void MainWindow::on_checkBox_beatByOrder_stateChanged(int arg1)
+{
+    if(ui->listWidget_elem->currentItem() == nullptr) return;
+    QString key = ui->listWidget_elem->currentItem()->text();
+    DataManager::getInstance()->changeBeatByOrderState(key,arg1);
+}
+
 ///导出配置按钮按下
 void MainWindow::on_pushButton_exportConfig_clicked()
 {

+ 4 - 0
mainwindow.h

@@ -54,6 +54,10 @@ private slots:
 
     void on_checkBox_canMoveAway_stateChanged(int arg1);
 
+    void on_checkBox_isContainer_stateChanged(int arg1);
+
+    void on_checkBox_beatByOrder_stateChanged(int arg1);
+
     void on_pushButton_exportConfig_clicked();
 
     void on_comboBox_dropConfig_currentIndexChanged(int index);

+ 50 - 12
mainwindow.ui

@@ -240,43 +240,81 @@
            </layout>
           </item>
           <item>
-           <layout class="QVBoxLayout" name="verticalLayout_3">
+           <layout class="QVBoxLayout" name="verticalLayout_3" stretch="0,0">
             <item>
-             <layout class="QHBoxLayout" name="horizontalLayout_6">
+             <layout class="QHBoxLayout" name="horizontalLayout_10">
+              <property name="sizeConstraint">
+               <enum>QLayout::SetDefaultConstraint</enum>
+              </property>
               <item>
-               <widget class="QLabel" name="label_icon">
+               <widget class="QCheckBox" name="checkBox_canBeLinked">
                 <property name="text">
-                 <string>图标:</string>
+                 <string>可连接</string>
                 </property>
                </widget>
               </item>
               <item>
-               <widget class="QLabel" name="label_pic">
+               <widget class="QCheckBox" name="checkBox_canMoveAway">
+                <property name="text">
+                 <string>可挤压</string>
+                </property>
+               </widget>
+              </item>
+             </layout>
+            </item>
+            <item>
+             <layout class="QHBoxLayout" name="horizontalLayout_11">
+              <item>
+               <widget class="QCheckBox" name="checkBox_isContainer">
                 <property name="text">
-                 <string>icon</string>
+                 <string>是容器</string>
                 </property>
                </widget>
               </item>
               <item>
-               <widget class="QPushButton" name="pushButton_chooseFile">
+               <widget class="QCheckBox" name="checkBox_beatByOrder">
                 <property name="text">
-                 <string>选择文件</string>
+                 <string>按顺序打击</string>
                 </property>
                </widget>
               </item>
              </layout>
             </item>
+           </layout>
+          </item>
+          <item>
+           <spacer name="horizontalSpacer_6">
+            <property name="orientation">
+             <enum>Qt::Horizontal</enum>
+            </property>
+            <property name="sizeHint" stdset="0">
+             <size>
+              <width>40</width>
+              <height>20</height>
+             </size>
+            </property>
+           </spacer>
+          </item>
+          <item>
+           <layout class="QHBoxLayout" name="horizontalLayout_6">
+            <item>
+             <widget class="QLabel" name="label_icon">
+              <property name="text">
+               <string>图标:</string>
+              </property>
+             </widget>
+            </item>
             <item>
-             <widget class="QCheckBox" name="checkBox_canBeLinked">
+             <widget class="QLabel" name="label_pic">
               <property name="text">
-               <string>可连接</string>
+               <string>icon</string>
               </property>
              </widget>
             </item>
             <item>
-             <widget class="QCheckBox" name="checkBox_canMoveAway">
+             <widget class="QPushButton" name="pushButton_chooseFile">
               <property name="text">
-               <string>可挤压</string>
+               <string>选择文件</string>
               </property>
              </widget>
             </item>

+ 50 - 23
statusConfig.cpp

@@ -11,9 +11,13 @@ StatusConfig::StatusConfig(QWidget *parent) :
     ui(new Ui::StatusConfig)
 {
     ui->setupUi(this);
-    ui->tableWidget_event->setHorizontalHeaderLabels({"事件名称","是否需要颜色一致","状态变化幅度","特效","根据格子数量消除","触发动作","触发动作设置"});
+    ui->tableWidget_event->setHorizontalHeaderLabels({"事件名称","是否需要颜色一致","状态变化幅度","特效","根据格子数量消除"});
     ui->lineEdit_collectionType->setReadOnly(true);
     ui->comboBox_collectAnimation->setDisabled(true);
+
+    // 动作选择和配置
+    connect(ui->pushButton_actionCfg,SIGNAL(clicked()),this,SLOT(onSetActionButtonClicked()));
+    connect(ui->comboBox_action,SIGNAL(currentTextChanged(QString)),this,SLOT(onActionBoxTextChanged(QString)));
 }
 
 StatusConfig::~StatusConfig()
@@ -93,35 +97,34 @@ void StatusConfig::onEventBoxTextChanged(const QString &arg1)
     DataManager::getInstance()->changeEventTable(currentElem,arg1,statusIndex,row,column);
 }
 
+// 动作comboBox选择发生变化
+void StatusConfig::onActionBoxTextChanged(const QString &arg1) {
+    int statusIndex = ui->listWidget_status->currentRow();
+    if(statusIndex == -1 || isSetUi) return;
+    DataManager::getInstance()->changeAction(currentElem,arg1,statusIndex);
+}
+
 ///动作配置中的设置点击后
 void StatusConfig::onSetActionButtonClicked()
 {
     int statusRow = ui->listWidget_status->currentRow();
     if(statusRow == -1) return;
-    //获取设置按钮所在位置
-    QPushButton *button = dynamic_cast<QPushButton*>(this->sender());
-    int x = button->frameGeometry().x();
-    int y = button->frameGeometry().y();
-    QModelIndex index = ui->tableWidget_event->indexAt(QPoint(x,y));
-    int row = index.row();
+    auto status = DataManager::getInstance()->getStatusConfigData(currentElem, statusRow);
     QVector<ElemPropertyData::EventConfig> eventTable = DataManager::getInstance()->getStatusConfigData(currentElem,statusRow).eventConfig;
-    QString action = eventTable[row].triggerAction;
-    std::cout<<"row:"<<row<<std::endl;
-    std::cout<<qPrintable(action)<<std::endl;
-    createSetWindow(action,row);
+    createSetWindow(status.action);
 }
 
 ///点击动作配置的设置按钮后生成新窗口
-void StatusConfig::createSetWindow(QString actionName,int row)
+void StatusConfig::createSetWindow(QString actionName)
 {
     int statusIndex = ui->listWidget_status->currentRow();
     if(actionName == "尚未选择"){
         QMap<QString,QString> nullMap;
-        DataManager::getInstance()->changeActionConfigData(currentElem,statusIndex,row,nullMap);
+        DataManager::getInstance()->changeActionConfigData(currentElem,statusIndex,nullMap);
         return;
     }
     ActionSettingDialog setDialog;
-    setDialog.setDialogUi(actionName,currentElem,statusIndex,row);
+    setDialog.setDialogUi(actionName,currentElem,statusIndex);
     setDialog.exec();
 }
 
@@ -153,14 +156,18 @@ void StatusConfig::setAnimComboBox()
     isSetUi = true;
     ui->comboBox_initAnim->clear();
     ui->comboBox_clickAnim->clear();
+    ui->comboBox_action->clear();
     ui->comboBox_collectAnimation->clear();
     ui->comboBox_initAnim->addItem("尚未选择");
     ui->comboBox_clickAnim->addItem("尚未选择");
     ui->comboBox_collectAnimation->addItem("尚未选择");
+    ui->comboBox_action->addItem("尚未选择");
     QStringList animList = DataManager::getInstance()->getList(currentElem,DataManager::ListType::Anim);
     ui->comboBox_clickAnim->addItems(animList);
     ui->comboBox_initAnim->addItems(animList);
     ui->comboBox_collectAnimation->addItems(DataManager::getInstance()->getList(currentElem,DataManager::ListType::CollAnim));
+    ui->comboBox_action->addItems(DataManager::getInstance()->getList(currentElem,DataManager::ListType::Actions));
+
     int row = ui->listWidget_status->currentRow();
     if(row != -1) {
         ElemPropertyData::StatusConfig statusData = DataManager::getInstance()->getStatusConfigData(currentElem,row);
@@ -171,7 +178,6 @@ void StatusConfig::setAnimComboBox()
         for(int i=0;i<rowNum;i++){
             ui->tableWidget_event->setCellWidget(i,3,createBox(event[i].specialEffect,BoxType::Effect));
             ui->tableWidget_event->setCellWidget(i,0,createBox(event[i].name,BoxType::Event));
-            ui->tableWidget_event->setCellWidget(i,5,createBox(event[i].triggerAction,BoxType::Action));
         }
     }   
     isSetUi = false;
@@ -226,6 +232,9 @@ void StatusConfig::setStatusUi()
     //可掉落
     if(statusData.dropable) ui->checkBox_dropable->setCheckState(Qt::Checked);
     else ui->checkBox_dropable->setCheckState(Qt::Unchecked);
+    // 打击子元素
+    if(statusData.beatSubItem) ui->checkBox_beatSubItem->setCheckState(Qt::Checked);
+    else ui->checkBox_beatSubItem->setCheckState(Qt::Unchecked);
     //是否需要收集
     ui->lineEdit_collectionType->clear();
     if(statusData.needCollect){
@@ -241,7 +250,17 @@ void StatusConfig::setStatusUi()
         ui->comboBox_collectAnimation->setDisabled(true);
         ui->comboBox_collectAnimation->setCurrentIndex(0);
     }
-    //事件配置
+    // action
+    if (statusData.action != "尚未选择") {
+        int index = ui->comboBox_action->findText(statusData.action);
+        if(index != -1) {
+            ui->comboBox_action->setCurrentIndex(index);
+        }
+    } else {
+        ui->comboBox_action->setCurrentIndex(0);
+    }
+
+    // 事件配置
     int rowNum = ui->tableWidget_event->rowCount();
     for(int i=0;i<rowNum;i++){
         ui->tableWidget_event->removeRow(0);
@@ -260,10 +279,10 @@ void StatusConfig::setStatusUi()
         ui->tableWidget_event->setCellWidget(rowNum,3,createBox(i.specialEffect,BoxType::Effect));
         //根据格子数量消除
         ui->tableWidget_event->setCellWidget(rowNum,4,createCheckBox(i.elimATLattices));
-        //触发动作
-        ui->tableWidget_event->setCellWidget(rowNum,5,createBox(i.triggerAction,BoxType::Action));
-        //触发动作设置
-        ui->tableWidget_event->setCellWidget(rowNum,6,createSetButton());
+//        //触发动作
+//        ui->tableWidget_event->setCellWidget(rowNum,5,createBox(i.triggerAction,BoxType::Action));
+//        //触发动作设置
+//        ui->tableWidget_event->setCellWidget(rowNum,6,createSetButton());
     }
     isSetUi = false;
 }
@@ -285,7 +304,7 @@ void StatusConfig::on_pushButton_addStatus_clicked()
 {
     int maxLayer = DataManager::getInstance()->getMaxLayer(currentElem).toInt();
     QString statusName;
-    for(int i=0;i<maxLayer;i++){
+    for(int i=0;i<=maxLayer;i++){
         if(!DataManager::getInstance()->existStatusVal(currentElem,QString::number(i))){
             statusName = QString::number(i);
             break;
@@ -322,7 +341,7 @@ void StatusConfig::on_listWidget_status_itemDoubleClicked(QListWidgetItem *item)
         bool isNum;double tmp = name.toDouble(&isNum);
         int maxLayer = DataManager::getInstance()->getMaxLayer(currentElem).toInt();
         int statusNum = name.toInt();
-        if(!isNum ||statusNum < 0 || statusNum >= maxLayer){
+        if(!isNum ||statusNum < 0 || statusNum > maxLayer){
             QMessageBox::critical(this,"错误","状态值必须是大于等于0且小于最大层数的数字");
             return;
         }
@@ -352,6 +371,14 @@ void StatusConfig::on_checkBox_dropable_stateChanged(int arg1)
     DataManager::getInstance()->setFundCheckBox(currentElem,index,DataManager::CheckType::Dropable,arg1);
 }
 
+///多重打击数据变化
+void StatusConfig::on_checkBox_beatSubItem_stateChanged(int arg1)
+{
+    int index = ui->listWidget_status->currentRow();
+    if(index == -1 || isSetUi) return;
+    DataManager::getInstance()->setFundCheckBox(currentElem,index,DataManager::CheckType::BeatSubitem,arg1);
+}
+
 ///需要收集数据变化
 void StatusConfig::on_checkBox_needCollect_stateChanged(int arg1)
 {
@@ -446,7 +473,7 @@ void StatusConfig::on_comboBox_collectAnimation_currentTextChanged(const QString
 {
     int index = ui->listWidget_status->currentRow();
     if(index==-1 || isSetUi) return;
-    std::cout<<"初始化动画:"<<qPrintable(arg1)<<std::endl;
+    std::cout<<"收集动画:"<<qPrintable(arg1)<<std::endl;
     DataManager::getInstance()->changeStatusFundVal(currentElem,DataManager::StatusDataType::CollAnim,arg1,index);
 }
 

+ 5 - 1
statusConfig.h

@@ -47,6 +47,8 @@ private slots:
 
     void on_checkBox_dropable_stateChanged(int arg1);
 
+    void on_checkBox_beatSubItem_stateChanged(int arg1);
+
     void on_checkBox_needCollect_stateChanged(int arg1);
 
     void on_lineEdit_collectionType_editingFinished();
@@ -71,6 +73,8 @@ private slots:
     ///动作配置中的设置点击后
     void onSetActionButtonClicked();
 
+    void onActionBoxTextChanged(const QString &arg1);
+
     void on_listWidget_status_currentRowChanged(int currentRow);
 
     void on_pushButton_copyStatus_clicked();
@@ -91,7 +95,7 @@ private:
     ///设置动画当前选择的项
     void setAnimIndex(ElemPropertyData::StatusConfig statusData);
     ///点击动作配置的设置按钮后生成新窗口
-    void createSetWindow(QString actionName,int row);
+    void createSetWindow(QString actionName);
 };
 
 #endif // STATUSCONFIG_H

+ 73 - 0
statusConfig.ui

@@ -155,6 +155,26 @@
              </property>
             </spacer>
            </item>
+           <item>
+            <widget class="QCheckBox" name="checkBox_beatSubItem">
+             <property name="text">
+              <string>打击子元素</string>
+             </property>
+            </widget>
+           </item>
+           <item>
+            <spacer name="horizontalSpacer">
+             <property name="orientation">
+              <enum>Qt::Horizontal</enum>
+             </property>
+             <property name="sizeHint" stdset="0">
+              <size>
+               <width>40</width>
+               <height>20</height>
+              </size>
+             </property>
+            </spacer>
+           </item>
           </layout>
          </item>
          <item>
@@ -212,6 +232,59 @@
         </layout>
        </item>
        <item>
+        <layout class="QHBoxLayout" name="horizontalLayout_4">
+         <property name="spacing">
+          <number>-1</number>
+         </property>
+         <property name="leftMargin">
+          <number>0</number>
+         </property>
+         <property name="topMargin">
+          <number>0</number>
+         </property>
+         <item>
+          <widget class="QLabel" name="label_2">
+           <property name="text">
+            <string>事件配置:</string>
+           </property>
+          </widget>
+         </item>
+         <item>
+          <widget class="QComboBox" name="comboBox_action">
+           <property name="minimumSize">
+            <size>
+             <width>200</width>
+             <height>0</height>
+            </size>
+           </property>
+           <property name="maxVisibleItems">
+            <number>10</number>
+           </property>
+          </widget>
+         </item>
+         <item>
+          <widget class="QPushButton" name="pushButton_actionCfg">
+           <property name="text">
+            <string>配置参数</string>
+           </property>
+          </widget>
+         </item>
+         <item>
+          <spacer name="horizontalSpacer_2">
+           <property name="orientation">
+            <enum>Qt::Horizontal</enum>
+           </property>
+           <property name="sizeHint" stdset="0">
+            <size>
+             <width>40</width>
+             <height>20</height>
+            </size>
+           </property>
+          </spacer>
+         </item>
+        </layout>
+       </item>
+       <item>
         <layout class="QVBoxLayout" name="verticalLayout_14">
          <item>
           <widget class="QLabel" name="label_eventConfiguration">