diff --git a/godot/scenes/misc/game_manager.tscn b/godot/scenes/misc/game_manager.tscn index 1a54b36..c121582 100644 --- a/godot/scenes/misc/game_manager.tscn +++ b/godot/scenes/misc/game_manager.tscn @@ -5,11 +5,21 @@ [ext_resource type="PackedScene" uid="uid://df84sctteh4kw" path="res://scenes/game_finished.tscn" id="1_qf2qp"] [ext_resource type="MapResource" uid="uid://sc3507f75002" path="res://maps/diner.tres" id="2_glms7"] [ext_resource type="PackedScene" uid="uid://lahirbqfppvw" path="res://scenes/main.tscn" id="3_7ele1"] +[ext_resource type="PackedScene" uid="uid://ct70bpbca8one" path="res://scenes/player/local_player.tscn" id="4_3b0rc"] +[ext_resource type="PackedScene" uid="uid://kfxc0migw80o" path="res://scenes/player/remote_player.tscn" id="5_nxoss"] [ext_resource type="MapResource" uid="uid://bsjoandgu476y" path="res://maps/two_towers.tres" id="5_rotn8"] +[ext_resource type="PackedScene" uid="uid://hmh2lrrlo2wy" path="res://scenes/player/replay_player.tscn" id="6_5fjlq"] +[ext_resource type="PackedScene" uid="uid://dfnbc8sbufa4j" path="res://scenes/misc/ball.tscn" id="7_cv0ql"] +[ext_resource type="PackedScene" uid="uid://dc17w5n6y1an" path="res://scenes/misc/replay_ball.tscn" id="8_m1inn"] [node name="game_manager" type="GameManager" unique_id=1442044769] respawn_timer = 10.0 lobby_screen = ExtResource("1_3ama4") game_finished_screen = ExtResource("1_qf2qp") main_menu = ExtResource("3_7ele1") +local_player = ExtResource("4_3b0rc") +remote_player = ExtResource("5_nxoss") +replay_player = ExtResource("6_5fjlq") +ball = ExtResource("7_cv0ql") +replay_ball = ExtResource("8_m1inn") maps = Array[MapResource]([ExtResource("1_glms7"), ExtResource("2_glms7"), ExtResource("5_rotn8")]) diff --git a/rust/src/game_manager.rs b/rust/src/game_manager.rs index 3010e46..9e456ff 100644 --- a/rust/src/game_manager.rs +++ b/rust/src/game_manager.rs @@ -42,6 +42,22 @@ pub struct GameManager { #[export] pub main_menu: Option>, + #[export] + #[export_group(name = "Prefabs")] + pub local_player: Option>, + #[export] + #[export_group(name = "Prefabs")] + pub remote_player: Option>, + #[export] + #[export_group(name = "Prefabs")] + pub replay_player: Option>, + #[export] + #[export_group(name = "Prefabs")] + pub ball: Option>, + #[export] + #[export_group(name = "Prefabs")] + pub replay_ball: Option>, + pub game: Option>, base: Base, diff --git a/rust/src/map.rs b/rust/src/map.rs index 3785094..e175128 100644 --- a/rust/src/map.rs +++ b/rust/src/map.rs @@ -1,7 +1,7 @@ use godot::{classes::CharacterBody3D, prelude::*}; use crate::{ - game_manager::Game, + game_manager::{Game, GameManager}, net::util::NetVector3, player::{ IPlayer, NetTransform, ball::Ball, local_player::LocalPlayer, remote_player::RemotePlayer, @@ -16,16 +16,6 @@ pub struct Map { pub spawners: Array>, #[export] pub ball_spawner: Option>, - #[export] - pub local_player: Option>, - #[export] - pub remote_player: Option>, - #[export] - pub replay_player: Option>, - #[export] - pub ball: Option>, - #[export] - pub replay_ball: Option>, base: Base, } @@ -53,7 +43,7 @@ impl Map { get_remote_data: bool, ) -> Option> { if is_local { - if let Some(local_player) = &self.local_player { + if let Some(local_player) = &GameManager::singleton().bind().local_player { let mut node = local_player.instantiate_as::(); node.bind_mut().player_id = Some(player_id); self.base_mut().add_child(&node); @@ -75,7 +65,7 @@ impl Map { } else { None } - } else if let Some(remote_player) = &self.remote_player { + } else if let Some(remote_player) = &GameManager::singleton().bind().remote_player { let mut node = remote_player.instantiate_as::(); node.bind_mut().player_id = Some(player_id); if get_remote_data { @@ -118,7 +108,7 @@ impl Map { player: &ReplayPlayer, state: ReplayPlayerState, ) -> Option> { - if let Some(replay_player) = &self.replay_player { + if let Some(replay_player) = &GameManager::singleton().bind().replay_player { let mut node: Gd = replay_player.instantiate_as(); node.bind_mut().player_id = Some(player_id); node.bind_mut().player_name = player.name.clone(); @@ -147,7 +137,7 @@ impl Map { player_id: Option, ) -> Option> { if let Some(ball_spawner) = self.ball_spawner.clone() - && let Some(ball_prefab) = &self.ball + && let Some(ball_prefab) = &GameManager::singleton().bind().ball { let mut ball = ball_prefab.instantiate_as::(); ball.bind_mut().dropper = player_id; @@ -174,7 +164,7 @@ impl Map { player_id: Option, ) -> Option> { if let Some(ball_spawner) = self.ball_spawner.clone() - && let Some(ball_prefab) = &self.replay_ball + && let Some(ball_prefab) = &GameManager::singleton().bind().replay_ball { let mut ball = ball_prefab.instantiate_as::(); ball.bind_mut().dropper = player_id;