Bugbot/Scenes/bug_marker.gd

53 lines
2.0 KiB
GDScript

@tool
class_name BugMarker
extends Node3D
@export_group("Marker", "marker_")
enum BugStatus { NEUTRAL, UNRESOLVED, IN_PROGRESS, RESOLVED }
@export var marker_status : BugStatus = BugStatus.NEUTRAL : set = __set_marker_status
@export var marker_material_neutral : BugMarkerMaterialPack
@export var marker_material_unresolved : BugMarkerMaterialPack
@export var marker_material_in_progress : BugMarkerMaterialPack
@export var marker_material_resolved : BugMarkerMaterialPack
@export_group("")
@export var enable_info : bool = true : set = set_info_enabled
@onready var __arrow : MeshInstance3D = $Arrow as MeshInstance3D
@onready var __billboard : MeshInstance3D = $Billboard as MeshInstance3D
@onready var __info_collider : Area3D = $Billboard/Info as Area3D
func _ready() -> void:
set_info_enabled(enable_info)
__set_marker_status(marker_status)
func set_rotation_to_normal(_normal:Vector3) -> void:
global_transform.basis.y = _normal
global_transform.basis.x = global_transform.basis.z.cross(_normal)
global_transform.basis = global_transform.basis.orthonormalized()
func set_info_enabled(_enable:bool):
if __info_collider:
__info_collider.collision_layer = 0xFFFFFFFF if _enable else 0x00000000
enable_info = _enable
func __set_marker_status(_status:BugStatus) -> void:
match _status:
BugStatus.NEUTRAL:
__arrow.set_surface_override_material(0, marker_material_neutral.arrow)
__billboard.set_surface_override_material(0, marker_material_neutral.icon)
BugStatus.UNRESOLVED:
__arrow.set_surface_override_material(0, marker_material_unresolved.arrow)
__billboard.set_surface_override_material(0, marker_material_unresolved.icon)
BugStatus.IN_PROGRESS:
__arrow.set_surface_override_material(0, marker_material_in_progress.arrow)
__billboard.set_surface_override_material(0, marker_material_in_progress.icon)
BugStatus.RESOLVED:
__arrow.set_surface_override_material(0, marker_material_resolved.arrow)
__billboard.set_surface_override_material(0, marker_material_resolved.icon)
marker_status = _status