fuzzyworld

godot-shooter / commit

Moved the "player shoots at nearest enemy" logic into the Player class.

3782f0cfd1432380ec1e6d5c8506dff35def5a14 · Pavel Safronov · 2023-11-29 14:29:51 -0800 · parents 660d0c9dd9c1

Moved the "player shoots at nearest enemy" logic into the Player class.
 actors/Player.gd   | 29 +++++++++++++++++++++++++++++
 actors/Player.tscn | 12 ++++++++++++
 scenes/Scores.gd   |  2 --
 scenes/World.gd    | 21 ---------------------
 scenes/World.tscn  | 12 ------------
 5 files changed, 41 insertions(+), 35 deletions(-)

diff --git a/actors/Player.gd b/actors/Player.gd
index 2d3dd1c..2d7c4de 100644
--- a/actors/Player.gd
+++ b/actors/Player.gd
@@ -35,6 +35,7 @@ onready var trails = $Graphics/Alive/Trails
 onready var shot_timer = $ShotTimer
 onready var death_screen = $UI/DeathScreen
 onready var final_score_label = $UI/DeathScreen/CenterContainer/PanelContainer/VBoxContainer/FinalScoreLabel
+onready var player_to_target = $Graphics/Alive/PlayerToTarget
 
 const Utils = preload("res://utils/Utils.gd")
 const PopupControl = preload("res://utils/Popup.tscn")
@@ -45,6 +46,11 @@ var velocity: Vector2 = Vector2.UP * move_speed
 var can_fire = true
 var settings: Settings
 
+func filter_invalid_enemies(enemy: Enemy) -> bool:
+	if enemy.dead:
+		return false
+	return true
+
 func create_default_weapon() -> Weapon:
 	return Weapons.create_basic_gun()
 
@@ -82,6 +88,29 @@ func _process(_delta: float) -> void:
 	# set HUD info, like score and current weapon
 	hud.set_current_weapon(weapon)
 	hud.score = score
+	
+	# shoot at closest enemy
+	var enemies = get_tree().get_nodes_in_group("enemies")
+	for e in enemies:
+		var enemy: Enemy = e
+		enemy.is_targeted = false
+	
+	var filteredEnemies = Utils.filter(funcref(self,"filter_invalid_enemies"), enemies)
+	if filteredEnemies.size() > 0:
+		filteredEnemies.sort_custom(self, "sort_enemies_ascending_distance")
+		var closest_enemy: Enemy = filteredEnemies[0]
+		var dist = closest_enemy.global_position.distance_to(self.global_position)
+		if dist < self.weapon.shooting_range:
+			closest_enemy.is_targeted = true
+			self.shoot_at(closest_enemy.global_position)
+			player_to_target.points[0] = self.global_position
+			player_to_target.points[1] = closest_enemy.global_position
+
+func sort_enemies_ascending_distance(a: Enemy,b: Enemy):
+	var distA = self.global_position.distance_to(a.global_position)
+	var distB = self.global_position.distance_to(b.global_position)
+	var result = distA < distB
+	return result
 
 func _physics_process(delta: float) -> void:
 	if dead:
diff --git a/actors/Player.tscn b/actors/Player.tscn
index f4b9b28..9735896 100644
--- a/actors/Player.tscn
+++ b/actors/Player.tscn
@@ -101,6 +101,18 @@ percent_visible = false
 modulate = Color( 1, 0, 0, 1 )
 gradient = SubResource( 1 )
 
+[node name="PlayerToTarget" type="Line2D" parent="Graphics/Alive"]
+visible = false
+modulate = Color( 1, 0.984314, 0, 1 )
+points = PoolVector2Array( 2085.69, 283.505, 2067.82, 274.471 )
+width = 3.0
+default_color = Color( 1, 0.976471, 0.4, 1 )
+joint_mode = 1
+begin_cap_mode = 2
+end_cap_mode = 2
+round_precision = 13
+antialiased = true
+
 [node name="Dead" type="Node2D" parent="Graphics"]
 visible = false
 
diff --git a/scenes/Scores.gd b/scenes/Scores.gd
index 6ad2e20..2173b2f 100644
--- a/scenes/Scores.gd
+++ b/scenes/Scores.gd
@@ -11,10 +11,8 @@ func _ready() -> void:
 	if settings.high_scores.size() > 0:
 		Utils.remove_all_children(scores_list)
 		settings.high_scores.sort_custom(self, "sort_high_scores")
-		var index = 0
 		var now = Time.get_datetime_dict_from_system()
 		for hs in settings.high_scores:
-			index += 1
 			var label = Label.new()
 			var date_dict = hs.date
 			var date_diff_secs = Utils.time_diff_secs(date_dict, now)
diff --git a/scenes/World.gd b/scenes/World.gd
index 16da310..64748d1 100644
--- a/scenes/World.gd
+++ b/scenes/World.gd
@@ -160,12 +160,6 @@ func _on_Destination_body_entered(body: Node) -> void:
 	if body == player:
 		player.clear_destination()
 
-func sort_enemies_ascending_distance(a: Enemy,b: Enemy):
-	var distA = player.global_position.distance_to(a.global_position)
-	var distB = player.global_position.distance_to(b.global_position)
-	var result = distA < distB
-	return result
-	
 func filter_invalid_enemies(enemy: Enemy) -> bool:
 	if enemy.dead:
 		return false
@@ -174,21 +168,6 @@ func filter_invalid_enemies(enemy: Enemy) -> bool:
 func _on_ShootTimer_timeout() -> void:
 	if player.dead:
 		return
-	var enemies = get_tree().get_nodes_in_group("enemies")
-	for e in enemies:
-		var enemy: Enemy = e
-		enemy.is_targeted = false
-	
-	var filteredEnemies = Utils.filter(funcref(self,"filter_invalid_enemies"), enemies)
-	if filteredEnemies.size() > 0:
-		filteredEnemies.sort_custom(self, "sort_enemies_ascending_distance")
-		var closest_enemy: Enemy = filteredEnemies[0]
-		var dist = closest_enemy.global_position.distance_to($Player.global_position)
-		if dist < player.weapon.shooting_range:
-			closest_enemy.is_targeted = true
-			player.shoot_at(closest_enemy.global_position)
-			$PlayerToTarget.points[0] = player.global_position
-			$PlayerToTarget.points[1] = closest_enemy.global_position
 
 func _on_Button_pressed() -> void:
 	get_tree().paused = false
diff --git a/scenes/World.tscn b/scenes/World.tscn
index 5fe84f8..abee8e7 100644
--- a/scenes/World.tscn
+++ b/scenes/World.tscn
@@ -60,18 +60,6 @@ process_mode = 0
 wait_time = 0.05
 autostart = true
 
-[node name="PlayerToTarget" type="Line2D" parent="."]
-visible = false
-modulate = Color( 1, 0.984314, 0, 1 )
-points = PoolVector2Array( 2085.69, 283.505, 2067.82, 274.471 )
-width = 3.0
-default_color = Color( 1, 0.976471, 0.4, 1 )
-joint_mode = 1
-begin_cap_mode = 2
-end_cap_mode = 2
-round_precision = 13
-antialiased = true
-
 [node name="UpdateTimer" type="Timer" parent="."]
 wait_time = 0.1
 autostart = true