Move prefabs to game_manager from map

This commit is contained in:
Sofia 2026-07-26 21:06:58 +03:00
parent 934b06657b
commit 506d0f3b50
3 changed files with 32 additions and 16 deletions

View File

@ -5,11 +5,21 @@
[ext_resource type="PackedScene" uid="uid://df84sctteh4kw" path="res://scenes/game_finished.tscn" id="1_qf2qp"] [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="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://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="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] [node name="game_manager" type="GameManager" unique_id=1442044769]
respawn_timer = 10.0 respawn_timer = 10.0
lobby_screen = ExtResource("1_3ama4") lobby_screen = ExtResource("1_3ama4")
game_finished_screen = ExtResource("1_qf2qp") game_finished_screen = ExtResource("1_qf2qp")
main_menu = ExtResource("3_7ele1") 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")]) maps = Array[MapResource]([ExtResource("1_glms7"), ExtResource("2_glms7"), ExtResource("5_rotn8")])

View File

@ -42,6 +42,22 @@ pub struct GameManager {
#[export] #[export]
pub main_menu: Option<Gd<PackedScene>>, pub main_menu: Option<Gd<PackedScene>>,
#[export]
#[export_group(name = "Prefabs")]
pub local_player: Option<Gd<PackedScene>>,
#[export]
#[export_group(name = "Prefabs")]
pub remote_player: Option<Gd<PackedScene>>,
#[export]
#[export_group(name = "Prefabs")]
pub replay_player: Option<Gd<PackedScene>>,
#[export]
#[export_group(name = "Prefabs")]
pub ball: Option<Gd<PackedScene>>,
#[export]
#[export_group(name = "Prefabs")]
pub replay_ball: Option<Gd<PackedScene>>,
pub game: Option<Gd<Game>>, pub game: Option<Gd<Game>>,
base: Base<Node>, base: Base<Node>,

View File

@ -1,7 +1,7 @@
use godot::{classes::CharacterBody3D, prelude::*}; use godot::{classes::CharacterBody3D, prelude::*};
use crate::{ use crate::{
game_manager::Game, game_manager::{Game, GameManager},
net::util::NetVector3, net::util::NetVector3,
player::{ player::{
IPlayer, NetTransform, ball::Ball, local_player::LocalPlayer, remote_player::RemotePlayer, IPlayer, NetTransform, ball::Ball, local_player::LocalPlayer, remote_player::RemotePlayer,
@ -16,16 +16,6 @@ pub struct Map {
pub spawners: Array<Gd<Node3D>>, pub spawners: Array<Gd<Node3D>>,
#[export] #[export]
pub ball_spawner: Option<Gd<Node3D>>, pub ball_spawner: Option<Gd<Node3D>>,
#[export]
pub local_player: Option<Gd<PackedScene>>,
#[export]
pub remote_player: Option<Gd<PackedScene>>,
#[export]
pub replay_player: Option<Gd<PackedScene>>,
#[export]
pub ball: Option<Gd<PackedScene>>,
#[export]
pub replay_ball: Option<Gd<PackedScene>>,
base: Base<Node3D>, base: Base<Node3D>,
} }
@ -53,7 +43,7 @@ impl Map {
get_remote_data: bool, get_remote_data: bool,
) -> Option<DynGd<CharacterBody3D, dyn IPlayer + 'static>> { ) -> Option<DynGd<CharacterBody3D, dyn IPlayer + 'static>> {
if is_local { 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::<LocalPlayer>(); let mut node = local_player.instantiate_as::<LocalPlayer>();
node.bind_mut().player_id = Some(player_id); node.bind_mut().player_id = Some(player_id);
self.base_mut().add_child(&node); self.base_mut().add_child(&node);
@ -75,7 +65,7 @@ impl Map {
} else { } else {
None 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::<RemotePlayer>(); let mut node = remote_player.instantiate_as::<RemotePlayer>();
node.bind_mut().player_id = Some(player_id); node.bind_mut().player_id = Some(player_id);
if get_remote_data { if get_remote_data {
@ -118,7 +108,7 @@ impl Map {
player: &ReplayPlayer, player: &ReplayPlayer,
state: ReplayPlayerState, state: ReplayPlayerState,
) -> Option<Gd<RemotePlayer>> { ) -> Option<Gd<RemotePlayer>> {
if let Some(replay_player) = &self.replay_player { if let Some(replay_player) = &GameManager::singleton().bind().replay_player {
let mut node: Gd<RemotePlayer> = replay_player.instantiate_as(); let mut node: Gd<RemotePlayer> = replay_player.instantiate_as();
node.bind_mut().player_id = Some(player_id); node.bind_mut().player_id = Some(player_id);
node.bind_mut().player_name = player.name.clone(); node.bind_mut().player_name = player.name.clone();
@ -147,7 +137,7 @@ impl Map {
player_id: Option<u16>, player_id: Option<u16>,
) -> Option<Gd<Ball>> { ) -> Option<Gd<Ball>> {
if let Some(ball_spawner) = self.ball_spawner.clone() 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>(); let mut ball = ball_prefab.instantiate_as::<Ball>();
ball.bind_mut().dropper = player_id; ball.bind_mut().dropper = player_id;
@ -174,7 +164,7 @@ impl Map {
player_id: Option<u16>, player_id: Option<u16>,
) -> Option<Gd<Ball>> { ) -> Option<Gd<Ball>> {
if let Some(ball_spawner) = self.ball_spawner.clone() 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>(); let mut ball = ball_prefab.instantiate_as::<Ball>();
ball.bind_mut().dropper = player_id; ball.bind_mut().dropper = player_id;