mirror of
https://github.com/dcs-liberation/dcs_liberation.git
synced 2025-11-10 14:22:26 +00:00
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
77 lines
2.5 KiB
Python
77 lines
2.5 KiB
Python
from __future__ import annotations
|
|
from uuid import UUID
|
|
|
|
from pydantic import BaseModel
|
|
|
|
from game.server.leaflet import LeafletPoint
|
|
from game.theater.iadsnetwork.iadsnetwork import IadsNetworkNode, IadsNetwork
|
|
from game.theater.theatergroundobject import TheaterGroundObject
|
|
|
|
|
|
class IadsConnectionJs(BaseModel):
|
|
id: UUID
|
|
points: list[LeafletPoint]
|
|
node: UUID
|
|
connected: UUID
|
|
active: bool
|
|
blue: bool
|
|
is_power: bool
|
|
|
|
class Config:
|
|
title = "IadsConnection"
|
|
|
|
@staticmethod
|
|
def connections_for_tgo(
|
|
tgo_id: UUID, network: IadsNetwork
|
|
) -> list[IadsConnectionJs]:
|
|
for node in network.nodes:
|
|
if node.group.ground_object.id == tgo_id:
|
|
return IadsConnectionJs.connections_for_node(node)
|
|
return []
|
|
|
|
@staticmethod
|
|
def connections_for_node(network_node: IadsNetworkNode) -> list[IadsConnectionJs]:
|
|
iads_connections = []
|
|
tgo = network_node.group.ground_object
|
|
for id, connection in network_node.connections.items():
|
|
if connection.ground_object.is_friendly(True) != tgo.is_friendly(True):
|
|
continue # Skip connections which are not from same coalition
|
|
iads_connections.append(
|
|
IadsConnectionJs(
|
|
id=id,
|
|
points=[
|
|
tgo.position.latlng(),
|
|
connection.ground_object.position.latlng(),
|
|
],
|
|
node=tgo.id,
|
|
connected=connection.ground_object.id,
|
|
active=(
|
|
network_node.group.alive_units > 0
|
|
and connection.alive_units > 0
|
|
),
|
|
blue=tgo.is_friendly(True),
|
|
is_power="power"
|
|
in [tgo.category, connection.ground_object.category],
|
|
)
|
|
)
|
|
return iads_connections
|
|
|
|
|
|
class IadsNetworkJs(BaseModel):
|
|
advanced: bool
|
|
connections: list[IadsConnectionJs]
|
|
|
|
class Config:
|
|
title = "IadsNetwork"
|
|
|
|
@staticmethod
|
|
def from_network(network: IadsNetwork) -> IadsNetworkJs:
|
|
iads_connections = []
|
|
for connection in network.nodes:
|
|
if not connection.group.iads_role.participate:
|
|
continue # Skip
|
|
iads_connections.extend(IadsConnectionJs.connections_for_node(connection))
|
|
return IadsNetworkJs(
|
|
advanced=network.advanced_iads, connections=iads_connections
|
|
)
|