Add separate team spawners

This commit is contained in:
Sofia 2026-07-22 04:37:02 +03:00
parent 87c09dd98b
commit 7a7a1c549c
3 changed files with 14 additions and 8 deletions

View File

@ -18,8 +18,8 @@ size = Vector3(100, 0.01, 100)
[sub_resource type="BoxShape3D" id="BoxShape3D_3g557"] [sub_resource type="BoxShape3D" id="BoxShape3D_3g557"]
size = Vector3(1000, 1, 1000) size = Vector3(1000, 1, 1000)
[node name="map" type="Map" unique_id=914577955 node_paths=PackedStringArray("spawner", "ball_spawner")] [node name="map" type="Map" unique_id=914577955 node_paths=PackedStringArray("spawners", "ball_spawner")]
spawner = NodePath("spawner") spawners = [NodePath("team1_spawner"), NodePath("team2_spawner")]
ball_spawner = NodePath("ball_spawner") ball_spawner = NodePath("ball_spawner")
local_player = ExtResource("1_yjvui") local_player = ExtResource("1_yjvui")
remote_player = ExtResource("2_kcncr") remote_player = ExtResource("2_kcncr")
@ -48,8 +48,11 @@ shape = SubResource("BoxShape3D_1cgct")
[node name="directional_light_3d" type="DirectionalLight3D" parent="." unique_id=793524416] [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) 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] [node name="team1_spawner" type="Node3D" parent="." unique_id=1364438299]
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, -0.028572083, 3.9666176, 0.031027317) 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] [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) transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 5.080344, 4.78083, -9.363691)

View File

@ -557,9 +557,10 @@ impl Game {
} }
if let Some(mut map) = self.current_map.clone() { 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 = let mut character =
map.bind_mut() 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 Some(character) = &mut character {
if let Ok(mut local_player) = character.clone().try_cast::<LocalPlayer>() { if let Ok(mut local_player) = character.clone().try_cast::<LocalPlayer>() {
@ -613,6 +614,7 @@ impl Game {
let character = map.bind_mut().spawn_player( let character = map.bind_mut().spawn_player(
player.id(), player.id(),
player.data.team,
player.id() == self.self_id.unwrap_or(0), player.id() == self.self_id.unwrap_or(0),
Some(transform), Some(transform),
); );

View File

@ -11,7 +11,7 @@ use crate::{
#[class(base=Node3D, init)] #[class(base=Node3D, init)]
pub struct Map { pub struct Map {
#[export] #[export]
pub spawner: Option<Gd<Node3D>>, pub spawners: Array<Gd<Node3D>>,
#[export] #[export]
pub ball_spawner: Option<Gd<Node3D>>, pub ball_spawner: Option<Gd<Node3D>>,
#[export] #[export]
@ -41,6 +41,7 @@ impl Map {
pub fn spawn_player( pub fn spawn_player(
&mut self, &mut self,
player_id: u16, player_id: u16,
team: u8,
is_local: bool, is_local: bool,
transform: Option<NetTransform>, transform: Option<NetTransform>,
) -> Option<DynGd<CharacterBody3D, dyn IPlayer + 'static>> { ) -> Option<DynGd<CharacterBody3D, dyn IPlayer + 'static>> {
@ -57,7 +58,7 @@ impl Map {
.base_mut() .base_mut()
.set_global_rotation(transform.rotation.into()); .set_global_rotation(transform.rotation.into());
} else { } else {
if let Some(spawner) = &self.spawner { if let Some(spawner) = &self.spawners.get(team as usize) {
node.bind_mut() node.bind_mut()
.base_mut() .base_mut()
.set_global_position(spawner.get_global_position()); .set_global_position(spawner.get_global_position());
@ -79,7 +80,7 @@ impl Map {
.base_mut() .base_mut()
.set_global_rotation(transform.rotation.into()); .set_global_rotation(transform.rotation.into());
} else { } else {
if let Some(spawner) = &self.spawner { if let Some(spawner) = &self.spawners.get(team as usize) {
node.bind_mut() node.bind_mut()
.base_mut() .base_mut()
.set_global_position(spawner.get_global_position()); .set_global_position(spawner.get_global_position());