From 617c78d2e798999db8db40c82d9b271a120076a6 Mon Sep 17 00:00:00 2001 From: derek Date: Tue, 6 May 2025 15:54:40 -0500 Subject: [PATCH] pretty happy with hud minimap --- enemyTargetMarker.tscn | 4 +-- hud.tscn | 18 ++++++++++--- scenes/on_all_sides.tscn | 2 +- scripts/EnemyAttack.gd | 26 ++++++++----------- scripts/EnemySearch.gd | 1 + scripts/EnemyStates.gd | 3 +++ scripts/assassinate_vip.gd | 6 ++--- scripts/hud.gd | 4 +-- scripts/minimap_v1.gd | 44 ++++++++++++++++++++++++-------- scripts/signal_bus.gd | 2 +- scripts/wiggle_platform_1.gd | 27 ++++++++++++++++++++ scripts/wiggle_platform_1.gd.uid | 1 + 12 files changed, 99 insertions(+), 39 deletions(-) create mode 100644 scripts/wiggle_platform_1.gd create mode 100644 scripts/wiggle_platform_1.gd.uid diff --git a/enemyTargetMarker.tscn b/enemyTargetMarker.tscn index 60f2a75..1f2a55e 100644 --- a/enemyTargetMarker.tscn +++ b/enemyTargetMarker.tscn @@ -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") diff --git a/hud.tscn b/hud.tscn index 2f39189..db60cb5 100644 --- a/hud.tscn +++ b/hud.tscn @@ -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 diff --git a/scenes/on_all_sides.tscn b/scenes/on_all_sides.tscn index 91c4303..4ab06c7 100644 --- a/scenes/on_all_sides.tscn +++ b/scenes/on_all_sides.tscn @@ -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) diff --git a/scripts/EnemyAttack.gd b/scripts/EnemyAttack.gd index 4e11c22..1e9e641 100644 --- a/scripts/EnemyAttack.gd +++ b/scripts/EnemyAttack.gd @@ -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) diff --git a/scripts/EnemySearch.gd b/scripts/EnemySearch.gd index 01e43a5..da17493 100644 --- a/scripts/EnemySearch.gd +++ b/scripts/EnemySearch.gd @@ -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: diff --git a/scripts/EnemyStates.gd b/scripts/EnemyStates.gd index 32148a1..cc21365 100644 --- a/scripts/EnemyStates.gd +++ b/scripts/EnemyStates.gd @@ -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) diff --git a/scripts/assassinate_vip.gd b/scripts/assassinate_vip.gd index 9d06526..2a006db 100644 --- a/scripts/assassinate_vip.gd +++ b/scripts/assassinate_vip.gd @@ -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(): diff --git a/scripts/hud.gd b/scripts/hud.gd index a838dcb..d133a01 100644 --- a/scripts/hud.gd +++ b/scripts/hud.gd @@ -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(): diff --git a/scripts/minimap_v1.gd b/scripts/minimap_v1.gd index cec9538..08e244a 100644 --- a/scripts/minimap_v1.gd +++ b/scripts/minimap_v1.gd @@ -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) diff --git a/scripts/signal_bus.gd b/scripts/signal_bus.gd index 6eb67b9..c77aeea 100644 --- a/scripts/signal_bus.gd +++ b/scripts/signal_bus.gd @@ -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) diff --git a/scripts/wiggle_platform_1.gd b/scripts/wiggle_platform_1.gd new file mode 100644 index 0000000..929d42f --- /dev/null +++ b/scripts/wiggle_platform_1.gd @@ -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) diff --git a/scripts/wiggle_platform_1.gd.uid b/scripts/wiggle_platform_1.gd.uid new file mode 100644 index 0000000..4d33bc5 --- /dev/null +++ b/scripts/wiggle_platform_1.gd.uid @@ -0,0 +1 @@ +uid://c0l18isl3fc8