#texture-atlas #icons #ui #bevy #source #plugin #turbo

turbo_atlas_icons

A system for declarative ui icon rendering with Bevy

4 releases (2 breaking)

0.13.1 Jun 5, 2024
0.13.0 Jun 5, 2024
0.2.0 Jun 1, 2024
0.1.0 May 23, 2024

#477 in Game dev

Download history 82/week @ 2024-05-20 204/week @ 2024-05-27 287/week @ 2024-06-03

573 downloads per month

MIT license

19KB
329 lines

Turbo Atlas Icons

A crate for bevy to help you more easily render ui icons from an atlas.

Simply add a UiIconComponent to your Ui Node (AtlasImageBundle), set its source to a pre-registered source, and it will work!

  1. Install the plugin


 app.insert_plugins( TurboAtlasIconsPlugin )


  1. Register an icon source type (maps the source type -> how to access the texture atlas data )



pub struct GuiPixelIconSource(String) ;   // This is your own source type that you invent !!  Can invent many. 

impl UiIconSource for GuiPixelIconSource {

	//describe how to get the Icon Handle Name 

    fn get_icon_name(&self, _world: &World) -> Option<String> {
        Some(self.0.clone())
    }

    //describe how to get the HashMap< IconHandleName -> ImageHandle  for this source 
   
   fn get_icons_handles_map<'a>(&'a self, world: &'a World) -> &'a TextureHandlesMap{
    	let images = world.resource::<TextureAssets>();
        &images.gui_pixel_icons
    }


    //describe how to get the texture atlas layout and overall image handle for this source 

    fn get_texture_atlas<'a>(&'a self, world: &'a World) ->  &'a Option<TextureAtlasCombined> {
        let texture_atlas_assets = world.resource::<TextureAtlasAssets>(); 

		&texture_atlas_assets.gui_pixel_icons_atlas
    }

      
}




  1. Attach the icon source type information as a component to your AtlasImageBundle node

   commands.entity(icon_node).insert(  
 		UiIconComponent{
 			icon_source : Some(Box::new( GuiPixelIconSource("heart_full.tga".into() ) ) 

 		}
   	); 


  1. Your icon will render !

(This is all assuming the TextureAtlasCombined provided to the IconSource lookup has already been loaded into memory --- see sample/texture_atlas_assets for examples of how this could be done -- For example using bevy_asset_loader )

image

Dependencies

~45–85MB
~1M SLoC