from dataclasses import dataclass
from typing import Tuple
from simulation.utils.road.sections.road_element import RoadElementRect
from . import ID
[docs]@dataclass
class SignTuple:
mesh: str
id_: int = None
large_sign_collision_box_size = (0.015, 0.15, 0.3)
large_sign_collision_box_position = (0, 0, 0.15)
small_sign_collision_box_size = (0.015, 0.1, 0.275)
small_sign_collision_box_position = (0, 0, 0.1375)
collision_box_size: Tuple[float, float, float] = large_sign_collision_box_size
collision_box_position: Tuple[float, float, float] = large_sign_collision_box_position
def __post_init__(self):
self.id_ = ID.register(ns=100)
[docs]@dataclass
class TrafficSign(RoadElementRect):
ZONE_10_START = SignTuple(mesh="speed_limit_zone_10_start_sign")
ZONE_20_START = SignTuple(mesh="speed_limit_zone_20_start_sign")
ZONE_30_START = SignTuple(mesh="speed_limit_zone_30_start_sign")
ZONE_40_START = SignTuple(mesh="speed_limit_zone_40_start_sign")
ZONE_50_START = SignTuple(mesh="speed_limit_zone_50_start_sign")
ZONE_60_START = SignTuple(mesh="speed_limit_zone_60_start_sign")
ZONE_70_START = SignTuple(mesh="speed_limit_zone_70_start_sign")
ZONE_80_START = SignTuple(mesh="speed_limit_zone_80_start_sign")
ZONE_90_START = SignTuple(mesh="speed_limit_zone_90_start_sign")
ZONE_10_END = SignTuple(mesh="speed_limit_zone_10_end_sign")
ZONE_20_END = SignTuple(mesh="speed_limit_zone_20_end_sign")
ZONE_30_END = SignTuple(mesh="speed_limit_zone_30_end_sign")
ZONE_40_END = SignTuple(mesh="speed_limit_zone_40_end_sign")
ZONE_50_END = SignTuple(mesh="speed_limit_zone_50_end_sign")
ZONE_60_END = SignTuple(mesh="speed_limit_zone_60_end_sign")
ZONE_70_END = SignTuple(mesh="speed_limit_zone_70_end_sign")
ZONE_80_END = SignTuple(mesh="speed_limit_zone_80_end_sign")
ZONE_90_END = SignTuple(mesh="speed_limit_zone_90_end_sign")
RAMP_START = SignTuple(mesh="uphill_grade_sign")
RAMP_END = SignTuple(mesh="downhill_grade_sign")
PRIORITY = SignTuple(
mesh="priority_sign",
collision_box_size=SignTuple.small_sign_collision_box_size,
collision_box_position=SignTuple.small_sign_collision_box_position,
)
YIELD = SignTuple(mesh="yield_sign")
STOP = SignTuple(mesh="stop_sign")
ONCOMING_TRAFFIC = SignTuple(
mesh="oncoming_traffic_sign",
collision_box_size=SignTuple.small_sign_collision_box_size,
collision_box_position=SignTuple.small_sign_collision_box_position,
)
NO_OVERTAKING_START = SignTuple(
mesh="no_overtaking_start_sign",
collision_box_size=SignTuple.small_sign_collision_box_size,
collision_box_position=SignTuple.small_sign_collision_box_position,
)
NO_OVERTAKING_END = SignTuple(
mesh="no_overtaking_end_sign",
collision_box_size=SignTuple.small_sign_collision_box_size,
collision_box_position=SignTuple.small_sign_collision_box_position,
)
TURN_RIGHT = SignTuple(
mesh="turn_right_sign",
collision_box_size=SignTuple.small_sign_collision_box_size,
collision_box_position=SignTuple.small_sign_collision_box_position,
)
TURN_LEFT = SignTuple(
mesh="turn_left_sign",
collision_box_size=SignTuple.small_sign_collision_box_size,
collision_box_position=SignTuple.small_sign_collision_box_position,
)
PASS_RIGHT = SignTuple(
mesh="pass_right_sign",
collision_box_size=(0.015, 0.1, 0.125),
collision_box_position=(0, 0, 0.0625),
)
PASS_LEFT = SignTuple(
mesh="pass_left_sign",
collision_box_size=(0.015, 0.1, 0.125),
collision_box_position=(0, 0, 0.0625),
)
SHARP_TURN_RIGHT_SMALL = SignTuple(
mesh="sharp_turn_right_small_sign",
collision_box_size=(0.015, 0.1, 0.125),
collision_box_position=(0, 0, 0.0625),
)
SHARP_TURN_RIGHT = SignTuple(
mesh="sharp_turn_right_sign",
collision_box_size=(0.015, 0.3, 0.125),
collision_box_position=(0, 0, 0.0625),
)
SHARP_TURN_LEFT_SMALL = SignTuple(
mesh="sharp_turn_left_small_sign",
collision_box_size=(0.015, 0.1, 0.125),
collision_box_position=(0, 0, 0.0625),
)
SHARP_TURN_LEFT = SignTuple(
mesh="sharp_turn_left_sign",
collision_box_size=(0.015, 0.3, 0.125),
collision_box_position=(0, 0, 0.0625),
)
ZEBRA_CROSSING = SignTuple(mesh="zebra_crossing_sign")
PARKING = SignTuple(mesh="parking_sign")
EXPRESSWAY_START = SignTuple(mesh="expressway_start_sign")
EXPRESSWAY_END = SignTuple(mesh="expressway_end_sign")
kind: SignTuple = None
def __post_init__(self):
super().__post_init__()
assert self.kind is not None, "Kind of the traffic sign not specified."