diff options
Diffstat (limited to 'server/src/server.rs')
| -rw-r--r-- | server/src/server.rs | 46 |
1 files changed, 7 insertions, 39 deletions
diff --git a/server/src/server.rs b/server/src/server.rs index 954d9a2c..1886715d 100644 --- a/server/src/server.rs +++ b/server/src/server.rs @@ -23,7 +23,7 @@ use crate::{ scoreboard::ScoreboardStore, }; use anyhow::{Context, Result}; -use hurrycurry_client_lib::{Game, Involvement, Item, Player, Tile, gamedata_index::GamedataIndex}; +use hurrycurry_client_lib::{Game, Involvement, Item, Player, Tile}; use hurrycurry_data::{Serverdata, index::DataIndex}; use hurrycurry_locale::{ FALLBACK_LOCALE, TrError, @@ -32,7 +32,7 @@ use hurrycurry_locale::{ }; use hurrycurry_protocol::{ Character, Gamedata, Hand, ItemLocation, Menu, MessageTimeout, PacketC, PacketS, PlayerClass, - PlayerID, Score, TileIndex, + PlayerID, Score, glam::{IVec2, Vec2}, movement::MovementBase, }; @@ -74,7 +74,6 @@ pub struct Server { pub index: DataIndex, pub packet_out: VecDeque<PacketC>, pub scoreboard: ScoreboardStore, - pub gamedata_index: GamedataIndex, pub editor_address: Option<String>, } @@ -99,7 +98,6 @@ pub trait GameServerExt { packet_out: Option<&mut VecDeque<PacketC>>, ); fn prime_client(&self) -> Vec<PacketC>; - fn set_tile(&mut self, p: IVec2, t: Option<TileIndex>, packet_out: &mut VecDeque<PacketC>); } impl GameServerExt for Game { fn unload(&mut self, packet_out: &mut VecDeque<PacketC>) { @@ -108,6 +106,7 @@ impl GameServerExt for Game { lobby: false, }); for (id, _) in self.players.drain() { + self.players_spatial_index.remove_entry(id); packet_out.push_back(PacketC::RemovePlayer { id }) } for (pos, _) in self.tiles.drain() { @@ -121,6 +120,7 @@ impl GameServerExt for Game { self.end = None; self.environment_effects.clear(); self.walkable.clear(); + self.tile_index.clear(); } fn load( &mut self, @@ -304,36 +304,6 @@ impl GameServerExt for Game { }); } } - - /// Dont forget to flush - fn set_tile( - &mut self, - tile: IVec2, - kind: Option<TileIndex>, - packet_out: &mut VecDeque<PacketC>, - ) { - if let Some(kind) = kind { - self.tiles.insert(tile, Tile::from(kind)); - if self.data_index.tile_collide[kind.0] { - self.walkable.remove(&tile); - } else { - self.walkable.insert(tile); - } - } else { - self.tiles.remove(&tile); - self.walkable.remove(&tile); - } - packet_out.push_back(PacketC::UpdateMap { - tile, - kind, - neighbors: [ - self.tiles.get(&(tile + IVec2::NEG_Y)).map(|e| e.kind), - self.tiles.get(&(tile + IVec2::NEG_X)).map(|e| e.kind), - self.tiles.get(&(tile + IVec2::Y)).map(|e| e.kind), - self.tiles.get(&(tile + IVec2::X)).map(|e| e.kind), - ], - }); - } } impl Server { @@ -346,7 +316,6 @@ impl Server { packet_out: VecDeque::new(), connections: HashMap::new(), data: Serverdata::default().into(), - gamedata_index: GamedataIndex::default(), entities: Vec::new(), score_changed: false, packet_loopback: VecDeque::new(), @@ -384,7 +353,6 @@ impl Server { timer.or(serverdata.default_timer), &mut self.packet_out, ); - self.gamedata_index.update(&self.game.data); self.entities.clear(); for ed in &serverdata.entity_decls { self.entities.push(construct_entity(ed)); @@ -719,7 +687,7 @@ impl Server { Ok(()) } - /// Returns true if the game should end + /// Returns Some(map) if the game should end pub fn tick(&mut self, dt: f32) -> Option<(String, Option<Duration>)> { if self.score_changed { self.score_changed = false; @@ -731,7 +699,7 @@ impl Server { tick_slot( dt, &self.game.data, - &self.gamedata_index, + &self.game.data_index, Some(tile.kind), &mut tile.item, ItemLocation::Tile(pos), @@ -774,7 +742,7 @@ impl Server { tick_slot( dt, &self.game.data, - &self.gamedata_index, + &self.game.data_index, None, item, ItemLocation::Player(pid, Hand(i)), |