You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
51 lines
1.1 KiB
51 lines
1.1 KiB
//! 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<f32> {
|
|
fn from(c: &'a Coordinates) -> Self {
|
|
Point2 { x: c.0, y: c.1 }
|
|
}
|
|
}
|
|
|
|
pub struct NodeRndr {
|
|
pub loc: Coordinates,
|
|
pub inner: Arc<Node>,
|
|
}
|
|
|
|
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(())
|
|
}
|
|
}
|
|
|