diff options
Diffstat (limited to 'server/src/game.rs')
| -rw-r--r-- | server/src/game.rs | 24 | 
1 files changed, 22 insertions, 2 deletions
| diff --git a/server/src/game.rs b/server/src/game.rs index defaf7bf..595816e1 100644 --- a/server/src/game.rs +++ b/server/src/game.rs @@ -16,14 +16,14 @@  */  use crate::{ -    customer::movement::PLAYER_SPEED_LIMIT, +    customer::{movement::PLAYER_SPEED_LIMIT, DemandState},      data::Gamedata,      interaction::{interact, tick_tile, InteractEffect, TickEffect},      protocol::{ItemIndex, Message, PacketC, PacketS, PlayerID, RecipeIndex, TileIndex},  };  use anyhow::{anyhow, bail, Result};  use glam::{IVec2, Vec2}; -use log::info; +use log::{info, warn};  use std::{      collections::{HashMap, VecDeque},      ops::Deref, @@ -64,6 +64,7 @@ pub struct Game {      tiles: HashMap<IVec2, Tile>,      players: HashMap<PlayerID, Player>,      packet_out: VecDeque<PacketC>, +    demand: Option<DemandState>,  }  impl Game { @@ -73,6 +74,7 @@ impl Game {              packet_out: Default::default(),              players: Default::default(),              tiles: Default::default(), +            demand: None,          }      } @@ -87,6 +89,7 @@ impl Game {                  neighbors: [None, None, None, None],              })          } +        self.demand = None;      }      pub fn load(&mut self, gamedata: Gamedata) {          let players = self @@ -99,6 +102,7 @@ impl Game {          self.unload();          self.data = gamedata.into(); +          for (&p, (tile, item)) in &self.data.initial_map {              self.tiles.insert(                  p, @@ -126,6 +130,10 @@ impl Game {              );          } +        if !self.data.demands.is_empty() { +            self.demand = Some(DemandState::new(self.data.clone(), &self.tiles)) +        } +          self.packet_out.extend(self.prime_client());      } @@ -375,6 +383,18 @@ impl Game {      }      pub fn tick(&mut self, dt: f32) { +        if let Some(demand) = &mut self.demand { +            let mut packet_out = Vec::new(); +            if let Err(err) = demand.tick(&mut packet_out, &mut self.tiles, &self.data, dt) { +                warn!("demand tick {err}"); +            } +            for (player, packet) in packet_out { +                if let Err(err) = self.packet_in(player, packet) { +                    warn!("demand packet {err}"); +                } +            } +        } +          for (&pos, tile) in &mut self.tiles {              if let Some(effect) = tick_tile(dt, &self.data, tile) {                  match effect { | 
