1
1
use crate :: ColorMaterial ;
2
2
use bevy_asset:: { Assets , Handle } ;
3
+ use bevy_core:: Bytes ;
3
4
use bevy_ecs:: { Query , Res } ;
4
5
use bevy_math:: Vec2 ;
5
6
use bevy_reflect:: { Reflect , ReflectDeserialize , TypeUuid } ;
6
- use bevy_render:: { renderer:: RenderResources , texture:: Texture } ;
7
+ use bevy_render:: {
8
+ renderer:: { RenderResource , RenderResourceType , RenderResources } ,
9
+ texture:: Texture ,
10
+ } ;
7
11
use serde:: { Deserialize , Serialize } ;
8
12
9
- #[ derive( Debug , Default , Clone , RenderResources , TypeUuid , Reflect ) ]
13
+ #[ derive( Debug , Default , Clone , TypeUuid , Reflect , RenderResources ) ]
14
+ #[ render_resources( from_self) ]
10
15
#[ uuid = "7233c597-ccfa-411f-bd59-9af349432ada" ]
16
+ #[ repr( C ) ]
11
17
pub struct Sprite {
12
18
pub size : Vec2 ,
13
- #[ render_resources( ignore) ]
19
+ pub flip_x : bool ,
20
+ pub flip_y : bool ,
14
21
pub resize_mode : SpriteResizeMode ,
15
22
}
16
23
24
+ impl RenderResource for Sprite {
25
+ fn resource_type ( & self ) -> Option < RenderResourceType > {
26
+ Some ( RenderResourceType :: Buffer )
27
+ }
28
+
29
+ fn buffer_byte_len ( & self ) -> Option < usize > {
30
+ Some ( 12 )
31
+ }
32
+
33
+ fn write_buffer_bytes ( & self , buffer : & mut [ u8 ] ) {
34
+ // Write the size buffer
35
+ let ( size_buf, flip_buf) = buffer. split_at_mut ( 8 ) ;
36
+ self . size . write_bytes ( size_buf) ;
37
+
38
+ // First bit means flip x, second bit means flip y
39
+ flip_buf[ 0 ] = if self . flip_x { 0b01 } else { 0 } | if self . flip_y { 0b10 } else { 0 } ;
40
+ flip_buf[ 1 ] = 0 ;
41
+ flip_buf[ 2 ] = 0 ;
42
+ flip_buf[ 3 ] = 0 ;
43
+ }
44
+
45
+ fn texture ( & self ) -> Option < & Handle < Texture > > {
46
+ None
47
+ }
48
+ }
49
+
17
50
/// Determines how `Sprite` resize should be handled
18
51
#[ derive( Debug , Clone , Copy , PartialEq , Serialize , Deserialize , Reflect ) ]
19
52
#[ reflect_value( PartialEq , Serialize , Deserialize ) ]
@@ -34,6 +67,8 @@ impl Sprite {
34
67
Self {
35
68
size,
36
69
resize_mode : SpriteResizeMode :: Manual ,
70
+ flip_x : false ,
71
+ flip_y : false ,
37
72
}
38
73
}
39
74
}
0 commit comments