@@ -5,7 +5,7 @@ use avian2d::{
5
5
} ;
6
6
use bevy:: prelude:: * ;
7
7
use bevy_ratatui:: event:: ResizeEvent ;
8
- use bevy_ratatui_render :: RatatuiRenderContext ;
8
+ use bevy_ratatui_camera :: RatatuiCamera ;
9
9
use rand:: { Rng , SeedableRng } ;
10
10
use rand_chacha:: ChaCha8Rng ;
11
11
@@ -49,41 +49,36 @@ pub struct BubbleSprite(Handle<Image>);
49
49
#[ derive( Resource , Deref , DerefMut , Default ) ]
50
50
pub struct BubbleVisibleRegion ( Vec2 ) ;
51
51
52
- #[ derive( Bundle ) ]
53
- pub struct BubbleBundle {
54
- bubble : Bubble ,
55
- sprite : SpriteBundle ,
56
- rigidbody : RigidBody ,
57
- collider : Collider ,
58
- locked_axes : LockedAxes ,
59
- friction : Friction ,
60
- }
61
-
62
- impl BubbleBundle {
63
- fn new ( rng : & mut BubbleRng , sprite : & BubbleSprite , region : & Rectangle ) -> Self {
64
- Self {
65
- bubble : Bubble {
66
- target : region. sample_interior ( & mut rng. 0 ) ,
67
- timer : Timer :: from_seconds ( 3. , TimerMode :: Repeating ) ,
68
- } ,
69
- sprite : SpriteBundle {
70
- transform : Transform :: from_translation (
71
- region. sample_interior ( & mut rng. 0 ) . extend ( 0. ) ,
72
- ) ,
73
- texture : ( * * sprite) . clone ( ) ,
74
- sprite : Sprite {
75
- color : Color :: hsl ( rng. gen_range ( 0.0 ..360.0 ) , 1.0 , 0.8 ) ,
76
- custom_size : Some ( Vec2 :: splat ( BUBBLE_RADIUS * 2. ) ) ,
77
- ..default ( )
78
- } ,
79
- ..default ( )
80
- } ,
81
- rigidbody : RigidBody :: Dynamic ,
82
- collider : Collider :: circle ( BUBBLE_RADIUS as Scalar ) ,
83
- locked_axes : LockedAxes :: ROTATION_LOCKED ,
84
- friction : Friction :: new ( 0.0 ) ,
85
- }
86
- }
52
+ fn create_bubble (
53
+ rng : & mut BubbleRng ,
54
+ sprite : & BubbleSprite ,
55
+ region : & Rectangle ,
56
+ ) -> (
57
+ Bubble ,
58
+ Sprite ,
59
+ Transform ,
60
+ RigidBody ,
61
+ Collider ,
62
+ LockedAxes ,
63
+ Friction ,
64
+ ) {
65
+ (
66
+ Bubble {
67
+ target : region. sample_interior ( & mut rng. 0 ) ,
68
+ timer : Timer :: from_seconds ( 3. , TimerMode :: Repeating ) ,
69
+ } ,
70
+ Sprite {
71
+ image : ( * * sprite) . clone ( ) ,
72
+ color : Color :: hsl ( rng. gen_range ( 0.0 ..360.0 ) , 1.0 , 0.8 ) ,
73
+ custom_size : Some ( Vec2 :: splat ( BUBBLE_RADIUS * 2. ) ) ,
74
+ ..default ( )
75
+ } ,
76
+ Transform :: from_translation ( region. sample_interior ( & mut rng. 0 ) . extend ( 0. ) ) ,
77
+ RigidBody :: Dynamic ,
78
+ Collider :: circle ( BUBBLE_RADIUS as Scalar ) ,
79
+ LockedAxes :: ROTATION_LOCKED ,
80
+ Friction :: new ( 0.0 ) ,
81
+ )
87
82
}
88
83
89
84
#[ derive( Resource , Deref , DerefMut ) ]
@@ -95,15 +90,15 @@ impl Default for BubbleTimer {
95
90
}
96
91
}
97
92
98
- fn bubbles_setup_system (
99
- mut commands : Commands ,
100
- ratatui_render : Res < RatatuiRenderContext > ,
101
- asset_server : Res < AssetServer > ,
102
- ) {
103
- let mut camera = Camera2dBundle :: default ( ) ;
104
- camera . projection . scale = ORTHO_SCALING ;
105
- camera . camera . target = ratatui_render . target ( "main" ) . unwrap_or_default ( ) ;
106
- commands . spawn ( camera ) ;
93
+ fn bubbles_setup_system ( mut commands : Commands , asset_server : Res < AssetServer > ) {
94
+ commands. spawn ( (
95
+ Camera2d ,
96
+ Projection :: Orthographic ( OrthographicProjection {
97
+ scale : ORTHO_SCALING ,
98
+ .. OrthographicProjection :: default_2d ( )
99
+ } ) ,
100
+ RatatuiCamera :: autoresize ( ) ,
101
+ ) ) ;
107
102
108
103
let rng = ChaCha8Rng :: seed_from_u64 ( 19878367467712 ) ;
109
104
commands. insert_resource ( BubbleRng ( rng) ) ;
@@ -126,7 +121,7 @@ fn bubbles_spawn_system(
126
121
timer. tick ( time. delta ( ) ) ;
127
122
if timer. finished ( ) && * count < * * spawn_amount {
128
123
* count += 1 ;
129
- commands. spawn ( BubbleBundle :: new (
124
+ commands. spawn ( create_bubble (
130
125
& mut rng,
131
126
& sprite,
132
127
& Rectangle :: from_size ( * * visible_region - BUBBLE_RADIUS * 2. ) ,
@@ -138,10 +133,9 @@ fn handle_resize_system(
138
133
mut resize_events : EventReader < ResizeEvent > ,
139
134
mut visible_region : ResMut < BubbleVisibleRegion > ,
140
135
mut spawn_amount : ResMut < BubbleAmount > ,
141
- ratatui_render : Res < RatatuiRenderContext > ,
142
136
) {
143
- for _ in resize_events. read ( ) {
144
- let ( width, height) = ratatui_render . dimensions ( "main" ) . unwrap ( ) ;
137
+ for resize in resize_events. read ( ) {
138
+ let ( width, height) = ( resize . width * 2 , resize . height * 4 ) ;
145
139
let terminal_dimensions = Vec2 :: new ( width as f32 , height as f32 ) ;
146
140
* * visible_region = terminal_dimensions * ORTHO_SCALING ;
147
141
* * spawn_amount = ( ( visible_region. x * visible_region. y ) / 777. ) as u32 ;
@@ -170,7 +164,7 @@ fn bubble_movement_system(
170
164
171
165
bubble. target = bubble
172
166
. target
173
- . move_towards ( next_point, time. delta_seconds ( ) * 10. ) ;
167
+ . move_towards ( next_point, time. delta_secs ( ) * 10. ) ;
174
168
175
169
* * velocity += diff * 0.01 ;
176
170
* * velocity = velocity. clamp (
@@ -183,7 +177,7 @@ fn bubble_movement_system(
183
177
184
178
fn bubble_color_system ( time : Res < Time > , mut bubbles : Query < & mut Sprite , With < Bubble > > ) {
185
179
for mut sprite in & mut bubbles {
186
- let new_hue = ( sprite. color . hue ( ) + time. delta_seconds ( ) * 10. ) % 360. ;
180
+ let new_hue = ( sprite. color . hue ( ) + time. delta_secs ( ) * 10. ) % 360. ;
187
181
sprite. color . set_hue ( new_hue) ;
188
182
}
189
183
}
0 commit comments