-- Draw a sphere as the crosshair vertex (point of rotation)

class "bshape_renderer" (aol_bshape.bshape_renderer)

function bshape_renderer:__init() super()
    self.crosshair_gizmo = nil
end

function bshape_renderer:DrawCube(bshape_collider)
    if self.crosshair_gizmo == nil then
        self.crosshair_gizmo = self:AddCrosshairGizmo(bshape_collider)
    end

    aol_bshape.bshape_renderer.DrawCube(self, bshape_collider)

    local scale_mat = matrix():identity():scale(0.02,0.02,0.02)
    local pos_mat = matrix():translate(bshape_collider.world_vertices[self.crosshair_gizmo.vertex])
    local mat = matrix():mul(pos_mat, scale_mat)
    self.crosshair_gizmo.gizmo.matrix = mat
    self.crosshair_gizmo.gizmo.visible = true
end

function bshape_renderer:AddCrosshairGizmo(bshape_collider)
    if bshape_collider == nil then
        return
    end

    local crosshair_vertex = #bshape_collider.world_vertices

    local color = aol_bshape.color_not_colliding
    aol_bshape.last_gizmo_id = aol_bshape.last_gizmo_id + 1
    local sphere = debug_render.add_object(aol_bshape.last_gizmo_id, DBG_ScriptObject.sphere):cast_dbg_sphere()
    sphere.visible = true
    sphere.color = color
    local scale_mat = matrix():identity():scale(0.02,0.02,0.02)
    local pos_mat = matrix():translate(bshape_collider.world_vertices[crosshair_vertex])
    local mat = matrix():mul(pos_mat, scale_mat)
    sphere.matrix = mat

    return {
        gizmo = sphere,
        vertex = #bshape_collider.world_vertices,
    }
end

function bshape_renderer:StopCrosshairGizmo()
    self.crosshair_gizmo.gizmo.visible = false
end

function bshape_renderer:Stop()
    aol_bshape.bshape_renderer.Stop(self)
    self:StopCrosshairGizmo()
end