diff --git a/lib/singleton_autoloads/NetworkManager.gd b/lib/singleton_autoloads/NetworkManager.gd index e123b2a..8b7e0a0 100644 --- a/lib/singleton_autoloads/NetworkManager.gd +++ b/lib/singleton_autoloads/NetworkManager.gd @@ -69,7 +69,6 @@ func _connected_fail(): get_tree().set_network_peer(null) # Remove peer emit_signal("connection_failed") - # Lobby management functions. remote func register_player(new_player_name): @@ -83,6 +82,25 @@ 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()) + + var new_scene = _scene.instance() + var _caller_id = get_tree().get_rpc_sender_id() + + new_scene.set_network_master(_caller_id) + new_scene.set_as_toplevel(_as_toplevel) + new_scene.global_position = _global_position + + 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 ) + + if new_scene.get_network_master() == _caller_id: + return new_scene + else: + return null remote func pre_start_game(spawn_points): # Change scene. @@ -164,6 +182,8 @@ func join_game(ip, new_player_name): func get_player_list(): return players.values() +func get_player_ids(): + return players.keys() func get_player_name(): return player_name diff --git a/lib/singleton_autoloads/UIManager.gd b/lib/singleton_autoloads/UIManager.gd index 171e11d..3cde7ce 100644 --- a/lib/singleton_autoloads/UIManager.gd +++ b/lib/singleton_autoloads/UIManager.gd @@ -22,5 +22,7 @@ func _ready(): # Called every frame. 'delta' is the elapsed time since the previous frame. -#func _process(delta): -# pass +func _process(delta): + debug_text = '' + for _player_id in NetworkManager.get_player_ids(): + debug_text += str(_player_id) + '\n' diff --git a/project.godot b/project.godot index 416ebd6..44825bf 100644 --- a/project.godot +++ b/project.godot @@ -34,11 +34,6 @@ _global_script_classes=[ { "language": "GDScript", "path": "res://lib/classes/collision_shape2D_state_receiver.gd" }, { -"base": "", -"class": "GitAPI", -"language": "NativeScript", -"path": "res://addons/godot-git-plugin/git_api.gdns" -}, { "base": "Node", "class": "HealthComponent", "language": "GDScript", @@ -160,7 +155,6 @@ _global_script_class_icons={ "AudioStreamPlayer_StateReceiver": "", "CameraGuide": "", "CollisionShape2D_StateReceiver": "", -"GitAPI": "", "HealthComponent": "", "HealthPickup": "", "Interactable": "", diff --git a/src/components/PewMachine.gd b/src/components/PewMachine.gd index 5b9a979..0b0fc54 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 :Resource +export var scene_path :PackedScene export var pew_cooldown_time :float = 1.0 const BULLET_VELOCITY = 350 @@ -48,19 +48,21 @@ func shoot(direction = 1): # position.x = position.x * direction #shifting position before fire was unreliable if not timer.is_stopped(): return false - var bullet = loaded_scene.instance() + #var bullet = loaded_scene.instance() + var bullet = NetworkManager.load_scene_on_all_clients(loaded_scene, self.get_path(), global_position , true) # if (direction > 0): # bullet.global_position = global_position # else: # bullet.global_position = global_position - Vector2(position.x * 2, 0) if bullet is Projectile: - bullet.global_position = global_position + print ("i'm a projectile") +# bullet.global_position = global_position bullet.direction_normal = normal_vector #bullet.linear_velocity = Vector2(direction * BULLET_VELOCITY, 0) bullet.set_as_toplevel(true) - add_child(bullet) +# add_child(bullet) # sound_shoot.play() timer.start() return true