fuzzyworld

godot-shooter / commit

Move the possible movement area around the player.

afb9a0a511b7b11a2912f5cd4a30c7ed45fc908f · Pavel Safronov · 2023-11-30 14:34:57 -0800 · parents 1702bad9cb16

Move the possible movement area around the player.
 scenes/World.gd   | 39 +++++++++++++++++++++++++++++----------
 scenes/World.tscn |  4 ++--
 2 files changed, 31 insertions(+), 12 deletions(-)

diff --git a/scenes/World.gd b/scenes/World.gd
index 3b297f4..a353690 100644
--- a/scenes/World.gd
+++ b/scenes/World.gd
@@ -9,10 +9,10 @@ const PowerUp = preload("res://items/PowerUp.tscn")
 const Settings = preload("res://utils/Settings.gd")
 onready var player: Player = $Player
 onready var update_timer = $UpdateTimer
-onready var navigation_polygon: NavigationPolygonInstance = $NavigationPolygonInstance
+onready var navigation_polygon_instance: NavigationPolygonInstance = $NavigationPolygonInstance
 
 var generators = [
-	ConstantItemGenerator.new("create_enemy", self, "enemies", 5),
+	ConstantItemGenerator.new("create_enemy", self, "enemies", 1),
 	ConstantItemGenerator.new("create_health", self, "health", 10),
 	ConstantItemGenerator.new("create_weapon", self, "weapon", 10),
 	ConstantItemGenerator.new("create_bomb", self, "bombs", 10),
@@ -127,7 +127,25 @@ func _input(_event: InputEvent) -> void:
 		return
 
 func _process(_delta: float) -> void:
+	# move navigation polygon around the player, navigation won't work outside of this polygon
+	var nav_size = Vector2(item_replacement_distance * 2 * 5, item_replacement_distance * 2 * 5)
+	var nav_pos = player.global_position - (nav_size * 0.5)
+	var vertices = PoolVector2Array([
+		nav_pos,
+		nav_pos + Vector2(nav_size.x, 0),
+		nav_pos + nav_size,
+		nav_pos + Vector2(0, nav_size.y)
+	])
+	var polygon = NavigationPolygon.new()
+	polygon.set_vertices(vertices)
+	var indices = PoolIntArray([0, 1, 2, 3])
+	polygon.add_polygon(indices)
+	navigation_polygon_instance.navpoly = polygon
+
+	# set the objective text
 	player.set_objective("%s / %s" % [completed_objectives, max_objectives])
+	
+	# if all objectives are complete, show the game finished menu
 	var all_done = completed_objectives == max_objectives
 	if all_done:
 		get_tree().paused = true
@@ -139,25 +157,26 @@ func _process(_delta: float) -> void:
 		$Player/UI/GameFinishedMenu.show()
 		return
 
+	# run all item generators
 	for g in generators:
 		var generator = g
 		var _is_done = generator.run($Environment)
-	
+
+	# position the destination
 	$Destination.visible = player.is_destination_set
 	$Destination.global_position = player.destination
 
-	player.clear_radar()
-	
+	# clear radar and populate with all items
+	var enemies = get_tree().get_nodes_in_group("enemies")
+	var filteredEnemies = Utils.filter(funcref(self,"filter_invalid_enemies"), enemies)
+	player.clear_radar()	
+	player.update_radar(get_tree().get_nodes_in_group("gold"), Color.gold)
+	player.update_radar(filteredEnemies, Color.red)
 	if player.settings.show_items:
 		player.update_radar(get_tree().get_nodes_in_group("health"), Color.gray)
 		player.update_radar(get_tree().get_nodes_in_group("weapons"), Color.white)
 		player.update_radar(get_tree().get_nodes_in_group("bombs"), Color.purple)
 
-	player.update_radar(get_tree().get_nodes_in_group("gold"), Color.gold)
-	var enemies = get_tree().get_nodes_in_group("enemies")
-	var filteredEnemies = Utils.filter(funcref(self,"filter_invalid_enemies"), enemies)
-	player.update_radar(filteredEnemies, Color.red)
-
 func _on_Destination_body_entered(body: Node) -> void:
 	if body == player:
 		player.clear_destination()
diff --git a/scenes/World.tscn b/scenes/World.tscn
index 38f71e2..51a7460 100644
--- a/scenes/World.tscn
+++ b/scenes/World.tscn
@@ -9,9 +9,9 @@
 radius = 29.0172
 
 [sub_resource type="NavigationPolygon" id=2]
-vertices = PoolVector2Array( -2942, -2484, 5873, -3309, 5048, 4696, -3090, 5040 )
+vertices = PoolVector2Array( -400, -400, 400, -400, 400, 400, -400, 400 )
 polygons = [ PoolIntArray( 0, 1, 2, 3 ) ]
-outlines = [ PoolVector2Array( -2942, -2484, 5873, -3309, 5048, 4696, -3090, 5040 ) ]
+outlines = [ PoolVector2Array( -400, -400, 400, -400, 400, 400, -400, 400 ) ]
 
 [node name="World" type="Node2D"]
 script = ExtResource( 4 )