//! Implements a map graph and world logic use crate::{ config::{LinkCfg, MapCfg, NodeCfg}, data::{Link, Node, NodeId}, server::{ServerErr, ServerResult}, wire::Response, }; use async_std::sync::Arc; use quadtree_rs::Quadtree; use std::collections::BTreeMap; pub struct MapNode { pos: (f64, f64), inner: Node, } /// A map that people fight on /// /// A map is defined by it's graph relationships, but also where on /// the map nodes are placed, how much spacing there is, etc. All /// this information is encoded in the same structs because it's /// static, and just more convenient. pub struct Map { /// Node IDs mapped to coordinates nodes: BTreeMap, /// Link IDs mapped to link objects links: BTreeMap>, /// A coordinate map for the network coord: Quadtree>, } impl Map { pub fn new() -> Self { Self { nodes: BTreeMap::new(), links: BTreeMap::new(), coord: Quadtree::new(2), } } pub fn update(&mut self, cb: F) -> ServerResult where F: Fn(&mut Map) -> ServerResult, { unimplemented!() } }