new game ui; random weather and time

This commit is contained in:
Vasyl Horbachenko 2018-06-13 23:36:57 +03:00
parent 1c67a2e4cf
commit 8a783625ce
8 changed files with 104 additions and 11 deletions

View File

@ -4,21 +4,35 @@ import sys
import theater.caucasus
import ui.window
import ui.mainmenu
import ui.newgamemenu
from game.game import Game
from theater import start_generator
from userdata import persistency
game = persistency.restore_game()
if not game:
theater = theater.caucasus.CaucasusTheater()
start_generator.generate_initial(theater, "Russia")
game = Game(theater=theater)
def proceed_to_main_menu(game: Game):
m = ui.mainmenu.MainMenu(w, None, game)
m.display()
w = ui.window.Window()
m = ui.mainmenu.MainMenu(w, None, game)
m.display()
game = persistency.restore_game()
if not game:
new_game_menu = None # type: NewGameMenu
def start_new_game(player_name: str, enemy_name: str):
conflicttheater = theater.caucasus.CaucasusTheater()
start_generator.generate_initial(conflicttheater, enemy_name)
proceed_to_main_menu(Game(player_name=player_name,
enemy_name=enemy_name,
theater=conflicttheater))
new_game_menu = ui.newgamemenu.NewGameMenu(w, start_new_game)
new_game_menu.display()
else:
proceed_to_main_menu(game)
w.run()

View File

@ -37,11 +37,11 @@ class Game:
events = None # type: typing.List[Event]
pending_transfers = None # type: typing.Dict[]
def __init__(self, theater: ConflictTheater):
def __init__(self, player_name: str, enemy_name: str, theater: ConflictTheater):
self.events = []
self.theater = theater
self.player = "USA"
self.enemy = "Russia"
self.player = player_name
self.enemy = enemy_name
def _roll(self, prob, mult):
return random.randint(0, 100) <= prob * mult

View File

@ -7,6 +7,7 @@ from gen.aircraft import *
from gen.aaa import *
from gen.shipgen import *
from gen.conflictgen import *
from gen.envsettingsgen import *
class Operation:
@ -16,7 +17,9 @@ class Operation:
armorgen = None # type: ArmorConflictGenerator
airgen = None # type: AircraftConflictGenerator
aagen = None # type: AAConflictGenerator
extra_aagen = None # type: ExtraAAConflictGenerator
shipgen = None # type: ShipGenerator
envgen = None # type: EnvironmentSettingsGenerator
def __init__(self,
theater: ConflictTheater,
@ -42,6 +45,7 @@ class Operation:
self.airgen = AircraftConflictGenerator(mission, conflict)
self.aagen = AAConflictGenerator(mission, conflict)
self.shipgen = ShipGenerator(mission, conflict)
self.envgen = EnvironmentSettingsGenerator(mission)
player_name = self.from_cp.captured and self.attacker_name or self.defender_name
enemy_name = self.from_cp.captured and self.defender_name or self.attacker_name
@ -52,6 +56,7 @@ class Operation:
def generate(self):
self.extra_aagen.generate()
self.envgen.generate()
def units_of(self, country_name: str) -> typing.Collection[UnitType]:
return []

View File

@ -44,7 +44,7 @@ class AircraftConflictGenerator:
aircraft_type=unit_type,
airport=self.m.terrain.airport_by_id(airport.id),
maintask=None,
start_type=StartType.Cold,
start_type=StartType.Warm,
group_size=count,
parking_slots=None)

28
gen/envsettingsgen.py Normal file
View File

@ -0,0 +1,28 @@
import typing
import random
from dcs.mission import Mission
from theater.weatherforecast import WeatherForecast
RANDOM_TIME = {
"night": 5,
"dusk": 25,
"down": 50,
"noon": 75,
"day": 100,
}
class EnvironmentSettingsGenerator:
def __init__(self, mission: Mission):
self.mission = mission
def generate(self):
self.mission.random_weather = True
time_roll = random.randint(0, 100)
time_period = [k for k, v in RANDOM_TIME.items() if v > time_roll][-1]
self.mission.random_daytime(time_period)

View File

@ -0,0 +1,4 @@
class WeatherForecast:
pass

41
ui/newgamemenu.py Normal file
View File

@ -0,0 +1,41 @@
from tkinter import *
from tkinter.ttk import *
from ui.window import *
class NewGameMenu(Menu):
selected_country = None # type: IntVar
def __init__(self, window: Window, callback: typing.Callable):
super(NewGameMenu, self).__init__(window, None, None)
self.frame = window.right_pane
self.callback = callback
self.selected_country = IntVar()
self.selected_country.set(0)
@property
def player_country_name(self):
if self.selected_country.get() == 0:
return "USA"
else:
return "Russia"
@property
def enemy_country_name(self):
if self.selected_country.get() == 1:
return "USA"
else:
return "Russia"
def display(self):
self.window.clear_right_pane()
Label(self.frame, text="Player country").grid(row=0, column=0)
Radiobutton(self.frame, text="USA", variable=self.selected_country, value=0).grid(row=1, column=0)
Radiobutton(self.frame, text="Russia", variable=self.selected_country, value=1).grid(row=2, column=0)
Button(self.frame, text="Proceed", command=self.proceed).grid(row=3, column=0)
def proceed(self):
self.callback(self.player_country_name, self.enemy_country_name)

View File

@ -44,6 +44,7 @@ class Window:
class Menu:
parent = None # type: Menu
def __init__(self, window: Window, parent, game: Game):
self.window = window
self.parent = parent