From 0f569d43b0d8108e360706f81b4d51421bec21be Mon Sep 17 00:00:00 2001 From: Vasiliy Horbachenko Date: Mon, 4 Jun 2018 12:54:33 +0300 Subject: [PATCH] gui update --- game/event.py | 15 +++++++++------ ui/basemenu.py | 6 +++--- ui/configurationmenu.py | 9 +++++++++ ui/eventmenu.py | 8 ++++---- ui/eventresultsmenu.py | 22 +++++++++++----------- ui/mainmenu.py | 21 ++++++++++++--------- ui/window.py | 4 ++-- 7 files changed, 50 insertions(+), 35 deletions(-) create mode 100644 ui/configurationmenu.py diff --git a/game/event.py b/game/event.py index 1313f02c..79b26ca4 100644 --- a/game/event.py +++ b/game/event.py @@ -49,6 +49,7 @@ class GroundInterceptEvent(Event): BONUS_BASE = 3 TARGET_AMOUNT_FACTOR = 3 TARGET_VARIETY = 3 + STRENGTH_INFLUENCE = 0.1 def __str__(self): return "Ground intercept at {} ({})".format(self.to_cp, "*" * self.difficulty) @@ -58,9 +59,9 @@ class GroundInterceptEvent(Event): if self.from_cp.captured: if self.is_successfull(debriefing): - self.to_cp.base.affect_strength(-0.1) + self.to_cp.base.affect_strength(-self.STRENGTH_INFLUENCE) else: - self.to_cp.base.affect_strength(+0.1) + self.to_cp.base.affect_strength(+self.STRENGTH_INFLUENCE) else: assert False @@ -88,6 +89,7 @@ class GroundInterceptEvent(Event): class InterceptEvent(Event): ESCORT_AMOUNT_FACTOR = 2 BONUS_BASE = 5 + STRENGTH_INFLUENCE = 0.25 def __str__(self): return "Intercept at {} ({})".format(self.to_cp, "*" * self.difficulty) @@ -95,13 +97,13 @@ class InterceptEvent(Event): def commit(self, debriefing: Debriefing): super(InterceptEvent, self).commit(debriefing) if self.is_successfull(debriefing): - self.to_cp.base.affect_strength(0.1 * float(self.from_cp.captured and -1 or 1)) + self.to_cp.base.affect_strength(self.STRENGTH_INFLUENCE * float(self.from_cp.captured and -1 or 1)) else: - self.to_cp.base.affect_strength(0.1 * float(self.from_cp.captured and 1 or -1)) + self.to_cp.base.affect_strength(self.STRENGTH_INFLUENCE * float(self.from_cp.captured and 1 or -1)) def skip(self): if self.to_cp.captured: - self.to_cp.base.affect_strength(-0.2) + self.to_cp.base.affect_strength(-self.STRENGTH_INFLUENCE) def player_attacking(self, interceptors: typing.Dict[PlaneType, int]): escort = self.to_cp.base.scramble_sweep(self.to_cp) @@ -135,6 +137,7 @@ class InterceptEvent(Event): class CaptureEvent(Event): silent = True BONUS_BASE = 7 + STRENGTH_RECOVERY = 0.35 def __str__(self): return "Capture {} ({})".format(self.to_cp, "*" * self.difficulty) @@ -147,7 +150,7 @@ class CaptureEvent(Event): else: if not self.from_cp.captured: self.to_cp.captured = False - self.to_cp.base.affect_strength(+0.5) + self.to_cp.base.affect_strength(+self.STRENGTH_RECOVERY) def skip(self): if self.to_cp.captured: diff --git a/ui/basemenu.py b/ui/basemenu.py index 3e790647..23dbd7d8 100644 --- a/ui/basemenu.py +++ b/ui/basemenu.py @@ -26,7 +26,7 @@ class BaseMenu(Menu): existing_units = self.base.total_units_of_type(unit_type) scheduled_units = self.event.units.get(unit_type, 0) - Label(self.frame, text="{}".format(db.unit_type_name(unit_type))).grid(column=0, row=row, sticky=W) + Label(self.frame, text="{}".format(db.unit_type_name(unit_type))).grid(row=row, sticky=W) Label(self.frame, text="({})".format(existing_units)).grid(column=1, row=row) Label(self.frame, text="{}m {}".format(unit_price, scheduled_units and "(bought {})".format(scheduled_units) or "")).grid(column=2, row=row) Button(self.frame, text="Buy", command=self.buy(unit_type)).grid(column=3, row=row) @@ -40,12 +40,12 @@ class BaseMenu(Menu): AirDefence: db.find_unittype(AirDefence, self.game.player), } - Label(self.frame, text="Budget: {}m".format(self.game.budget)).grid(column=0, row=row, sticky=W) + Label(self.frame, text="Budget: {}m".format(self.game.budget)).grid(row=row, sticky=W) Button(self.frame, text="Back", command=self.dismiss).grid(column=2, row=row) row += 1 for task_type, units in units.items(): - Label(self.frame, text="{}".format(db.task_name(task_type))).grid(column=0, row=row, columnspan=5); row += 1 + Label(self.frame, text="{}".format(db.task_name(task_type))).grid(row=row, columnspan=5); row += 1 for unit_type in units: purchase_row(unit_type, db.PRICES[unit_type]) diff --git a/ui/configurationmenu.py b/ui/configurationmenu.py new file mode 100644 index 00000000..7b62236d --- /dev/null +++ b/ui/configurationmenu.py @@ -0,0 +1,9 @@ +from tkinter import * +from tkinter.ttk import * + +from ui.window import * + + +class ConfigurationMenu(Menu): + def __init__(self, window: Window, parent, game: Game): + super(ConfigurationMenu, self).__init__(window, parent, game) diff --git a/ui/eventmenu.py b/ui/eventmenu.py index 5f75c904..2effff4b 100644 --- a/ui/eventmenu.py +++ b/ui/eventmenu.py @@ -25,13 +25,13 @@ class EventMenu(Menu): def label(text): nonlocal row - Label(self.frame, text=text).grid(column=0, row=0) + Label(self.frame, text=text).grid() row += 1 def scrable_row(unit_type, unit_count): nonlocal row - Label(self.frame, text="{} ({})".format(unit_type.id and unit_type.id or unit_type.name, unit_count)).grid(column=0, row=row) + Label(self.frame, text="{} ({})".format(unit_type.id and unit_type.id or unit_type.name, unit_count)).grid(row=row) e = Entry(self.frame) e.grid(column=1, row=row) @@ -48,8 +48,8 @@ class EventMenu(Menu): for unit_type, count in base.aircraft.items(): scrable_row(unit_type, count) - Button(self.frame, text="Commit", command=self.start).grid(column=0, row=row) - Button(self.frame, text="Back", command=self.dismiss).grid(column=0, row=row) + Button(self.frame, text="Commit", command=self.start).grid(row=row) + Button(self.frame, text="Back", command=self.dismiss).grid(row=row) def start(self): scrambled_aircraft = {} diff --git a/ui/eventresultsmenu.py b/ui/eventresultsmenu.py index 9e406841..242e4916 100644 --- a/ui/eventresultsmenu.py +++ b/ui/eventresultsmenu.py @@ -25,36 +25,36 @@ class EventResultsMenu(Menu): self.window.clear_right_pane() if not self.finished: - Button(self.frame, text="no losses, succ", command=self.simulate_result(0, 1, True)).grid(row=0, column=0) - Button(self.frame, text="no losses, fail", command=self.simulate_result(0, 1, False)).grid(row=0, column=1) + Button(self.frame, text="no losses, succ", command=self.simulate_result(0, 1, True)).grid() + Button(self.frame, text="no losses, fail", command=self.simulate_result(0, 1, False)).grid(column=1) - Button(self.frame, text="half losses, succ", command=self.simulate_result(0.5, 0.5, True)).grid(row=1, column=0) + Button(self.frame, text="half losses, succ", command=self.simulate_result(0.5, 0.5, True)).grid(row=1, ) Button(self.frame, text="half losses, fail", command=self.simulate_result(0.5, 0.5, False)).grid(row=1, column=1) - Button(self.frame, text="full losses, succ", command=self.simulate_result(1, 0, True)).grid(row=2, column=0) + Button(self.frame, text="full losses, succ", command=self.simulate_result(1, 0, True)).grid(row=2, ) Button(self.frame, text="full losses, fail", command=self.simulate_result(1, 0, False)).grid(row=2, column=1) else: row = 0 if self.event.is_successfull(self.debriefing): - Label(self.frame, text="Operation success").grid(column=0, row=row, columnspan=1); row += 1 + Label(self.frame, text="Operation success").grid(row=row, columnspan=1); row += 1 else: - Label(self.frame, text="Operation failed").grid(column=0, row=row, columnspan=1); row += 1 + Label(self.frame, text="Operation failed").grid(row=row, columnspan=1); row += 1 - Separator(self.frame, orient='horizontal').grid(column=0, row=row, columnspan=1, sticky=NE); row += 1 + Separator(self.frame, orient='horizontal').grid(row=row, columnspan=1, sticky=NE); row += 1 Label(self.frame, text="Player losses").grid(row=row, columnspan=1); row += 1 for unit_type, count in self.player_losses.items(): - Label(self.frame, text=db.unit_type_name(unit_type)).grid(column=0, row=row) + Label(self.frame, text=db.unit_type_name(unit_type)).grid(row=row) Label(self.frame, text="{}".format(count)).grid(column=1, row=row) row += 1 - Separator(self.frame, orient='horizontal').grid(column=0, row=row, columnspan=1, sticky=NE); row += 1 + Separator(self.frame, orient='horizontal').grid(row=row, columnspan=1, sticky=NE); row += 1 Label(self.frame, text="Enemy losses").grid(columnspan=1, row=row); row += 1 for unit_type, count in self.enemy_losses.items(): - Label(self.frame, text=db.unit_type_name(unit_type)).grid(column=0, row=row) + Label(self.frame, text=db.unit_type_name(unit_type)).grid(row=row) Label(self.frame, text="{}".format(count)).grid(column=1, row=row) row += 1 - Button(self.frame, text="Okay", command=self.dismiss).grid(column=0, columnspan=1, row=row); row += 1 + Button(self.frame, text="Okay", command=self.dismiss).grid(columnspan=1, row=row); row += 1 def simulate_result(self, player_factor: float, enemy_factor: float, result: bool): def action(): diff --git a/ui/mainmenu.py b/ui/mainmenu.py index ea830b68..74957d46 100644 --- a/ui/mainmenu.py +++ b/ui/mainmenu.py @@ -14,7 +14,7 @@ class MainMenu(Menu): self.image = PhotoImage(file="resources/caumap.gif") map = Label(window.left_pane, image=self.image) - map.grid(column=0, row=0) + map.grid() self.frame = self.window.right_pane self.frame.grid_columnconfigure(0, weight=1) @@ -26,12 +26,12 @@ class MainMenu(Menu): def label(text): nonlocal row - Label(self.frame, text=text).grid(column=0, row=row, sticky=NW) + Label(self.frame, text=text).grid(row=row, sticky=NW) row += 1 def event_button(event, text): nonlocal row - Button(self.frame, text=text, command=self.start_event(event)).grid(column=0, row=row, sticky=N) + Button(self.frame, text=text, command=self.start_event(event)).grid(row=row, sticky=N) row += 1 def cp_button(cp): @@ -41,11 +41,14 @@ class MainMenu(Menu): "^" * cp.base.total_planes, "." * cp.base.total_armor, "*" * cp.base.total_aa) - Button(self.frame, text=title, command=self.go_cp(cp)).grid(column=0, row=row, sticky=NW) + Button(self.frame, text=title, command=self.go_cp(cp)).grid(row=row, sticky=NW) row += 1 - Button(self.frame, text="Pass turn", command=self.pass_turn).grid(column=0, row=row, sticky=N); row += 1 - label("Budget: {}m".format(self.game.budget)) + statusbar = Frame(self.frame).grid(column=0, row=row, sticky=NSEW) + row += 1 + + Label(statusbar, text="Budget: {}m".format(self.game.budget)).grid(column=0, row=0, sticky=NW) + Button(statusbar, text="Pass turn", command=self.pass_turn).grid(column=1, row=0, sticky=NE) for event in self.game.events: if not event.informational: @@ -58,11 +61,11 @@ class MainMenu(Menu): event_button(event, "{} {}".format(event.attacker.name != self.game.player and "!" or " ", event)) - Separator(self.frame, orient='horizontal').grid(column=0, row=row, sticky=EW); row += 1 + Separator(self.frame, orient='horizontal').grid(row=row, sticky=EW); row += 1 for cp in self.game.theater.player_points(): cp_button(cp) - Separator(self.frame, orient='horizontal').grid(column=0, row=row, sticky=EW); row += 1 + Separator(self.frame, orient='horizontal').grid(row=row, sticky=EW); row += 1 for cp in self.game.theater.enemy_bases(): title = "[{}] {}{}{}{}".format( int(cp.base.strength * 10), @@ -70,7 +73,7 @@ class MainMenu(Menu): "^" * cp.base.total_planes, "." * cp.base.total_armor, "*" * cp.base.total_aa) - Label(self.frame, text=title).grid(column=0, row=row, sticky=NE) + Label(self.frame, text=title).grid(row=row, sticky=NE) row += 1 def pass_turn(self): diff --git a/ui/window.py b/ui/window.py index 01c389bb..ce0dfe04 100644 --- a/ui/window.py +++ b/ui/window.py @@ -22,9 +22,9 @@ class Window: self.frame.grid_rowconfigure(0, weight=1) self.left_pane = Frame(self.frame) - self.left_pane.grid(column=0, row=0, sticky=NSEW) + self.left_pane.grid(row=0, column=0, sticky=NSEW) self.right_pane = Frame(self.frame) - self.right_pane.grid(column=1, row=0, sticky=NSEW) + self.right_pane.grid(row=0, column=1, sticky=NSEW) self.tk.focus()