//! Game entity rendering //! //! Generally the naming convention should be: `{type}Rndr` //! (`Renderer`, but shorter). use super::prelude::*; use rst_core::data::Node; use std::sync::Arc; /// A set of universal X/Y coordinates pub struct Coordinates(pub f32, pub f32); impl<'a> From<&'a Coordinates> for Point2 { fn from(c: &'a Coordinates) -> Self { Point2 { x: c.0, y: c.1 } } } pub struct NodeRndr { pub loc: Coordinates, pub inner: Arc, } impl Renderer for NodeRndr { fn update(&mut self, _: &mut ClientState, _: &mut Context) -> GameResult<()> { Ok(()) } fn draw(&self, s: &ClientState, ctx: &mut Context) -> GameResult<()> { let frame = s.assets().find("frame/frame_s").unwrap(); frame.draw( ctx, DrawParam::new().dest([256.0, 256.0]).color(graphics::RED), )?; let circ = Mesh::new_circle( ctx, DrawMode::fill(), Point2::from(&self.loc), 64.0, 0.1, graphics::WHITE, ) .unwrap(); circ.draw(ctx, DrawParam::new()).unwrap(); Ok(()) } }