fuzzyworld

godot-shooter / commit

A few behavioral changes:

a45831a2e5472cb75761f094996c4d7cfb321eda · Pavel Safronov · 2023-12-01 11:51:40 -0800 · parents 176d22dbea26

A few behavioral changes:
- all items (not just enemies) now get moved to be closer to the player
- shooting range for basic enemy is now shorter, so the enemy is actually on the screen when they start shooting
- health pickups now heal more
- picking up an objective (golden pick up) now entirely  replenishes the player's life
 scenes/World.gd    | 37 +++++++++++++++++++++++--------------
 weapons/Weapons.gd |  2 +-
 2 files changed, 24 insertions(+), 15 deletions(-)

diff --git a/scenes/World.gd b/scenes/World.gd
index a48fceb..5173e13 100644
--- a/scenes/World.gd
+++ b/scenes/World.gd
@@ -10,6 +10,7 @@ const Settings = preload("res://utils/Settings.gd")
 onready var player: Player = $Player
 onready var update_timer = $UpdateTimer
 onready var navigation_polygon_instance: NavigationPolygonInstance = $NavigationPolygonInstance
+onready var environment_node = $Environment
 
 var generators = [
 	ConstantItemGenerator.new("create_enemy", self, "enemies", 5),
@@ -26,13 +27,14 @@ var is_dragging = false
 func enemy_killed(_position: Vector2):
 	player.score += 5
 func health_consumed(_data):
-	player.heal(10)
+	player.heal(20)
 	player.score += 1
 func gold_consumed(_data):
 	completed_objectives += 1
 	var points = 5 * (completed_objectives+1)
 	player.score += points
 	player.show_message("+%d points" % points)
+	player.health = player.max_health
 func weapon_consumed(data):
 	var weapon: Weapon = data
 	var is_same_weapon = player.weapon.name == weapon.name
@@ -43,7 +45,7 @@ func weapon_consumed(data):
 func bomb_consumed(data):
 	var pos: Vector2 = data
 	var bomb = Bomb.instance()
-	$Environment.call_deferred("add_child",bomb)
+	environment_node.call_deferred("add_child",bomb)
 	bomb.position = pos
 
 func create_enemy() -> Enemy:
@@ -106,7 +108,7 @@ func get_new_environment_position(dist_ratio: float = 1.0) -> Vector2:
 	var potential_pos: Vector2
 	while true:
 		# find the positions of the closest Environment items
-		var items = $Environment.get_children()
+		var items = environment_node.get_children()
 		potential_pos = get_new_item_pos(dist_ratio)
 		var closest_pos = 10000
 		for i in items:
@@ -166,13 +168,13 @@ func _process(_delta: float) -> void:
 	# if all objectives are complete, show the game finished menu
 	var all_done = completed_objectives == max_objectives
 	if all_done:
-		get_tree().paused = true
 		var score = player.score
 		player.add_high_score(score)
 		var final_message = "You won with %s points!" % score
 		var _err = ($Player/UI/GameFinishedMenu.find_node("Button") as Button).connect("pressed", self, "restart")
 		$Player/UI/GameFinishedMenu.find_node("Label").text = final_message
 		$Player/UI/GameFinishedMenu.show()
+		get_tree().paused = true
 		return
 
 	run_generators()
@@ -220,10 +222,11 @@ func restart() -> void:
 func _on_Player_debug() -> void:
 #	player.score += 1
 #	player.kill()
+#	player.score = 123
 #	completed_objectives = max_objectives
 #	player.debug()
-	weapon_consumed(Weapons.create_rocket_gun())
-	pass # Replace with function body.
+#	weapon_consumed(Weapons.create_rocket_gun())
+	pass
 
 func _on_Player_destination_set() -> void:
 	$Destination.visible = player.is_destination_set
@@ -231,15 +234,21 @@ func _on_Player_destination_set() -> void:
 	pass
 
 func _on_UpdateTimer_timeout() -> void:
-	var enemies = get_tree().get_nodes_in_group("enemies")
-	var filteredEnemies = Utils.filter(funcref(self,"filter_invalid_enemies"), enemies)
-	for e in filteredEnemies:
-		var enemy: Enemy = e
-		enemy.set_target($Player.position)
-		var diff = enemy.global_position - player.global_position
+	var env_items = environment_node.get_children()
+	for ei in env_items:
+		var item = ei as Node2D
+		var enemy := item as Enemy
+		if enemy:
+			# if item is enemy, have them target the player
+			enemy.set_target($Player.position)
+	
+		var diff = item.global_position - player.global_position
 		var dist = diff.length()
 		var is_too_far = dist > item_replacement_distance
 		if is_too_far:
 			var new_pos = get_new_environment_position(1 + randf())
-			Utils.log("moving distant enemy from", enemy.position, "to", new_pos)
-			enemy.teleport(new_pos)
+			Utils.log("moving distant item from", item.global_position, "to", new_pos)
+			if enemy:
+				enemy.teleport(new_pos)
+			else:
+				item.global_position = new_pos
diff --git a/weapons/Weapons.gd b/weapons/Weapons.gd
index c7a72cf..1ac4893 100644
--- a/weapons/Weapons.gd
+++ b/weapons/Weapons.gd
@@ -29,7 +29,7 @@ static func create_basic_gun() -> Weapon:
 static func create_basic_enemy_gun() -> Weapon:
 	var weapon = Weapon.new()
 	weapon.particle = preload("res://weapons/Bullet.tscn")
-	weapon.shooting_range = 400
+	weapon.shooting_range = 300
 	weapon.particle_lifetime_secs = .75
 	weapon.particle_speed = Constants.SPEED * 5
 	weapon.cooldown_seconds = 1