aboutsummaryrefslogtreecommitdiff
path: root/games/rstnode/rst-client/src/graphics/entities/mod.rs
blob: 17f26a8e5a707e6f1c43c357b280940e633914dd (plain)
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(())
    }
}