import $"{AGX_DATA_DIR}/models/openplx/traffic_cone.png" as TrafficConeColor
import $"{AGX_DATA_DIR}/models/openplx/traffic_cone.obj" as TrafficConeVisual

# Define the visual material for the traffic cone
const TrafficConeVisualMaterial is Visuals.Materials.Material:
    with Visuals.Materials.SurfaceFeatures.BaseColor
    base_color_map: TrafficConeColor

# Define a traffic cone as an instantiable system
Base is Physics3D.System:
    # Define a body
    body is Physics3D.Bodies.RigidBody:
        is_dynamic: true
        inertia:
            mass: 4.0
        cone_body_collider is Physics3D.Geometries.Cylinder:
            local_transform:
                position: Math.Vec3.from_xyz(0.0, 0.0, 0.5)
                rotation: Math.Quat.from_euler_angles(Math.Functions.deg_to_rad(90.0), 0.0, 0.0)
            radius: 0.1
            height: 1.0
        cone_body_base is Physics3D.Geometries.Box:
            local_transform:
                position: Math.Vec3.from_xyz(0.0, 0.0, 0.025)
            size: Math.Vec3.from_xyz(0.4, 0.4, 0.05)

        # Add a visualization of the cone
        visual is TrafficConeVisual with Visuals.Materials.VisualMaterialOverrideTrait:
            material_override: TrafficConeVisualMaterial
