瀏覽代碼

开发:增加几个属性

xlxin 2 年之前
父節點
當前提交
05afe19744
共有 11 個文件被更改,包括 123 次插入21 次删除
  1. 14 1
      datacpp/dataManager.cpp
  2. 9 3
      datacpp/elemPropertyData.cpp
  3. 3 1
      datahpp/dataManager.h
  4. 3 1
      datahpp/elemPropertyData.h
  5. 2 2
      file/template.json
  6. 13 0
      mainwindow.cpp
  7. 2 0
      mainwindow.h
  8. 43 12
      mainwindow.ui
  9. 12 1
      statusConfig.cpp
  10. 2 0
      statusConfig.h
  11. 20 0
      statusConfig.ui

+ 14 - 1
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,10 @@ void DataManager::changeMoveAwayState(QString elem, int state)
 {
     elements[elem]->canMoveAway = state;
 }
+void DataManager::changeIsContainerState(QString elem, int state)
+{
+    elements[elem]->isContainer = state;
+}
 QString DataManager::getMarkValue(QString elem)
 {
     return elements[elem]->labelName;
@@ -179,6 +186,10 @@ bool DataManager::getLinkedState(QString elem)
 {
     return elements[elem]->canBeLinked;
 }
+bool DataManager::getIsContainerState(QString elem)
+{
+    return elements[elem]->isContainer;
+}
 
 //状态与效果动画
 QVector<ElemPropertyData::StatusEffect> DataManager::getAnimVec(QString elem)
@@ -284,6 +295,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,6 +349,7 @@ 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;

+ 9 - 3
datacpp/elemPropertyData.cpp

@@ -109,6 +109,9 @@ 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("anims") && json["anims"].isArray()){
         readStatusEffect(json["anims"].toArray());
@@ -142,6 +145,7 @@ void ElemPropertyData::writeData(QJsonObject &json) const
     json["iconPath"] = iconPath;
     json["canBeLinked"] = canBeLinked;
     json["canMoveAway"] = canMoveAway;
+    json["isContainer"] = isContainer;
     json.insert("anims",writeStatusEffect());
     json.insert("collAnim",writeCollAnim());
     json.insert("statusConfig",writeStatusConfigData());
@@ -243,6 +247,7 @@ 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();
@@ -280,6 +285,7 @@ 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;
@@ -401,6 +407,7 @@ void ElemPropertyData::exportData(QJsonObject &json) const
     json["canBeLinked"] = canBeLinked;
     //canDrop是一个bool值,导出的什么数据?在状态配置中导出?
     json["canMoveAway"] = canMoveAway;
+    json["isContainer"] = isContainer;
     json["beatScore"] = score.toInt();
     json["gridPos"] = exportGridPos();
     json["animation"] = exportAnim();
@@ -433,9 +440,7 @@ QJsonObject ElemPropertyData::exportAnim() const
     for(int i=0;i<statusEffect.size();i++)
     {
         QJsonObject animObj;
-        auto ccb = DataManager::getFileName(statusEffect[i].res);
-        auto p = ccb.lastIndexOf(".");
-        animObj["showCcbi"] = ccb.left(p);
+        animObj["showCcbi"] = DataManager::getFileName(statusEffect[i].res);
         animObj["showAnim"] = statusEffect[i].timeline;
         animObj["localZOrder"] = statusEffect[i].zOrder.toInt();
         json.insert(statusEffect[i].name,animObj);
@@ -453,6 +458,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;

+ 3 - 1
datahpp/dataManager.h

@@ -34,6 +34,7 @@ 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);
     //基础属性值获取
     QString getMarkValue(QString elem);
     QString getPos(QString elem);
@@ -43,6 +44,7 @@ public:
     QString getIconPath(QString elem);
     bool getLinkedState(QString elem);
     bool getMoveAwayState(QString elem);
+    bool getIsContainerState(QString elem);
 
     //状态与效果动画
     QVector<ElemPropertyData::StatusEffect> getAnimVec(QString elem);
@@ -75,7 +77,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);

+ 3 - 1
datahpp/elemPropertyData.h

@@ -19,6 +19,7 @@ public:
     QString iconPath;
     bool canBeLinked;
     bool canMoveAway;
+    bool isContainer;
 
     //状态与效果动画
     struct StatusEffect{
@@ -58,10 +59,11 @@ public:
         bool multiHit;
         bool dropable;
         bool needCollect;
+        bool beatSubItem;
         QString collTargetType;
         QString collAnim;
         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),initAnim("尚未选择"),clickAnim("尚未选择"),collAnim("尚未选择"){}
     };
     QVector<StatusConfig> statusConfig;
 

+ 2 - 2
file/template.json

@@ -2,11 +2,11 @@
         "pool_template":[
                 {
                         "name":"随机",
-                        "id":"1"
+                        "id":"random"
                 },
                 {
                         "name":"按颜色",
-                        "id":"2"
+                        "id":"byColor"
                 }
         ],
         "coll_template":[

+ 13 - 0
mainwindow.cpp

@@ -66,11 +66,16 @@ 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);
+
     //设置四个子界面显示
     animUi->setUi(elem);
     collAnimUi->setUi(elem);
@@ -231,6 +236,14 @@ 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_pushButton_exportConfig_clicked()
 {

+ 2 - 0
mainwindow.h

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

+ 43 - 12
mainwindow.ui

@@ -240,43 +240,74 @@
            </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>icon</string>
+                 <string>可挤压</string>
                 </property>
                </widget>
               </item>
+             </layout>
+            </item>
+            <item>
+             <layout class="QHBoxLayout" name="horizontalLayout_11">
               <item>
-               <widget class="QPushButton" name="pushButton_chooseFile">
+               <widget class="QCheckBox" name="checkBox_isContainer">
                 <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>

+ 12 - 1
statusConfig.cpp

@@ -226,6 +226,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){
@@ -322,7 +325,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 +355,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)
 {

+ 2 - 0
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();

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