diff --git a/Materials/bug_marker.gdshader b/Materials/bug_marker.gdshader index e0ed461..35e787e 100644 --- a/Materials/bug_marker.gdshader +++ b/Materials/bug_marker.gdshader @@ -3,7 +3,7 @@ shader_type spatial; render_mode blend_mix,depth_test_disabled,cull_disabled,unshaded; -uniform vec3 colour : source_color = vec3(1.0f, 0.0f, 0.0f); +uniform vec3 colour : source_color = vec3(1.0f); uniform sampler2D msdf_icon : filter_linear_mipmap,hint_default_black; uniform float shape_thickness : hint_range(0.0f,1.0f,0.01) = 0.95f; uniform vec3 line_colour : source_color = vec3(0.0f); diff --git a/Materials/bug_marker_arrow.material b/Materials/bug_marker_arrow.material index 3c66caa..4c61374 100644 Binary files a/Materials/bug_marker_arrow.material and b/Materials/bug_marker_arrow.material differ diff --git a/Materials/bug_marker_icon.material b/Materials/bug_marker_icon.material index e90f53c..035bbda 100644 Binary files a/Materials/bug_marker_icon.material and b/Materials/bug_marker_icon.material differ diff --git a/Meshes/arrow.res b/Meshes/arrow.res index 0e893dd..d1c216e 100644 Binary files a/Meshes/arrow.res and b/Meshes/arrow.res differ diff --git a/Scenes/bug_marker.gd b/Scenes/bug_marker.gd index a5455c2..d214d7d 100644 --- a/Scenes/bug_marker.gd +++ b/Scenes/bug_marker.gd @@ -1,3 +1,4 @@ +class_name BugMarker extends Node3D enum BugStatus { NEUTRAL, UNRESOLVED, IN_PROGRESS, RESOLVED } @@ -17,14 +18,20 @@ 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) + __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): - __info_collider.collision_layer = 0xFFFFFFFF if _enable else 0x00000000 + if __info_collider: + __info_collider.collision_layer = 0xFFFFFFFF if _enable else 0x00000000 func __set_marker_status(_status:BugStatus) -> void: diff --git a/Scenes/bug_marker_dummy.gd b/Scenes/bug_marker_dummy.gd index daa8efb..95b0007 100644 --- a/Scenes/bug_marker_dummy.gd +++ b/Scenes/bug_marker_dummy.gd @@ -14,8 +14,3 @@ func _process(_delta:float) -> void: position = Vector3(0.0, 0.0, 0.0) elif follow_node: global_position = follow_node.global_position - -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() diff --git a/Scenes/bugbot_player.gd b/Scenes/bugbot_player.gd index f0f23ab..c7903c0 100644 --- a/Scenes/bugbot_player.gd +++ b/Scenes/bugbot_player.gd @@ -4,6 +4,9 @@ extends CharacterBody3D ## A controllable bot that marks the location of a bug, and allows writing a bug ## report for it. +## Scene to use as the bug marker. +@export_file("*.scn","*.tscn") var bug_marker : String + ## Distance from camera to allow placing bug markers. @export_range(0.0, 100.0, 0.01, "or_greater", "suffix:m") var ray_length : float = 10.0 @@ -57,7 +60,7 @@ extends CharacterBody3D #region Onready @onready var __laser_beam : Node3D = $LaserBeamRoot as Node3D -@onready var __bug_marker_dummy : Node3D = $BugMarkerDummy as Node3D +@onready var __bug_marker_dummy : BugMarker = $LaserBeamRoot/LaserGlare/BugMarkerDummy as BugMarker @onready var __movement_speed_change_timer : Timer = $MovementSpeedChangeTimer as Timer @onready var __exit_placement_timer : Timer = $ExitPlacementTimer as Timer @onready var __camera : Camera3D = $CollisionShape3D/Camera3D @@ -261,7 +264,7 @@ func __calculate_movement() -> void: func __calculate_button_presses() -> void: if Input.is_action_just_pressed(&"bugbot_place_marker") and __raycast_collision: - print("Marker placed at ", __raycast_collision["position"]) + __place_marker(__raycast_collision["position"], __raycast_collision["normal"]) if Input.is_action_just_released(&"bugbot_exit_placement"): __exit_placement_timer.stop() @@ -286,9 +289,18 @@ func __raycast_to_world(): else: __laser_beam.visible = false +func __place_marker(_position:Vector3, _normal:Vector3): + var marker : BugMarker = (load(bug_marker) as PackedScene).instantiate() as BugMarker + get_tree().get_root().add_child(marker) + marker.global_position = _position + marker.set_rotation_to_normal(_normal) + marker.marker_status = BugMarker.BugStatus.UNRESOLVED + + func __place_dummy_marker(): - if __raycast_collision: - __bug_marker_dummy.set_rotation_to_normal(__raycast_collision["normal"]) - __bug_marker_dummy.visible = true - else: - __bug_marker_dummy.visible = false + if __bug_marker_dummy: + if __raycast_collision: + __bug_marker_dummy.set_rotation_to_normal(__raycast_collision["normal"]) + __bug_marker_dummy.visible = true + else: + __bug_marker_dummy.visible = false diff --git a/Scenes/bugbot_player.tscn b/Scenes/bugbot_player.tscn index 6196c1e..c11c01d 100644 --- a/Scenes/bugbot_player.tscn +++ b/Scenes/bugbot_player.tscn @@ -1,4 +1,4 @@ -[gd_scene load_steps=41 format=3 uid="uid://dvgain3s4xa4r"] +[gd_scene load_steps=40 format=3 uid="uid://dvgain3s4xa4r"] [ext_resource type="Script" path="res://addons/Bugbot/Scenes/bugbot_player.gd" id="1_kdrpa"] [ext_resource type="InputEventKey" uid="uid://di5q6d4wt12et" path="res://addons/Bugbot/Inputs/Keyboard/move_forward.res" id="2_jfhdw"] @@ -34,7 +34,6 @@ [ext_resource type="InputEventJoypadButton" uid="uid://bc2q8kry856bq" path="res://addons/Bugbot/Inputs/Joystick/place_marker.res" id="32_q7vmk"] [ext_resource type="InputEventJoypadButton" uid="uid://8tu5a8nlxgsj" path="res://addons/Bugbot/Inputs/Joystick/exit_placement.res" id="33_lwr38"] [ext_resource type="PackedScene" uid="uid://crr6cjploetps" path="res://addons/Bugbot/Scenes/bug_marker.tscn" id="34_jyjbc"] -[ext_resource type="Script" path="res://addons/Bugbot/Scenes/bug_marker_dummy.gd" id="35_ibing"] [ext_resource type="Material" uid="uid://c8b630nfapp8l" path="res://addons/Bugbot/Materials/laser_glow.material" id="35_xqv41"] [ext_resource type="Material" uid="uid://dewbda2gd8bgv" path="res://addons/Bugbot/Materials/laser_glare.material" id="36_e4bro"] @@ -60,6 +59,7 @@ motion_mode = 1 platform_on_leave = 2 platform_floor_layers = 0 script = ExtResource("1_kdrpa") +bug_marker = "res://addons/Bugbot/Scenes/bug_marker.tscn" keyboard_move_forward = ExtResource("2_jfhdw") keyboard_move_backward = ExtResource("3_0y0pl") keyboard_move_left = ExtResource("4_wdhjx") @@ -93,11 +93,6 @@ joypad_movement_speed_down = ExtResource("31_t01c7") joypad_place_marker = ExtResource("32_q7vmk") joypad_exit_placement = ExtResource("33_lwr38") -[node name="BugMarkerDummy" type="Node3D" parent="." node_paths=PackedStringArray("follow_node")] -script = ExtResource("35_ibing") -bug_marker = ExtResource("34_jyjbc") -follow_node = NodePath("../LaserBeamRoot/LaserGlare") - [node name="LaserBeamRoot" type="Node3D" parent="."] transform = Transform3D(1, 0, 0, 0, -4.37114e-08, 1, 0, -1, -4.37114e-08, -0.5, -0.5, 0) @@ -114,6 +109,9 @@ gi_mode = 0 mesh = SubResource("QuadMesh_kvipo") skeleton = NodePath("../..") +[node name="BugMarkerDummy" parent="LaserBeamRoot/LaserGlare" instance=ExtResource("34_jyjbc")] +enable_info = false + [node name="CollisionShape3D" type="CollisionShape3D" parent="."] shape = SubResource("SphereShape3D_6gwao") debug_color = Color(0.5, 0.7, 1, 1)