Skip to main content

nightshade/ecs/lines/
components.rs

1use nalgebra_glm::{Vec3, Vec4, vec3, vec4};
2
3pub const MAX_LINES: u32 = 1_000_000;
4
5#[derive(Default, Debug, Clone, serde::Serialize, serde::Deserialize)]
6pub struct Lines {
7    pub lines: Vec<Line>,
8    #[serde(default)]
9    pub always_on_top: bool,
10    #[serde(skip)]
11    pub version: u64,
12}
13
14impl Lines {
15    pub fn new(lines: Vec<Line>) -> Self {
16        Self {
17            lines,
18            always_on_top: false,
19            version: 0,
20        }
21    }
22
23    pub fn new_always_on_top(lines: Vec<Line>) -> Self {
24        Self {
25            lines,
26            always_on_top: true,
27            version: 0,
28        }
29    }
30
31    pub fn mark_dirty(&mut self) {
32        self.version = self.version.wrapping_add(1);
33    }
34
35    pub fn push(&mut self, line: Line) {
36        self.lines.push(line);
37        self.mark_dirty();
38    }
39
40    pub fn clear(&mut self) {
41        self.lines.clear();
42        self.mark_dirty();
43    }
44}
45
46#[derive(Debug, Clone, serde::Serialize, serde::Deserialize)]
47pub struct Line {
48    pub start: Vec3,
49    pub end: Vec3,
50    pub color: Vec4,
51}
52
53impl Default for Line {
54    fn default() -> Self {
55        Self {
56            start: vec3(0.0, 0.0, 0.0),
57            end: vec3(1.0, 1.0, 1.0),
58            color: vec4(1.0, 1.0, 1.0, 1.0),
59        }
60    }
61}