fuzzyworld

godot-shooter / commit

Changed where the player destination was being stored and how we calculate that information.

cbc328fb37326844a81a928d1c3f88191b8cc697 · Pavel Safronov · 2023-11-17 11:46:40 -0800 · parents 3093c7bad306

Changed where the player destination was being stored and how we calculate that information.
Renamed a generic Button to StartNewGameButton.
Removed some old code.
 actors/Player.gd   | 46 +++++++++++++++++++++++++++++++++++-----------
 actors/Player.tscn |  4 ++--
 scenes/HUD.gd      | 13 ++++++-------
 scenes/World.gd    | 32 ++++----------------------------
 scenes/World.tscn  |  1 -
 5 files changed, 47 insertions(+), 49 deletions(-)

diff --git a/actors/Player.gd b/actors/Player.gd
index 7ea7ba5..ca8fc0e 100644
--- a/actors/Player.gd
+++ b/actors/Player.gd
@@ -9,10 +9,13 @@ export var health = 50
 export var max_health = 100
 export var is_invincible = false
 export var turn_rate = 0.03
+export var accel_rate = 1
 export var radar_min_radius = 350
 export var radar_max_radius = 2000
+export var destination: Vector2
+export var is_destination_set: bool = false
 signal player_died
-signal destination_set(position)
+signal destination_set
 signal debug
 
 onready var hud = $UI/HUD
@@ -60,9 +63,17 @@ func _process(_delta: float) -> void:
 	hud.set_current_weapon(weapon)
 	hud.score = score
 
-func _physics_process(_delta: float) -> void:
+func _physics_process(delta: float) -> void:
 	if dead:
 		return
+	if is_destination_set:
+		turn_towards(destination, delta)
+	var speed = velocity.length()
+	if speed < move_speed:
+		velocity = velocity * (1 + delta * accel_rate)
+	speed = velocity.length()
+	if speed > move_speed:
+		velocity = velocity.normalized() * move_speed
 	velocity = move_and_slide(velocity)
 	global_rotation = velocity.angle() + PI/2.0
 
@@ -126,8 +137,8 @@ func hurt(damage_amount: int = 1):
 		if health <= 0:
 			kill()
 
-func turn_towards(pos: Vector2):
-	var to_dir = (pos - global_position).normalized()
+func turn_towards(dest: Vector2, _delta: float):
+	var to_dir = (dest - global_position).normalized()
 	var curr_dir = velocity.normalized()
 	var dir_diff = to_dir - curr_dir
 	var change = dir_diff * turn_rate * move_speed
@@ -162,10 +173,6 @@ func shoot_at(pos: Vector2):
 func allow_fire():
 	can_fire = true
 
-func _on_Button_pressed() -> void:
-	get_tree().paused = false
-	restart()
-
 func set_objective(objective: String) -> void:
 	hud.objective = objective
 
@@ -197,8 +204,13 @@ func _on_LinkButton_pressed() -> void:
 	var _err = OS.shell_open("https://gitlab.com/PavelSafronov/godot-shooter")
 	get_tree().paused = true
 
-func _on_HUD_position_set(position) -> void:
-	emit_signal("destination_set", position)
+func _on_HUD_position_set(event_pos: Vector2) -> void:
+	var width = ProjectSettings.get("display/window/size/width")
+	var height = ProjectSettings.get("display/window/size/height")
+	var mid = Vector2(width / 2.0, height / 2.0)
+	var pos = event_pos + self.position - mid
+	set_destination(pos)
+	emit_signal("destination_set")
 
 func show_message(message: String, duration_seconds: int = 2) -> void:
 	hud.show_message(message, duration_seconds)
@@ -207,7 +219,7 @@ func _on_HUD_paused() -> void:
 	get_tree().paused = true
 	set_pause_menu_high_scores()
 	$UI/PauseMenu.show()
-	emit_signal("destination_set", null)
+	clear_destination()
 
 func _on_ResumeButton_pressed() -> void:
 	get_tree().paused = false
@@ -233,3 +245,15 @@ func set_pause_menu_high_scores() -> void:
 			var date_diff = Utils.timespan_to_english(date_diff_secs)
 			label.text = "%s - %s points, %s" % [index, hs.score, date_diff]
 			scores_list.add_child(label)
+
+func set_destination(pos: Vector2) -> void:
+	destination = pos
+	is_destination_set = true
+	emit_signal("destination_set")
+func clear_destination() -> void:
+	is_destination_set = false
+	emit_signal("destination_set")
+
+func _on_StartNewGameButton_pressed() -> void:
+	get_tree().paused = false
+	restart()
diff --git a/actors/Player.tscn b/actors/Player.tscn
index e3c8541..cee98a5 100644
--- a/actors/Player.tscn
+++ b/actors/Player.tscn
@@ -133,7 +133,7 @@ valign = 1
 margin_right = 40.0
 margin_bottom = 25.0
 
-[node name="Button" type="Button" parent="UI/DeathScreen/CenterContainer/PanelContainer/VBoxContainer"]
+[node name="StartNewGameButton" type="Button" parent="UI/DeathScreen/CenterContainer/PanelContainer/VBoxContainer"]
 margin_top = 135.0
 margin_right = 272.0
 margin_bottom = 172.0
