dl_sec2.py 2.12 KiB
from enum import Enum, auto
class CraftMode(Enum):
Normal = auto()
MoveUp = auto()
MoveDown = auto()
class TrackMode(Enum):
T0 = auto()
T1 = auto()
T2 = auto()
M01 = auto()
M10 = auto()
M12 = auto()
M21 = auto()
class State:
x: float
y: float
z: float
vx: float
vy: float
vz: float
craft_mode: CraftMode
track_mode: TrackMode
def __init__(self, x, y, z, vx, vy, vz, craft_mode, track_mode):
pass
from typing import List
import copy
def is_close(ego, other):
res = (
(other.x - ego.x < 10 and other.x - ego.x > 8)
or (8 < other.y - ego.y < 10)
or (8 < other.z - ego.z < 10)
)
return res
def decisionLogic(ego: State, others: List[State], track_map):
next = copy.deepcopy(ego)
if ego.craft_mode == CraftMode.Normal:
if any(
ego.x < other.x and (is_close(ego, other) and ego.track_mode == other.track_mode)
for other in others
):
if track_map.h_exist(ego.track_mode, ego.craft_mode, CraftMode.MoveUp):
next.craft_mode = CraftMode.MoveUp
next.track_mode = track_map.h(ego.track_mode, ego.craft_mode, CraftMode.MoveUp)
if track_map.h_exist(ego.track_mode, ego.craft_mode, CraftMode.MoveDown):
next.craft_mode = CraftMode.MoveDown
next.track_mode = track_map.h(ego.track_mode, ego.craft_mode, CraftMode.MoveDown)
if ego.craft_mode == CraftMode.MoveUp:
if 1 > track_map.altitude(ego.track_mode) - ego.z > -1:
next.craft_mode = CraftMode.Normal
if track_map.h_exist(ego.track_mode, ego.craft_mode, CraftMode.Normal):
next.track_mode = track_map.h(ego.track_mode, ego.craft_mode, CraftMode.Normal)
if ego.craft_mode == CraftMode.MoveDown:
if 1 > track_map.altitude(ego.track_mode) - ego.z > -1:
next.craft_mode = CraftMode.Normal
if track_map.h_exist(ego.track_mode, ego.craft_mode, CraftMode.Normal):
next.track_mode = track_map.h(ego.track_mode, ego.craft_mode, CraftMode.Normal)
return next