pretty happy with hud minimap

This commit is contained in:
derek
2025-05-06 15:54:40 -05:00
parent cab1a57238
commit 617c78d2e7
12 changed files with 99 additions and 39 deletions

View File

@@ -3,7 +3,7 @@
[sub_resource type="CylinderMesh" id="CylinderMesh_oai8k"]
top_radius = 0.05
bottom_radius = 0.05
height = 20.0
height = 1.0
[sub_resource type="StandardMaterial3D" id="StandardMaterial3D_oai8k"]
transparency = 1
@@ -15,6 +15,6 @@ emission_energy_multiplier = 10.0
[node name="enemyTargetMarker" type="Node3D"]
[node name="Node3D" type="MeshInstance3D" parent="."]
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 10, 0)
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.5, 0)
mesh = SubResource("CylinderMesh_oai8k")
surface_material_override/0 = SubResource("StandardMaterial3D_oai8k")

View File

@@ -51,11 +51,21 @@ grow_horizontal = 2
grow_vertical = 2
script = ExtResource("5_1xsix")
[node name="Minimap" type="Control" parent="StaticItems"]
anchors_preset = 0
offset_right = 40.0
offset_bottom = 40.0
[node name="Minimap" type="Control" parent="StaticItems" node_paths=PackedStringArray("hud")]
layout_mode = 1
anchors_preset = 8
anchor_left = 0.5
anchor_top = 0.5
anchor_right = 0.5
anchor_bottom = 0.5
offset_left = -20.0
offset_top = -20.0
offset_right = 20.0
offset_bottom = 20.0
grow_horizontal = 2
grow_vertical = 2
script = ExtResource("3_640wx")
hud = NodePath("../..")
[node name="WobbleItems" type="Control" parent="."]
layout_mode = 1

View File

@@ -30,7 +30,7 @@ time_to_kill = 20.0
[node name="Level" type="Node3D" parent="."]
script = ExtResource("3_25f4w")
start_enemies = 10
start_enemies = 15
[node name="EnemySpawner" parent="Level" instance=ExtResource("5_idky0")]
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 46.8788, 1.54828, 7.20375)

View File

@@ -18,11 +18,17 @@ func Enter():
clear_points_of_interest()
func Physics_Update(delta):
update_minimap(0,2.0,ColorSwatch.RED_COLOR)
if enemy.is_player_visible():
#reset lost target timer
lost_target_timer = time_to_lose_target
#attack move and look
attack_move_and_look(delta)
#get player location
enemy.cache_player_pos()
#set player location as target
update_player_target()
#move and look at location
move_to_nav_point(delta)
turret_look3D(delta)
#Initial wait time
if initial_timer > 0:
initial_timer -= delta
@@ -37,19 +43,12 @@ func Physics_Update(delta):
else:
if lost_target_timer > 0:
lost_target_timer -= delta
attack_move_and_look(delta)
#move and look at location
move_to_nav_point(delta)
turret_look3D(delta)
else:
Transitioned.emit(self,"search")
func attack_move_and_look(delta):
#get player location
enemy.cache_player_pos()
#set player location as target
update_player_target()
#move and look at location
move_to_nav_point(delta)
turret_look3D(delta)
func attack_sequence(delta):
if shot_timer > 0:
shot_timer -= delta
@@ -94,6 +93,3 @@ func spawn_casing():
instance_casing.transform.basis = enemy.casing_ejector.global_transform.basis
instance_casing.player_velocity = enemy.velocity * enemy.transform.basis
get_tree().get_root().add_child(instance_casing)
func update_minimap():
SignalBus.emit_signal("ui_minimap_point",self,enemy.global_position,ColorSwatch.RED_COLOR)

View File

@@ -11,6 +11,7 @@ func Enter():
get_new_point_of_interest()
func Update(delta):
update_minimap(0,1.0,ColorSwatch.ORANGE_COLOR)
attack_on_sight()
#on timeout change scan direction
if scan_timer > 0:

View File

@@ -156,3 +156,6 @@ func debug_marker(target_pos):
enemy.debug_tracker.global_position = target_pos
else:
enemy.debug_tracker.visible = false
func update_minimap(priority,duration,color):
SignalBus.emit_signal("ui_minimap_point",enemy,enemy.global_position,1,duration,color)

View File

