From fd2d5455339a61d8b38bcb47fa40e094ef61856c Mon Sep 17 00:00:00 2001 From: metamuffin Date: Wed, 26 Jun 2024 15:43:47 +0200 Subject: make demand state part of the game state --- server/src/game.rs | 24 ++++++++++++++++++++++-- 1 file changed, 22 insertions(+), 2 deletions(-) (limited to 'server/src/game.rs') 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, players: HashMap, packet_out: VecDeque, + demand: Option, } 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 { -- cgit v1.2.3-70-g09d2