WIP: Add a selection of the spawnpoint for every players #108

Draft
CoCo_Sol wants to merge 12 commits from select-spawnpoint into main
Showing only changes of commit b9ffb82db5 - Show all commits

View file

@ -1,7 +1,6 @@
//! TODO //! TODO
use bevy::prelude::*; use bevy::prelude::*;
use bevy::utils::hashbrown::HashSet;
use super::generation::EndMapGeneration; use super::generation::EndMapGeneration;
use super::ownership::Owner; use super::ownership::Owner;
@ -34,36 +33,29 @@ fn init_spawn_point(
return; return;
} }
let target_ring = TilePosition::new(0, 0)
.ring(radius as usize / 2)
.collect::<HashSet<_>>();
let mut sorted_tiles = map
.iter_mut()
.filter(|(_, p, _)| target_ring.contains(*p))
.collect::<Vec<_>>();
println!("{}", sorted_tiles.len());
sorted_tiles.sort_by(|a, b| compare_spawnpoint_entity(a.1, b.1));
let mut sorted_players = players.iter().collect::<Vec<_>>(); let mut sorted_players = players.iter().collect::<Vec<_>>();
sorted_players.sort_by(|a: &&Player, b: &&Player| compare_player(a, b)); sorted_players.sort_by(|a: &&Player, b: &&Player| compare_player(a, b));
let mut sorted_players = sorted_players.iter(); let mut sorted_players = sorted_players.iter();
let number_players = sorted_players.len(); let number_players = sorted_players.len();
for (i, (entity, _, tile)) in sorted_tiles.iter_mut().enumerate() { for (i, target_pos) in TilePosition::new(0, 0)
if i % radius as usize * 3 / number_players != 0 { .ring(radius as usize / 2)
.enumerate()
{
let Some((entity, _, mut tile)) = map.iter_mut().find(|(_, p, _)| **p == target_pos)
else {
continue;
};
if i % ((radius as usize * 3) / number_players) != 0 {
continue; continue;
} }
**tile = Tile::Castle; *tile = Tile::Castle;
let Some(player) = sorted_players.next() else { let Some(player) = sorted_players.next() else {
continue; continue;
}; };
commands commands.entity(entity).insert(Owner(Player::clone(player)));
.entity(*entity)
.insert(Owner(Player::clone(player)));
} }
} }
} }