|
@@ -31,9 +31,6 @@ MainWindow::MainWindow(QWidget *parent)
|
|
|
ui->tableWidget_event->setHorizontalHeaderLabels({"事件名称","是否需要颜色一致","状态变化幅度","特效","根据格子数量消除","触发动作"});
|
|
|
ui->tabWidget->setCurrentIndex(0);
|
|
|
ui->lineEdit_collectionType->setReadOnly(true);
|
|
|
- ui->comboBox_initAnim->addItem("尚未选择动画");
|
|
|
- ui->comboBox_clickAnim->addItem("尚未选择动画");
|
|
|
- ui->comboBox_collectAnimation->addItem("尚未选择动画");
|
|
|
}
|
|
|
|
|
|
MainWindow::~MainWindow()
|
|
@@ -46,7 +43,7 @@ QComboBox* MainWindow::createTimelineBox(QString chosenTimeline,QString fileName
|
|
|
{
|
|
|
ElemPropertyData* elem = elements[ui->listWidget_elem->currentItem()->text()];
|
|
|
QComboBox* timeLine = new QComboBox;
|
|
|
-// timeLine->addItem("尚未选择资源");
|
|
|
+ if(fileName == "双击添加资源文件") return timeLine;
|
|
|
timeLine->addItems(elem->getTimelineList(fileName));
|
|
|
int index;
|
|
|
if(chosenTimeline.isEmpty()) index = -1;
|
|
@@ -78,10 +75,85 @@ QComboBox* MainWindow::createPoolBox(QString chosenPool)
|
|
|
return pools;
|
|
|
}
|
|
|
|
|
|
+///创建一个checkBox
|
|
|
+QCheckBox* MainWindow::createCheckBox(bool chosen)
|
|
|
+{
|
|
|
+ QCheckBox* check = new QCheckBox;
|
|
|
+ if(chosen) check->setCheckState(Qt::Checked);
|
|
|
+ else check->setCheckState(Qt::Unchecked);
|
|
|
+ connect(check,SIGNAL(stateChanged(int)),this,SLOT(onCheckBoxStateChanged(int)));
|
|
|
+ return check;
|
|
|
+}
|
|
|
+
|
|
|
+///创建一个特效下拉选项
|
|
|
+QComboBox* MainWindow::createEffectBox(QString chosenEffect)
|
|
|
+{
|
|
|
+ ElemPropertyData* elem = elements[ui->listWidget_elem->currentItem()->text()];
|
|
|
+ QComboBox* effect = new QComboBox;
|
|
|
+ effect->addItem("尚未选择动画");
|
|
|
+ for(const auto &i:elem->statusEffect){
|
|
|
+ effect->addItem(i.name);
|
|
|
+ }
|
|
|
+ int index;
|
|
|
+ if(chosenEffect == "尚未选择动画") index = 0;
|
|
|
+ else index= effect->findText(chosenEffect);
|
|
|
+ effect->setCurrentIndex(index);
|
|
|
+ connect(effect,SIGNAL(currentTextChanged(QString)),this,SLOT(onEffectTextChanged(QString)));
|
|
|
+ return effect;
|
|
|
+}
|
|
|
+
|
|
|
+///创建一个触发动作
|
|
|
+QWidget* MainWindow::createTriggerAction()
|
|
|
+{
|
|
|
+ QComboBox* actions = new QComboBox;
|
|
|
+ QPushButton* setAction = new QPushButton("设置");
|
|
|
+ QHBoxLayout *layout = new QHBoxLayout();
|
|
|
+ QWidget *triggerAction = new QWidget;
|
|
|
+ layout->addWidget(actions);
|
|
|
+ layout->addWidget(setAction);
|
|
|
+ triggerAction->setLayout(layout);
|
|
|
+ layout->setMargin(0);
|
|
|
+ return triggerAction;
|
|
|
+}
|
|
|
+
|
|
|
+///动画删除或改名后其它下拉选项的更新
|
|
|
+void MainWindow::updateAnimComboBox(QString changedAnim)
|
|
|
+{
|
|
|
+ ElemPropertyData* elem = elements[ui->listWidget_elem->currentItem()->text()];
|
|
|
+ //收集动画界面
|
|
|
+ if(ui->listWidget_collectAnim->currentItem() != nullptr){
|
|
|
+ int index = elem->getCollAnimIndex(ui->listWidget_collectAnim->currentItem()->text());
|
|
|
+ if(elem->collAnim[index].anim == changedAnim) ui->comboBox_animation->setCurrentIndex(0);
|
|
|
+ }
|
|
|
+ //状态配置界面
|
|
|
+ if(ui->listWidget_status->currentItem() != nullptr){
|
|
|
+ int index = elem->getStatusValIndex(ui->listWidget_status->currentItem()->text());
|
|
|
+ if(elem->statusConfig[index].initAnim == changedAnim) ui->comboBox_initAnim->setCurrentIndex(0);
|
|
|
+ if(elem->statusConfig[index].clickAnim == changedAnim) ui->comboBox_clickAnim->setCurrentIndex(0);
|
|
|
+ int rowNum = ui->tableWidget_event->rowCount();
|
|
|
+ for(int i=0;i<rowNum;i++){
|
|
|
+ QComboBox *effect = qobject_cast<QComboBox*>(ui->tableWidget_event->cellWidget(i,3));
|
|
|
+ if(effect->currentText() == changedAnim) effect->setCurrentIndex(0);
|
|
|
+ }
|
|
|
+ }
|
|
|
+}
|
|
|
+
|
|
|
+///收集动画删除或改名后下拉选项更新
|
|
|
+void MainWindow::updateCollAnimComboBox(QString changedAnim)
|
|
|
+{
|
|
|
+ std::cout<<"收集动画改变,更新下拉选项"<<std::endl;
|
|
|
+ ElemPropertyData* elem = elements[ui->listWidget_elem->currentItem()->text()];
|
|
|
+ //状态配置界面
|
|
|
+ if(ui->listWidget_status->currentItem() != nullptr){
|
|
|
+ int index = elem->getStatusValIndex(ui->listWidget_status->currentItem()->text());
|
|
|
+ if(elem->statusConfig[index].collAnim == changedAnim) ui->comboBox_collectAnimation->setCurrentIndex(0);
|
|
|
+ }
|
|
|
+}
|
|
|
|
|
|
//TODO: 设置ui所有数据
|
|
|
void MainWindow::setUi(ElemPropertyData *elem)
|
|
|
{
|
|
|
+ std::cout<<"切换元素,刷新界面"<<std::endl;
|
|
|
//基础元素区域的设置
|
|
|
QPixmap pix(elem->iconPath);
|
|
|
ui->label_pic->setPixmap(pix.scaled(50,50,Qt::KeepAspectRatio));
|
|
@@ -100,7 +172,6 @@ void MainWindow::setUi(ElemPropertyData *elem)
|
|
|
int rowNum = ui->tableWidget_animation->rowCount();
|
|
|
ui->tableWidget_animation->insertRow(rowNum);
|
|
|
ui->tableWidget_animation->setItem(rowNum,0,new QTableWidgetItem(i.name));
|
|
|
- //TODO: 时间线错误检查
|
|
|
QTableWidgetItem* res = new QTableWidgetItem(getFileName(i.res));
|
|
|
// 此单元格不可编辑
|
|
|
res->setFlags(res->flags() & ~Qt::ItemIsEditable);
|
|
@@ -118,11 +189,21 @@ void MainWindow::setUi(ElemPropertyData *elem)
|
|
|
}
|
|
|
// ui->listWidget_collectAnim->item(0)->setSelected(true); // 设置选中
|
|
|
|
|
|
+ //设置状态配置界面
|
|
|
+ ui->listWidget_status->clear();
|
|
|
+ for(const auto &i:elem->statusConfig){
|
|
|
+ ui->listWidget_status->addItem(i.statusValue);
|
|
|
+ }
|
|
|
+
|
|
|
//设置收集动画和状态配置的comboBox
|
|
|
ui->comboBox_initAnim->clear();
|
|
|
ui->comboBox_clickAnim->clear();
|
|
|
ui->comboBox_collectAnimation->clear();
|
|
|
ui->comboBox_animation->clear();
|
|
|
+ ui->comboBox_initAnim->addItem("尚未选择动画");
|
|
|
+ ui->comboBox_clickAnim->addItem("尚未选择动画");
|
|
|
+ ui->comboBox_collectAnimation->addItem("尚未选择动画");
|
|
|
+ ui->comboBox_animation->addItem("尚未选择动画");
|
|
|
for(const auto &i:elem->statusEffect){
|
|
|
ui->comboBox_clickAnim->addItem(i.name);
|
|
|
ui->comboBox_animation->addItem(i.name);
|
|
@@ -132,12 +213,6 @@ void MainWindow::setUi(ElemPropertyData *elem)
|
|
|
ui->comboBox_collectAnimation->addItem(i.name);
|
|
|
}
|
|
|
|
|
|
- //设置状态配置界面
|
|
|
- ui->listWidget_status->clear();
|
|
|
- for(const auto &i:elem->statusConfig){
|
|
|
- ui->listWidget_status->addItem(i.statusValue);
|
|
|
- }
|
|
|
-
|
|
|
//设置容器池界面
|
|
|
ui->listWidget_pool->clear();
|
|
|
for(const auto &i:elem->container){
|
|
@@ -295,7 +370,10 @@ void MainWindow::on_tableWidget_animation_cellDoubleClicked(int row, int column)
|
|
|
res.exec();
|
|
|
QString fileName = res.getResName();
|
|
|
if(!fileName.isEmpty()){
|
|
|
- ui->tableWidget_animation->setItem(row,column,new QTableWidgetItem(getFileName(fileName)));
|
|
|
+ QTableWidgetItem* res = new QTableWidgetItem(getFileName(fileName));
|
|
|
+ // 此单元格不可编辑
|
|
|
+ res->setFlags(res->flags() & ~Qt::ItemIsEditable);
|
|
|
+ ui->tableWidget_animation->setItem(row,1,res);
|
|
|
QComboBox* timeLine = createTimelineBox("",fileName,TimelineType::Animation);
|
|
|
ui->tableWidget_animation->setCellWidget(row,column+1,timeLine);
|
|
|
//保存当前数据
|
|
@@ -307,6 +385,7 @@ void MainWindow::on_tableWidget_animation_cellDoubleClicked(int row, int column)
|
|
|
///动画区时间线数据发生改变
|
|
|
void MainWindow::onTimelineTextChanged(const QString &arg1)
|
|
|
{
|
|
|
+ if(ui->listWidget_elem->currentItem() == nullptr) return;
|
|
|
//获取时间线列表所在位置
|
|
|
std::cout<<"current timeline is:"<<qPrintable(arg1)<<std::endl;
|
|
|
QComboBox *timeline = dynamic_cast<QComboBox*>(this->sender());
|
|
@@ -322,6 +401,7 @@ void MainWindow::onTimelineTextChanged(const QString &arg1)
|
|
|
///容器池区时间线数据发生改变
|
|
|
void MainWindow::onPoolTimelineTextChanged(const QString &arg1)
|
|
|
{
|
|
|
+ if(ui->listWidget_elem->currentItem() == nullptr || ui->listWidget_pool->currentItem() == nullptr) return;
|
|
|
//获取时间线列表所在位置
|
|
|
std::cout<<"current timeline is:"<<qPrintable(arg1)<<std::endl;
|
|
|
QComboBox *timeline = dynamic_cast<QComboBox*>(this->sender());
|
|
@@ -342,6 +422,7 @@ void MainWindow::onPoolTimelineTextChanged(const QString &arg1)
|
|
|
///子元素使用池子数据发生改变
|
|
|
void MainWindow::onPoolsTextChanged(const QString &arg1)
|
|
|
{
|
|
|
+ if(ui->listWidget_elem->currentItem() == nullptr) return;
|
|
|
//获取池子列表所在位置
|
|
|
QComboBox *pools = dynamic_cast<QComboBox*>(this->sender());
|
|
|
int x = pools->frameGeometry().x();
|
|
@@ -353,6 +434,50 @@ void MainWindow::onPoolsTextChanged(const QString &arg1)
|
|
|
elem->childElem[row].container = arg1;
|
|
|
}
|
|
|
|
|
|
+///事件配置checkBox状态发生改变
|
|
|
+void MainWindow::onCheckBoxStateChanged(int state)
|
|
|
+{
|
|
|
+ if(ui->listWidget_elem->currentItem() == nullptr || ui->listWidget_status->currentItem() == nullptr) return;
|
|
|
+ //获取checkBox所在位置
|
|
|
+ QCheckBox *check = dynamic_cast<QCheckBox*>(this->sender());
|
|
|
+ int x = check->frameGeometry().x();
|
|
|
+ int y = check->frameGeometry().y();
|
|
|
+ QModelIndex index = ui->tableWidget_event->indexAt(QPoint(x,y));
|
|
|
+ int row = index.row();
|
|
|
+ int column = index.column();
|
|
|
+ //修改数据
|
|
|
+ ElemPropertyData* elem = elements[ui->listWidget_elem->currentItem()->text()];
|
|
|
+ int statusIndex = elem->getStatusValIndex(ui->listWidget_status->currentItem()->text());
|
|
|
+ ElemPropertyData::EventConfig &eventData = elem->statusConfig[statusIndex].eventConfig[row];
|
|
|
+ //是否需要颜色一致
|
|
|
+ if(column == 1){
|
|
|
+ if(state == 0) eventData.consisColor = false;
|
|
|
+ else eventData.consisColor = true;
|
|
|
+ std::cout<<"颜色是否需要一致状态:"<<state<<std::endl;
|
|
|
+ }
|
|
|
+ else if(column == 4){
|
|
|
+ if(state == 0) eventData.elimATLattices = false;
|
|
|
+ else eventData.elimATLattices = true;
|
|
|
+ std::cout<<"根据格子数量消除状态:"<<state<<std::endl;
|
|
|
+ }
|
|
|
+}
|
|
|
+
|
|
|
+///特效ComboBox选择发生改变
|
|
|
+void MainWindow::onEffectTextChanged(const QString &arg1)
|
|
|
+{
|
|
|
+ if(ui->listWidget_elem->currentItem() == nullptr || ui->listWidget_status->currentItem() == nullptr) return;
|
|
|
+ //获取特效列表所在位置
|
|
|
+ QComboBox *effect = dynamic_cast<QComboBox*>(this->sender());
|
|
|
+ int x = effect->frameGeometry().x();
|
|
|
+ int y = effect->frameGeometry().y();
|
|
|
+ QModelIndex index = ui->tableWidget_event->indexAt(QPoint(x,y));
|
|
|
+ int row = index.row();
|
|
|
+ //修改数据
|
|
|
+ ElemPropertyData* elem = elements[ui->listWidget_elem->currentItem()->text()];
|
|
|
+ int statusIndex = elem->getStatusValIndex(ui->listWidget_status->currentItem()->text());
|
|
|
+ elem->statusConfig[statusIndex].eventConfig[row].specialEffect = arg1;
|
|
|
+}
|
|
|
+
|
|
|
void MainWindow::on_pushButton_addAnimation_clicked()
|
|
|
{
|
|
|
if(ui->listWidget_elem->currentItem()==nullptr) return;
|
|
@@ -375,11 +500,19 @@ void MainWindow::on_pushButton_addAnimation_clicked()
|
|
|
ui->tableWidget_animation->setItem(rowNum,1,res);
|
|
|
ui->tableWidget_animation->setCellWidget(rowNum,2,new QComboBox);
|
|
|
ui->tableWidget_animation->setItem(rowNum,3,new QTableWidgetItem("0"));
|
|
|
- elem->statusEffect.push_back({animName,"","","0"});
|
|
|
+ elem->statusEffect.push_back(ElemPropertyData::StatusEffect(animName));
|
|
|
//更新与动画相关的下拉选项
|
|
|
ui->comboBox_initAnim->addItem(animName);
|
|
|
ui->comboBox_clickAnim->addItem(animName);
|
|
|
ui->comboBox_animation->addItem(animName);
|
|
|
+ //更新状态配置表格当前状态的特效下拉选项
|
|
|
+ if(ui->listWidget_status->currentItem() != nullptr){
|
|
|
+ int rowNum = ui->tableWidget_event->rowCount();
|
|
|
+ for(int i=0;i<rowNum;i++){
|
|
|
+ QComboBox *effect = qobject_cast<QComboBox*>(ui->tableWidget_event->cellWidget(i,3));
|
|
|
+ effect->addItem(animName);
|
|
|
+ }
|
|
|
+ }
|
|
|
}
|
|
|
|
|
|
|
|
@@ -399,9 +532,10 @@ void MainWindow::on_pushButton_delAnimation_clicked()
|
|
|
}
|
|
|
ui->tableWidget_animation->removeRow(curRow);
|
|
|
//更新动画相关的下拉选项
|
|
|
+ updateAnimComboBox(animName);
|
|
|
ui->comboBox_initAnim->removeItem(ui->comboBox_initAnim->findText(animName));
|
|
|
ui->comboBox_clickAnim->removeItem(ui->comboBox_clickAnim->findText(animName));
|
|
|
- ui->comboBox_animation->removeItem(ui->comboBox_clickAnim->findText(animName));
|
|
|
+ ui->comboBox_animation->removeItem(ui->comboBox_animation->findText(animName));
|
|
|
}
|
|
|
}
|
|
|
|
|
@@ -422,9 +556,10 @@ void MainWindow::on_tableWidget_animation_itemChanged(QTableWidgetItem *item)
|
|
|
}
|
|
|
std::cout<<"名字发生改变,新名字:"<<qPrintable(newName)<<std::endl;
|
|
|
//更新动画相关的下拉选项
|
|
|
+ updateAnimComboBox(animVec[row].name);
|
|
|
ui->comboBox_initAnim->removeItem(ui->comboBox_initAnim->findText(animVec[row].name));
|
|
|
ui->comboBox_clickAnim->removeItem(ui->comboBox_clickAnim->findText(animVec[row].name));
|
|
|
- ui->comboBox_animation->removeItem(ui->comboBox_clickAnim->findText(animVec[row].name));
|
|
|
+ ui->comboBox_animation->removeItem(ui->comboBox_animation->findText(animVec[row].name));
|
|
|
ui->comboBox_initAnim->addItem(newName);
|
|
|
ui->comboBox_clickAnim->addItem(newName);
|
|
|
ui->comboBox_animation->addItem(newName);
|
|
@@ -435,8 +570,9 @@ void MainWindow::on_tableWidget_animation_itemChanged(QTableWidgetItem *item)
|
|
|
std::cout<<"动画资源发生改变,新资源名:"<<qPrintable(ui->tableWidget_animation->item(row,1)->text())<<std::endl;
|
|
|
}
|
|
|
else{
|
|
|
+ bool ok;double a = ui->tableWidget_animation->item(row,3)->text().toDouble(&ok);
|
|
|
int zOrder = ui->tableWidget_animation->item(row,3)->text().toInt();
|
|
|
- if(zOrder<0 || zOrder>100000){
|
|
|
+ if(!ok || zOrder<0 || zOrder>100000){
|
|
|
QMessageBox::critical(this,"警告","z-Order值超出范围!");
|
|
|
ui->tableWidget_animation->item(row,3)->setText(animVec[row].zOrder);
|
|
|
return;
|
|
@@ -459,7 +595,7 @@ void MainWindow::on_pushButton_addCollectAnim_clicked()
|
|
|
collAnimName = "collAnim" + QString::number(id++);
|
|
|
}
|
|
|
ui->listWidget_collectAnim->addItem(new QListWidgetItem(collAnimName));
|
|
|
- ElemPropertyData::CollAnim collAnim;collAnim.name = collAnimName;
|
|
|
+ ElemPropertyData::CollAnim collAnim(collAnimName);
|
|
|
elem->collAnim.push_back(collAnim);
|
|
|
ui->comboBox_collectAnimation->addItem(collAnimName);
|
|
|
// ui->listWidget_collectAnim->item(ui->listWidget_collectAnim->count() - 1)->setSelected(true); // 设置选中
|
|
@@ -476,10 +612,11 @@ void MainWindow::on_pushButton_delCollectAnim_clicked()
|
|
|
QVector<ElemPropertyData::CollAnim> &collAnimVec = elem->collAnim;
|
|
|
for(int i=0;i<collAnimVec.size();i++){
|
|
|
if(collAnimVec[i].name == delName){
|
|
|
- elem->collAnim.remove(i);
|
|
|
+ collAnimVec.remove(i);
|
|
|
}
|
|
|
}
|
|
|
delete ui->listWidget_collectAnim->takeItem(ui->listWidget_collectAnim->currentRow());
|
|
|
+ updateCollAnimComboBox(delName);
|
|
|
ui->comboBox_collectAnimation->removeItem(ui->comboBox_collectAnimation->findText(delName));
|
|
|
}
|
|
|
}
|
|
@@ -497,6 +634,7 @@ void MainWindow::on_listWidget_collectAnim_itemDoubleClicked(QListWidgetItem *it
|
|
|
QMessageBox::critical(this,"警告","该收集动画名已存在!");
|
|
|
return;
|
|
|
}
|
|
|
+ updateCollAnimComboBox(item->text());
|
|
|
ui->comboBox_collectAnimation->removeItem(ui->comboBox_collectAnimation->findText(item->text()));
|
|
|
ui->comboBox_collectAnimation->addItem(name);
|
|
|
elem->collAnim[elem->getCollAnimIndex(item->text())].name = name;
|
|
@@ -546,7 +684,6 @@ void MainWindow::setCollectAnimUi(QString collectAnimName)
|
|
|
ui->lineEdit_node->setText(collAnimData.node);
|
|
|
ui->lineEdit_shadow->setText(collAnimData.shadow);
|
|
|
std::cout<<qPrintable(collAnimData.anim)<<"\t"<<qPrintable(collAnimData.type)<<std::endl;
|
|
|
- //TODO: 使用comboBox的index来修改当前要显示的值
|
|
|
ui->comboBox_animationType->setCurrentIndex(1);
|
|
|
int index = ui->comboBox_animation->findText(collAnimData.anim);
|
|
|
if(index == -1) index = 0;
|
|
@@ -569,7 +706,7 @@ void MainWindow::on_pushButton_genTemp_clicked()
|
|
|
ElemPropertyData* elem = elements[ui->listWidget_elem->currentItem()->text()];
|
|
|
for(int i=0;i<elem->maxLayer.toInt();i++){
|
|
|
ui->listWidget_status->addItem(QString::number(i));
|
|
|
- ElemPropertyData::StatusConfig status;status.statusValue = QString::number(i);
|
|
|
+ ElemPropertyData::StatusConfig status(QString::number(i));
|
|
|
elem->statusConfig.push_back(status);
|
|
|
}
|
|
|
}
|
|
@@ -588,7 +725,7 @@ void MainWindow::on_pushButton_addStatus_clicked()
|
|
|
}
|
|
|
if(!statusName.isEmpty()){
|
|
|
ui->listWidget_status->addItem(statusName);
|
|
|
- ElemPropertyData::StatusConfig status;status.statusValue = statusName;
|
|
|
+ ElemPropertyData::StatusConfig status(statusName);
|
|
|
elem->statusConfig.push_back(status);
|
|
|
}
|
|
|
}
|
|
@@ -651,7 +788,7 @@ void MainWindow::on_pushButton_addContainer_clicked()
|
|
|
poolName = "pool" + QString::number(id++);
|
|
|
}
|
|
|
ui->listWidget_pool->addItem(new QListWidgetItem(poolName));
|
|
|
- ElemPropertyData::ContainerConfig container;container.poolName = poolName;
|
|
|
+ ElemPropertyData::ContainerConfig container(poolName);
|
|
|
elem->container.push_back(container);
|
|
|
//子元素下拉列表添加可选项
|
|
|
int rowNum = ui->tableWidget_childElem->rowCount();
|
|
@@ -668,15 +805,16 @@ void MainWindow::on_pushButton_delContainer_clicked()
|
|
|
ElemPropertyData* elem = elements[ui->listWidget_elem->currentItem()->text()];
|
|
|
QMessageBox::StandardButton reply = QMessageBox::question(this,"删除状态","确定要删除此容器吗?");
|
|
|
if(reply == QMessageBox::Yes){
|
|
|
- QString delPollName = ui->listWidget_pool->currentItem()->text();
|
|
|
- int index = elem->getPoolIndex(delPollName);
|
|
|
+ QString delPoolName = ui->listWidget_pool->currentItem()->text();
|
|
|
+ int index = elem->getPoolIndex(delPoolName);
|
|
|
elem->container.remove(index);
|
|
|
delete ui->listWidget_pool->takeItem(ui->listWidget_pool->currentRow());
|
|
|
- //子元素下拉列表添加可选项
|
|
|
+ //子元素下拉列表删除可选项
|
|
|
int rowNum = ui->tableWidget_childElem->rowCount();
|
|
|
for(int i=0;i<rowNum;i++){
|
|
|
QComboBox *containers = qobject_cast<QComboBox*>(ui->tableWidget_childElem->cellWidget(i,1));
|
|
|
- containers->removeItem(containers->findText(delPollName));
|
|
|
+ if(elem->childElem[i].container == delPoolName) containers->setCurrentIndex(0);
|
|
|
+ containers->removeItem(containers->findText(delPoolName));
|
|
|
}
|
|
|
}
|
|
|
}
|
|
@@ -697,11 +835,13 @@ void MainWindow::on_listWidget_pool_itemDoubleClicked(QListWidgetItem *item)
|
|
|
return;
|
|
|
}
|
|
|
int index = elem->getPoolIndex(item->text());
|
|
|
- //子元素下拉列表添加可选项
|
|
|
+ //子元素下拉列表可选项改名
|
|
|
int rowNum = ui->tableWidget_childElem->rowCount();
|
|
|
for(int i=0;i<rowNum;i++){
|
|
|
QComboBox *containers = qobject_cast<QComboBox*>(ui->tableWidget_childElem->cellWidget(i,1));
|
|
|
+ if(elem->childElem[i].container == elem->container[index].poolName) containers->setCurrentIndex(0);
|
|
|
containers->removeItem(containers->findText(elem->container[index].poolName));
|
|
|
+ containers->addItem(name);
|
|
|
}
|
|
|
elem->container[index].poolName = name;
|
|
|
item->setText(name);
|
|
@@ -741,7 +881,7 @@ void MainWindow::on_pushButton_addKey_clicked()
|
|
|
}
|
|
|
ui->tableWidget_containerPool->setItem(rowNum,3,new QTableWidgetItem("0"));
|
|
|
int index = elem->getPoolIndex(ui->listWidget_pool->currentItem()->text());
|
|
|
- ElemPropertyData::ContainTable containTable;containTable.key = keyName;
|
|
|
+ ElemPropertyData::ContainTable containTable(keyName);
|
|
|
elem->container[index].table.push_back(containTable);
|
|
|
}
|
|
|
|
|
@@ -775,17 +915,10 @@ void MainWindow::setPoolUi(QString poolName)
|
|
|
for(int i=0;i<rowNum;i++){
|
|
|
ui->tableWidget_containerPool->removeRow(0);
|
|
|
}
|
|
|
- //TODO: 设置comboBox选项
|
|
|
-
|
|
|
- int rowCnt = ui->tableWidget_containerPool->rowCount();
|
|
|
- for(int i=0;i<rowCnt;i++){
|
|
|
- ui->tableWidget_containerPool->removeRow(0);
|
|
|
- }
|
|
|
for(const auto &i:poolData.table){
|
|
|
int rowNum = ui->tableWidget_containerPool->rowCount();
|
|
|
ui->tableWidget_containerPool->insertRow(rowNum);
|
|
|
ui->tableWidget_containerPool->setItem(rowNum,0,new QTableWidgetItem(i.key));
|
|
|
- //TODO: 资源和时间线所在单元格替换数据
|
|
|
QTableWidgetItem* res = new QTableWidgetItem(getFileName(i.res));
|
|
|
// 此单元格不可编辑
|
|
|
res->setFlags(res->flags() & ~Qt::ItemIsEditable);
|
|
@@ -861,33 +994,33 @@ void MainWindow::on_tableWidget_containerPool_itemChanged(QTableWidgetItem *item
|
|
|
}
|
|
|
}
|
|
|
|
|
|
-//切换tab时更新comboBox(或者每一次添加删除动画就更新一下该元素的comboBox?这样也更方便进行逻辑检查)
|
|
|
-void MainWindow::on_tabWidget_currentChanged(int index)
|
|
|
-{
|
|
|
- if(ui->listWidget_elem->currentItem() == nullptr) return;
|
|
|
- QVector<ElemPropertyData::StatusEffect> &animVec = elements[ui->listWidget_elem->currentItem()->text()]->statusEffect;
|
|
|
- //如果目前展示的是收集动画,加载状态与效果配置中的动画到收集动画的动画下拉列表中
|
|
|
- //目前这种方法较为暴力,后期可以视动画数量进行优化
|
|
|
- if(index == 1){
|
|
|
- ui->comboBox_animation->clear();
|
|
|
- for(const auto &i:animVec){
|
|
|
- ui->comboBox_animation->addItem(i.name);
|
|
|
- }
|
|
|
- }
|
|
|
- //如果目前展示的是状态配置,加载相应状态效果配置动画和收集动画
|
|
|
- else if(index == 2){
|
|
|
- ui->comboBox_initAnim->clear();
|
|
|
- ui->comboBox_clickAnim->clear();
|
|
|
- ui->comboBox_collectAnimation->clear();
|
|
|
- for(const auto &i:animVec){
|
|
|
- ui->comboBox_initAnim->addItem(i.name);
|
|
|
- ui->comboBox_clickAnim->addItem(i.name);
|
|
|
- }
|
|
|
- for(auto i:elements[ui->listWidget_elem->currentItem()->text()]->collAnim){
|
|
|
- ui->comboBox_collectAnimation->addItem(i.name);
|
|
|
- }
|
|
|
- }
|
|
|
-}
|
|
|
+////切换tab时更新comboBox(或者每一次添加删除动画就更新一下该元素的comboBox?这样也更方便进行逻辑检查)
|
|
|
+//void MainWindow::on_tabWidget_currentChanged(int index)
|
|
|
+//{
|
|
|
+// if(ui->listWidget_elem->currentItem() == nullptr) return;
|
|
|
+// QVector<ElemPropertyData::StatusEffect> &animVec = elements[ui->listWidget_elem->currentItem()->text()]->statusEffect;
|
|
|
+// //如果目前展示的是收集动画,加载状态与效果配置中的动画到收集动画的动画下拉列表中
|
|
|
+// //目前这种方法较为暴力,后期可以视动画数量进行优化
|
|
|
+// if(index == 1){
|
|
|
+// ui->comboBox_animation->clear();
|
|
|
+// for(const auto &i:animVec){
|
|
|
+// ui->comboBox_animation->addItem(i.name);
|
|
|
+// }
|
|
|
+// }
|
|
|
+// //如果目前展示的是状态配置,加载相应状态效果配置动画和收集动画
|
|
|
+// else if(index == 2){
|
|
|
+// ui->comboBox_initAnim->clear();
|
|
|
+// ui->comboBox_clickAnim->clear();
|
|
|
+// ui->comboBox_collectAnimation->clear();
|
|
|
+// for(const auto &i:animVec){
|
|
|
+// ui->comboBox_initAnim->addItem(i.name);
|
|
|
+// ui->comboBox_clickAnim->addItem(i.name);
|
|
|
+// }
|
|
|
+// for(auto i:elements[ui->listWidget_elem->currentItem()->text()]->collAnim){
|
|
|
+// ui->comboBox_collectAnimation->addItem(i.name);
|
|
|
+// }
|
|
|
+// }
|
|
|
+//}
|
|
|
|
|
|
void MainWindow::on_pushButton_addChildElem_clicked()
|
|
|
{
|
|
@@ -905,7 +1038,7 @@ void MainWindow::on_pushButton_addChildElem_clicked()
|
|
|
}
|
|
|
ui->tableWidget_childElem->setItem(rowNum,0,new QTableWidgetItem(childElemName));
|
|
|
ui->tableWidget_childElem->setCellWidget(rowNum,1,createPoolBox("尚未选择池子"));
|
|
|
- elem->childElem.push_back({childElemName,"尚未选择池子"});
|
|
|
+ elem->childElem.push_back(ElemPropertyData::ChildElem(childElemName));
|
|
|
}
|
|
|
|
|
|
void MainWindow::on_pushButton_delChildElem_clicked()
|
|
@@ -1004,12 +1137,12 @@ void MainWindow::on_checkBox_needCollect_stateChanged(int arg1)
|
|
|
|
|
|
void MainWindow::on_lineEdit_collectionType_editingFinished()
|
|
|
{
|
|
|
-// if(ui->lineEdit_collectionType->hasFocus()) return;
|
|
|
if(ui->listWidget_elem->currentItem() == nullptr || ui->listWidget_status->currentItem() == nullptr) return;
|
|
|
ElemPropertyData* elem = elements[ui->listWidget_elem->currentItem()->text()];
|
|
|
int index = elem->getStatusValIndex(ui->listWidget_status->currentItem()->text());
|
|
|
- ElemPropertyData::StatusConfig data = elem->statusConfig[index];
|
|
|
+ ElemPropertyData::StatusConfig &data = elem->statusConfig[index];
|
|
|
data.collTargetType = ui->lineEdit_collectionType->text();
|
|
|
+ std::cout<<"收集的目标类型"<<qPrintable(data.collTargetType)<<std::endl;
|
|
|
}
|
|
|
|
|
|
|
|
@@ -1024,23 +1157,16 @@ void MainWindow::on_pushButton_addEvent_clicked()
|
|
|
int index = elem->getStatusValIndex(ui->listWidget_status->currentItem()->text());
|
|
|
elem->statusConfig[index].eventConfig.push_back(event);
|
|
|
ui->tableWidget_event->setCellWidget(rowNum,0,new QComboBox);
|
|
|
- ui->tableWidget_event->setCellWidget(rowNum,1,new QCheckBox);
|
|
|
- ui->tableWidget_event->setCellWidget(rowNum,3,new QComboBox);
|
|
|
- ui->tableWidget_event->setCellWidget(rowNum,4,new QCheckBox);
|
|
|
+ ui->tableWidget_event->setCellWidget(rowNum,1,createCheckBox(false));
|
|
|
+ ui->tableWidget_event->setCellWidget(rowNum,3,createEffectBox("尚未选择动画"));
|
|
|
+ ui->tableWidget_event->setCellWidget(rowNum,4,createCheckBox(false));
|
|
|
//设置触发动作
|
|
|
- QComboBox* actions = new QComboBox;
|
|
|
- QPushButton* setAction = new QPushButton("设置");
|
|
|
- QHBoxLayout *layout = new QHBoxLayout();
|
|
|
- QWidget *triggerAction = new QWidget;
|
|
|
- layout->addWidget(actions);
|
|
|
- layout->addWidget(setAction);
|
|
|
- triggerAction->setLayout(layout);
|
|
|
- layout->setMargin(0);
|
|
|
- ui->tableWidget_event->setCellWidget(rowNum,5,triggerAction);
|
|
|
+ ui->tableWidget_event->setCellWidget(rowNum,5,createTriggerAction());
|
|
|
}
|
|
|
|
|
|
QString MainWindow::getFileName(QString filePath)
|
|
|
{
|
|
|
+ if(filePath == "双击添加资源文件") return filePath;
|
|
|
int size = filePath.count();
|
|
|
int pos = 0;
|
|
|
for(int i=size-1;i>=0;i--){
|
|
@@ -1056,4 +1182,123 @@ QString MainWindow::getFileName(QString filePath)
|
|
|
return fileName;
|
|
|
}
|
|
|
|
|
|
+void MainWindow::on_listWidget_status_currentItemChanged(QListWidgetItem *current, QListWidgetItem *previous)
|
|
|
+{
|
|
|
+ if(ui->listWidget_elem->currentItem() == nullptr || current == nullptr) return;
|
|
|
+ ElemPropertyData* elem = elements[ui->listWidget_elem->currentItem()->text()];
|
|
|
+ int index = elem->getStatusValIndex(current->text());
|
|
|
+ ElemPropertyData::StatusConfig statusData = elem->statusConfig[index];
|
|
|
+ int comboIndex;
|
|
|
+ //初始化动画
|
|
|
+ comboIndex = ui->comboBox_initAnim->findText(statusData.initAnim);
|
|
|
+ if(comboIndex == -1) comboIndex = 0;
|
|
|
+ ui->comboBox_initAnim->setCurrentIndex(comboIndex);
|
|
|
+ //点击动画
|
|
|
+ comboIndex = ui->comboBox_clickAnim->findText(statusData.clickAnim);
|
|
|
+ if(comboIndex == -1) comboIndex = 0;
|
|
|
+ ui->comboBox_clickAnim->setCurrentIndex(comboIndex);
|
|
|
+ //收集动画
|
|
|
+ comboIndex = ui->comboBox_collectAnimation->findText(statusData.collAnim);
|
|
|
+ if(comboIndex == -1) comboIndex = 0;
|
|
|
+ ui->comboBox_collectAnimation->setCurrentIndex(comboIndex);
|
|
|
+ //多重打击
|
|
|
+ if(statusData.multiHit) ui->checkBox_multiHit->setCheckState(Qt::Checked);
|
|
|
+ else ui->checkBox_multiHit->setCheckState(Qt::Unchecked);
|
|
|
+ //可掉落
|
|
|
+ if(statusData.dropable) ui->checkBox_multiHit->setCheckState(Qt::Checked);
|
|
|
+ else ui->checkBox_dropable->setCheckState(Qt::Unchecked);
|
|
|
+ //是否需要收集
|
|
|
+ //TODO: 加载收集动画数据
|
|
|
+ ui->lineEdit_collectionType->clear();
|
|
|
+ if(statusData.needCollect){
|
|
|
+ ui->checkBox_needCollect->setCheckState(Qt::Checked);
|
|
|
+ ui->lineEdit_collectionType->setReadOnly(false);
|
|
|
+ std::cout<<"收集的目标类型"<<qPrintable(statusData.collTargetType)<<std::endl;
|
|
|
+ ui->lineEdit_collectionType->setText(statusData.collTargetType);
|
|
|
+ }
|
|
|
+ else{
|
|
|
+ ui->checkBox_needCollect->setCheckState(Qt::Unchecked);
|
|
|
+ ui->lineEdit_collectionType->setReadOnly(true);
|
|
|
+ }
|
|
|
+ //事件配置
|
|
|
+ //TODO:设置事件表格下拉项
|
|
|
+ int rowNum = ui->tableWidget_event->rowCount();
|
|
|
+ for(int i=0;i<rowNum;i++){
|
|
|
+ ui->tableWidget_event->removeRow(0);
|
|
|
+ }
|
|
|
+ for(const auto &i:statusData.eventConfig){
|
|
|
+ int rowNum = ui->tableWidget_event->rowCount();
|
|
|
+ ui->tableWidget_event->insertRow(rowNum);
|
|
|
+ //事件名称
|
|
|
+ ui->tableWidget_event->setCellWidget(rowNum,0,new QComboBox);
|
|
|
+ //是否需要颜色一致
|
|
|
+ ui->tableWidget_event->setCellWidget(rowNum,1,createCheckBox(i.consisColor));
|
|
|
+ //tableWidget_event
|
|
|
+ ui->tableWidget_event->setItem(rowNum,2,new QTableWidgetItem(i.changeMagnitude));
|
|
|
+ //特效
|
|
|
+ ui->tableWidget_event->setCellWidget(rowNum,3,createEffectBox(i.specialEffect));
|
|
|
+ //根据格子数量消除
|
|
|
+ ui->tableWidget_event->setCellWidget(rowNum,4,createCheckBox(i.elimATLattices));
|
|
|
+ //触发动作
|
|
|
+ ui->tableWidget_event->setCellWidget(rowNum,5,createTriggerAction());
|
|
|
+ }
|
|
|
+}
|
|
|
+
|
|
|
+void MainWindow::on_tableWidget_event_cellDoubleClicked(int row, int column)
|
|
|
+{
|
|
|
+ if(ui->listWidget_elem->currentItem() == nullptr || ui->listWidget_status->currentItem() == nullptr) return;
|
|
|
+ if(column == 2) eventTableItemChanged = true;
|
|
|
+}
|
|
|
+
|
|
|
+//状态变化幅度合法性检查及数据保存
|
|
|
+void MainWindow::on_tableWidget_event_itemChanged(QTableWidgetItem *item)
|
|
|
+{
|
|
|
+ if(ui->listWidget_elem->currentItem() == nullptr || ui->listWidget_status->currentItem() == nullptr) return;
|
|
|
+ if(!eventTableItemChanged) return;
|
|
|
+ eventTableItemChanged = false;
|
|
|
+ int column = item->column();
|
|
|
+ int row = item->row();
|
|
|
+ ElemPropertyData* elem = elements[ui->listWidget_elem->currentItem()->text()];
|
|
|
+ int index = elem->getStatusValIndex(ui->listWidget_status->currentItem()->text());
|
|
|
+ QVector<ElemPropertyData::EventConfig> &eventVec = elem->statusConfig[index].eventConfig;
|
|
|
+ if(column == 2){
|
|
|
+ bool ok;double a = item->text().toDouble(&ok);
|
|
|
+ int val = item->text().toInt();
|
|
|
+ if(!ok || val<0){
|
|
|
+ QMessageBox::critical(this,"警告","状态变化幅度是大于0的数字");
|
|
|
+ ui->tableWidget_event->item(row,2)->setText(QString::number(eventVec[row].changeMagnitude));
|
|
|
+ return;
|
|
|
+ }
|
|
|
+ std::cout<<"状态变化幅度发生改变,新值为:"<<val<<std::endl;
|
|
|
+ eventVec[row].changeMagnitude = val;
|
|
|
+ }
|
|
|
+}
|
|
|
+
|
|
|
+
|
|
|
+void MainWindow::on_comboBox_initAnim_currentTextChanged(const QString &arg1)
|
|
|
+{
|
|
|
+ if(ui->listWidget_elem->currentItem() == nullptr || ui->listWidget_status->currentItem() == nullptr) return;
|
|
|
+ std::cout<<"初始化动画:"<<qPrintable(arg1)<<std::endl;
|
|
|
+ ElemPropertyData* elem = elements[ui->listWidget_elem->currentItem()->text()];
|
|
|
+ int index = elem->getStatusValIndex(ui->listWidget_status->currentItem()->text());
|
|
|
+ elem->statusConfig[index].initAnim = arg1;
|
|
|
+}
|
|
|
+
|
|
|
+
|
|
|
+void MainWindow::on_comboBox_clickAnim_currentTextChanged(const QString &arg1)
|
|
|
+{
|
|
|
+ if(ui->listWidget_elem->currentItem() == nullptr || ui->listWidget_status->currentItem() == nullptr) return;
|
|
|
+ ElemPropertyData* elem = elements[ui->listWidget_elem->currentItem()->text()];
|
|
|
+ int index = elem->getStatusValIndex(ui->listWidget_status->currentItem()->text());
|
|
|
+ elem->statusConfig[index].clickAnim = arg1;
|
|
|
+}
|
|
|
+
|
|
|
+
|
|
|
+void MainWindow::on_comboBox_collectAnimation_currentTextChanged(const QString &arg1)
|
|
|
+{
|
|
|
+ if(ui->listWidget_elem->currentItem() == nullptr || ui->listWidget_status->currentItem() == nullptr) return;
|
|
|
+ ElemPropertyData* elem = elements[ui->listWidget_elem->currentItem()->text()];
|
|
|
+ int index = elem->getStatusValIndex(ui->listWidget_status->currentItem()->text());
|
|
|
+ elem->statusConfig[index].collAnim = arg1;
|
|
|
+}
|
|
|
|