@@ -31,7 +31,7 @@ func _process(delta: float) -> void:
if target_enemy != null:
update_minimap()
if timer > 0:
timer -= delta
timer -= delta * Engine.time_scale
update_timer("kill target")
else:
level_control.last_hit = target_enemy
@@ -41,7 +41,7 @@ func _process(delta: float) -> void:
select_random_enemy()
func update_minimap():
SignalBus.emit_signal("ui_minimap_point",self,ui_marker.global_position,ColorSwatch.GREEN_COLOR)
SignalBus.emit_signal("ui_minimap_point",self,ui_marker.global_position,3,5.0,ColorSwatch.GREEN_COLOR)
func update_timer(label):
var rounded_timer = str(timer).pad_decimals(2)
@@ -59,7 +59,7 @@ func add_marker_to_enemy():
if target_enemy != null:
var instance_marker = marker.instantiate()
target_enemy.add_child(instance_marker)
instance_marker.global_position = target_enemy.global_position
instance_marker.global_position = target_enemy.global_position + Vector3(0,3,0)
ui_marker = instance_marker
func select_random_enemy():

View File

@@ -168,9 +168,9 @@ func spawn_notifs():
await get_tree().create_timer(.2).timeout
can_spawn = true
func add_minimap_point(node_owner,point_position,color):
func add_minimap_point(node_owner,point_position,priority,duration,color):
var key = node_owner.name
var data = {"position" : point_position,"color" : color}
var data = {"position" : point_position,"priority" : priority,"timer" : duration, "color" : color}
minimap_points[key] = data
func player_hit():

View File

@@ -6,6 +6,16 @@ extends Control
## SETTINGS
const MINIMAP_POINT_RADIUS :float = 10.0
const MINIMAP_DISPLAY_RADIUS : float = 200.0
const MINIMAP_MAX_OPACITY : float = .75
const ERASE_BUFFER_TIME = -10.0
const MAX_PRIORITY_SIZE = 4
var draw_delta_time
func _process(delta: float) -> void:
position = hud.viewportCenter
draw_delta_time = delta #this workaround sucks, fix it later
queue_redraw()
func _draw() -> void:
update_minimap()
@@ -16,14 +26,26 @@ func update_minimap():
for key in minimap_points:
var point = minimap_points[key]
var player_pos_h = Vector2(player.global_position.x,player.global_position.z)
var point_pos_h = Vector2(point["position"].x,point["position"].z)
var h_direction = (point_pos_h - player_pos_h).normalized()
var v_direction = point["position"].y - player.global_position.y
#var desired_rotation = object.global_transform.looking_at(target_positon,Vector3.UP).basis.get_euler()
#var point_pos =
draw_circle(point_pos,MINIMAP_POINT_RADIUS,point["color"],true)
if point["timer"] > 0:
point["timer"] -= draw_delta_time
var player_pos_h = Vector2(player.global_position.x,player.global_position.z)
var point_pos_h = Vector2(point["position"].x,point["position"].z)
var h_direction = player.global_transform.looking_at(point["position"],Vector3.UP).basis.get_euler().y
var alpha_fade = clamp(MINIMAP_MAX_OPACITY * clamp(point["timer"],0,1),0,MINIMAP_MAX_OPACITY)
var color_modified = Color(point["color"].r,point["color"].g,point["color"].b,alpha_fade)
var offset = player.global_rotation.y - (TAU * .25)
var x = MINIMAP_DISPLAY_RADIUS * cos(-h_direction + offset)
var y = MINIMAP_DISPLAY_RADIUS * sin(-h_direction + offset)
var point_pos = Vector2(x,y)
var priority_clamped = clamp(point["priority"],1,MAX_PRIORITY_SIZE)
draw_circle(point_pos,MINIMAP_POINT_RADIUS * priority_clamped,color_modified,true)
else:
if point["timer"] > ERASE_BUFFER_TIME:
point["timer"] -= draw_delta_time
else:
minimap_points.erase(key)

View File

@@ -27,4 +27,4 @@ signal engaging_target(enemy,target_position)
##UI
signal ui_timer_update(label,timer)
signal ui_timer_visibility(visible)
signal ui_minimap_point(node_owner,point_position,color)
signal ui_minimap_point(node_owner,point_position,priority,duration,color)

View File

@@ -0,0 +1,27 @@
extends Node3D
@export var wiggle_amount : Vector3 = Vector3(3,3,3)
@export var move_speed : float = 1.0
var start_position
var wiggle_point
func _ready() -> void:
start_position = global_position
get_random_wiggle_pos()
func _process(delta: float) -> void:
move_to_wiggle_point(delta)
func get_random_wiggle_pos():
var x = randf_range(-wiggle_amount.x,wiggle_amount.x)
var y = randf_range(-wiggle_amount.y,wiggle_amount.y)
var z = randf_range(-wiggle_amount.z,wiggle_amount.z)
wiggle_point = Vector3(x,y,z) + start_position
func move_to_wiggle_point(delta):
if global_position.distance_to(wiggle_point) < .1:
get_random_wiggle_pos()
else:
global_position = lerp(global_position,wiggle_point,delta * move_speed)

View File

@@ -0,0 +1 @@
uid://c0l18isl3fc8