diff --git a/project.godot b/project.godot index 8cce5eb..ac3e46d 100644 --- a/project.godot +++ b/project.godot @@ -27,6 +27,7 @@ UiManager="*res://scripts/globals/ui_manager.gd" HoveringManager="*res://scripts/globals/hovering_manager.gd" SelectionManager="*res://scripts/globals/selection_manager.gd" SoundManager="*res://scripts/globals/sound_manager.gd" +StaticNodesManager="*res://scripts/globals/static_nodes_manager.gd" [debug] diff --git a/scenes/world.tscn b/scenes/world.tscn index 95c3b2e..8440eaa 100644 --- a/scenes/world.tscn +++ b/scenes/world.tscn @@ -73,7 +73,7 @@ transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, -58.3389, 0, -63.0179) [node name="Aphids" type="Node" parent="Bunches"] [node name="AphidsBunch" type="Marker3D" parent="Bunches/Aphids"] -transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, -43.716, 0, -56.9208) +transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, -49.7297, 0, -59.3123) gizmo_extents = 2.71 script = ExtResource("3_vkmt5") amount = 3 @@ -192,10 +192,11 @@ script = ExtResource("3_vkmt5") [node name="Honeydew" type="Node" parent="Bunches"] [node name="BunchSpawner" type="Marker3D" parent="Bunches/Honeydew"] -transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, -43.2604, -7.62939e-06, -58.6667) +transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, -50.9454, -8.10623e-06, -60.0162) gizmo_extents = 4.7 script = ExtResource("3_vkmt5") what = 1 +amount = 30 [node name="UI" type="Node" parent="."] @@ -214,6 +215,9 @@ current = true fov = 37.8493 script = ExtResource("1_gnxhh") +[node name="AudioListener3D" type="AudioListener3D" parent="MainCamera"] +current = true + [node name="AmbientAudio" type="AudioStreamPlayer" parent="."] process_mode = 3 bus = &"ambient" diff --git a/scripts/ambient_audio.gd b/scripts/ambient_audio.gd index efd3e91..369ea98 100644 --- a/scripts/ambient_audio.gd +++ b/scripts/ambient_audio.gd @@ -10,17 +10,14 @@ var audio_3 := preload("res://assets/audio/ambient/ambient_3.ogg") var streams: Array[AudioStream] = [audio_1, audio_2, audio_3] var filter: AudioEffectHighPassFilter -@onready var main_camera: MainCamera = $/root/World/MainCamera - func _ready() -> void: - assert(main_camera != null, "main_camera missing!") - var bus_idx := AudioServer.get_bus_index(bus) for effect_idx in AudioServer.get_bus_effect_count(bus_idx): var effect := AudioServer.get_bus_effect(bus_idx, effect_idx) if effect is AudioEffectHighPassFilter: filter = effect + assert(filter != null, "filter missing!") stream = streams.pick_random() play() @@ -28,7 +25,7 @@ func _ready() -> void: func _process(_delta: float) -> void: filter.cutoff_hz = lerpf( - ZOOMED_IN_CUTOFF, - ZOOMED_OUT_CUTOFF, - main_camera.zoom_value, + ZOOMED_IN_CUTOFF, + ZOOMED_OUT_CUTOFF, + StaticNodesManager.main_camera.zoom_value, ) diff --git a/scripts/anthill.gd b/scripts/anthill.gd index 03b1aba..9503696 100644 --- a/scripts/anthill.gd +++ b/scripts/anthill.gd @@ -11,8 +11,6 @@ var ant_nitwit := preload("res://scenes/units/ant_nitwit.tscn") var ant_gatherer := preload("res://scenes/units/ant_gatherer.tscn") @onready var ui_origin: Node3D = $UiOrigin -@onready var nitwits_holder: Node = $/root/World/Units/Nitwits -@onready var gatherers_holder: Node = $/root/World/Units/Gatherers @onready var audio_player: SoundEffectsPlayer = ( $SoundEffectsPlayer ) @@ -20,8 +18,6 @@ var ant_gatherer := preload("res://scenes/units/ant_gatherer.tscn") func _ready() -> void: assert(ui_origin != null, "ui_origin missing!") - assert(nitwits_holder != null, "nitwits_holder missing!") - assert(gatherers_holder != null, "gatherers_holder missing!") assert(audio_player != null, "audio_player missing!") super._ready() honeydew += AntNitwit.get_cost() @@ -50,14 +46,14 @@ func spawn_nitwit(ding: bool = true) -> void: if new_unit == null: return print('add!') - nitwits_holder.add_child(new_unit) + StaticNodesManager.nitwits_holder.add_child(new_unit) func spawn_gatherer() -> void: var new_unit := _create_unit(ant_gatherer, AntGatherer.get_cost()) if new_unit == null: return - gatherers_holder.add_child(new_unit) + StaticNodesManager.gatherers_holder.add_child(new_unit) func _click() -> void: diff --git a/scripts/bunch_spawner.gd b/scripts/bunch_spawner.gd index 3d2ecf9..ecc2e32 100644 --- a/scripts/bunch_spawner.gd +++ b/scripts/bunch_spawner.gd @@ -12,11 +12,7 @@ enum WhatToSpawn { var aphid := preload("res://scenes/units/aphid.tscn") var honeydew := preload("res://scenes/items/honeydew.tscn") -@onready var aphids_holder: Node = $/root/World/Units/Aphids -@onready var honeydew_holder: Node = $/root/World/Items/Honeydew - func _ready() -> void: - assert(aphids_holder != null, "aphids_holder missing!") for i in amount: var pos_offset := Vector3( randf_range(-gizmo_extents, gizmo_extents), @@ -25,9 +21,17 @@ func _ready() -> void: ) match what: WhatToSpawn.APHID: - _spawn(aphid, global_position + pos_offset, aphids_holder) + _spawn( + aphid, + global_position + pos_offset, + StaticNodesManager.aphids_holder + ) WhatToSpawn.HONEYDEW: - _spawn(honeydew, global_position + pos_offset, honeydew_holder) + _spawn( + honeydew, + global_position + pos_offset, + StaticNodesManager.honeydew_holder + ) func _spawn(scene: PackedScene, where: Vector3, holder: Node) -> void: diff --git a/scripts/globals/debug_manager.gd b/scripts/globals/debug_manager.gd index 7727111..8ed6cfd 100644 --- a/scripts/globals/debug_manager.gd +++ b/scripts/globals/debug_manager.gd @@ -15,8 +15,6 @@ var markers_to_draw: Array[Dictionary] = [] var circles_to_draw: Array[Dictionary] = [] var text_to_draw: PackedStringArray = [] -@onready var main_camera: MainCamera = $/root/World/MainCamera - func _ready() -> void: process_mode = Node.PROCESS_MODE_ALWAYS @@ -38,7 +36,7 @@ func _process(_delta: float) -> void: text('fps: ' + str(Performance.get_monitor(Performance.TIME_FPS))) text('draw calls: ' + str(Performance.get_monitor(Performance.RENDER_TOTAL_DRAW_CALLS_IN_FRAME))) - text('camera anim step: ' + str(main_camera.advance_anim_step)) + text('camera anim step: ' + str(StaticNodesManager.main_camera.advance_anim_step)) text('select anim step: ' + str(SelectionManager.advance_anim_step)) @@ -82,7 +80,7 @@ func circle(pos: Vector3, color: Color = DEFAULT_COLOR) -> void: func _unproject(pos: Vector3) -> Vector2: - return main_camera.unproject_position(pos) + return StaticNodesManager.main_camera.unproject_position(pos) func _draw_text() -> void: diff --git a/scripts/globals/hovering_manager.gd b/scripts/globals/hovering_manager.gd index 2851358..d659275 100644 --- a/scripts/globals/hovering_manager.gd +++ b/scripts/globals/hovering_manager.gd @@ -3,7 +3,7 @@ extends Node3D var hovered_node: Variant var mouse_pos: Vector2 = Vector2.ZERO -@onready var camera: Camera3D = get_viewport().get_camera_3d() +@onready var camera: Camera3D = StaticNodesManager.main_camera func _physics_process(_delta: float) -> void: diff --git a/scripts/globals/selection_manager.gd b/scripts/globals/selection_manager.gd index 036d08d..8613ef9 100644 --- a/scripts/globals/selection_manager.gd +++ b/scripts/globals/selection_manager.gd @@ -25,7 +25,7 @@ var advance_anim_step: int = 1 var rect_style := preload("res://resources/styles/selection_rect.tres") -@onready var camera: Camera3D = get_viewport().get_camera_3d() +@onready var camera: Camera3D = StaticNodesManager.main_camera @onready var frustrum_area: Area3D = Area3D.new() @onready var frustrum_collision_shape: CollisionShape3D = CollisionShape3D.new() @onready var rect_panel: Panel = Panel.new() diff --git a/scripts/globals/static_nodes_manager.gd b/scripts/globals/static_nodes_manager.gd new file mode 100644 index 0000000..3121482 --- /dev/null +++ b/scripts/globals/static_nodes_manager.gd @@ -0,0 +1,19 @@ +extends Node + +@onready var player_anthill: Anthill = $/root/World/Structures/Anthill +@onready var main_camera: MainCamera = $/root/World/MainCamera + +@onready var nitwits_holder: Node = $/root/World/Units/Nitwits +@onready var gatherers_holder: Node = $/root/World/Units/Gatherers + +@onready var aphids_holder: Node = $/root/World/Units/Aphids + +@onready var honeydew_holder: Node = $/root/World/Items/Honeydew + +func _ready() -> void: + assert(player_anthill != null, "player_anthill missing!") + assert(main_camera != null, "main_camera missing!") + assert(nitwits_holder != null, "nitwits_holder missing!") + assert(gatherers_holder != null, "gatherers_holder missing!") + assert(aphids_holder != null, "aphids_holder missing!") + assert(honeydew_holder != null, "honeydew_holder missing!") diff --git a/scripts/main_camera.gd b/scripts/main_camera.gd index ac8c43a..187ded3 100644 --- a/scripts/main_camera.gd +++ b/scripts/main_camera.gd @@ -52,13 +52,12 @@ var state: CameraState = CameraState.FREE var window_out_of_focus: bool = false -@onready var anthill: Anthill = $/root/World/Structures/Anthill @onready var attrs: CameraAttributesPractical = attributes func _ready() -> void: assert(attrs != null, "attrs missing!") - target_position = anthill.global_position + target_position = StaticNodesManager.player_anthill.global_position func _process(delta: float) -> void: @@ -95,7 +94,7 @@ func _input(event: InputEvent) -> void: zoom_raw = clampf(zoom_raw, 0, 1) if event.is_action_pressed("reset_camera"): - head_to(anthill.global_position) + head_to(StaticNodesManager.player_anthill.global_position) func _notification(what: int) -> void: diff --git a/scripts/sound_effects_player.gd b/scripts/sound_effects_player.gd index 0673921..3595969 100644 --- a/scripts/sound_effects_player.gd +++ b/scripts/sound_effects_player.gd @@ -9,6 +9,7 @@ func _ready() -> void: play() playback = get_stream_playback() + func play_sound( new_stream: AudioStream, from_offset: float = 0, diff --git a/scripts/ui/following_ui.gd b/scripts/ui/following_ui.gd index 6894a69..64ceee4 100644 --- a/scripts/ui/following_ui.gd +++ b/scripts/ui/following_ui.gd @@ -5,18 +5,14 @@ const EDGE_MARGIN = 10 var target: Node3D -@onready var camera: Camera3D = get_viewport().get_camera_3d() - -func _ready() -> void: - assert(camera != null, "camera missing!") - super._ready() - func _process(_delta: float) -> void: if not visible or target == null: return - var pos := camera.unproject_position(target.global_position) + var pos := StaticNodesManager.main_camera.unproject_position( + target.global_position + ) var corner_1 := Vector2.ONE * EDGE_MARGIN var viewport_size := get_viewport().get_visible_rect().size var corner_2 := Vector2( diff --git a/scripts/units/aphid.gd b/scripts/units/aphid.gd index d121bd8..368945d 100644 --- a/scripts/units/aphid.gd +++ b/scripts/units/aphid.gd @@ -16,11 +16,8 @@ var spawned_honeydews: Dictionary = {} var honeydew_scene := preload("res://scenes/items/honeydew.tscn") -@onready var holder: Node = $/root/World/Items/Honeydew - func _ready() -> void: - assert(holder != null, "holder missing!") super._ready() _set_spawn_timer() @@ -62,7 +59,7 @@ func _handle_honeydew_spawn(delta: float) -> void: new_honeydew.HEIGHT_OFFSET, randf_range(-HONEYDEW_SPAWN_SPREAD, HONEYDEW_SPAWN_SPREAD), ) - holder.add_child(new_honeydew) + StaticNodesManager.honeydew_holder.add_child(new_honeydew) new_honeydew.global_position = global_position + new_pos _put_honeydew(new_honeydew) diff --git a/scripts/units/controlled_unit.gd b/scripts/units/controlled_unit.gd index ecdeb3b..e418137 100644 --- a/scripts/units/controlled_unit.gd +++ b/scripts/units/controlled_unit.gd @@ -11,7 +11,6 @@ var selected: bool = false var is_relocating: bool = false var ground_plane: Plane = Plane(Vector3.UP, 0) -@onready var camera: Camera3D = get_viewport().get_camera_3d() @onready var selection_indicator: VisualInstance3D = $SelectionIndicator @@ -26,7 +25,6 @@ func _init() -> void: func _ready() -> void: - assert(camera != null, "camera missing!") assert(selection_indicator != null, "selection_indicator missing!") nav_agent.navigation_finished.connect(_on_nav_agent_navigation_finished) super._ready() @@ -95,8 +93,8 @@ func _set_target_click(mouse_pos: Vector2) -> void: func _click_raycast(mouse_pos: Vector2) -> Vector3: - var from := camera.global_position - var to := camera.project_ray_normal(mouse_pos) + var from := StaticNodesManager.main_camera.global_position + var to := StaticNodesManager.main_camera.project_ray_normal(mouse_pos) return ground_plane.intersects_ray(from, to) diff --git a/scripts/units/unit.gd b/scripts/units/unit.gd index 7928452..9681a30 100644 --- a/scripts/units/unit.gd +++ b/scripts/units/unit.gd @@ -24,7 +24,6 @@ var advance_anim_delta_accum: float = 0 @onready var visibility_notifier: VisibleOnScreenNotifier3D = ( $VisibleOnScreenNotifier3D ) -@onready var main_camera: MainCamera = $/root/World/MainCamera @onready var audio_player: SoundEffectsPlayer = ( $SoundEffectsPlayer ) @@ -35,7 +34,6 @@ func _ready() -> void: assert(animation_tree != null, "animation_tree missing!") assert(visibility_notifier != null, "visibility_notifier missing!") assert(ui_origin != null, "ui_origin missing!") - assert(main_camera != null, "main_camera missing!") assert(anim_advance_indicator != null, "anim_advance_indicator missing!") assert(audio_player != null, "audio_player missing!") super._ready() @@ -110,7 +108,7 @@ func _animate(delta: float) -> void: advance_anim_delta_accum += delta var advance_anim_step := maxi( - main_camera.advance_anim_step, + StaticNodesManager.main_camera.advance_anim_step, SelectionManager.advance_anim_step ) var frame := Engine.get_frames_drawn()