mirror of
https://github.com/dcs-liberation/dcs_liberation.git
synced 2025-11-10 14:22:26 +00:00
correct prices for ewr and sams
prices will now be calculated for the whole group by the generator by looking up the price using the GroundUnitType wrapper fixes #1163
This commit is contained in:
parent
3f42f1281d
commit
96be6c0efe
@ -19,10 +19,12 @@ Saves from 4.0.0 are compatible with 4.1.0.
|
|||||||
* **[UI]** Hovering over the weather information now dispalys the cloud base (meters and feet).
|
* **[UI]** Hovering over the weather information now dispalys the cloud base (meters and feet).
|
||||||
* **[UI]** Google search link added to unit information when there is no information provided.
|
* **[UI]** Google search link added to unit information when there is no information provided.
|
||||||
* **[UI]** Control point name displayed with ground object group name on map.
|
* **[UI]** Control point name displayed with ground object group name on map.
|
||||||
|
* **[UI]** Buy or Replace will now show the correct price for generated ground objects like sams.
|
||||||
|
|
||||||
## Fixes
|
## Fixes
|
||||||
|
|
||||||
* **[Campaign]** Fixed the Silkworm generator to include launchers and not all radars.
|
* **[Campaign]** Fixed the Silkworm generator to include launchers and not all radars.
|
||||||
|
* **[Economy]** EWRs can now be bought and sold for the correct price and can no longer be used to generate money
|
||||||
* **[Flight Planning]** Fixed potential issue with angles > 360° or < 0° being generated when summing two angles.
|
* **[Flight Planning]** Fixed potential issue with angles > 360° or < 0° being generated when summing two angles.
|
||||||
* **[Mission Generation]** The lua data for other plugins is now generated correctly
|
* **[Mission Generation]** The lua data for other plugins is now generated correctly
|
||||||
* **[UI]** Statistics window tick marks are now always integers.
|
* **[UI]** Statistics window tick marks are now always integers.
|
||||||
|
|||||||
@ -43,8 +43,6 @@ class AirDefenseGroupGenerator(GroupGenerator, ABC):
|
|||||||
This is the base for all SAM group generators
|
This is the base for all SAM group generators
|
||||||
"""
|
"""
|
||||||
|
|
||||||
price: int
|
|
||||||
|
|
||||||
def __init__(self, game: Game, ground_object: SamGroundObject) -> None:
|
def __init__(self, game: Game, ground_object: SamGroundObject) -> None:
|
||||||
super().__init__(game, ground_object)
|
super().__init__(game, ground_object)
|
||||||
|
|
||||||
|
|||||||
@ -13,11 +13,6 @@ class EwrGenerator(GroupGenerator):
|
|||||||
def name(cls) -> str:
|
def name(cls) -> str:
|
||||||
return cls.unit_type.name
|
return cls.unit_type.name
|
||||||
|
|
||||||
@staticmethod
|
|
||||||
def price() -> int:
|
|
||||||
# TODO: Differentiate sites.
|
|
||||||
return 20
|
|
||||||
|
|
||||||
def generate(self) -> None:
|
def generate(self) -> None:
|
||||||
self.add_unit(
|
self.add_unit(
|
||||||
self.unit_type, "EWR", self.position.x, self.position.y, self.heading
|
self.unit_type, "EWR", self.position.x, self.position.y, self.heading
|
||||||
|
|||||||
@ -1,5 +1,6 @@
|
|||||||
from __future__ import annotations
|
from __future__ import annotations
|
||||||
|
|
||||||
|
import logging
|
||||||
import math
|
import math
|
||||||
import random
|
import random
|
||||||
from typing import TYPE_CHECKING, Type
|
from typing import TYPE_CHECKING, Type
|
||||||
@ -10,6 +11,7 @@ from dcs.point import PointAction
|
|||||||
from dcs.unit import Ship, Vehicle
|
from dcs.unit import Ship, Vehicle
|
||||||
from dcs.unittype import VehicleType
|
from dcs.unittype import VehicleType
|
||||||
|
|
||||||
|
from game.dcs.groundunittype import GroundUnitType
|
||||||
from game.factions.faction import Faction
|
from game.factions.faction import Faction
|
||||||
from game.theater.theatergroundobject import TheaterGroundObject
|
from game.theater.theatergroundobject import TheaterGroundObject
|
||||||
|
|
||||||
@ -23,11 +25,15 @@ if TYPE_CHECKING:
|
|||||||
# care about in the format we want if we just generate our own group description
|
# care about in the format we want if we just generate our own group description
|
||||||
# types rather than pydcs groups.
|
# types rather than pydcs groups.
|
||||||
class GroupGenerator:
|
class GroupGenerator:
|
||||||
|
|
||||||
|
price: int
|
||||||
|
|
||||||
def __init__(self, game: Game, ground_object: TheaterGroundObject) -> None:
|
def __init__(self, game: Game, ground_object: TheaterGroundObject) -> None:
|
||||||
self.game = game
|
self.game = game
|
||||||
self.go = ground_object
|
self.go = ground_object
|
||||||
self.position = ground_object.position
|
self.position = ground_object.position
|
||||||
self.heading = random.randint(0, 359)
|
self.heading = random.randint(0, 359)
|
||||||
|
self.price = 0
|
||||||
self.vg = unitgroup.VehicleGroup(self.game.next_group_id(), self.go.group_name)
|
self.vg = unitgroup.VehicleGroup(self.game.next_group_id(), self.go.group_name)
|
||||||
wp = self.vg.add_waypoint(self.position, PointAction.OffRoad, 0)
|
wp = self.vg.add_waypoint(self.position, PointAction.OffRoad, 0)
|
||||||
wp.ETA_locked = True
|
wp.ETA_locked = True
|
||||||
@ -62,6 +68,14 @@ class GroupGenerator:
|
|||||||
unit.position = position
|
unit.position = position
|
||||||
unit.heading = heading
|
unit.heading = heading
|
||||||
group.add_unit(unit)
|
group.add_unit(unit)
|
||||||
|
|
||||||
|
# get price of unit to calculate the real price of the whole group
|
||||||
|
try:
|
||||||
|
ground_unit_type = next(GroundUnitType.for_dcs_type(unit_type))
|
||||||
|
self.price += ground_unit_type.price
|
||||||
|
except StopIteration:
|
||||||
|
logging.error(f"Cannot get price for unit {unit_type.name}")
|
||||||
|
|
||||||
return unit
|
return unit
|
||||||
|
|
||||||
def get_circular_position(self, num_units, launcher_distance, coverage=90):
|
def get_circular_position(self, num_units, launcher_distance, coverage=90):
|
||||||
|
|||||||
@ -305,8 +305,11 @@ class QBuyGroupForGroundObjectDialog(QDialog):
|
|||||||
|
|
||||||
possible_sams = get_faction_possible_sams_generator(faction)
|
possible_sams = get_faction_possible_sams_generator(faction)
|
||||||
for sam in possible_sams:
|
for sam in possible_sams:
|
||||||
|
# Pre Generate SAM to get the real price
|
||||||
|
generator = sam(self.game, self.ground_object)
|
||||||
|
generator.generate()
|
||||||
self.samCombo.addItem(
|
self.samCombo.addItem(
|
||||||
sam.name + " [$" + str(sam.price) + "M]", userData=sam
|
generator.name + " [$" + str(generator.price) + "M]", userData=generator
|
||||||
)
|
)
|
||||||
self.samCombo.currentIndexChanged.connect(self.samComboChanged)
|
self.samCombo.currentIndexChanged.connect(self.samComboChanged)
|
||||||
|
|
||||||
@ -331,8 +334,12 @@ class QBuyGroupForGroundObjectDialog(QDialog):
|
|||||||
buy_ewr_layout.addWidget(self.ewr_selector, 0, 1, alignment=Qt.AlignRight)
|
buy_ewr_layout.addWidget(self.ewr_selector, 0, 1, alignment=Qt.AlignRight)
|
||||||
ewr_types = get_faction_possible_ewrs_generator(faction)
|
ewr_types = get_faction_possible_ewrs_generator(faction)
|
||||||
for ewr_type in ewr_types:
|
for ewr_type in ewr_types:
|
||||||
|
# Pre Generate to get the real price
|
||||||
|
generator = ewr_type(self.game, self.ground_object)
|
||||||
|
generator.generate()
|
||||||
self.ewr_selector.addItem(
|
self.ewr_selector.addItem(
|
||||||
f"{ewr_type.name()} [${ewr_type.price()}M]", ewr_type
|
generator.name() + " [$" + str(generator.price) + "M]",
|
||||||
|
userData=generator,
|
||||||
)
|
)
|
||||||
self.ewr_selector.currentIndexChanged.connect(self.on_ewr_selection_changed)
|
self.ewr_selector.currentIndexChanged.connect(self.on_ewr_selection_changed)
|
||||||
|
|
||||||
@ -402,7 +409,7 @@ class QBuyGroupForGroundObjectDialog(QDialog):
|
|||||||
def on_ewr_selection_changed(self, index):
|
def on_ewr_selection_changed(self, index):
|
||||||
ewr = self.ewr_selector.itemData(index)
|
ewr = self.ewr_selector.itemData(index)
|
||||||
self.buy_ewr_button.setText(
|
self.buy_ewr_button.setText(
|
||||||
f"Buy [${ewr.price()}M][-${self.current_group_value}M]"
|
f"Buy [${ewr.price}M][-${self.current_group_value}M]"
|
||||||
)
|
)
|
||||||
|
|
||||||
def armorComboChanged(self, index):
|
def armorComboChanged(self, index):
|
||||||
@ -443,25 +450,20 @@ class QBuyGroupForGroundObjectDialog(QDialog):
|
|||||||
else:
|
else:
|
||||||
self.game.budget -= price
|
self.game.budget -= price
|
||||||
|
|
||||||
# Generate SAM
|
self.ground_object.groups = list(sam_generator.groups)
|
||||||
generator = sam_generator(self.game, self.ground_object)
|
|
||||||
generator.generate()
|
|
||||||
self.ground_object.groups = list(generator.groups)
|
|
||||||
|
|
||||||
GameUpdateSignal.get_instance().updateGame(self.game)
|
GameUpdateSignal.get_instance().updateGame(self.game)
|
||||||
|
|
||||||
def buy_ewr(self):
|
def buy_ewr(self):
|
||||||
ewr_generator = self.ewr_selector.itemData(self.ewr_selector.currentIndex())
|
ewr_generator = self.ewr_selector.itemData(self.ewr_selector.currentIndex())
|
||||||
price = ewr_generator.price() - self.current_group_value
|
price = ewr_generator.price - self.current_group_value
|
||||||
if price > self.game.budget:
|
if price > self.game.budget:
|
||||||
self.error_money()
|
self.error_money()
|
||||||
return
|
return
|
||||||
else:
|
else:
|
||||||
self.game.budget -= price
|
self.game.budget -= price
|
||||||
|
|
||||||
generator = ewr_generator(self.game, self.ground_object)
|
self.ground_object.groups = [ewr_generator.vg]
|
||||||
generator.generate()
|
|
||||||
self.ground_object.groups = [generator.vg]
|
|
||||||
|
|
||||||
GameUpdateSignal.get_instance().updateGame(self.game)
|
GameUpdateSignal.get_instance().updateGame(self.game)
|
||||||
|
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user