From 7a7a1c549ce7bc2ad5e0ee4e3ee445cc20e4b692 Mon Sep 17 00:00:00 2001 From: Sofia Date: Wed, 22 Jul 2026 04:37:02 +0300 Subject: [PATCH] Add separate team spawners --- godot/maps/default_map/map0.tscn | 11 +++++++---- rust/src/game_manager.rs | 4 +++- rust/src/map.rs | 7 ++++--- 3 files changed, 14 insertions(+), 8 deletions(-) diff --git a/godot/maps/default_map/map0.tscn b/godot/maps/default_map/map0.tscn index 42fc2ce..0af6de5 100644 --- a/godot/maps/default_map/map0.tscn +++ b/godot/maps/default_map/map0.tscn @@ -18,8 +18,8 @@ size = Vector3(100, 0.01, 100) [sub_resource type="BoxShape3D" id="BoxShape3D_3g557"] size = Vector3(1000, 1, 1000) -[node name="map" type="Map" unique_id=914577955 node_paths=PackedStringArray("spawner", "ball_spawner")] -spawner = NodePath("spawner") +[node name="map" type="Map" unique_id=914577955 node_paths=PackedStringArray("spawners", "ball_spawner")] +spawners = [NodePath("team1_spawner"), NodePath("team2_spawner")] ball_spawner = NodePath("ball_spawner") local_player = ExtResource("1_yjvui") remote_player = ExtResource("2_kcncr") @@ -48,8 +48,11 @@ shape = SubResource("BoxShape3D_1cgct") [node name="directional_light_3d" type="DirectionalLight3D" parent="." unique_id=793524416] transform = Transform3D(1, 0, 0, 0, 0.7274598, 0.6861503, 0, -0.6861503, 0.7274598, -5.1267624, 3.3997262, 3.715582) -[node name="spawner" type="Node3D" parent="." unique_id=1364438299] -transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, -0.028572083, 3.9666176, 0.031027317) +[node name="team1_spawner" type="Node3D" parent="." unique_id=1364438299] +transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, -5.1396794, 3.9666176, 6.2400913) + +[node name="team2_spawner" type="Node3D" parent="." unique_id=160131314] +transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 7.244197, 3.9666176, -6.361364) [node name="ball_spawner" type="Node3D" parent="." unique_id=1149426253] transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 5.080344, 4.78083, -9.363691) diff --git a/rust/src/game_manager.rs b/rust/src/game_manager.rs index 3f328e9..73f100a 100644 --- a/rust/src/game_manager.rs +++ b/rust/src/game_manager.rs @@ -557,9 +557,10 @@ impl Game { } if let Some(mut map) = self.current_map.clone() { + let team = self.find_player(id).map(|p| p.data.team).unwrap_or(0); let mut character = map.bind_mut() - .spawn_player(id, id == self.self_id.unwrap_or(0), None); + .spawn_player(id, team, id == self.self_id.unwrap_or(0), None); if let Some(character) = &mut character { if let Ok(mut local_player) = character.clone().try_cast::() { @@ -613,6 +614,7 @@ impl Game { let character = map.bind_mut().spawn_player( player.id(), + player.data.team, player.id() == self.self_id.unwrap_or(0), Some(transform), ); diff --git a/rust/src/map.rs b/rust/src/map.rs index dbc0c6b..ab58f72 100644 --- a/rust/src/map.rs +++ b/rust/src/map.rs @@ -11,7 +11,7 @@ use crate::{ #[class(base=Node3D, init)] pub struct Map { #[export] - pub spawner: Option>, + pub spawners: Array>, #[export] pub ball_spawner: Option>, #[export] @@ -41,6 +41,7 @@ impl Map { pub fn spawn_player( &mut self, player_id: u16, + team: u8, is_local: bool, transform: Option, ) -> Option> { @@ -57,7 +58,7 @@ impl Map { .base_mut() .set_global_rotation(transform.rotation.into()); } else { - if let Some(spawner) = &self.spawner { + if let Some(spawner) = &self.spawners.get(team as usize) { node.bind_mut() .base_mut() .set_global_position(spawner.get_global_position()); @@ -79,7 +80,7 @@ impl Map { .base_mut() .set_global_rotation(transform.rotation.into()); } else { - if let Some(spawner) = &self.spawner { + if let Some(spawner) = &self.spawners.get(team as usize) { node.bind_mut() .base_mut() .set_global_position(spawner.get_global_position());