Add host-authoritative multiplayer fishing

This commit is contained in:
Alexander Sellite 2026-07-29 16:29:25 -04:00
parent b0e2e84ba4
commit d3e3bf4053
17 changed files with 1672 additions and 23 deletions

View file

@ -43,6 +43,9 @@ const SavedServerStoreType = preload(
const PlayerSpawnServiceType = preload(
"res://network/player_spawn_service.gd"
)
const NetworkFishingServiceType = preload(
"res://network/network_fishing_service.gd"
)
const TITLE_MUSIC_SILENCE_DB: float = -80.0
@ -77,6 +80,9 @@ const TITLE_MUSIC_SILENCE_DB: float = -80.0
@onready var _player_spawn_service: PlayerSpawnServiceType = (
%PlayerSpawnService
)
@onready var _network_fishing: NetworkFishingServiceType = (
%NetworkFishingService
)
@onready var _players_root: Node3D = $Players
var _gameplay_started: bool = false
@ -136,6 +142,17 @@ func _ready() -> void:
_player.cooler_capacity
)
_save_manager.set_autosave_enabled(false)
_network_fishing.setup(
_network_session,
_player_spawn_service,
_fishing_spot,
_player.inventory,
_player.collection_log,
_player.cooler_capacity,
_save_manager,
item_catalog,
fish_catalog
)
_fishing_spot.setup(
_player,
_player.inventory,
@ -146,7 +163,8 @@ func _ready() -> void:
_player.fishing_upgrades,
_player.item_effects,
_player.cooler_capacity,
_network_session
_network_session,
_network_fishing
)
_game_ui.setup(
_player,
@ -562,6 +580,10 @@ func _on_remote_recovery_requested(
var avatar: PlayerType = _player_spawn_service.get_avatar(peer_id)
if avatar == null:
return
_network_fishing.cancel_peer_attempt(
peer_id,
"Fishing attempt ended."
)
var target_position: Vector3 = _test_world.get_player_spawn_transform().origin
var nearest_distance: float = INF
for point: SafeRespawnPoint in _test_world.get_safe_respawn_points():

View file

@ -1,4 +1,4 @@
[gd_scene load_steps=21 format=3]
[gd_scene load_steps=22 format=3]
[ext_resource type="PackedScene" path="res://world/test_world.tscn" id="1_world"]
[ext_resource type="PackedScene" path="res://player/player.tscn" id="2_player"]
@ -20,6 +20,7 @@
[ext_resource type="Script" path="res://network/network_profile_preferences.gd" id="18_network_profile"]
[ext_resource type="Script" path="res://network/saved_server_store.gd" id="19_saved_servers"]
[ext_resource type="Script" path="res://network/player_spawn_service.gd" id="20_spawn_service"]
[ext_resource type="Script" path="res://network/network_fishing_service.gd" id="21_network_fishing"]
[node name="Main" type="Node3D"]
script = ExtResource("3_main")
@ -44,6 +45,10 @@ script = ExtResource("19_saved_servers")
unique_name_in_owner = true
script = ExtResource("20_spawn_service")
[node name="NetworkFishingService" type="Node" parent="."]
unique_name_in_owner = true
script = ExtResource("21_network_fishing")
[node name="TestWorld" parent="." instance=ExtResource("1_world")]
[node name="Players" type="Node3D" parent="."]