-
StarToaster authored165c4b68
texture_atlas.rs 2.79 KiB
use bevy::{
prelude::{App as BevyApp, AssetServer, Commands, Handle, Res, ResMut},
render::texture::ImageSettings,
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},
};
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()
})
.insert_resource(ImageSettings::default_nearest())
.add_plugins(DefaultPlugins)
.add_plugin(BevyKayakUIPlugin)
.add_startup_system(startup)
.run();
}