mirror of
https://github.com/dcs-liberation/dcs_liberation.git
synced 2025-11-10 14:22:26 +00:00
Allow skynet properties override and improve dead unit handling
Now the user can override special skynet properties from the unit.yaml of the main Radar of the sam site. Which unit needs these overrides can be looked up over here: https://github.com/walder/Skynet-IADS/blob/develop/skynet-iads-source/skynet-iads-supported-types.lua - fixed wrong exclusion of groups with the first unit dead but still able to participate - added some exception handling in the lua script for groups which skynet is not able to control. preventing scripting errors
This commit is contained in:
@@ -3,7 +3,7 @@ from __future__ import annotations
|
||||
import logging
|
||||
from dataclasses import dataclass
|
||||
from pathlib import Path
|
||||
from typing import Type, Iterator
|
||||
from typing import Any, Optional, Type, Iterator
|
||||
|
||||
import yaml
|
||||
from dcs.unittype import VehicleType
|
||||
@@ -13,9 +13,47 @@ from game.data.units import UnitClass
|
||||
from game.dcs.unittype import UnitType
|
||||
|
||||
|
||||
@dataclass
|
||||
class SkynetProperties:
|
||||
can_engage_harm: Optional[str] = None
|
||||
can_engage_air_weapon: Optional[str] = None
|
||||
go_live_range_in_percent: Optional[str] = None
|
||||
engagement_zone: Optional[str] = None
|
||||
autonomous_behaviour: Optional[str] = None
|
||||
harm_detection_chance: Optional[str] = None
|
||||
|
||||
@classmethod
|
||||
def from_data(cls, data: dict[str, Any]) -> SkynetProperties:
|
||||
props = SkynetProperties()
|
||||
if "can_engage_harm" in data:
|
||||
props.can_engage_harm = str(data["can_engage_harm"]).lower()
|
||||
if "can_engage_air_weapon" in data:
|
||||
props.can_engage_air_weapon = str(data["can_engage_air_weapon"]).lower()
|
||||
if "go_live_range_in_percent" in data:
|
||||
props.go_live_range_in_percent = str(data["go_live_range_in_percent"])
|
||||
if "engagement_zone" in data:
|
||||
props.engagement_zone = str(data["engagement_zone"])
|
||||
if "autonomous_behaviour" in data:
|
||||
props.autonomous_behaviour = str(data["autonomous_behaviour"])
|
||||
if "harm_detection_chance" in data:
|
||||
props.harm_detection_chance = str(data["harm_detection_chance"])
|
||||
return props
|
||||
|
||||
def to_dict(self) -> dict[str, str]:
|
||||
properties: dict[str, str] = {}
|
||||
for key, value in self.__dict__.items():
|
||||
if value is not None:
|
||||
properties[key] = value
|
||||
return properties
|
||||
|
||||
def __hash__(self) -> int:
|
||||
return hash(id(self))
|
||||
|
||||
|
||||
@dataclass(frozen=True)
|
||||
class GroundUnitType(UnitType[Type[VehicleType]]):
|
||||
spawn_weight: int
|
||||
skynet_properties: SkynetProperties
|
||||
|
||||
@classmethod
|
||||
def named(cls, name: str) -> GroundUnitType:
|
||||
@@ -76,4 +114,7 @@ class GroundUnitType(UnitType[Type[VehicleType]]):
|
||||
manufacturer=data.get("manufacturer", "No data."),
|
||||
role=data.get("role", "No data."),
|
||||
price=data.get("price", 1),
|
||||
skynet_properties=SkynetProperties.from_data(
|
||||
data.get("skynet_properties", {})
|
||||
),
|
||||
)
|
||||
|
||||
Reference in New Issue
Block a user