54 lines
2.1 KiB
GDScript
54 lines
2.1 KiB
GDScript
class_name BugMarker
|
|
extends Node3D
|
|
|
|
enum BugStatus { NEUTRAL, UNRESOLVED, IN_PROGRESS, RESOLVED }
|
|
@export var marker_status : BugStatus = BugStatus.NEUTRAL : set = __set_marker_status
|
|
const NEUTRAL_COLOUR = Color.CORNFLOWER_BLUE
|
|
const UNRESOLVED_COLOUR = Color(0.1, 0.0, 0.0)
|
|
const IN_PROGRESS_COLOUR = Color(0.5, 0.5, 0.0)
|
|
const RESOLVED_COLOUR = Color(0.0, 1.0, 0.0)
|
|
|
|
@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
|
|
var __arrow_material : ShaderMaterial
|
|
var __billboard_material : ShaderMaterial
|
|
|
|
|
|
func _ready() -> void:
|
|
__arrow_material = __arrow.mesh.surface_get_material(0) as ShaderMaterial
|
|
__billboard_material = __billboard.mesh.surface_get_material(0) as ShaderMaterial
|
|
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
|
|
|
|
|
|
func __set_marker_status(_status:BugStatus) -> void:
|
|
if __arrow_material and __billboard_material:
|
|
match _status:
|
|
BugStatus.NEUTRAL:
|
|
__arrow_material.set_shader_parameter("colour", NEUTRAL_COLOUR)
|
|
__billboard_material.set_shader_parameter("colour", NEUTRAL_COLOUR)
|
|
BugStatus.UNRESOLVED:
|
|
__arrow_material.set_shader_parameter("colour", UNRESOLVED_COLOUR)
|
|
__billboard_material.set_shader_parameter("colour", UNRESOLVED_COLOUR)
|
|
BugStatus.IN_PROGRESS:
|
|
__arrow_material.set_shader_parameter("colour", IN_PROGRESS_COLOUR)
|
|
__billboard_material.set_shader_parameter("colour", IN_PROGRESS_COLOUR)
|
|
BugStatus.RESOLVED:
|
|
__arrow_material.set_shader_parameter("colour", RESOLVED_COLOUR)
|
|
__billboard_material.set_shader_parameter("colour", RESOLVED_COLOUR)
|
|
|
|
marker_status = _status
|