@@ -361,7 +361,7 @@ __meta__ = {
 [connection signal="debug_signal" from="UI/HUD" to="." method="_on_HUD_debug_signal"]
 [connection signal="paused" from="UI/HUD" to="." method="_on_HUD_paused"]
 [connection signal="position_set" from="UI/HUD" to="." method="_on_HUD_position_set"]
-[connection signal="pressed" from="UI/DeathScreen/CenterContainer/PanelContainer/VBoxContainer/Button" to="." method="_on_Button_pressed"]
+[connection signal="pressed" from="UI/DeathScreen/CenterContainer/PanelContainer/VBoxContainer/StartNewGameButton" to="." method="_on_StartNewGameButton_pressed"]
 [connection signal="pressed" from="UI/IntroMenu/CenterContainer/PanelContainer/VBoxContainer/StartButton" to="." method="_on_StartButton_pressed"]
 [connection signal="pressed" from="UI/PauseMenu/CenterContainer/PanelContainer/VBoxContainer/TabContainer/Pref/AlwaysShowIntroCheckBox" to="." method="_on_PauseAlwaysShowIntroCheckBox_pressed"]
 [connection signal="pressed" from="UI/PauseMenu/CenterContainer/PanelContainer/VBoxContainer/TabContainer/About/LinkButton" to="." method="_on_LinkButton_pressed"]
diff --git a/scenes/HUD.gd b/scenes/HUD.gd
index dc80880..f4cfcdf 100644
--- a/scenes/HUD.gd
+++ b/scenes/HUD.gd
@@ -25,24 +25,23 @@ func _input(event: InputEvent) -> void:
 		return
 
 	if event is InputEventScreenTouch and event.pressed:
-#		Utils.log("signal position_set - touch pressed", "position", event.position)
-		emit_signal("position_set", event.position)
+		set_position_event(event.position)
 	if event is InputEventScreenDrag:
-#		Utils.log("signal position_set - screen dragged", "position", event.position)
-		emit_signal("position_set", event.position)
+		set_position_event(event.position)
 	if event is InputEventMouseButton:
 #		Utils.log("signal position_set - mouse button", "pressed", event.pressed, "position", event.position)
 		if not is_dragging and event.pressed:
 			is_dragging = true
 			get_tree().paused = true
-			emit_signal("position_set", event.position)
+		set_position_event(event.position)
 		if is_dragging and not event.pressed:
 			is_dragging = false
 			get_tree().paused = false
 	if event is InputEventMouseMotion and is_dragging:
-#		Utils.log("signal position_set - mouse motion", "position", event.position)
-		emit_signal("position_set", event.position)
+		set_position_event(event.position)
 
+func set_position_event(event_pos: Vector2) -> void:
+	emit_signal("position_set", event_pos)
 
 func _process(_delta: float) -> void:
 	score_label.text = "%s" % score
diff --git a/scenes/World.gd b/scenes/World.gd
index cf0c792..eb95dca 100644
--- a/scenes/World.gd
+++ b/scenes/World.gd
@@ -5,12 +5,8 @@ const Weapons = preload("res://weapons/Weapons.gd")
 const Enemy = preload("res://actors/Enemy.tscn")
 const PowerUp = preload("res://items/PowerUp.tscn")
 const Settings = preload("res://utils/Settings.gd")
-var width = ProjectSettings.get("display/window/size/width")
-var height = ProjectSettings.get("display/window/size/height")
 onready var player: Player = $Player
 
-var destination: Vector2
-var is_destination_set = false
 var generators = [
 	ConstantItemGenerator.new("create_enemy", self, "enemies", 4),
 	ConstantItemGenerator.new("create_health", self, "health", 10),
@@ -125,12 +121,9 @@ func _process(_delta: float) -> void:
 	for g in generators:
 		var generator = g
 		var _is_done = generator.run($Environment)
-
-	if is_destination_set:
-		$Player.turn_towards(destination)
-		$Destination.visible = true
-	else:
-		$Destination.visible = false
+	
+	$Destination.visible = player.is_destination_set
+	$Destination.global_position = player.destination
 	
 	var enemies = get_tree().get_nodes_in_group("enemies")
 	var filteredEnemies = Utils.filter(funcref(self,"filter_invalid_enemies"), enemies)
@@ -149,21 +142,9 @@ func _process(_delta: float) -> void:
 	player.update_radar(get_tree().get_nodes_in_group("gold"), Color.yellow)
 	player.update_radar(filteredEnemies, Color.red)
 
-func set_destination(event_pos) -> void:
-	var is_vector = event_pos is Vector2
-	if event_pos == null or not is_vector:
-		is_destination_set = false
-		return
-	var mid = Vector2(width / 2.0, height / 2.0)
-	var pos = event_pos + $Player.position - mid	
-	destination = pos
-	is_destination_set = true
-	$Destination.global_position = pos
-	$Destination.visible = true
-
 func _on_Destination_body_entered(body: Node) -> void:
 	if body == $Player:
-		is_destination_set = false
+		player.clear_destination()
 
 func sort_enemies_ascending_distance(a: Enemy,b: Enemy):
 	var distA = $Player.global_position.distance_to(a.global_position)
@@ -207,11 +188,6 @@ func restart() -> void:
 	get_tree().paused = false
 	var _err = get_tree().reload_current_scene()
 
-func _on_Player_destination_set(position) -> void:
-	set_destination(position)
-	pass # Replace with function body.
-
-
 func _on_Player_debug() -> void:
 #	player.score += 1
 #	player.kill()
diff --git a/scenes/World.tscn b/scenes/World.tscn
index 57d9204..83ff076 100644
--- a/scenes/World.tscn
+++ b/scenes/World.tscn
@@ -74,5 +74,4 @@ antialiased = true
 
 [connection signal="body_entered" from="Destination" to="." method="_on_Destination_body_entered"]
 [connection signal="debug" from="Player" to="." method="_on_Player_debug"]
-[connection signal="destination_set" from="Player" to="." method="_on_Player_destination_set"]
 [connection signal="timeout" from="ShootTimer" to="." method="_on_ShootTimer_timeout"]