euv_engine/sprite/
struct.rs1use crate::*;
2
3#[derive(Clone, Copy, Data, Debug, Default, New, PartialEq, PartialOrd)]
5pub struct SpriteFrame {
6 #[get(type(copy))]
8 pub(crate) source: Rect,
9 #[get(type(copy))]
11 pub(crate) duration: f64,
12}
13
14#[derive(Clone, Data, Debug, New, PartialEq)]
16pub struct SpriteSheet {
17 pub(crate) image: HtmlImageElement,
19 #[get(type(copy))]
21 pub(crate) frame_width: f64,
22 #[get(type(copy))]
24 pub(crate) frame_height: f64,
25 #[get(pub(crate), type(copy))]
27 #[get_mut(pub(crate))]
28 #[set(pub(crate))]
29 pub(crate) columns: u32,
30 #[get(pub(crate), type(copy))]
32 #[get_mut(pub(crate))]
33 #[set(pub(crate))]
34 pub(crate) rows: u32,
35}
36
37#[derive(Clone, Data, Debug, New, PartialEq)]
39pub struct SpriteAnimation {
40 pub(crate) name: String,
42 pub(crate) frames: Vec<SpriteFrame>,
44 #[get(type(copy))]
46 pub(crate) mode: AnimationMode,
47}
48
49#[derive(Clone, Data, Debug, New, PartialEq)]
51pub struct Animator {
52 #[get(type(clone))]
54 #[get_mut(pub(crate))]
55 #[new(skip)]
56 pub(crate) current_animation: Option<SpriteAnimation>,
57 #[get(pub(crate), type(copy))]
59 #[get_mut(pub(crate))]
60 #[set(pub(crate))]
61 #[new(skip)]
62 pub(crate) current_frame_index: usize,
63 #[get(pub(crate), type(copy))]
65 #[get_mut(pub(crate))]
66 #[set(pub(crate))]
67 #[new(skip)]
68 pub(crate) elapsed_time: f64,
69 #[get(type(copy))]
71 #[get_mut(pub(crate))]
72 pub(crate) state: AnimationState,
73 #[get(pub(crate), type(copy))]
75 #[get_mut(pub(crate))]
76 #[set(pub(crate))]
77 pub(crate) direction: i32,
78 #[get(type(copy))]
80 #[get_mut(pub(crate))]
81 #[new(skip)]
82 pub(crate) flip_x: bool,
83 #[get(type(copy))]
85 #[get_mut(pub(crate))]
86 #[new(skip)]
87 pub(crate) flip_y: bool,
88}