godot-shooter / commit
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 )