Newer
Older
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
use bevy::{
prelude::{App as BevyApp, AssetServer, Commands, Handle, Res, ResMut},
window::WindowDescriptor,
DefaultPlugins,
};
use kayak_core::styles::PositionType;
use kayak_ui::bevy::{BevyContext, BevyKayakUIPlugin, ImageManager, UICameraBundle};
use kayak_ui::core::{
render,
styles::{Style, StyleProp, Units},
Index,
};
use kayak_ui::widgets::{App, TextureAtlas};
fn startup(
mut commands: Commands,
asset_server: Res<AssetServer>,
mut image_manager: ResMut<ImageManager>,
) {
commands.spawn_bundle(UICameraBundle::new());
let image_handle: Handle<bevy::render::texture::Image> = asset_server.load("texture_atlas.png");
let ui_image_handle = image_manager.get(&image_handle);
//texture_atlas.png uses 16 pixel sprites and is 272x128 pixels
let tile_size = 16;
let columns = 272 / tile_size;
let rows = 128 / tile_size;
let atlas = bevy::sprite::TextureAtlas::from_grid(image_handle, bevy::prelude::Vec2::splat(tile_size as f32), columns, rows);
//The sign in the top right of the image would be index 16
let sign_index = 16;
//The flower is in the 6(-1) row and 15 collumn
let flower_index = columns * 5 + 15;
let context = BevyContext::new(|context| {
let atlas_styles = Style {
position_type: StyleProp::Value(PositionType::ParentDirected),
width: StyleProp::Value(Units::Pixels(200.0)),
height: StyleProp::Value(Units::Pixels(200.0)),
..Style::default()
};
let rect = atlas.textures[sign_index];
let sign_position = rect.min;
let sign_size = rect.max - rect.min;
let rect = atlas.textures[flower_index];
let flower_position = rect.min;
let flower_size = rect.max - rect.min;
render! {
<App>
<TextureAtlas styles={Some(atlas_styles)}
handle={ui_image_handle}
position={(sign_position.x, sign_position.y)}
tile_size={(sign_size.x, sign_size.y)}
/>
<TextureAtlas styles={Some(atlas_styles)}
handle={ui_image_handle}
position={(flower_position.x, flower_position.y)}
tile_size={(flower_size.x, flower_size.y)}
/>
</App>
}
});
commands.insert_resource(context);
}
fn main() {
BevyApp::new()
.insert_resource(WindowDescriptor {
width: 1270.0,
height: 720.0,
title: String::from("UI Example"),
..Default::default()
})
.add_plugins(DefaultPlugins)
.add_plugin(BevyKayakUIPlugin)
.add_startup_system(startup)
.run();
}