1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
|
//! 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(())
}
}
|