Skip to content

Commit 80c226d

Browse files
author
Gilgames
committed
Add calculator controller
1 parent 8ddc445 commit 80c226d

File tree

2 files changed

+82
-0
lines changed

2 files changed

+82
-0
lines changed

controllers/calculator.py

Lines changed: 78 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,78 @@
1+
from noscalculator.calculator import Calculator
2+
3+
4+
class CalculatorController:
5+
def __init__(self, ui, entities):
6+
self.ui = ui
7+
self.entities = entities
8+
self.populate_dropdowns()
9+
self.initialize_damage_labels()
10+
self.setup_btn_listeners()
11+
self.attacker = self.entities[0]
12+
self.defender = self.entities[0]
13+
self.ui.cb_calc_multiple_defenders.setEnabled(False)
14+
self.ui.btn_calc_select_defenders.setEnabled(False)
15+
16+
def update(self, entities, args):
17+
entity_names = [entity.name for entity in entities]
18+
19+
self.ui.dropdown_calc_attacker.clear()
20+
self.ui.dropdown_calc_attacker.addItems(entity_names)
21+
self.ui.dropdown_calc_defender.clear()
22+
self.ui.dropdown_calc_defender.addItems(entity_names)
23+
24+
def populate_dropdowns(self):
25+
entity_names = [entity.name for entity in self.entities]
26+
27+
self.ui.dropdown_calc_attacker.addItems(entity_names)
28+
self.ui.dropdown_calc_defender.addItems(entity_names)
29+
30+
def initialize_damage_labels(self):
31+
self.ui.lb_calc_normal_max.setText("0")
32+
self.ui.lb_calc_normal_min.setText("0")
33+
self.ui.lb_calc_crit_max.setText("0")
34+
self.ui.lb_calc_crit_min.setText("0")
35+
self.ui.lb_calc_soft_max.setText("0")
36+
self.ui.lb_calc_soft_min.setText("0")
37+
self.ui.lb_calc_softcrit_max.setText("0")
38+
self.ui.lb_calc_softcrit_min.setText("0")
39+
self.ui.lb_calc_average.setText("0")
40+
41+
def setup_btn_listeners(self):
42+
self.ui.btn_calculate.clicked.connect(self.calculate)
43+
44+
self.ui.dropdown_calc_attacker.currentIndexChanged.connect(
45+
self.select_attacker
46+
)
47+
self.ui.dropdown_calc_defender.currentIndexChanged.connect(
48+
self.select_defender
49+
)
50+
51+
def select_attacker(self):
52+
idx = self.ui.dropdown_calc_attacker.currentIndex()
53+
self.attacker = self.entities[idx]
54+
55+
def select_defender(self):
56+
idx = self.ui.dropdown_calc_defender.currentIndex()
57+
self.defender = self.entities[idx]
58+
59+
def calculate(self):
60+
self.attacker.atk_skill = self.ui.sb_calc_atk_skill.value()
61+
self.attacker.ele_skill = self.ui.sb_calc_ele_skill.value()
62+
calculator = Calculator(self.attacker, self.defender)
63+
64+
normal_min, normal_max = calculator.damage()
65+
crit_min, crit_max = calculator.damage(crit=True)
66+
soft_min, soft_max = calculator.damage(soft=True)
67+
softcrit_min, softcrit_max = calculator.damage(crit=True, soft=True)
68+
average_damage = calculator.average_damage()
69+
70+
self.ui.lb_calc_normal_max.setText(str(normal_max))
71+
self.ui.lb_calc_normal_min.setText(str(normal_min))
72+
self.ui.lb_calc_crit_max.setText(str(crit_max))
73+
self.ui.lb_calc_crit_min.setText(str(crit_min))
74+
self.ui.lb_calc_soft_max.setText(str(soft_max))
75+
self.ui.lb_calc_soft_min.setText(str(soft_min))
76+
self.ui.lb_calc_softcrit_max.setText(str(softcrit_max))
77+
self.ui.lb_calc_softcrit_min.setText(str(softcrit_min))
78+
self.ui.lb_calc_average.setText(str(average_damage))

gui.py

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@
33
from PySide2 import QtWidgets
44

55
import util.persistence as ps
6+
from controllers.calculator import CalculatorController
67
from controllers.editor import EditorController
78
from gui import Ui_MainWindow
89
from util.observables import ObservableList
@@ -16,6 +17,9 @@
1617
entities = ObservableList(ps.load_entities())
1718

1819
editor_controller = EditorController(ui, entities)
20+
calculator_controller = CalculatorController(ui, entities)
21+
22+
entities.add_observer(calculator_controller)
1923

2024
for i in entities:
2125
print(i)

0 commit comments

Comments
 (0)