Files
fps_project_1/scripts/minimap_v1.gd
2025-05-06 15:54:40 -05:00

52 lines
1.6 KiB
GDScript

extends Control
@export var hud : Node
## 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()
func update_minimap():
var minimap_points = hud.minimap_points
var player = hud.player
for key in minimap_points:
var point = minimap_points[key]
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)