Created
August 22, 2018 10:14
-
-
Save ffigiel/eee3b90f97be7a747d9f66817d6d2d76 to your computer and use it in GitHub Desktop.
amethyst 0.9 image loader util
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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 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
I think it would be better if the texture ID was a parameter IMO.