make Game.gd not rely on autoload/global

This commit is contained in:
2025-06-24 01:14:50 +10:00
parent 20cde0a778
commit 64befd8ec7
33 changed files with 194 additions and 411 deletions

View File

@ -7,13 +7,14 @@ class_name PathEditTool extends Node3D
@export var progress_bar: TextureProgressBar
var enabled: bool = true
var point: FlowNode = null
var level: Level
var point: FlowNode
var obstacle_last_point: int = -1
var valid_point: bool = false # a point is valid if the path would still be traversable overall if this point was made untraversable
var tower_preview: Tower
var ray_collider: Object
var ray_point: Vector3
var last_point: FlowNode = null
var last_point: FlowNode
var last_tower_base: TowerBase
var interact_key_held: bool = false
@ -66,13 +67,13 @@ func _process(delta: float) -> void:
if !interact_key_held:
wall_preview.set_visible(true)
if is_instance_valid(ray_collider) and ray_collider is TowerBase:
Game.level.walls[ray_collider.point].set_float(1.0)
level.walls[ray_collider.point].set_float(1.0)
ray_collider = ray.get_collider()
ray_point = ray.get_collision_point()
if ray_collider is TowerBase:
process_looking_at_tower()
elif Game.level:
elif level:
process_looking_at_level()
elif !interact_key_held:
reset()
@ -84,8 +85,8 @@ func _process(delta: float) -> void:
func reset() -> void:
if is_instance_valid(ray_collider) and ray_collider is TowerBase and Game.level.walls.has(ray_collider.point):
Game.level.walls[ray_collider.point].set_float(1.0)
if is_instance_valid(ray_collider) and ray_collider is TowerBase and level.walls.has(ray_collider.point):
level.walls[ray_collider.point].set_float(1.0)
ray_collider = null
delete_tower_preview()
wall_preview.set_visible(false)
@ -96,8 +97,8 @@ func reset() -> void:
func process_looking_at_level() -> void:
if tower_preview:
delete_tower_preview()
point = Game.level.flow_field.get_closest_buildable_point(ray_point)
if Game.level.walls.has(point) or !point.buildable or hero.currency < Data.wall_cost:
point = level.flow_field.get_closest_buildable_point(ray_point)
if level.walls.has(point) or !point.buildable or hero.currency < Data.wall_cost:
wall_preview.set_visible(false)
valid_point = false
clear_previous_point()
@ -106,8 +107,8 @@ func process_looking_at_level() -> void:
if last_point != point:
clear_previous_point()
last_point = point
if !Game.level.walls.has(point) and Game.level.flow_field.traversable_after_blocking_point(point):
Game.level.flow_field.toggle_traversable(point)
if !level.walls.has(point) and level.flow_field.traversable_after_blocking_point(point):
level.flow_field.toggle_traversable(point)
wall_preview.set_float(0.0)
valid_point = true
else:
@ -115,8 +116,8 @@ func process_looking_at_level() -> void:
func clear_previous_point() -> void:
if last_point and !Game.level.walls.has(last_point) and !last_point.traversable:
Game.level.flow_field.toggle_traversable(last_point)
if last_point and !level.walls.has(last_point) and !last_point.traversable:
level.flow_field.toggle_traversable(last_point)
func process_looking_at_tower() -> void:
@ -162,7 +163,7 @@ func interact() -> void:
func build_wall() -> void:
if point and valid_point and hero.currency >= Data.wall_cost:
hero.currency -= Data.wall_cost
Game.level.set_wall(point, multiplayer.get_unique_id())
level.set_wall(point, multiplayer.get_unique_id())
wall_preview.visible = false
@ -171,7 +172,7 @@ func refund_wall(wall: TowerBase) -> void:
return
if wall.has_card:
wall.remove_card()
Game.level.remove_wall(wall.point)
level.remove_wall(wall.point)
func put_card_in_tower_base(tower_base: TowerBase) -> void:

View File

@ -35,6 +35,7 @@ signal ready_state_changed(state: bool)
@export var swap_off_audio: AudioStreamPlayer
@export var swap_on_audio: AudioStreamPlayer
var game_manager: GameManager
var hovering_item: InteractButton = null
var weapons_spawn_count: int = 0 #Used to prevent node name collisions for multiplayer
var inventory_selected_index: int = 0
@ -191,10 +192,10 @@ func _process(delta: float) -> void:
camera.fov = Data.graphics.hfov * (1.0 / movement.zoom_factor)
if Input.is_action_just_pressed("View Map"):
hud.maximise_minimap(Game.level)
hud.maximise_minimap()
#Input.mouse_mode = Input.MOUSE_MODE_VISIBLE
if Input.is_action_just_released("View Map"):
hud.minimize_minimap(self)
hud.minimize_minimap()
#Input.mouse_mode = Input.MOUSE_MODE_CAPTURED
check_left_hand_valid()
@ -222,6 +223,9 @@ func _unhandled_input(event: InputEvent) -> void:
if event.is_action_pressed("Pause"):
var menu: PauseMenu = pause_menu_scene.instantiate() as PauseMenu
pause()
menu.game_manager = game_manager
menu.quit_to_desktop_pressed.connect(game_manager.quit_to_desktop)
menu.quit_to_main_menu_pressed.connect(game_manager.scene_switch_main_menu)
menu.closed.connect(unpause)
hud.add_child(menu)

View File

@ -12,7 +12,6 @@ var last_lives_count: int = 120
@export var minimap_viewport: SubViewport
@export var fps_label: Label
@export var hover_text: RichTextLabel
var minimap_anchor: Node3D
var enemy_names: Array[String]
@export var enemy_sprites: Array[TextureRect]
@export var enemy_counts: Array[Label]
@ -25,6 +24,7 @@ var enemy_names: Array[String]
@export var enemy_card_scene: PackedScene
@export var new_energy_bar: EnergyBar
var map_anchor: Node3D
var audio_guard: bool = false
var cards: Array[EnemyCardUI] = []
@ -131,7 +131,7 @@ func set_upcoming_wave(value: Dictionary) -> void:
var wave: Dictionary = {}
for key: String in value:
var new_enemy: Enemy
for enemy: Enemy in Data.enemies:
for enemy: Enemy in player.game_manager.level.enemy_pool:
if enemy.title == key:
new_enemy = enemy
wave[new_enemy] = value[key]
@ -169,8 +169,8 @@ func set_weapon_energy(value: int, energy_type: Data.EnergyType) -> void:
audio_guard = false
func maximise_minimap(anchor: Node3D) -> void:
minimap_cam.anchor = anchor
func maximise_minimap() -> void:
minimap_cam.anchor = map_anchor
minimap.set_anchors_and_offsets_preset(Control.PRESET_FULL_RECT)
minimap.offset_bottom = -40
minimap.offset_top = 40
@ -182,8 +182,8 @@ func maximise_minimap(anchor: Node3D) -> void:
currency_count.set_visible(false)
func minimize_minimap(anchor: Node3D) -> void:
minimap_cam.anchor = anchor
func minimize_minimap() -> void:
minimap_cam.anchor = player
minimap.set_anchors_and_offsets_preset(Control.PRESET_TOP_RIGHT)
minimap.offset_right = -40
minimap.offset_top = 40