dcs-retribution/ui/eventmenu.py
2018-06-03 03:32:52 +03:00

97 lines
3.5 KiB
Python

from tkinter import *
from ui.window import *
from ui.eventresultsmenu import *
from game.game import *
from game import event
class EventMenu(Menu):
aircraft_scramble_entries = None # type: typing.Dict[PlaneType, Entry]
armor_scramble_entries = None # type: typing.Dict[Armor, Entry]
def __init__(self, window: Window, parent, game: Game, event: event.Event):
super(EventMenu, self).__init__(window, parent, game)
self.event = event
self.aircraft_scramble_entries = {}
self.armor_scramble_entries = {}
self.frame = self.window.right_pane
def display(self):
self.window.clear_right_pane()
row = 0
def label(text):
nonlocal row
Label(self.frame, text=text).grid(column=0, row=0)
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)
e = Entry(self.frame)
e.grid(column=1, row=row)
self.aircraft_scramble_entries[unit_type] = e
row += 1
base = None # type: Base
if self.event.attacker.name == self.game.player:
base = self.event.from_cp.base
else:
base = self.event.to_cp.base
label("Aircraft")
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)
def start(self):
scrambled_aircraft = {}
scrambled_sweep = {}
scrambled_cas = {}
for unit_type, field in self.aircraft_scramble_entries.items():
value = field.get()
if value and int(value) > 0:
amount = int(value)
task = db.unit_task(unit_type)
scrambled_aircraft[unit_type] = amount
if task == CAS:
scrambled_cas[unit_type] = amount
elif task == FighterSweep:
scrambled_sweep[unit_type] = amount
scrambled_armor = {}
for unit_type, field in self.armor_scramble_entries.items():
value = field.get()
if value and int(value) > 0:
scrambled_armor[unit_type] = int(value)
if type(self.event) is CaptureEvent:
e = self.event # type: CaptureEvent
if self.game.is_player_attack(self.event):
e.player_attacking(cas=scrambled_cas,
escort=scrambled_sweep,
armor=scrambled_armor)
else:
e.player_defending(interceptors=scrambled_aircraft)
elif type(self.event) is InterceptEvent:
e = self.event # type: InterceptEvent
if self.game.is_player_attack(self.event):
e.player_attacking(interceptors=scrambled_aircraft)
else:
e.player_defending(escort=scrambled_aircraft)
elif type(self.event) is GroundInterceptEvent:
e = self.event # type: GroundInterceptEvent
e.player_attacking(e.to_cp.position.random_point_within(30000), strikegroup=scrambled_aircraft)
self.game.initiate_event(self.event)
EventResultsMenu(self.window, self.parent, self.game, self.event).display()