forked from NiklasEi/bevy_common_assets
-
Notifications
You must be signed in to change notification settings - Fork 0
/
toml.rs
61 lines (52 loc) · 1.62 KB
/
toml.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
use bevy::prelude::*;
use bevy::reflect::TypeUuid;
use bevy_common_assets::toml::TomlAssetPlugin;
fn main() {
App::new()
.add_plugins(DefaultPlugins)
.add_plugin(TomlAssetPlugin::<Level>::new(&["toml.level"]))
.insert_resource(Msaa { samples: 1 })
.add_state(AppState::Loading)
.add_startup_system(setup)
.add_system_set(SystemSet::on_update(AppState::Loading).with_system(spawn_level))
.run()
}
fn setup(mut commands: Commands, asset_server: Res<AssetServer>) {
let level = LevelHandle(asset_server.load("trees.toml.level"));
commands.insert_resource(level);
let tree = ImageHandle(asset_server.load("tree.png"));
commands.insert_resource(tree);
commands.spawn(Camera2dBundle::default());
}
fn spawn_level(
mut commands: Commands,
level: Res<LevelHandle>,
tree: Res<ImageHandle>,
mut levels: ResMut<Assets<Level>>,
mut state: ResMut<State<AppState>>,
) {
if let Some(level) = levels.remove(level.0.id()) {
for position in level.positions {
commands.spawn(SpriteBundle {
transform: Transform::from_translation(position.into()),
texture: tree.0.clone(),
..default()
});
}
state.set(AppState::Level).unwrap();
}
}
#[derive(serde::Deserialize, TypeUuid)]
#[uuid = "413be529-bfeb-41b3-9db0-4b8b380a2c46"]
struct Level {
positions: Vec<[f32; 3]>,
}
#[derive(Clone, Eq, PartialEq, Debug, Hash)]
enum AppState {
Loading,
Level,
}
#[derive(Resource)]
struct ImageHandle(Handle<Image>);
#[derive(Resource)]
struct LevelHandle(Handle<Level>);