/*
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)
}
}