From b697a8b40a575fa7f0f829992066f3008f5ced0e Mon Sep 17 00:00:00 2001 From: Vasyl Horbachenko Date: Wed, 27 Mar 2019 10:41:26 +0200 Subject: [PATCH] cleanups & minor fixesh --- game/db.py | 1 + game/operation/operation.py | 2 +- gen/aircraft.py | 14 +++++++++++--- gen/airsupportgen.py | 8 ++++---- gen/shipgen.py | 22 ++++++++++++---------- gen/visualgen.py | 2 +- theater/start_generator.py | 7 +++++-- ui/eventmenu.py | 15 ++++++++++----- 8 files changed, 45 insertions(+), 26 deletions(-) diff --git a/game/db.py b/game/db.py index 7141d1f8..e0e67e08 100644 --- a/game/db.py +++ b/game/db.py @@ -344,6 +344,7 @@ UNIT_BY_COUNTRY = { CARRIER_TYPE_BY_PLANE = { FA_18C_hornet: CVN_74_John_C__Stennis, + F_14B: CVN_74_John_C__Stennis, Ka_50: LHA_1_Tarawa, SA342M: LHA_1_Tarawa, UH_1H: LHA_1_Tarawa, diff --git a/game/operation/operation.py b/game/operation/operation.py index be34e4e1..8d32d94d 100644 --- a/game/operation/operation.py +++ b/game/operation/operation.py @@ -108,7 +108,7 @@ class Operation: at=global_cp.at) if global_cp == self.departure_cp and not self.is_quick: - if self.to_cp.captured: + if not self.to_cp.captured: self.attackers_starting_position = ship else: self.defenders_starting_position = ship diff --git a/gen/aircraft.py b/gen/aircraft.py index ae0173d5..f1357eb8 100644 --- a/gen/aircraft.py +++ b/gen/aircraft.py @@ -69,9 +69,15 @@ class AircraftConflictGenerator: else: client_count = 0 + if flying_type == F_14B: + # workaround since 2 and 3 tomcat collide on carrier + group_size = 2 + else: + group_size = 4 + while count > 0: - group_size = min(count, 4) - client_size = max(min(client_count, 4), 0) + group_size = min(count, group_size) + client_size = max(min(client_count, group_size), 0) yield (flying_type, group_size, client_size) count -= group_size @@ -183,7 +189,9 @@ class AircraftConflictGenerator: return self._generate_inflight(name, side, unit_type, count, client_count, at) elif isinstance(at, Group): takeoff_ban = unit_type in db.CARRIER_TAKEOFF_BAN - if not takeoff_ban: + ai_ban = client_count == 0 and self.settings.only_player_takeoff + + if not takeoff_ban and not ai_ban: return self._generate_at_group(name, side, unit_type, count, client_count, at) else: return self._generate_inflight(name, side, unit_type, count, client_count, at.position) diff --git a/gen/airsupportgen.py b/gen/airsupportgen.py index 5b9fc30d..caad2d49 100644 --- a/gen/airsupportgen.py +++ b/gen/airsupportgen.py @@ -49,8 +49,8 @@ class AirSupportConflictGenerator: ) tanker_group.points[0].tasks.append(ActivateBeaconCommand(channel=97 + i, unit_id=tanker_group.id, aa=False)) - tanker_group.tasks.append(SetInvisibleCommand(True)) - tanker_group.tasks.append(SetImmortalCommand(True)) + tanker_group.points[0].tasks.append(SetInvisibleCommand(True)) + tanker_group.points[0].tasks.append(SetImmortalCommand(True)) if is_awacs_enabled: awacs_unit = db.find_unittype(AWACS, self.conflict.attackers_side.name)[0] @@ -65,5 +65,5 @@ class AirSupportConflictGenerator: start_type=StartType.Warm, ) - awacs_flight.tasks.append(SetInvisibleCommand(True)) - awacs_flight.tasks.append(SetImmortalCommand(True)) + awacs_flight.points[0].tasks.append(SetInvisibleCommand(True)) + awacs_flight.points[0].tasks.append(SetImmortalCommand(True)) diff --git a/gen/shipgen.py b/gen/shipgen.py index 47808961..d9695873 100644 --- a/gen/shipgen.py +++ b/gen/shipgen.py @@ -35,17 +35,19 @@ class ShipGenerator: def generate_cargo(self, units: db.ShipDict) -> typing.Collection[ShipGroup]: groups = [] + offset = 0 for unit_type, unit_count in units.items(): - logging.info("shipgen: {} ({}) for {}".format(unit_type, unit_count, self.conflict.defenders_side)) - group = self.m.ship_group( - country=self.conflict.defenders_side, - name=namegen.next_unit_name(self.conflict.defenders_side, unit_type), - _type=unit_type, - position=self.conflict.ground_defenders_location.random_point_within(SHIP_RANDOM_SPREAD, SHIP_RANDOM_SPREAD), - group_size=unit_count, - ) + for _ in range(unit_count): + offset += 1 + logging.info("shipgen: {} ({}) for {}".format(unit_type, unit_count, self.conflict.defenders_side)) + group = self.m.ship_group( + country=self.conflict.defenders_side, + name=namegen.next_unit_name(self.conflict.defenders_side, unit_type), + _type=unit_type, + position=self.conflict.ground_defenders_location.random_point_within(SHIP_RANDOM_SPREAD, SHIP_RANDOM_SPREAD).point_from_heading(0, offset * SHIP_RANDOM_SPREAD) + ) - group.add_waypoint(self.conflict.to_cp.position) - groups.append(group) + group.add_waypoint(self.conflict.to_cp.position) + groups.append(group) return groups diff --git a/gen/visualgen.py b/gen/visualgen.py index 3de00424..16a848e9 100644 --- a/gen/visualgen.py +++ b/gen/visualgen.py @@ -134,7 +134,7 @@ class VisualGenerator: mission_units.add(db.unit_type_of(unit)) for unit_type in mission_units: - self.mission.static_group(self.mission.country("USA"), "a", unit_type, Point(0, 0)) + self.mission.static_group(self.mission.country("USA"), "a", unit_type, Point(0, 300000), hidden=True) def generate_target_smokes(self, target): spread = target.size * DESTINATION_SMOKE_DISTANCE_FACTOR diff --git a/theater/start_generator.py b/theater/start_generator.py index e118ef58..47ddbf86 100644 --- a/theater/start_generator.py +++ b/theater/start_generator.py @@ -76,10 +76,13 @@ def generate_groundobjects(theater: ConflictTheater): if cp.is_global: continue - amount = random.randrange(5, 7) + if not cp.has_frontline: + continue + + amount = random.randrange(5, 6) for i in range(0, amount): available_categories = list(tpls) - if i >= amount - 2: + if i >= amount - 1: tpl_category = "aa" else: tpl_category = random.choice(available_categories) diff --git a/ui/eventmenu.py b/ui/eventmenu.py index 78829962..e4c29e27 100644 --- a/ui/eventmenu.py +++ b/ui/eventmenu.py @@ -194,14 +194,19 @@ class EventMenu(Menu): self.error_label["text"] = "Need at least one player in flight {}".format(self.event.flight_name(task)) return - if isinstance(self.event, FrontlineAttackEvent) or isinstance(self.event, FrontlinePatrolEvent): - if self.event.from_cp.base.total_armor == 0: - self.error_label["text"] = "No ground vehicles available to attack!" - return - if self.game.is_player_attack(self.event): + if isinstance(self.event, FrontlineAttackEvent) or isinstance(self.event, FrontlinePatrolEvent): + if self.event.from_cp.base.total_armor == 0: + self.error_label["text"] = "No ground vehicles available to attack!" + return + self.event.player_attacking(flights) else: + if isinstance(self.event, FrontlineAttackEvent) or isinstance(self.event, FrontlinePatrolEvent): + if self.event.to_cp.base.total_armor == 0: + self.error_label["text"] = "No ground vehicles available to defend!" + return + self.event.player_defending(flights) self.game.initiate_event(self.event)