|
@@ -10,30 +10,45 @@ use std::path;
|
10
|
10
|
const TARGET_ANIMATION_FPS: u32 = 10;
|
11
|
11
|
|
12
|
12
|
struct SpriteInfo {
|
13
|
|
- start_y: f32,
|
14
|
|
- tile_count: u16,
|
|
13
|
+ relative_start_y: f32,
|
15
|
14
|
relative_tile_width: f32,
|
16
|
15
|
relative_tile_height: f32,
|
|
16
|
+ tile_count: u16,
|
17
|
17
|
current_frame: u16,
|
18
|
18
|
}
|
19
|
19
|
|
20
|
20
|
impl SpriteInfo {
|
21
|
|
- pub fn new(start_y: f32, tile_count: u16) -> Self {
|
22
|
|
- // FIXME BS NOW: en fait ca ce base sur la hauteur complète de l'image
|
23
|
|
- let relative_tile_width: f32 = 1.0 / tile_count as f32;
|
|
21
|
+ pub fn new(
|
|
22
|
+ relative_start_y: f32,
|
|
23
|
+ relative_tile_width: f32,
|
|
24
|
+ relative_tile_height: f32,
|
|
25
|
+ tile_count: u16,
|
|
26
|
+ ) -> Self {
|
24
|
27
|
Self {
|
25
|
|
- start_y,
|
26
|
|
- tile_count,
|
|
28
|
+ relative_start_y,
|
27
|
29
|
relative_tile_width,
|
28
|
|
- relative_tile_height: 1.0,
|
|
30
|
+ relative_tile_height,
|
|
31
|
+ tile_count,
|
29
|
32
|
current_frame: 0,
|
30
|
33
|
}
|
31
|
34
|
}
|
32
|
35
|
|
33
|
|
- pub fn from_type(type_: &SpriteType) -> Self {
|
34
|
|
- match type_ {
|
35
|
|
- SpriteType::WalkingSoldier => Self::new(0.0, 7),
|
36
|
|
- SpriteType::JumpingSoldier => Self::new(24.0, 2),
|
|
36
|
+ pub fn from_type(
|
|
37
|
+ type_: &SpriteType,
|
|
38
|
+ sprite_sheet_width: f32,
|
|
39
|
+ sprite_sheet_height: f32,
|
|
40
|
+ ) -> Self {
|
|
41
|
+ let (start_y, tile_width, tile_height, tile_count) = match type_ {
|
|
42
|
+ SpriteType::WalkingSoldier => (0.0, 24.0, 24.0, 7),
|
|
43
|
+ SpriteType::JumpingSoldier => (24.0, 24.0, 24.0, 2),
|
|
44
|
+ };
|
|
45
|
+
|
|
46
|
+ Self {
|
|
47
|
+ relative_start_y: start_y / sprite_sheet_height,
|
|
48
|
+ relative_tile_width: tile_width / sprite_sheet_width,
|
|
49
|
+ relative_tile_height: tile_height / sprite_sheet_height,
|
|
50
|
+ tile_count,
|
|
51
|
+ current_frame: 0,
|
37
|
52
|
}
|
38
|
53
|
}
|
39
|
54
|
}
|
|
@@ -43,12 +58,10 @@ enum SpriteType {
|
43
|
58
|
JumpingSoldier,
|
44
|
59
|
}
|
45
|
60
|
|
46
|
|
-fn sprite_batch_part_from_sprite_info(
|
47
|
|
- sprite_info: &SpriteInfo,
|
48
|
|
-) -> graphics::DrawParam {
|
|
61
|
+fn sprite_batch_part_from_sprite_info(sprite_info: &SpriteInfo) -> graphics::DrawParam {
|
49
|
62
|
let src = graphics::Rect::new(
|
50
|
63
|
sprite_info.current_frame as f32 * sprite_info.relative_tile_width,
|
51
|
|
- sprite_info.start_y,
|
|
64
|
+ sprite_info.relative_start_y,
|
52
|
65
|
sprite_info.relative_tile_width,
|
53
|
66
|
sprite_info.relative_tile_height,
|
54
|
67
|
);
|
|
@@ -61,9 +74,18 @@ struct SceneItem {
|
61
|
74
|
}
|
62
|
75
|
|
63
|
76
|
impl SceneItem {
|
64
|
|
- pub fn new(sprite_type: SpriteType, position: na::Point2<f32>) -> Self {
|
|
77
|
+ pub fn new(
|
|
78
|
+ sprite_type: SpriteType,
|
|
79
|
+ position: na::Point2<f32>,
|
|
80
|
+ sprite_sheet_width: f32,
|
|
81
|
+ sprite_sheet_height: f32,
|
|
82
|
+ ) -> Self {
|
65
|
83
|
Self {
|
66
|
|
- sprite_info: SpriteInfo::from_type(&sprite_type),
|
|
84
|
+ sprite_info: SpriteInfo::from_type(
|
|
85
|
+ &sprite_type,
|
|
86
|
+ sprite_sheet_width,
|
|
87
|
+ sprite_sheet_height,
|
|
88
|
+ ),
|
67
|
89
|
position,
|
68
|
90
|
}
|
69
|
91
|
}
|
|
@@ -76,9 +98,7 @@ impl SceneItem {
|
76
|
98
|
}
|
77
|
99
|
}
|
78
|
100
|
|
79
|
|
-enum Message {
|
80
|
|
-
|
81
|
|
-}
|
|
101
|
+enum Message {}
|
82
|
102
|
|
83
|
103
|
struct MainState {
|
84
|
104
|
scene_items_sprite_batch: graphics::spritebatch::SpriteBatch,
|
|
@@ -93,15 +113,17 @@ impl MainState {
|
93
|
113
|
let mut scene_items = vec![];
|
94
|
114
|
for x in 0..1 {
|
95
|
115
|
for y in 0..4 {
|
96
|
|
- let type_ = if y % 2 == 0 {
|
|
116
|
+ let sprite_type = if y % 2 == 0 {
|
97
|
117
|
SpriteType::WalkingSoldier
|
98
|
118
|
} else {
|
99
|
119
|
SpriteType::JumpingSoldier
|
100
|
120
|
};
|
101
|
121
|
|
102
|
122
|
scene_items.push(SceneItem::new(
|
103
|
|
- SpriteType::WalkingSoldier,
|
|
123
|
+ sprite_type,
|
104
|
124
|
na::Point2::new(x as f32 * 24.0, y as f32 * 24.0),
|
|
125
|
+ 168.0,
|
|
126
|
+ 48.0,
|
105
|
127
|
));
|
106
|
128
|
}
|
107
|
129
|
}
|