gui update

This commit is contained in:
Vasiliy Horbachenko 2018-06-04 12:54:33 +03:00
parent 010cf9e7b6
commit 0f569d43b0
7 changed files with 50 additions and 35 deletions

View File

@ -49,6 +49,7 @@ class GroundInterceptEvent(Event):
BONUS_BASE = 3 BONUS_BASE = 3
TARGET_AMOUNT_FACTOR = 3 TARGET_AMOUNT_FACTOR = 3
TARGET_VARIETY = 3 TARGET_VARIETY = 3
STRENGTH_INFLUENCE = 0.1
def __str__(self): def __str__(self):
return "Ground intercept at {} ({})".format(self.to_cp, "*" * self.difficulty) return "Ground intercept at {} ({})".format(self.to_cp, "*" * self.difficulty)
@ -58,9 +59,9 @@ class GroundInterceptEvent(Event):
if self.from_cp.captured: if self.from_cp.captured:
if self.is_successfull(debriefing): if self.is_successfull(debriefing):
self.to_cp.base.affect_strength(-0.1) self.to_cp.base.affect_strength(-self.STRENGTH_INFLUENCE)
else: else:
self.to_cp.base.affect_strength(+0.1) self.to_cp.base.affect_strength(+self.STRENGTH_INFLUENCE)
else: else:
assert False assert False
@ -88,6 +89,7 @@ class GroundInterceptEvent(Event):
class InterceptEvent(Event): class InterceptEvent(Event):
ESCORT_AMOUNT_FACTOR = 2 ESCORT_AMOUNT_FACTOR = 2
BONUS_BASE = 5 BONUS_BASE = 5
STRENGTH_INFLUENCE = 0.25
def __str__(self): def __str__(self):
return "Intercept at {} ({})".format(self.to_cp, "*" * self.difficulty) return "Intercept at {} ({})".format(self.to_cp, "*" * self.difficulty)
@ -95,13 +97,13 @@ class InterceptEvent(Event):
def commit(self, debriefing: Debriefing): def commit(self, debriefing: Debriefing):
super(InterceptEvent, self).commit(debriefing) super(InterceptEvent, self).commit(debriefing)
if self.is_successfull(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: 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): def skip(self):
if self.to_cp.captured: 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]): def player_attacking(self, interceptors: typing.Dict[PlaneType, int]):
escort = self.to_cp.base.scramble_sweep(self.to_cp) escort = self.to_cp.base.scramble_sweep(self.to_cp)
@ -135,6 +137,7 @@ class InterceptEvent(Event):
class CaptureEvent(Event): class CaptureEvent(Event):
silent = True silent = True
BONUS_BASE = 7 BONUS_BASE = 7
STRENGTH_RECOVERY = 0.35
def __str__(self): def __str__(self):
return "Capture {} ({})".format(self.to_cp, "*" * self.difficulty) return "Capture {} ({})".format(self.to_cp, "*" * self.difficulty)
@ -147,7 +150,7 @@ class CaptureEvent(Event):
else: else:
if not self.from_cp.captured: if not self.from_cp.captured:
self.to_cp.captured = False 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): def skip(self):
if self.to_cp.captured: if self.to_cp.captured:

View File

@ -26,7 +26,7 @@ class BaseMenu(Menu):
existing_units = self.base.total_units_of_type(unit_type) existing_units = self.base.total_units_of_type(unit_type)
scheduled_units = self.event.units.get(unit_type, 0) 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="({})".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) 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) 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), 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) Button(self.frame, text="Back", command=self.dismiss).grid(column=2, row=row)
row += 1 row += 1
for task_type, units in units.items(): 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: for unit_type in units:
purchase_row(unit_type, db.PRICES[unit_type]) purchase_row(unit_type, db.PRICES[unit_type])

9
ui/configurationmenu.py Normal file
View File

@ -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)

View File

