Browse Source

correct sprite proportions

Bastien Sevajol 3 years ago
parent
commit
b147893dcd
2 changed files with 45 additions and 23 deletions
  1. BIN
      resources/test.png
  2. 45 23
      src/main.rs

BIN
resources/test.png View File


+ 45 - 23
src/main.rs View File

10
 const TARGET_ANIMATION_FPS: u32 = 10;
10
 const TARGET_ANIMATION_FPS: u32 = 10;
11
 
11
 
12
 struct SpriteInfo {
12
 struct SpriteInfo {
13
-    start_y: f32,
14
-    tile_count: u16,
13
+    relative_start_y: f32,
15
     relative_tile_width: f32,
14
     relative_tile_width: f32,
16
     relative_tile_height: f32,
15
     relative_tile_height: f32,
16
+    tile_count: u16,
17
     current_frame: u16,
17
     current_frame: u16,
18
 }
18
 }
19
 
19
 
20
 impl SpriteInfo {
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
         Self {
27
         Self {
25
-            start_y,
26
-            tile_count,
28
+            relative_start_y,
27
             relative_tile_width,
29
             relative_tile_width,
28
-            relative_tile_height: 1.0,
30
+            relative_tile_height,
31
+            tile_count,
29
             current_frame: 0,
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
     JumpingSoldier,
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
     let src = graphics::Rect::new(
62
     let src = graphics::Rect::new(
50
         sprite_info.current_frame as f32 * sprite_info.relative_tile_width,
63
         sprite_info.current_frame as f32 * sprite_info.relative_tile_width,
51
-        sprite_info.start_y,
64
+        sprite_info.relative_start_y,
52
         sprite_info.relative_tile_width,
65
         sprite_info.relative_tile_width,
53
         sprite_info.relative_tile_height,
66
         sprite_info.relative_tile_height,
54
     );
67
     );
61
 }
74
 }
62
 
75
 
63
 impl SceneItem {
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
         Self {
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
             position,
89
             position,
68
         }
90
         }
69
     }
91
     }
76
     }
98
     }
77
 }
99
 }
78
 
100
 
79
-enum Message {
80
-
81
-}
101
+enum Message {}
82
 
102
 
83
 struct MainState {
103
 struct MainState {
84
     scene_items_sprite_batch: graphics::spritebatch::SpriteBatch,
104
     scene_items_sprite_batch: graphics::spritebatch::SpriteBatch,
93
         let mut scene_items = vec![];
113
         let mut scene_items = vec![];
94
         for x in 0..1 {
114
         for x in 0..1 {
95
             for y in 0..4 {
115
             for y in 0..4 {
96
-                let type_ = if y % 2 == 0 {
116
+                let sprite_type = if y % 2 == 0 {
97
                     SpriteType::WalkingSoldier
117
                     SpriteType::WalkingSoldier
98
                 } else {
118
                 } else {
99
                     SpriteType::JumpingSoldier
119
                     SpriteType::JumpingSoldier
100
                 };
120
                 };
101
 
121
 
102
                 scene_items.push(SceneItem::new(
122
                 scene_items.push(SceneItem::new(
103
-                    SpriteType::WalkingSoldier,
123
+                    sprite_type,
104
                     na::Point2::new(x as f32 * 24.0, y as f32 * 24.0),
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
         }