Add separate team spawners
This commit is contained in:
parent
87c09dd98b
commit
7a7a1c549c
@ -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)
|
||||
|
||||
@ -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::<LocalPlayer>() {
|
||||
@ -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),
|
||||
);
|
||||
|
||||
@ -11,7 +11,7 @@ use crate::{
|
||||
#[class(base=Node3D, init)]
|
||||
pub struct Map {
|
||||
#[export]
|
||||
pub spawner: Option<Gd<Node3D>>,
|
||||
pub spawners: Array<Gd<Node3D>>,
|
||||
#[export]
|
||||
pub ball_spawner: Option<Gd<Node3D>>,
|
||||
#[export]
|
||||
@ -41,6 +41,7 @@ impl Map {
|
||||
pub fn spawn_player(
|
||||
&mut self,
|
||||
player_id: u16,
|
||||
team: u8,
|
||||
is_local: bool,
|
||||
transform: Option<NetTransform>,
|
||||
) -> Option<DynGd<CharacterBody3D, dyn IPlayer + 'static>> {
|
||||
@ -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());
|
||||
|
||||
Loading…
Reference in New Issue
Block a user