Bugbot/Scenes/bug_marker.gd
Jamie Greunbaum 0ed55dd461 - Spit BugMarker and BugMarkerDummy into two different classes so they can be more easily differentiated.
- Added a collision area to the marker to act as an info box in the future.
2024-05-16 15:02:32 -04:00

47 lines
1.8 KiB
GDScript

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:
if __arrow and __billboard:
__arrow_material = __arrow.mesh.surface_get_material(0) as ShaderMaterial
__billboard_material = __billboard.mesh.surface_get_material(0) as ShaderMaterial
__set_marker_status(marker_status)
func set_info_enabled(_enable:bool):
__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