/
mirrors.rs
109 lines (100 loc) · 2.86 KB
/
mirrors.rs
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
use std::f32::consts::PI;
use bevy::{prelude::*, window::PrimaryWindow};
use bevy_scroller::*;
fn main() {
let mut app = App::new();
app
.add_plugins((DefaultPlugins, ScrollerPlugin))
.add_systems(Startup, start)
.add_systems(Update, init_mirror);
#[cfg(feature = "dev")]
{
use bevy_editor_pls::EditorPlugin;
app.add_plugins(EditorPlugin::default());
}
app.run();
}
pub fn start(
mut commands: Commands,
windows: Query<&Window, With<PrimaryWindow>>,
asset_server: Res<AssetServer>,
) {
let window = windows.get_single().expect("no primary window");
let sprite_size = Vec2::new(128., 128.);
commands.spawn(Camera2dBundle::default());
let items = (1..=7)
.map(|i| {
let path = format!("gems/{i}.png");
let _: Handle<Image> = asset_server.load(path.clone());
SpriteScrollerItem {
path,
size: Vec2 { x: 128., y: 128. },
}
})
.collect::<Vec<SpriteScrollerItem>>();
commands.spawn((
ScrollerSize {
size: Vec2::new(window.width(), sprite_size.y),
},
ScrollerBundle {
scroller: Scroller {
speed: 1.,
render_layer: Some(1),
..default()
},
generator: RandomSequenceSpriteGenerator { items },
spatial: SpatialBundle::from_transform(Transform::from_translation(Vec3::new(
0.,
(sprite_size.y - window.height()) / 2.,
10.,
))),
..default()
},
));
}
fn init_mirror(
mut commands: Commands,
q_initialized: Query<&Scroller, Added<Scroller>>,
windows: Query<&Window, With<PrimaryWindow>>,
) {
if let Ok(scroller) = q_initialized.get_single() {
let window = windows.get_single().expect("no primary window");
let sprite_size = Vec2::new(128., 128.);
commands.spawn((
SpriteBundle {
texture: scroller.texture_handle.clone(),
transform: Transform {
translation: Vec3::new(0., (window.height() - sprite_size.y) / 2., 10.),
rotation: Quat::from_rotation_y(PI) * Quat::from_rotation_z(PI),
..default()
},
..default()
},
Name::new("Scroller mirror top"),
));
commands.spawn((
SpriteBundle {
texture: scroller.texture_handle.clone(),
transform: Transform {
translation: Vec3::new((window.width() - sprite_size.x) / 2., 0., 00.),
rotation: Quat::from_rotation_z(PI / 2.),
..default()
},
..default()
},
Name::new("Scroller mirror right"),
));
commands.spawn((
SpriteBundle {
texture: scroller.texture_handle.clone(),
transform: Transform {
translation: Vec3::new((sprite_size.x - window.width()) / 2., 0., 0.),
rotation: Quat::from_rotation_y(PI) * Quat::from_rotation_z(PI / 2.),
..default()
},
..default()
},
Name::new("Scroller mirror left"),
));
};
}