diff --git a/ui/designer/tabs/tabTools/tabTools_StepCalculator.ui b/ui/designer/tabs/tabTools/tabTools_StepCalculator.ui
index 828df10..6ec3853 100644
--- a/ui/designer/tabs/tabTools/tabTools_StepCalculator.ui
+++ b/ui/designer/tabs/tabTools/tabTools_StepCalculator.ui
@@ -6,7 +6,7 @@
0
0
- 615
+ 840
549
@@ -14,38 +14,6 @@
TabTools_StepCalculator
- -
-
-
-
-
-
-
- partnerStepValueLabel
-
-
-
- -
-
-
-
- 0
- 0
-
-
-
- 1000.000000000000000
-
-
- 1.000000000000000
-
-
- QAbstractSpinBox::DefaultStepType
-
-
-
-
-
-
-
@@ -68,7 +36,7 @@
- -
+
-
QPushButton{background-color: transparent}
@@ -84,7 +52,7 @@
- -
+
-
QPushButton{background-color: transparent}
@@ -100,32 +68,13 @@
- -
-
-
- false
-
-
- QPushButton{background-color: transparent}
-
-
- Beyond placeholder
-
-
- false
-
-
- true
-
-
-
-
-
+
0
0
@@ -239,6 +188,151 @@
+ -
+
+
+ partner.title
+
+
+
-
+
+
-
+
+
+ partner.stepValueLabel
+
+
+
+ -
+
+
+
+ 0
+ 0
+
+
+
+ 1000.000000000000000
+
+
+ 1.000000000000000
+
+
+ QAbstractSpinBox::DefaultStepType
+
+
+
+
+
+ -
+
+
+
+ 0
+ 0
+
+
+
+ partner.skill.title
+
+
+ true
+
+
+ false
+
+
+
-
+
+
+ Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter
+
+
-
+
+
+ partner.skill.stepBonus
+
+
+
+ -
+
+
+ partner.skill.finalMultiplier
+
+
+
+ -
+
+
+ 1.0
+
+
+ 1.0
+
+
+
+ -
+
+
+ +0.0
+
+
+ +0.0
+
+
+
+
+
+ -
+
+
+ partner.skill.presets
+
+
+
-
+
+
+ partner.skill.presets.awakenedEto
+
+
+
+ -
+
+
+ partner.skill.presets.awakenedIlith
+
+
+
+ -
+
+
+ partner.skill.presets.awakenedLuna
+
+
+
+ -
+
+
+ partner.skill.presets.amaneBelowEx
+
+
+
+ -
+
+
+ partner.skill.presets.maya
+
+
+
+
+
+
+
+
+
+
+
+
@@ -254,45 +348,68 @@
-
- calculation
+ calculate.toStep
-
-
-
-
-
-
-
-
-
- playResultLabel
-
-
-
- -
-
-
-
- 0
- 0
-
-
-
- 3
-
-
- 100.000000000000000
-
-
- 0.100000000000000
-
-
-
-
+
+
+ Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter
+
+ -
+
+
+
+ 0
+ 0
+
+
+
+ 3
+
+
+ 100.000000000000000
+
+
+ 0.100000000000000
+
- -
-
+
-
+
- calculatePlayResultFromScoreButton
+ calculate.toStep.playResultLabel
+
+
+
+ -
+
+
+
+ 0
+ 0
+
+
+
+ calculate.toStep.resultLabel
+
+
+
+ -
+
+
+
+ 0
+ 0
+
+
+
+ ...
+
+
+
+ -
+
+
+ calculate.toStep.calculatePlayResultFromScoreButton
@@ -302,30 +419,53 @@
-
- inverseCalculation
+ calculate.fromStep
-
-
-
-
-
-
-
-
-
- targetStep
-
-
-
- -
-
-
-
- 0
- 0
-
-
-
-
-
+
+
+ Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter
+
+ -
+
+
+ calculate.fromStep.targetStepLabel
+
+
+
+ -
+
+
+
+ 0
+ 0
+
+
+
+
+ -
+
+
+
+ 0
+ 0
+
+
+
+ calculate.fromStep.resultLabel
+
+
+
+ -
+
+
+
+ 0
+ 0
+
+
+
+ ...
+
diff --git a/ui/designer/tabs/tabTools/tabTools_StepCalculator_ui.py b/ui/designer/tabs/tabTools/tabTools_StepCalculator_ui.py
index 2965be7..6693313 100644
--- a/ui/designer/tabs/tabTools/tabTools_StepCalculator_ui.py
+++ b/ui/designer/tabs/tabTools/tabTools_StepCalculator_ui.py
@@ -16,43 +16,18 @@ from PySide6.QtGui import (QBrush, QColor, QConicalGradient, QCursor,
QImage, QKeySequence, QLinearGradient, QPainter,
QPalette, QPixmap, QRadialGradient, QTransform)
from PySide6.QtWidgets import (QAbstractSpinBox, QApplication, QCheckBox, QDoubleSpinBox,
- QGridLayout, QGroupBox, QHBoxLayout, QLabel,
- QPushButton, QRadioButton, QSizePolicy, QStackedWidget,
- QVBoxLayout, QWidget)
+ QFormLayout, QGridLayout, QGroupBox, QHBoxLayout,
+ QLabel, QLineEdit, QPushButton, QRadioButton,
+ QSizePolicy, QStackedWidget, QVBoxLayout, QWidget)
class Ui_TabTools_StepCalculator(object):
def setupUi(self, TabTools_StepCalculator):
if not TabTools_StepCalculator.objectName():
TabTools_StepCalculator.setObjectName(u"TabTools_StepCalculator")
- TabTools_StepCalculator.resize(615, 549)
+ TabTools_StepCalculator.resize(840, 549)
TabTools_StepCalculator.setWindowTitle(u"TabTools_StepCalculator")
self.verticalLayout_3 = QVBoxLayout(TabTools_StepCalculator)
self.verticalLayout_3.setObjectName(u"verticalLayout_3")
- self.widget_3 = QWidget(TabTools_StepCalculator)
- self.widget_3.setObjectName(u"widget_3")
- self.gridLayout = QGridLayout(self.widget_3)
- self.gridLayout.setObjectName(u"gridLayout")
- self.label = QLabel(self.widget_3)
- self.label.setObjectName(u"label")
-
- self.gridLayout.addWidget(self.label, 0, 0, 1, 1)
-
- self.partnerStepValueSpinBox = QDoubleSpinBox(self.widget_3)
- self.partnerStepValueSpinBox.setObjectName(u"partnerStepValueSpinBox")
- sizePolicy = QSizePolicy(QSizePolicy.Expanding, QSizePolicy.Fixed)
- sizePolicy.setHorizontalStretch(0)
- sizePolicy.setVerticalStretch(0)
- sizePolicy.setHeightForWidth(self.partnerStepValueSpinBox.sizePolicy().hasHeightForWidth())
- self.partnerStepValueSpinBox.setSizePolicy(sizePolicy)
- self.partnerStepValueSpinBox.setMaximum(1000.000000000000000)
- self.partnerStepValueSpinBox.setSingleStep(1.000000000000000)
- self.partnerStepValueSpinBox.setStepType(QAbstractSpinBox.DefaultStepType)
-
- self.gridLayout.addWidget(self.partnerStepValueSpinBox, 0, 1, 1, 1)
-
-
- self.verticalLayout_3.addWidget(self.widget_3)
-
self.mapTypeWidget = QWidget(TabTools_StepCalculator)
self.mapTypeWidget.setObjectName(u"mapTypeWidget")
self.horizontalLayout = QHBoxLayout(self.mapTypeWidget)
@@ -75,7 +50,7 @@ class Ui_TabTools_StepCalculator(object):
self.mapTypePlayRadioButton.setCheckable(True)
self.mapTypePlayRadioButton.setAutoExclusive(True)
- self.gridLayout_2.addWidget(self.mapTypePlayRadioButton, 1, 0, 1, 1)
+ self.gridLayout_2.addWidget(self.mapTypePlayRadioButton, 2, 0, 1, 1)
self.mapTypeLegacyPlayPlusRadioButton = QPushButton(self.mapTypeSelectorWidget)
self.mapTypeLegacyPlayPlusRadioButton.setObjectName(u"mapTypeLegacyPlayPlusRadioButton")
@@ -83,28 +58,18 @@ class Ui_TabTools_StepCalculator(object):
self.mapTypeLegacyPlayPlusRadioButton.setCheckable(True)
self.mapTypeLegacyPlayPlusRadioButton.setAutoExclusive(True)
- self.gridLayout_2.addWidget(self.mapTypeLegacyPlayPlusRadioButton, 0, 1, 1, 1)
-
- self.pushButton_4 = QPushButton(self.mapTypeSelectorWidget)
- self.pushButton_4.setObjectName(u"pushButton_4")
- self.pushButton_4.setEnabled(False)
- self.pushButton_4.setStyleSheet(u"QPushButton{background-color: transparent}")
- self.pushButton_4.setText(u"Beyond placeholder")
- self.pushButton_4.setCheckable(False)
- self.pushButton_4.setAutoExclusive(True)
-
- self.gridLayout_2.addWidget(self.pushButton_4, 1, 1, 1, 1)
+ self.gridLayout_2.addWidget(self.mapTypeLegacyPlayPlusRadioButton, 1, 0, 1, 1)
self.horizontalLayout.addWidget(self.mapTypeSelectorWidget)
self.stackedWidget = QStackedWidget(self.mapTypeWidget)
self.stackedWidget.setObjectName(u"stackedWidget")
- sizePolicy1 = QSizePolicy(QSizePolicy.Expanding, QSizePolicy.Preferred)
- sizePolicy1.setHorizontalStretch(0)
- sizePolicy1.setVerticalStretch(0)
- sizePolicy1.setHeightForWidth(self.stackedWidget.sizePolicy().hasHeightForWidth())
- self.stackedWidget.setSizePolicy(sizePolicy1)
+ sizePolicy = QSizePolicy(QSizePolicy.Preferred, QSizePolicy.Preferred)
+ sizePolicy.setHorizontalStretch(0)
+ sizePolicy.setVerticalStretch(0)
+ sizePolicy.setHeightForWidth(self.stackedWidget.sizePolicy().hasHeightForWidth())
+ self.stackedWidget.setSizePolicy(sizePolicy)
self.legacyPlay = QWidget()
self.legacyPlay.setObjectName(u"legacyPlay")
self.verticalLayout = QVBoxLayout(self.legacyPlay)
@@ -121,11 +86,11 @@ class Ui_TabTools_StepCalculator(object):
self.verticalLayout_2.setObjectName(u"verticalLayout_2")
self.widget = QWidget(self.legacyPlayPlus)
self.widget.setObjectName(u"widget")
- sizePolicy2 = QSizePolicy(QSizePolicy.Maximum, QSizePolicy.Preferred)
- sizePolicy2.setHorizontalStretch(0)
- sizePolicy2.setVerticalStretch(0)
- sizePolicy2.setHeightForWidth(self.widget.sizePolicy().hasHeightForWidth())
- self.widget.setSizePolicy(sizePolicy2)
+ sizePolicy1 = QSizePolicy(QSizePolicy.Maximum, QSizePolicy.Preferred)
+ sizePolicy1.setHorizontalStretch(0)
+ sizePolicy1.setVerticalStretch(0)
+ sizePolicy1.setHeightForWidth(self.widget.sizePolicy().hasHeightForWidth())
+ self.widget.setSizePolicy(sizePolicy1)
self.horizontalLayout_2 = QHBoxLayout(self.widget)
self.horizontalLayout_2.setObjectName(u"horizontalLayout_2")
self.legacyPlayPlus_x2StaminaRadioButton = QRadioButton(self.widget)
@@ -151,8 +116,8 @@ class Ui_TabTools_StepCalculator(object):
self.legacyPlayPlus_useFragmentsGroupBox = QGroupBox(self.legacyPlayPlus)
self.legacyPlayPlus_useFragmentsGroupBox.setObjectName(u"legacyPlayPlus_useFragmentsGroupBox")
- sizePolicy2.setHeightForWidth(self.legacyPlayPlus_useFragmentsGroupBox.sizePolicy().hasHeightForWidth())
- self.legacyPlayPlus_useFragmentsGroupBox.setSizePolicy(sizePolicy2)
+ sizePolicy1.setHeightForWidth(self.legacyPlayPlus_useFragmentsGroupBox.sizePolicy().hasHeightForWidth())
+ self.legacyPlayPlus_useFragmentsGroupBox.setSizePolicy(sizePolicy1)
self.legacyPlayPlus_useFragmentsGroupBox.setCheckable(True)
self.legacyPlayPlus_useFragmentsGroupBox.setChecked(False)
self.horizontalLayout_3 = QHBoxLayout(self.legacyPlayPlus_useFragmentsGroupBox)
@@ -195,74 +160,198 @@ class Ui_TabTools_StepCalculator(object):
self.horizontalLayout.addWidget(self.stackedWidget)
+ self.groupBox_3 = QGroupBox(self.mapTypeWidget)
+ self.groupBox_3.setObjectName(u"groupBox_3")
+ self.verticalLayout_5 = QVBoxLayout(self.groupBox_3)
+ self.verticalLayout_5.setObjectName(u"verticalLayout_5")
+ self.horizontalLayout_5 = QHBoxLayout()
+ self.horizontalLayout_5.setObjectName(u"horizontalLayout_5")
+ self.label = QLabel(self.groupBox_3)
+ self.label.setObjectName(u"label")
+
+ self.horizontalLayout_5.addWidget(self.label)
+
+ self.partnerStepValueSpinBox = QDoubleSpinBox(self.groupBox_3)
+ self.partnerStepValueSpinBox.setObjectName(u"partnerStepValueSpinBox")
+ sizePolicy2 = QSizePolicy(QSizePolicy.Expanding, QSizePolicy.Fixed)
+ sizePolicy2.setHorizontalStretch(0)
+ sizePolicy2.setVerticalStretch(0)
+ sizePolicy2.setHeightForWidth(self.partnerStepValueSpinBox.sizePolicy().hasHeightForWidth())
+ self.partnerStepValueSpinBox.setSizePolicy(sizePolicy2)
+ self.partnerStepValueSpinBox.setMaximum(1000.000000000000000)
+ self.partnerStepValueSpinBox.setSingleStep(1.000000000000000)
+ self.partnerStepValueSpinBox.setStepType(QAbstractSpinBox.DefaultStepType)
+
+ self.horizontalLayout_5.addWidget(self.partnerStepValueSpinBox)
+
+
+ self.verticalLayout_5.addLayout(self.horizontalLayout_5)
+
+ self.partnerSkillGroupBox = QGroupBox(self.groupBox_3)
+ self.partnerSkillGroupBox.setObjectName(u"partnerSkillGroupBox")
+ sizePolicy3 = QSizePolicy(QSizePolicy.Expanding, QSizePolicy.Preferred)
+ sizePolicy3.setHorizontalStretch(0)
+ sizePolicy3.setVerticalStretch(0)
+ sizePolicy3.setHeightForWidth(self.partnerSkillGroupBox.sizePolicy().hasHeightForWidth())
+ self.partnerSkillGroupBox.setSizePolicy(sizePolicy3)
+ self.partnerSkillGroupBox.setCheckable(True)
+ self.partnerSkillGroupBox.setChecked(False)
+ self.verticalLayout_7 = QVBoxLayout(self.partnerSkillGroupBox)
+ self.verticalLayout_7.setObjectName(u"verticalLayout_7")
+ self.formLayout = QFormLayout()
+ self.formLayout.setObjectName(u"formLayout")
+ self.formLayout.setLabelAlignment(Qt.AlignRight|Qt.AlignTrailing|Qt.AlignVCenter)
+ self.label_5 = QLabel(self.partnerSkillGroupBox)
+ self.label_5.setObjectName(u"label_5")
+
+ self.formLayout.setWidget(0, QFormLayout.LabelRole, self.label_5)
+
+ self.label_6 = QLabel(self.partnerSkillGroupBox)
+ self.label_6.setObjectName(u"label_6")
+
+ self.formLayout.setWidget(1, QFormLayout.LabelRole, self.label_6)
+
+ self.partnerSkillFinalMultiplierLineEdit = QLineEdit(self.partnerSkillGroupBox)
+ self.partnerSkillFinalMultiplierLineEdit.setObjectName(u"partnerSkillFinalMultiplierLineEdit")
+ self.partnerSkillFinalMultiplierLineEdit.setText(u"1.0")
+ self.partnerSkillFinalMultiplierLineEdit.setPlaceholderText(u"1.0")
+
+ self.formLayout.setWidget(1, QFormLayout.FieldRole, self.partnerSkillFinalMultiplierLineEdit)
+
+ self.partnerSkillStepBonusLineEdit = QLineEdit(self.partnerSkillGroupBox)
+ self.partnerSkillStepBonusLineEdit.setObjectName(u"partnerSkillStepBonusLineEdit")
+ self.partnerSkillStepBonusLineEdit.setText(u"+0.0")
+ self.partnerSkillStepBonusLineEdit.setPlaceholderText(u"+0.0")
+
+ self.formLayout.setWidget(0, QFormLayout.FieldRole, self.partnerSkillStepBonusLineEdit)
+
+
+ self.verticalLayout_7.addLayout(self.formLayout)
+
+ self.groupBox_4 = QGroupBox(self.partnerSkillGroupBox)
+ self.groupBox_4.setObjectName(u"groupBox_4")
+ self.gridLayout_3 = QGridLayout(self.groupBox_4)
+ self.gridLayout_3.setObjectName(u"gridLayout_3")
+ self.partnerSkillPresetButton_awakenedEto = QPushButton(self.groupBox_4)
+ self.partnerSkillPresetButton_awakenedEto.setObjectName(u"partnerSkillPresetButton_awakenedEto")
+
+ self.gridLayout_3.addWidget(self.partnerSkillPresetButton_awakenedEto, 0, 1, 1, 1)
+
+ self.partnerSkillPresetButton_awakenedIlith = QPushButton(self.groupBox_4)
+ self.partnerSkillPresetButton_awakenedIlith.setObjectName(u"partnerSkillPresetButton_awakenedIlith")
+
+ self.gridLayout_3.addWidget(self.partnerSkillPresetButton_awakenedIlith, 0, 0, 1, 1)
+
+ self.partnerSkillPresetButton_awakenedLuna = QPushButton(self.groupBox_4)
+ self.partnerSkillPresetButton_awakenedLuna.setObjectName(u"partnerSkillPresetButton_awakenedLuna")
+
+ self.gridLayout_3.addWidget(self.partnerSkillPresetButton_awakenedLuna, 1, 0, 1, 1)
+
+ self.partnerSkillPresetButton_amaneBelowEx = QPushButton(self.groupBox_4)
+ self.partnerSkillPresetButton_amaneBelowEx.setObjectName(u"partnerSkillPresetButton_amaneBelowEx")
+
+ self.gridLayout_3.addWidget(self.partnerSkillPresetButton_amaneBelowEx, 1, 1, 1, 1)
+
+ self.partnerSkillPresetButton_maya = QPushButton(self.groupBox_4)
+ self.partnerSkillPresetButton_maya.setObjectName(u"partnerSkillPresetButton_maya")
+
+ self.gridLayout_3.addWidget(self.partnerSkillPresetButton_maya, 2, 0, 1, 1)
+
+
+ self.verticalLayout_7.addWidget(self.groupBox_4)
+
+
+ self.verticalLayout_5.addWidget(self.partnerSkillGroupBox)
+
+
+ self.horizontalLayout.addWidget(self.groupBox_3)
+
self.verticalLayout_3.addWidget(self.mapTypeWidget)
self.widget_2 = QWidget(TabTools_StepCalculator)
self.widget_2.setObjectName(u"widget_2")
- sizePolicy3 = QSizePolicy(QSizePolicy.Preferred, QSizePolicy.Expanding)
- sizePolicy3.setHorizontalStretch(0)
- sizePolicy3.setVerticalStretch(0)
- sizePolicy3.setHeightForWidth(self.widget_2.sizePolicy().hasHeightForWidth())
- self.widget_2.setSizePolicy(sizePolicy3)
+ sizePolicy4 = QSizePolicy(QSizePolicy.Preferred, QSizePolicy.Expanding)
+ sizePolicy4.setHorizontalStretch(0)
+ sizePolicy4.setVerticalStretch(0)
+ sizePolicy4.setHeightForWidth(self.widget_2.sizePolicy().hasHeightForWidth())
+ self.widget_2.setSizePolicy(sizePolicy4)
self.horizontalLayout_4 = QHBoxLayout(self.widget_2)
self.horizontalLayout_4.setObjectName(u"horizontalLayout_4")
self.groupBox = QGroupBox(self.widget_2)
self.groupBox.setObjectName(u"groupBox")
- self.verticalLayout_5 = QVBoxLayout(self.groupBox)
- self.verticalLayout_5.setObjectName(u"verticalLayout_5")
- self.horizontalWidget = QWidget(self.groupBox)
- self.horizontalWidget.setObjectName(u"horizontalWidget")
- self.horizontalLayout_5 = QHBoxLayout(self.horizontalWidget)
- self.horizontalLayout_5.setObjectName(u"horizontalLayout_5")
- self.label_2 = QLabel(self.horizontalWidget)
+ self.formLayout_2 = QFormLayout(self.groupBox)
+ self.formLayout_2.setObjectName(u"formLayout_2")
+ self.formLayout_2.setLabelAlignment(Qt.AlignRight|Qt.AlignTrailing|Qt.AlignVCenter)
+ self.calculate_toStep_playResultSpinBox = QDoubleSpinBox(self.groupBox)
+ self.calculate_toStep_playResultSpinBox.setObjectName(u"calculate_toStep_playResultSpinBox")
+ sizePolicy2.setHeightForWidth(self.calculate_toStep_playResultSpinBox.sizePolicy().hasHeightForWidth())
+ self.calculate_toStep_playResultSpinBox.setSizePolicy(sizePolicy2)
+ self.calculate_toStep_playResultSpinBox.setDecimals(3)
+ self.calculate_toStep_playResultSpinBox.setMaximum(100.000000000000000)
+ self.calculate_toStep_playResultSpinBox.setSingleStep(0.100000000000000)
+
+ self.formLayout_2.setWidget(0, QFormLayout.FieldRole, self.calculate_toStep_playResultSpinBox)
+
+ self.label_2 = QLabel(self.groupBox)
self.label_2.setObjectName(u"label_2")
- self.horizontalLayout_5.addWidget(self.label_2)
+ self.formLayout_2.setWidget(0, QFormLayout.LabelRole, self.label_2)
- self.playResultSpinBox = QDoubleSpinBox(self.horizontalWidget)
- self.playResultSpinBox.setObjectName(u"playResultSpinBox")
- sizePolicy.setHeightForWidth(self.playResultSpinBox.sizePolicy().hasHeightForWidth())
- self.playResultSpinBox.setSizePolicy(sizePolicy)
- self.playResultSpinBox.setDecimals(3)
- self.playResultSpinBox.setMaximum(100.000000000000000)
- self.playResultSpinBox.setSingleStep(0.100000000000000)
+ self.label_7 = QLabel(self.groupBox)
+ self.label_7.setObjectName(u"label_7")
+ sizePolicy4.setHeightForWidth(self.label_7.sizePolicy().hasHeightForWidth())
+ self.label_7.setSizePolicy(sizePolicy4)
- self.horizontalLayout_5.addWidget(self.playResultSpinBox)
+ self.formLayout_2.setWidget(2, QFormLayout.LabelRole, self.label_7)
+ self.calculate_toStep_resultLabel = QLabel(self.groupBox)
+ self.calculate_toStep_resultLabel.setObjectName(u"calculate_toStep_resultLabel")
+ sizePolicy4.setHeightForWidth(self.calculate_toStep_resultLabel.sizePolicy().hasHeightForWidth())
+ self.calculate_toStep_resultLabel.setSizePolicy(sizePolicy4)
+ self.calculate_toStep_resultLabel.setText(u"...")
- self.verticalLayout_5.addWidget(self.horizontalWidget)
+ self.formLayout_2.setWidget(2, QFormLayout.FieldRole, self.calculate_toStep_resultLabel)
- self.calculatePlayResultFromScoreButton = QPushButton(self.groupBox)
- self.calculatePlayResultFromScoreButton.setObjectName(u"calculatePlayResultFromScoreButton")
+ self.calculate_toStep_calculatePlayResultFromScoreButton = QPushButton(self.groupBox)
+ self.calculate_toStep_calculatePlayResultFromScoreButton.setObjectName(u"calculate_toStep_calculatePlayResultFromScoreButton")
- self.verticalLayout_5.addWidget(self.calculatePlayResultFromScoreButton)
+ self.formLayout_2.setWidget(1, QFormLayout.FieldRole, self.calculate_toStep_calculatePlayResultFromScoreButton)
self.horizontalLayout_4.addWidget(self.groupBox)
self.groupBox_2 = QGroupBox(self.widget_2)
self.groupBox_2.setObjectName(u"groupBox_2")
- self.verticalLayout_6 = QVBoxLayout(self.groupBox_2)
- self.verticalLayout_6.setObjectName(u"verticalLayout_6")
- self.horizontalWidget_2 = QWidget(self.groupBox_2)
- self.horizontalWidget_2.setObjectName(u"horizontalWidget_2")
- self.horizontalLayout_6 = QHBoxLayout(self.horizontalWidget_2)
- self.horizontalLayout_6.setObjectName(u"horizontalLayout_6")
- self.label_4 = QLabel(self.horizontalWidget_2)
+ self.formLayout_3 = QFormLayout(self.groupBox_2)
+ self.formLayout_3.setObjectName(u"formLayout_3")
+ self.formLayout_3.setLabelAlignment(Qt.AlignRight|Qt.AlignTrailing|Qt.AlignVCenter)
+ self.label_4 = QLabel(self.groupBox_2)
self.label_4.setObjectName(u"label_4")
- self.horizontalLayout_6.addWidget(self.label_4)
+ self.formLayout_3.setWidget(0, QFormLayout.LabelRole, self.label_4)
- self.doubleSpinBox = QDoubleSpinBox(self.horizontalWidget_2)
- self.doubleSpinBox.setObjectName(u"doubleSpinBox")
- sizePolicy.setHeightForWidth(self.doubleSpinBox.sizePolicy().hasHeightForWidth())
- self.doubleSpinBox.setSizePolicy(sizePolicy)
+ self.calculate_fromStep_targetStepSpinBox = QDoubleSpinBox(self.groupBox_2)
+ self.calculate_fromStep_targetStepSpinBox.setObjectName(u"calculate_fromStep_targetStepSpinBox")
+ sizePolicy2.setHeightForWidth(self.calculate_fromStep_targetStepSpinBox.sizePolicy().hasHeightForWidth())
+ self.calculate_fromStep_targetStepSpinBox.setSizePolicy(sizePolicy2)
- self.horizontalLayout_6.addWidget(self.doubleSpinBox)
+ self.formLayout_3.setWidget(0, QFormLayout.FieldRole, self.calculate_fromStep_targetStepSpinBox)
+ self.label_9 = QLabel(self.groupBox_2)
+ self.label_9.setObjectName(u"label_9")
+ sizePolicy4.setHeightForWidth(self.label_9.sizePolicy().hasHeightForWidth())
+ self.label_9.setSizePolicy(sizePolicy4)
- self.verticalLayout_6.addWidget(self.horizontalWidget_2)
+ self.formLayout_3.setWidget(1, QFormLayout.LabelRole, self.label_9)
+
+ self.calculate_fromStep_resultLabel = QLabel(self.groupBox_2)
+ self.calculate_fromStep_resultLabel.setObjectName(u"calculate_fromStep_resultLabel")
+ sizePolicy4.setHeightForWidth(self.calculate_fromStep_resultLabel.sizePolicy().hasHeightForWidth())
+ self.calculate_fromStep_resultLabel.setSizePolicy(sizePolicy4)
+ self.calculate_fromStep_resultLabel.setText(u"...")
+
+ self.formLayout_3.setWidget(1, QFormLayout.FieldRole, self.calculate_fromStep_resultLabel)
self.horizontalLayout_4.addWidget(self.groupBox_2)
@@ -280,18 +369,30 @@ class Ui_TabTools_StepCalculator(object):
# setupUi
def retranslateUi(self, TabTools_StepCalculator):
- self.label.setText(QCoreApplication.translate("TabTools_StepCalculator", u"partnerStepValueLabel", None))
self.mapTypeLegacyPlayRadioButton.setText("")
self.mapTypePlayRadioButton.setText("")
self.mapTypeLegacyPlayPlusRadioButton.setText("")
self.label_3.setText(QCoreApplication.translate("TabTools_StepCalculator", u"legacyPlay.noOptions", None))
self.legacyPlayPlus_useFragmentsGroupBox.setTitle(QCoreApplication.translate("TabTools_StepCalculator", u"legacyPlayPlus.useFragments", None))
self.play_memoryBoostCheckBox.setText(QCoreApplication.translate("TabTools_StepCalculator", u"play.memoryBoost", None))
- self.groupBox.setTitle(QCoreApplication.translate("TabTools_StepCalculator", u"calculation", None))
- self.label_2.setText(QCoreApplication.translate("TabTools_StepCalculator", u"playResultLabel", None))
- self.calculatePlayResultFromScoreButton.setText(QCoreApplication.translate("TabTools_StepCalculator", u"calculatePlayResultFromScoreButton", None))
- self.groupBox_2.setTitle(QCoreApplication.translate("TabTools_StepCalculator", u"inverseCalculation", None))
- self.label_4.setText(QCoreApplication.translate("TabTools_StepCalculator", u"targetStep", None))
+ self.groupBox_3.setTitle(QCoreApplication.translate("TabTools_StepCalculator", u"partner.title", None))
+ self.label.setText(QCoreApplication.translate("TabTools_StepCalculator", u"partner.stepValueLabel", None))
+ self.partnerSkillGroupBox.setTitle(QCoreApplication.translate("TabTools_StepCalculator", u"partner.skill.title", None))
+ self.label_5.setText(QCoreApplication.translate("TabTools_StepCalculator", u"partner.skill.stepBonus", None))
+ self.label_6.setText(QCoreApplication.translate("TabTools_StepCalculator", u"partner.skill.finalMultiplier", None))
+ self.groupBox_4.setTitle(QCoreApplication.translate("TabTools_StepCalculator", u"partner.skill.presets", None))
+ self.partnerSkillPresetButton_awakenedEto.setText(QCoreApplication.translate("TabTools_StepCalculator", u"partner.skill.presets.awakenedEto", None))
+ self.partnerSkillPresetButton_awakenedIlith.setText(QCoreApplication.translate("TabTools_StepCalculator", u"partner.skill.presets.awakenedIlith", None))
+ self.partnerSkillPresetButton_awakenedLuna.setText(QCoreApplication.translate("TabTools_StepCalculator", u"partner.skill.presets.awakenedLuna", None))
+ self.partnerSkillPresetButton_amaneBelowEx.setText(QCoreApplication.translate("TabTools_StepCalculator", u"partner.skill.presets.amaneBelowEx", None))
+ self.partnerSkillPresetButton_maya.setText(QCoreApplication.translate("TabTools_StepCalculator", u"partner.skill.presets.maya", None))
+ self.groupBox.setTitle(QCoreApplication.translate("TabTools_StepCalculator", u"calculate.toStep", None))
+ self.label_2.setText(QCoreApplication.translate("TabTools_StepCalculator", u"calculate.toStep.playResultLabel", None))
+ self.label_7.setText(QCoreApplication.translate("TabTools_StepCalculator", u"calculate.toStep.resultLabel", None))
+ self.calculate_toStep_calculatePlayResultFromScoreButton.setText(QCoreApplication.translate("TabTools_StepCalculator", u"calculate.toStep.calculatePlayResultFromScoreButton", None))
+ self.groupBox_2.setTitle(QCoreApplication.translate("TabTools_StepCalculator", u"calculate.fromStep", None))
+ self.label_4.setText(QCoreApplication.translate("TabTools_StepCalculator", u"calculate.fromStep.targetStepLabel", None))
+ self.label_9.setText(QCoreApplication.translate("TabTools_StepCalculator", u"calculate.fromStep.resultLabel", None))
pass
# retranslateUi
diff --git a/ui/implements/tabs/tabTools/tabTools_StepCalculator.py b/ui/implements/tabs/tabTools/tabTools_StepCalculator.py
index 0af9e49..473068e 100644
--- a/ui/implements/tabs/tabTools/tabTools_StepCalculator.py
+++ b/ui/implements/tabs/tabTools/tabTools_StepCalculator.py
@@ -1,3 +1,14 @@
+import logging
+
+from arcaea_offline.calculate.world_step import (
+ LegacyMapStepBooster,
+ MemoriesStepBooster,
+ PartnerBonus,
+ PlayResult,
+ calculate_play_rating_from_step,
+ calculate_step,
+ calculate_step_original,
+)
from PySide6.QtCore import QEasingCurve, QObject, QSize, Qt, QTimeLine
from PySide6.QtGui import QIcon, QPainter, QPaintEvent, QPixmap
from PySide6.QtWidgets import (
@@ -12,6 +23,8 @@ from ui.designer.tabs.tabTools.tabTools_StepCalculator_ui import (
Ui_TabTools_StepCalculator,
)
+logger = logging.getLogger(__name__)
+
class MapTypeListWidgetWidget(QLabel):
def paintEvent(self, e: QPaintEvent) -> None:
@@ -108,6 +121,120 @@ class TabTools_StepCalculator(Ui_TabTools_StepCalculator, QWidget):
self.mapTypeButtonGroup.addButton(self.mapTypeLegacyPlayRadioButton, 0)
self.mapTypeButtonGroup.addButton(self.mapTypeLegacyPlayPlusRadioButton, 1)
self.mapTypeButtonGroup.addButton(self.mapTypePlayRadioButton, 2)
-
self.mapTypeButtonGroup.idToggled.connect(self.stackedWidget.setCurrentIndex)
self.mapTypePlayRadioButton.setChecked(True)
+
+ self.legacyPlayPlusStaminaButtonGroup = QButtonGroup(self)
+ self.legacyPlayPlusStaminaButtonGroup.addButton(
+ self.legacyPlayPlus_x2StaminaRadioButton, 2
+ )
+ self.legacyPlayPlusStaminaButtonGroup.addButton(
+ self.legacyPlayPlus_x4StaminaRadioButton, 4
+ )
+ self.legacyPlayPlusStaminaButtonGroup.addButton(
+ self.legacyPlayPlus_x6StaminaRadioButton, 6
+ )
+ self.legacyPlayPlus_x2StaminaRadioButton.setChecked(True)
+
+ self.legacyPlayPlusFragmentsButtonGroup = QButtonGroup(self)
+ self.legacyPlayPlusFragmentsButtonGroup.addButton(
+ self.legacyPlayPlus_x11fragRadioButton, 100
+ )
+ self.legacyPlayPlusFragmentsButtonGroup.addButton(
+ self.legacyPlayPlus_x125fragRadioButton, 250
+ )
+ self.legacyPlayPlusFragmentsButtonGroup.addButton(
+ self.legacyPlayPlus_x15fragRadioButton, 500
+ )
+
+ self.mapTypeButtonGroup.buttonToggled.connect(self.tryCalculate)
+ self.legacyPlayPlusStaminaButtonGroup.buttonToggled.connect(self.tryCalculate)
+ self.legacyPlayPlusFragmentsButtonGroup.buttonToggled.connect(self.tryCalculate)
+ self.play_memoryBoostCheckBox.toggled.connect(self.tryCalculate)
+ self.partnerStepValueSpinBox.valueChanged.connect(self.tryCalculate)
+ self.partnerSkillGroupBox.toggled.connect(self.tryCalculate)
+ self.partnerSkillStepBonusLineEdit.textChanged.connect(self.tryCalculate)
+ self.partnerSkillFinalMultiplierLineEdit.textChanged.connect(self.tryCalculate)
+ self.calculate_toStep_playResultSpinBox.valueChanged.connect(self.tryCalculate)
+ self.calculate_fromStep_targetStepSpinBox.valueChanged.connect(
+ self.tryCalculate
+ )
+
+ def toStepPlayResult(self):
+ return PlayResult(
+ play_rating=self.calculate_toStep_playResultSpinBox.value(),
+ partner_step=self.partnerStepValueSpinBox.value(),
+ )
+
+ def partnerBonus(self):
+ if self.partnerSkillGroupBox.isChecked():
+ try:
+ partnerBonus = PartnerBonus(
+ step_bonus=self.partnerSkillStepBonusLineEdit.text(),
+ final_multiplier=self.partnerSkillFinalMultiplierLineEdit.text(),
+ )
+ partnerBonus.step_bonus
+ partnerBonus.final_multiplier
+ return partnerBonus
+ except Exception:
+ return PartnerBonus()
+
+ return PartnerBonus()
+
+ def stepBooster(self):
+ if self.mapTypeButtonGroup.checkedId() == 1:
+ # Legacy Play+
+ stamina = self.legacyPlayPlusStaminaButtonGroup.checkedId()
+ if self.legacyPlayPlus_useFragmentsGroupBox.isChecked():
+ fragment = self.legacyPlayPlusFragmentsButtonGroup.checkedId()
+ fragment = fragment if fragment > -1 else None
+ else:
+ fragment = None
+ return None if stamina < 0 else LegacyMapStepBooster(stamina, fragment)
+ elif self.mapTypeButtonGroup.checkedId() == 2:
+ # General Music Play
+ if self.play_memoryBoostCheckBox.isChecked():
+ return MemoriesStepBooster()
+ else:
+ return None
+ else:
+ return None
+
+ def tryCalculate(self):
+ if self.partnerStepValueSpinBox.value() <= 0.0:
+ self.calculate_toStep_resultLabel.setText("...")
+ self.calculate_fromStep_resultLabel.setText("...")
+ return
+
+ # toStep
+ try:
+ playResult = self.toStepPlayResult()
+ partnerBonus = self.partnerBonus()
+ stepBooster = self.stepBooster()
+
+ stepOriginal = calculate_step_original(
+ playResult, partner_bonus=partnerBonus, step_booster=stepBooster
+ )
+ step = calculate_step(
+ playResult, partner_bonus=partnerBonus, step_booster=stepBooster
+ )
+ self.calculate_toStep_resultLabel.setText(f"{step}
({stepOriginal})")
+ except Exception:
+ logger.exception("Cannot calculate toStep")
+ self.calculate_toStep_resultLabel.setText("...")
+
+ # fromStep
+ try:
+ self.calculate_fromStep_resultLabel.setText(
+ str(
+ calculate_play_rating_from_step(
+ self.calculate_fromStep_targetStepSpinBox.value(),
+ self.partnerStepValueSpinBox.value(),
+ partner_bonus=partnerBonus,
+ step_booster=stepBooster,
+ )
+ )
+ )
+ except Exception:
+ logger.exception("Cannot calculate fromStep")
+ self.calculate_fromStep_resultLabel.setText("...")
diff --git a/ui/resources/lang/en_US.ts b/ui/resources/lang/en_US.ts
index 9730171..d8c949f 100644
--- a/ui/resources/lang/en_US.ts
+++ b/ui/resources/lang/en_US.ts
@@ -756,6 +756,11 @@ validation
tab.infoLookup
Chart Info Lookup
+
+
+ tab.stepCalculator
+
+
TabTools_InfoLookup
@@ -925,4 +930,112 @@ validation
Title
+
+ TabTools_StepCalculator
+
+
+ legacyPlay.noOptions
+ No options
+
+
+
+ legacyPlayPlus.useFragments
+ Use Fragments
+
+
+
+ play.memoryBoost
+ Memory boost
+
+
+
+ partner.title
+ Partner
+
+
+
+ partner.stepValueLabel
+ STEP value
+
+
+
+ partner.skill.title
+ Partner Skill
+
+
+
+ partner.skill.stepBonus
+ Step bonus
+
+
+
+ partner.skill.finalMultiplier
+ Final multiplier
+
+
+
+ partner.skill.presets
+ Preset Datas
+
+
+
+ partner.skill.presets.awakenedEto
+ Eto (Awakened)
+
+
+
+ partner.skill.presets.awakenedIlith
+ Ilith (Awakened)
+
+
+
+ partner.skill.presets.awakenedLuna
+ Luna (Awakened)
+
+
+
+ partner.skill.presets.amaneBelowEx
+ Amane (Below EX)
+
+
+
+ partner.skill.presets.maya
+ Maya
+
+
+
+ calculate.toStep
+ Calculate to Step
+
+
+
+ calculate.toStep.playResultLabel
+ Play result
+
+
+
+ calculate.toStep.calculatePlayResultFromScoreButton
+ Calculate from Score
+
+
+
+ calculate.toStep.resultLabel
+ Result
+
+
+
+ calculate.fromStep
+ Calculate from Step
+
+
+
+ calculate.fromStep.targetStepLabel
+ Target step value
+
+
+
+ calculate.fromStep.resultLabel
+ Result (play rating)
+
+
diff --git a/ui/resources/lang/zh_CN.ts b/ui/resources/lang/zh_CN.ts
index 30715cf..3a96d3f 100644
--- a/ui/resources/lang/zh_CN.ts
+++ b/ui/resources/lang/zh_CN.ts
@@ -755,6 +755,11 @@
tab.infoLookup
查询谱面信息
+
+
+ tab.stepCalculator
+
+
TabTools_InfoLookup
@@ -924,4 +929,112 @@
标题
+
+ TabTools_StepCalculator
+
+
+ legacyPlay.noOptions
+ 没有选项
+
+
+
+ legacyPlayPlus.useFragments
+ 使用残片
+
+
+
+ play.memoryBoost
+ 源韵强化
+
+
+
+ partner.title
+ 搭档
+
+
+
+ partner.stepValueLabel
+ STEP 值
+
+
+
+ partner.skill.title
+ 搭档技能
+
+
+
+ partner.skill.stepBonus
+ 步数加成
+
+
+
+ partner.skill.finalMultiplier
+ 最终乘算
+
+
+
+ partner.skill.presets
+ 预置数据
+
+
+
+ partner.skill.presets.awakenedEto
+ 爱托(觉醒)
+
+
+
+ partner.skill.presets.awakenedIlith
+ 依莉丝(觉醒)
+
+
+
+ partner.skill.presets.awakenedLuna
+ 露娜(觉醒)
+
+
+
+ partner.skill.presets.amaneBelowEx
+ 天音(EX 以下)
+
+
+
+ partner.skill.presets.maya
+ 摩耶
+
+
+
+ calculate.toStep
+ 正算
+
+
+
+ calculate.toStep.playResultLabel
+ 单曲 PTT
+
+
+
+ calculate.toStep.calculatePlayResultFromScoreButton
+ 从分数计算
+
+
+
+ calculate.toStep.resultLabel
+ 结果
+
+
+
+ calculate.fromStep
+ 逆算
+
+
+
+ calculate.fromStep.targetStepLabel
+ 目标 STEP 值
+
+
+
+ calculate.fromStep.resultLabel
+ 结果(单曲 PTT)
+
+