turbo_atlas_icons

Crates.ioturbo_atlas_icons
lib.rsturbo_atlas_icons
version0.13.1
sourcesrc
created_at2024-05-23 19:47:26.805363
updated_at2024-06-05 00:35:56.39966
descriptionA system for declarative ui icon rendering with Bevy
homepage
repositoryhttps://github.com/ethereumdegen/turbo_atlas_icons
max_upload_size
id1250030
size18,875
Ethereumdegen (ethereumdegen)

documentation

README

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

Commit count: 14

cargo fmt