/* Hurry Curry! - a game about cooking Copyright 2024 metamuffin This program is free software: you can redistribute it and/or modify it under the terms of the GNU Affero General Public License as published by the Free Software Foundation, version 3 of the License only. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Affero General Public License for more details. You should have received a copy of the GNU Affero General Public License along with this program. If not, see . */ use crate::{sprite_renderer::SpriteRenderer, tilemap::Tilemap}; use hurrycurry_protocol::{ glam::{IVec2, Vec2}, PacketC, PlayerID, TileIndex, }; use std::collections::HashMap; pub struct Game { tiles: HashMap, tilemap: Tilemap, players: HashMap, } pub struct Tile { kind: TileIndex, } pub struct Player { character: i32, position: Vec2, } impl Game { pub fn new() -> Self { Self { tiles: HashMap::new(), players: HashMap::new(), tilemap: Tilemap::default(), } } pub fn packet_in(&mut self, packet: PacketC, renderer: &mut SpriteRenderer) { match packet { PacketC::Data { data } => { self.tilemap.init(&data.tile_names, renderer.metadata()); } PacketC::UpdateMap { tile, kind, neighbors, } => { if let Some(kind) = kind { self.tiles.insert(tile, Tile { kind }); } else { self.tiles.remove(&tile); } self.tilemap.set(tile, kind, neighbors); } _ => (), } } pub fn draw(&self, ctx: &mut SpriteRenderer) { self.tilemap.draw(ctx) } }