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(); | |
} |
I think it would be better if the texture ID was a parameter IMO.
@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
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