Compare commits

...

2 Commits

Author SHA1 Message Date
7a7a1c549c Add separate team spawners 2026-07-22 04:37:02 +03:00
87c09dd98b Fix some warnings 2026-07-22 04:32:01 +03:00
8 changed files with 18 additions and 13 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());

View File

@ -20,7 +20,6 @@ use crate::{
}, },
util::{NetVector3, cast_ray}, util::{NetVector3, cast_ray},
}, },
player_hand_remover::PlayerHandRemover,
soldier_mesh::SoldierMesh, soldier_mesh::SoldierMesh,
ui::cli::CommandLinePanel, ui::cli::CommandLinePanel,
weapon::{BallWeapon, Raygun, Weapon, WeaponType}, weapon::{BallWeapon, Raygun, Weapon, WeaponType},

View File

@ -13,7 +13,7 @@ pub struct PlayerHandRemover {
#[godot_api] #[godot_api]
impl ISkeletonModifier3D for PlayerHandRemover { impl ISkeletonModifier3D for PlayerHandRemover {
fn process_modification_with_delta(&mut self, delta: f64) { fn process_modification_with_delta(&mut self, _delta: f64) {
if self.active { if self.active {
if let Some(mut skeleton) = self.base_mut().get_skeleton() { if let Some(mut skeleton) = self.base_mut().get_skeleton() {
let uar = skeleton.find_bone("UA.R"); let uar = skeleton.find_bone("UA.R");

View File

@ -1,4 +1,4 @@
use godot::{meta::Element, prelude::*}; use godot::prelude::*;
#[derive(GodotClass)] #[derive(GodotClass)]
#[class(base=Resource, init, tool)] #[class(base=Resource, init, tool)]

View File

@ -1,5 +1,5 @@
use godot::{ use godot::{
classes::{GridContainer, IGridContainer, Label, OptionButton, TextEdit}, classes::{GridContainer, IGridContainer, Label, OptionButton},
prelude::*, prelude::*,
}; };

View File

@ -142,7 +142,7 @@ pub struct BallWeapon {
#[godot_dyn] #[godot_dyn]
impl Weapon for BallWeapon { impl Weapon for BallWeapon {
fn shoot(&mut self, player_rid: Rid, player_id: u16, to: Vector3, deal_damage: bool) {} fn shoot(&mut self, _: Rid, _: u16, _: Vector3, _: bool) {}
fn get_type(&self) -> WeaponType { fn get_type(&self) -> WeaponType {
WeaponType::Ball WeaponType::Ball