From 6dc98d7993e646b0ed8d2408e085abe290fda00f Mon Sep 17 00:00:00 2001 From: Dustin Date: Sun, 20 Apr 2025 15:27:24 -0700 Subject: [PATCH] Little warmer. Remote projectiles. --- lib/singleton_autoloads/NetworkManager.gd | 29 ++++++++++++++++------- src/components/PewMachine.gd | 18 +++++++++++--- 2 files changed, 35 insertions(+), 12 deletions(-) diff --git a/lib/singleton_autoloads/NetworkManager.gd b/lib/singleton_autoloads/NetworkManager.gd index 8b7e0a0..8b979d9 100644 --- a/lib/singleton_autoloads/NetworkManager.gd +++ b/lib/singleton_autoloads/NetworkManager.gd @@ -82,10 +82,21 @@ func unregister_player(id): players.erase(id) emit_signal("player_list_changed") -remote func load_scene_on_all_clients(_scene :PackedScene, _node_path :NodePath, _global_position :Vector2 , _as_toplevel = true): - print("did I not get called others: ", players.size()) +func instance_on_peer_players(_scene :Resource, _node_path :NodePath, _global_position :Vector2 , _as_toplevel = true): + print ("Scene Path: ", _scene.resource_path, + " Instance At: ", _node_path, + " Position : ", _global_position) - var new_scene = _scene.instance() + rpc("load_scene_on_all_clients", _scene.resource_path, _node_path, _global_position, _as_toplevel) + + +remotesync func load_scene_on_all_clients(_scene :String, _node_path :NodePath, _global_position :Vector2 , _as_toplevel = true): + print ( "-- Remote Scene Call -- \n", + " Scene Path: ", _scene, + " Instance At: ", _node_path, + " Position : ", _global_position) + + var new_scene = load(_scene).instance() var _caller_id = get_tree().get_rpc_sender_id() new_scene.set_network_master(_caller_id) @@ -94,13 +105,13 @@ remote func load_scene_on_all_clients(_scene :PackedScene, _node_path :NodePath, get_node(_node_path).add_child(new_scene) - for _player in players: - rpc_id(_player, "load_scene_on_all_clients", _scene, _node_path, _global_position, _as_toplevel ) +# for _player in players: +# rpc_id(_player, "load_scene_on_all_clients", _scene, _node_path, _global_position, _as_toplevel ) - if new_scene.get_network_master() == _caller_id: - return new_scene - else: - return null +# if new_scene.get_network_master() == _caller_id: +# return new_scene +# else: +# return null remote func pre_start_game(spawn_points): # Change scene. diff --git a/src/components/PewMachine.gd b/src/components/PewMachine.gd index 0b0fc54..ca8a66b 100644 --- a/src/components/PewMachine.gd +++ b/src/components/PewMachine.gd @@ -2,7 +2,7 @@ extends Position2D ## Represents a weapon that spawns and shoots bullets. ## The Cooldown timer controls the cooldown duration between shots. -export var scene_path :PackedScene +export var scene_path :Resource export var pew_cooldown_time :float = 1.0 const BULLET_VELOCITY = 350 @@ -49,7 +49,7 @@ func shoot(direction = 1): if not timer.is_stopped(): return false #var bullet = loaded_scene.instance() - var bullet = NetworkManager.load_scene_on_all_clients(loaded_scene, self.get_path(), global_position , true) + var bullet = NetworkManager.instance_on_peer_players(loaded_scene, self.get_path(), global_position , true) # if (direction > 0): # bullet.global_position = global_position # else: @@ -61,9 +61,21 @@ func shoot(direction = 1): #bullet.linear_velocity = Vector2(direction * BULLET_VELOCITY, 0) - bullet.set_as_toplevel(true) + #bullet.set_as_toplevel(true) # add_child(bullet) # sound_shoot.play() timer.start() return true +#var bomb_name = String(get_name()) + str(bomb_index) +#var bomb_pos = position +#rpc("setup_bomb", bomb_name, bomb_pos, get_tree().get_network_unique_id()) + +remotesync func setup_bomb(bomb_name, pos, by_who): + var bomb = loaded_scene.instance() + bomb.set_name(bomb_name) # Ensure unique name for the bomb + bomb.position = pos + bomb.from_player = by_who + # No need to set network master to bomb, will be owned by server by default + get_node("../..").add_child(bomb) +