@ -25,13 +25,13 @@ class EventMenu(Menu):
def label(text): def label(text):
nonlocal row nonlocal row
Label(self.frame, text=text).grid(column=0, row=0) Label(self.frame, text=text).grid()
row += 1 row += 1
def scrable_row(unit_type, unit_count): def scrable_row(unit_type, unit_count):
nonlocal row 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 = Entry(self.frame)
e.grid(column=1, row=row) e.grid(column=1, row=row)
@ -48,8 +48,8 @@ class EventMenu(Menu):
for unit_type, count in base.aircraft.items(): for unit_type, count in base.aircraft.items():
scrable_row(unit_type, count) scrable_row(unit_type, count)
Button(self.frame, text="Commit", command=self.start).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(column=0, row=row) Button(self.frame, text="Back", command=self.dismiss).grid(row=row)
def start(self): def start(self):
scrambled_aircraft = {} scrambled_aircraft = {}

View File

@ -25,36 +25,36 @@ class EventResultsMenu(Menu):
self.window.clear_right_pane() self.window.clear_right_pane()
if not self.finished: 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, succ", command=self.simulate_result(0, 1, True)).grid()
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, 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="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) Button(self.frame, text="full losses, fail", command=self.simulate_result(1, 0, False)).grid(row=2, column=1)
else: else:
row = 0 row = 0
if self.event.is_successfull(self.debriefing): 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: 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 Label(self.frame, text="Player losses").grid(row=row, columnspan=1); row += 1
for unit_type, count in self.player_losses.items(): 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) Label(self.frame, text="{}".format(count)).grid(column=1, row=row)
row += 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="Enemy losses").grid(columnspan=1, row=row); row += 1 Label(self.frame, text="Enemy losses").grid(columnspan=1, row=row); row += 1
for unit_type, count in self.enemy_losses.items(): 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) Label(self.frame, text="{}".format(count)).grid(column=1, row=row)
row += 1 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 simulate_result(self, player_factor: float, enemy_factor: float, result: bool):
def action(): def action():

View File

@ -14,7 +14,7 @@ class MainMenu(Menu):
self.image = PhotoImage(file="resources/caumap.gif") self.image = PhotoImage(file="resources/caumap.gif")
map = Label(window.left_pane, image=self.image) map = Label(window.left_pane, image=self.image)
map.grid(column=0, row=0) map.grid()
self.frame = self.window.right_pane self.frame = self.window.right_pane
self.frame.grid_columnconfigure(0, weight=1) self.frame.grid_columnconfigure(0, weight=1)
@ -26,12 +26,12 @@ class MainMenu(Menu):
def label(text): def label(text):
nonlocal row 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 row += 1
def event_button(event, text): def event_button(event, text):
nonlocal row 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 row += 1
def cp_button(cp): def cp_button(cp):
@ -41,11 +41,14 @@ class MainMenu(Menu):
"^" * cp.base.total_planes, "^" * cp.base.total_planes,
"." * cp.base.total_armor, "." * cp.base.total_armor,
"*" * cp.base.total_aa) "*" * 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 row += 1
Button(self.frame, text="Pass turn", command=self.pass_turn).grid(column=0, row=row, sticky=N); row += 1 statusbar = Frame(self.frame).grid(column=0, row=row, sticky=NSEW)
label("Budget: {}m".format(self.game.budget)) 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: for event in self.game.events:
if not event.informational: if not event.informational:
@ -58,11 +61,11 @@ class MainMenu(Menu):
event_button(event, "{} {}".format(event.attacker.name != self.game.player and "!" or " ", event)) 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(): for cp in self.game.theater.player_points():
cp_button(cp) 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(): for cp in self.game.theater.enemy_bases():
title = "[{}] {}{}{}{}".format( title = "[{}] {}{}{}{}".format(
int(cp.base.strength * 10), int(cp.base.strength * 10),
@ -70,7 +73,7 @@ class MainMenu(Menu):
"^" * cp.base.total_planes, "^" * cp.base.total_planes,
"." * cp.base.total_armor, "." * cp.base.total_armor,
"*" * cp.base.total_aa) "*" * 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 row += 1
def pass_turn(self): def pass_turn(self):

View File

@ -22,9 +22,9 @@ class Window:
self.frame.grid_rowconfigure(0, weight=1) self.frame.grid_rowconfigure(0, weight=1)
self.left_pane = Frame(self.frame) 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 = 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() self.tk.focus()