nightshade/ecs/lines/
components.rs1use 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}