mirror of
https://github.com/283375/arcaea-offline-pyside-ui.git
synced 2025-04-21 10:10:17 +00:00
feat: TabTools_StepCalculator
This commit is contained in:
parent
3d9faac571
commit
fba2a5fd3e
@ -14,6 +14,13 @@
|
|||||||
<string notr="true">TabTools_StepCalculator</string>
|
<string notr="true">TabTools_StepCalculator</string>
|
||||||
</property>
|
</property>
|
||||||
<layout class="QVBoxLayout" name="verticalLayout_3">
|
<layout class="QVBoxLayout" name="verticalLayout_3">
|
||||||
|
<item>
|
||||||
|
<widget class="QCheckBox" name="detailedLogOutputCheckBox">
|
||||||
|
<property name="text">
|
||||||
|
<string>detailedLogOutput</string>
|
||||||
|
</property>
|
||||||
|
</widget>
|
||||||
|
</item>
|
||||||
<item>
|
<item>
|
||||||
<widget class="QWidget" name="mapTypeWidget" native="true">
|
<widget class="QWidget" name="mapTypeWidget" native="true">
|
||||||
<layout class="QHBoxLayout" name="horizontalLayout">
|
<layout class="QHBoxLayout" name="horizontalLayout">
|
||||||
|
@ -28,6 +28,11 @@ class Ui_TabTools_StepCalculator(object):
|
|||||||
TabTools_StepCalculator.setWindowTitle(u"TabTools_StepCalculator")
|
TabTools_StepCalculator.setWindowTitle(u"TabTools_StepCalculator")
|
||||||
self.verticalLayout_3 = QVBoxLayout(TabTools_StepCalculator)
|
self.verticalLayout_3 = QVBoxLayout(TabTools_StepCalculator)
|
||||||
self.verticalLayout_3.setObjectName(u"verticalLayout_3")
|
self.verticalLayout_3.setObjectName(u"verticalLayout_3")
|
||||||
|
self.detailedLogOutputCheckBox = QCheckBox(TabTools_StepCalculator)
|
||||||
|
self.detailedLogOutputCheckBox.setObjectName(u"detailedLogOutputCheckBox")
|
||||||
|
|
||||||
|
self.verticalLayout_3.addWidget(self.detailedLogOutputCheckBox)
|
||||||
|
|
||||||
self.mapTypeWidget = QWidget(TabTools_StepCalculator)
|
self.mapTypeWidget = QWidget(TabTools_StepCalculator)
|
||||||
self.mapTypeWidget.setObjectName(u"mapTypeWidget")
|
self.mapTypeWidget.setObjectName(u"mapTypeWidget")
|
||||||
self.horizontalLayout = QHBoxLayout(self.mapTypeWidget)
|
self.horizontalLayout = QHBoxLayout(self.mapTypeWidget)
|
||||||
@ -369,6 +374,7 @@ class Ui_TabTools_StepCalculator(object):
|
|||||||
# setupUi
|
# setupUi
|
||||||
|
|
||||||
def retranslateUi(self, TabTools_StepCalculator):
|
def retranslateUi(self, TabTools_StepCalculator):
|
||||||
|
self.detailedLogOutputCheckBox.setText(QCoreApplication.translate("TabTools_StepCalculator", u"detailedLogOutput", None))
|
||||||
self.mapTypeLegacyPlayRadioButton.setText("")
|
self.mapTypeLegacyPlayRadioButton.setText("")
|
||||||
self.mapTypePlayRadioButton.setText("")
|
self.mapTypePlayRadioButton.setText("")
|
||||||
self.mapTypeLegacyPlayPlusRadioButton.setText("")
|
self.mapTypeLegacyPlayPlusRadioButton.setText("")
|
||||||
|
@ -1,7 +1,13 @@
|
|||||||
import logging
|
import logging
|
||||||
|
|
||||||
|
from arcaea_offline.calculate import calculate_play_rating
|
||||||
from arcaea_offline.calculate.world_step import (
|
from arcaea_offline.calculate.world_step import (
|
||||||
|
AmaneBelowExPartnerBonus,
|
||||||
|
AwakenedEtoPartnerBonus,
|
||||||
|
AwakenedIlithPartnerBonus,
|
||||||
|
AwakenedLunaPartnerBonus,
|
||||||
LegacyMapStepBooster,
|
LegacyMapStepBooster,
|
||||||
|
MayaPartnerBonus,
|
||||||
MemoriesStepBooster,
|
MemoriesStepBooster,
|
||||||
PartnerBonus,
|
PartnerBonus,
|
||||||
PlayResult,
|
PlayResult,
|
||||||
@ -9,6 +15,7 @@ from arcaea_offline.calculate.world_step import (
|
|||||||
calculate_step,
|
calculate_step,
|
||||||
calculate_step_original,
|
calculate_step_original,
|
||||||
)
|
)
|
||||||
|
from arcaea_offline.models import Chart, Score
|
||||||
from PySide6.QtCore import QEasingCurve, QObject, QSize, Qt, QTimeLine
|
from PySide6.QtCore import QEasingCurve, QObject, QSize, Qt, QTimeLine
|
||||||
from PySide6.QtGui import QIcon, QPainter, QPaintEvent, QPixmap
|
from PySide6.QtGui import QIcon, QPainter, QPaintEvent, QPixmap
|
||||||
from PySide6.QtWidgets import (
|
from PySide6.QtWidgets import (
|
||||||
@ -22,6 +29,8 @@ from PySide6.QtWidgets import (
|
|||||||
from ui.designer.tabs.tabTools.tabTools_StepCalculator_ui import (
|
from ui.designer.tabs.tabTools.tabTools_StepCalculator_ui import (
|
||||||
Ui_TabTools_StepCalculator,
|
Ui_TabTools_StepCalculator,
|
||||||
)
|
)
|
||||||
|
from ui.implements.components.chartAndScoreInput import ChartAndScoreInput
|
||||||
|
from ui.implements.components.songIdSelector import SongIdSelectorMode
|
||||||
|
|
||||||
logger = logging.getLogger(__name__)
|
logger = logging.getLogger(__name__)
|
||||||
|
|
||||||
@ -69,11 +78,23 @@ class ButtonGrayscaleEffectApplier(QObject):
|
|||||||
target.setGraphicsEffect(effect)
|
target.setGraphicsEffect(effect)
|
||||||
|
|
||||||
|
|
||||||
|
class ChartAndScoreInputDialog(ChartAndScoreInput):
|
||||||
|
def __init__(self, parent=None):
|
||||||
|
super().__init__(parent)
|
||||||
|
self.setWindowFlag(Qt.WindowType.Dialog, True)
|
||||||
|
self.setSongIdSelectorMode(SongIdSelectorMode.Chart)
|
||||||
|
|
||||||
|
|
||||||
class TabTools_StepCalculator(Ui_TabTools_StepCalculator, QWidget):
|
class TabTools_StepCalculator(Ui_TabTools_StepCalculator, QWidget):
|
||||||
def __init__(self, parent=None):
|
def __init__(self, parent=None):
|
||||||
super().__init__(parent)
|
super().__init__(parent)
|
||||||
self.setupUi(self)
|
self.setupUi(self)
|
||||||
|
|
||||||
|
self.calculate_toStep_calculatePlayResultFromScoreButton.clicked.connect(
|
||||||
|
self.openChartAndScoreInputDialog
|
||||||
|
)
|
||||||
|
|
||||||
|
# set icons
|
||||||
staminaIcon = QIcon(":/images/stepCalculator/stamina.png")
|
staminaIcon = QIcon(":/images/stepCalculator/stamina.png")
|
||||||
for radioButton in [
|
for radioButton in [
|
||||||
self.legacyPlayPlus_x2StaminaRadioButton,
|
self.legacyPlayPlus_x2StaminaRadioButton,
|
||||||
@ -104,6 +125,7 @@ class TabTools_StepCalculator(Ui_TabTools_StepCalculator, QWidget):
|
|||||||
button.setIconSize(mapTypeIconSize)
|
button.setIconSize(mapTypeIconSize)
|
||||||
button.setIcon(pixmap)
|
button.setIcon(pixmap)
|
||||||
|
|
||||||
|
# apply grayscale effects
|
||||||
self.buttonGrayscaleEffectAppliers = []
|
self.buttonGrayscaleEffectAppliers = []
|
||||||
for button in [
|
for button in [
|
||||||
self.mapTypeLegacyPlayRadioButton,
|
self.mapTypeLegacyPlayRadioButton,
|
||||||
@ -117,6 +139,7 @@ class TabTools_StepCalculator(Ui_TabTools_StepCalculator, QWidget):
|
|||||||
applier = ButtonGrayscaleEffectApplier(button)
|
applier = ButtonGrayscaleEffectApplier(button)
|
||||||
self.buttonGrayscaleEffectAppliers.append(applier)
|
self.buttonGrayscaleEffectAppliers.append(applier)
|
||||||
|
|
||||||
|
# create button groups
|
||||||
self.mapTypeButtonGroup = QButtonGroup(self)
|
self.mapTypeButtonGroup = QButtonGroup(self)
|
||||||
self.mapTypeButtonGroup.addButton(self.mapTypeLegacyPlayRadioButton, 0)
|
self.mapTypeButtonGroup.addButton(self.mapTypeLegacyPlayRadioButton, 0)
|
||||||
self.mapTypeButtonGroup.addButton(self.mapTypeLegacyPlayPlusRadioButton, 1)
|
self.mapTypeButtonGroup.addButton(self.mapTypeLegacyPlayPlusRadioButton, 1)
|
||||||
@ -147,6 +170,7 @@ class TabTools_StepCalculator(Ui_TabTools_StepCalculator, QWidget):
|
|||||||
self.legacyPlayPlus_x15fragRadioButton, 500
|
self.legacyPlayPlus_x15fragRadioButton, 500
|
||||||
)
|
)
|
||||||
|
|
||||||
|
# bind calculate functions
|
||||||
self.mapTypeButtonGroup.buttonToggled.connect(self.tryCalculate)
|
self.mapTypeButtonGroup.buttonToggled.connect(self.tryCalculate)
|
||||||
self.legacyPlayPlusStaminaButtonGroup.buttonToggled.connect(self.tryCalculate)
|
self.legacyPlayPlusStaminaButtonGroup.buttonToggled.connect(self.tryCalculate)
|
||||||
self.legacyPlayPlusFragmentsButtonGroup.buttonToggled.connect(self.tryCalculate)
|
self.legacyPlayPlusFragmentsButtonGroup.buttonToggled.connect(self.tryCalculate)
|
||||||
@ -160,6 +184,65 @@ class TabTools_StepCalculator(Ui_TabTools_StepCalculator, QWidget):
|
|||||||
self.tryCalculate
|
self.tryCalculate
|
||||||
)
|
)
|
||||||
|
|
||||||
|
# connect partner skill preset buttons
|
||||||
|
self.partnerSkillPresetButton_awakenedIlith.clicked.connect(
|
||||||
|
self.applyPartnerPreset
|
||||||
|
)
|
||||||
|
self.partnerSkillPresetButton_awakenedEto.clicked.connect(
|
||||||
|
self.applyPartnerPreset
|
||||||
|
)
|
||||||
|
self.partnerSkillPresetButton_awakenedLuna.clicked.connect(
|
||||||
|
self.applyPartnerPreset
|
||||||
|
)
|
||||||
|
self.partnerSkillPresetButton_amaneBelowEx.clicked.connect(
|
||||||
|
self.applyPartnerPreset
|
||||||
|
)
|
||||||
|
self.partnerSkillPresetButton_maya.clicked.connect(self.applyPartnerPreset)
|
||||||
|
|
||||||
|
def openChartAndScoreInputDialog(self):
|
||||||
|
dialog = ChartAndScoreInputDialog(self)
|
||||||
|
dialog.scoreCommited.connect(
|
||||||
|
lambda: self.setPlayResultFromChartAndScoreInput(dialog)
|
||||||
|
)
|
||||||
|
dialog.show()
|
||||||
|
|
||||||
|
def setPlayResultFromChartAndScoreInput(self, dialog: ChartAndScoreInputDialog):
|
||||||
|
if score := dialog.score():
|
||||||
|
chart = dialog.chart()
|
||||||
|
self.calculate_toStep_playResultSpinBox.setValue(
|
||||||
|
float(calculate_play_rating(chart.constant / 10, score.score))
|
||||||
|
)
|
||||||
|
dialog.close()
|
||||||
|
dialog.deleteLater()
|
||||||
|
else:
|
||||||
|
return
|
||||||
|
|
||||||
|
def applyPartnerPreset(self):
|
||||||
|
if not self.sender():
|
||||||
|
return
|
||||||
|
|
||||||
|
objectName = self.sender().objectName()
|
||||||
|
|
||||||
|
if not objectName:
|
||||||
|
return
|
||||||
|
|
||||||
|
formatString = "partnerSkillPresetButton_{}"
|
||||||
|
if objectName == formatString.format("awakenedIlith"):
|
||||||
|
pb = AwakenedIlithPartnerBonus
|
||||||
|
elif objectName == formatString.format("awakenedEto"):
|
||||||
|
pb = AwakenedEtoPartnerBonus
|
||||||
|
elif objectName == formatString.format("awakenedLuna"):
|
||||||
|
pb = AwakenedLunaPartnerBonus
|
||||||
|
elif objectName == formatString.format("amaneBelowEx"):
|
||||||
|
pb = AmaneBelowExPartnerBonus
|
||||||
|
elif objectName == formatString.format("maya"):
|
||||||
|
pb = MayaPartnerBonus
|
||||||
|
else:
|
||||||
|
return
|
||||||
|
|
||||||
|
self.partnerSkillStepBonusLineEdit.setText(str(pb.step_bonus))
|
||||||
|
self.partnerSkillFinalMultiplierLineEdit.setText(str(pb.final_multiplier))
|
||||||
|
|
||||||
def toStepPlayResult(self):
|
def toStepPlayResult(self):
|
||||||
return PlayResult(
|
return PlayResult(
|
||||||
play_rating=self.calculate_toStep_playResultSpinBox.value(),
|
play_rating=self.calculate_toStep_playResultSpinBox.value(),
|
||||||
@ -177,6 +260,8 @@ class TabTools_StepCalculator(Ui_TabTools_StepCalculator, QWidget):
|
|||||||
partnerBonus.final_multiplier
|
partnerBonus.final_multiplier
|
||||||
return partnerBonus
|
return partnerBonus
|
||||||
except Exception:
|
except Exception:
|
||||||
|
if self.detailedLogOutputCheckBox.isChecked():
|
||||||
|
logger.exception("Cannot parse PartnerBonus input")
|
||||||
return PartnerBonus()
|
return PartnerBonus()
|
||||||
|
|
||||||
return PartnerBonus()
|
return PartnerBonus()
|
||||||
@ -220,6 +305,7 @@ class TabTools_StepCalculator(Ui_TabTools_StepCalculator, QWidget):
|
|||||||
)
|
)
|
||||||
self.calculate_toStep_resultLabel.setText(f"{step}<br>({stepOriginal})")
|
self.calculate_toStep_resultLabel.setText(f"{step}<br>({stepOriginal})")
|
||||||
except Exception:
|
except Exception:
|
||||||
|
if self.detailedLogOutputCheckBox.isChecked():
|
||||||
logger.exception("Cannot calculate toStep")
|
logger.exception("Cannot calculate toStep")
|
||||||
self.calculate_toStep_resultLabel.setText("...")
|
self.calculate_toStep_resultLabel.setText("...")
|
||||||
|
|
||||||
@ -236,5 +322,6 @@ class TabTools_StepCalculator(Ui_TabTools_StepCalculator, QWidget):
|
|||||||
)
|
)
|
||||||
)
|
)
|
||||||
except Exception:
|
except Exception:
|
||||||
|
if self.detailedLogOutputCheckBox.isChecked():
|
||||||
logger.exception("Cannot calculate fromStep")
|
logger.exception("Cannot calculate fromStep")
|
||||||
self.calculate_fromStep_resultLabel.setText("...")
|
self.calculate_fromStep_resultLabel.setText("...")
|
||||||
|
@ -755,7 +755,7 @@ validation</translation>
|
|||||||
<message>
|
<message>
|
||||||
<location filename="../../designer/tabs/tabToolsEntry.ui" line="29"/>
|
<location filename="../../designer/tabs/tabToolsEntry.ui" line="29"/>
|
||||||
<source>tab.stepCalculator</source>
|
<source>tab.stepCalculator</source>
|
||||||
<translation type="unfinished"></translation>
|
<translation>Step Calculator</translation>
|
||||||
</message>
|
</message>
|
||||||
</context>
|
</context>
|
||||||
<context>
|
<context>
|
||||||
@ -1021,7 +1021,7 @@ validation</translation>
|
|||||||
<message>
|
<message>
|
||||||
<location filename="../../designer/tabs/tabTools/tabTools_StepCalculator.ui" line="20"/>
|
<location filename="../../designer/tabs/tabTools/tabTools_StepCalculator.ui" line="20"/>
|
||||||
<source>detailedLogOutput</source>
|
<source>detailedLogOutput</source>
|
||||||
<translation type="unfinished"></translation>
|
<translation>Detailed log output</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../../designer/tabs/tabTools/tabTools_StepCalculator.ui" line="429"/>
|
<location filename="../../designer/tabs/tabTools/tabTools_StepCalculator.ui" line="429"/>
|
||||||
|
@ -754,7 +754,7 @@
|
|||||||
<message>
|
<message>
|
||||||
<location filename="../../designer/tabs/tabToolsEntry.ui" line="29"/>
|
<location filename="../../designer/tabs/tabToolsEntry.ui" line="29"/>
|
||||||
<source>tab.stepCalculator</source>
|
<source>tab.stepCalculator</source>
|
||||||
<translation type="unfinished"></translation>
|
<translation>步数计算器</translation>
|
||||||
</message>
|
</message>
|
||||||
</context>
|
</context>
|
||||||
<context>
|
<context>
|
||||||
@ -1020,7 +1020,7 @@
|
|||||||
<message>
|
<message>
|
||||||
<location filename="../../designer/tabs/tabTools/tabTools_StepCalculator.ui" line="20"/>
|
<location filename="../../designer/tabs/tabTools/tabTools_StepCalculator.ui" line="20"/>
|
||||||
<source>detailedLogOutput</source>
|
<source>detailedLogOutput</source>
|
||||||
<translation type="unfinished"></translation>
|
<translation>详细日志输出</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../../designer/tabs/tabTools/tabTools_StepCalculator.ui" line="429"/>
|
<location filename="../../designer/tabs/tabTools/tabTools_StepCalculator.ui" line="429"/>
|
||||||
|
Loading…
x
Reference in New Issue
Block a user