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

@@ -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