Skip to content

Instantly share code, notes, and snippets.

@ffigiel
Created August 22, 2018 10:14
Show Gist options
  • Save ffigiel/eee3b90f97be7a747d9f66817d6d2d76 to your computer and use it in GitHub Desktop.
Save ffigiel/eee3b90f97be7a747d9f66817d6d2d76 to your computer and use it in GitHub Desktop.
amethyst 0.9 image loader util
struct ImageLoader {
texture_id: u64,
}
impl ImageLoader {
fn new() -> ImageLoader {
ImageLoader {
texture_id: 0,
}
}
fn load(&mut self, world: &mut World, image_size: (f32, f32), image_path: &str) -> SpriteRender {
let image_handle = {
let loader = world.read_resource::<Loader>();
let texture_storage = world.read_resource::<AssetStorage<Texture>>();
loader.load(
image_path,
PngFormat,
Default::default(),
(),
&texture_storage
)
};
let mut material_texture_set = world.write_resource::<MaterialTextureSet>();
material_texture_set.insert(self.texture_id, image_handle);
let tex_coords = TextureCoordinates {
left: 0.0,
right: 1.0,
top: 0.0,
bottom: 1.0,
};
let image_sprite = Sprite {
width: image_size.0,
height: image_size.1,
offsets: [image_size.0 / 2.0, image_size.1 / 2.0],
tex_coords,
};
let sprite_sheet = SpriteSheet {
texture_id: self.texture_id,
sprites: vec![image_sprite],
};
let sprite_sheet_handle = {
let loader = world.read_resource::<Loader>();
let sprite_sheet_store = world.read_resource::<AssetStorage<SpriteSheet>>();
loader.load_from_data(sprite_sheet, (), &sprite_sheet_store)
};
self.texture_id += 1;
SpriteRender {
sprite_sheet: sprite_sheet_handle,
sprite_number: 0,
flip_horizontal: false,
flip_vertical: true,
}
}
}
// Example usage
fn initialise_player(world: &mut World, image_loader: &mut ImageLoader) {
let player_image_size = (120.0, 120.0);
let player_image = image_loader.load(world, player_image_size, "./img/player.png");
world.create_entity()
.with(player_image)
.with(GlobalTransform::default())
.build();
}
@Telzhaak
Copy link

you might want to auto increase the textureID every time an image is loaded, or provide new(ID: u32),
otherwise every texture has the same ID

@Moxinilian
Copy link

I think it would be better if the texture ID was a parameter IMO.

@ffigiel
Copy link
Author

ffigiel commented Aug 22, 2018

@Telzhaak It does auto-increment

@Moxinilian why does this matter? I suppose it could be useful if you used a spritesheet along with some whole images

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment