瀏覽代碼

开发:将触发动作从事件中提到状态本身

xlxin 2 年之前
父節點
當前提交
4c38128bad
共有 10 個文件被更改,包括 159 次插入42 次删除
  1. 3 4
      actionSettingDialog.cpp
  2. 1 2
      actionSettingDialog.h
  3. 11 4
      datacpp/dataManager.cpp
  4. 41 4
      datacpp/elemPropertyData.cpp
  5. 2 1
      datahpp/dataManager.h
  6. 7 4
      datahpp/elemPropertyData.h
  7. 1 1
      file/template.json
  8. 37 21
      statusConfig.cpp
  9. 3 1
      statusConfig.h
  10. 53 0
      statusConfig.ui

+ 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;

+ 11 - 4
datacpp/dataManager.cpp

@@ -287,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].eventConfig[row].actionConfig = data;
+    elements[elem]->statusConfig[statusIndex].action = newData;
+}
+void DataManager::changeActionConfigData(QString elem, int statusIndex, QMap<QString, QString> data)
+{
+    elements[elem]->statusConfig[statusIndex].actionConfig = data;
 }
 void DataManager::setEventTableCheckBox(QString elem, int statusIndex, int row, int column, int state)
 {
@@ -363,6 +366,8 @@ void DataManager::copyStatus(QString elem, QString statusVal, int copyIndex)
         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);
 }
@@ -626,6 +631,8 @@ bool DataManager::exportIsValid()
                     return false;
                 }
             }
+            //触发动作暂不处理
+
             //事件配置
             QVector<ElemPropertyData::EventConfig> eventVec = statusVec[j].eventConfig;
             for(int k=0;k<eventVec.size();k++)
@@ -638,7 +645,6 @@ bool DataManager::exportIsValid()
                     exportMessage = elemMessage+"\n状态"+statusVec[j].statusValue+"事件配置未选择特效";
                     return false;
                 }
-                //触发动作暂不处理
             }
         }
 
@@ -752,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;
 }

+ 41 - 4
datacpp/elemPropertyData.cpp

@@ -256,6 +256,7 @@ void ElemPropertyData::readStatusConfigData(const QJsonArray &arr)
         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);
     }
@@ -273,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
 {
@@ -294,11 +303,22 @@ QJsonArray ElemPropertyData::writeStatusConfigData() const
         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
 {
@@ -310,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;
@@ -473,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;

+ 2 - 1
datahpp/dataManager.h

@@ -70,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);

+ 7 - 4
datahpp/elemPropertyData.h

@@ -49,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;
@@ -63,8 +61,10 @@ public:
         bool beatSubItem;
         QString collTargetType;
         QString collAnim;
+        QString action;
+        QMap<QString,QString> actionConfig;
         QVector<EventConfig> eventConfig;
-        StatusConfig(QString statusVal):statusValue(statusVal),multiHit(false),beatSubItem(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;
 
@@ -120,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;

+ 1 - 1
file/template.json

@@ -46,7 +46,7 @@
                         "name":"目标达成",
                         "id":"goalFinished",
                         "fields":{
-                                "执行动作":{"id":"action","type":"list","src":"animations","default":""}
+                                "状态变化":{"id":"dataDec","type":"input","default":"1"}
                         }
                 },
                 {

+ 37 - 21
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;
@@ -244,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);
@@ -263,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;
 }
@@ -457,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);
 }
 

+ 3 - 1
statusConfig.h

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

+ 53 - 0
statusConfig.ui

@@ -232,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">