aboutsummaryrefslogtreecommitdiff
path: root/server/src/server.rs
diff options
context:
space:
mode:
Diffstat (limited to 'server/src/server.rs')
-rw-r--r--server/src/server.rs46
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)),