Compare commits
No commits in common. "0acf6bac7b0a67876e94193a611229e07e64dee6" and "52f7164aa005c43ae11b13cf755c65c6ac942753" have entirely different histories.
0acf6bac7b
...
52f7164aa0
5 changed files with 17 additions and 13 deletions
2
Cargo.lock
generated
2
Cargo.lock
generated
|
@ -192,7 +192,7 @@ dependencies = [
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "gd-icon-renderer"
|
name = "gd-icon-renderer"
|
||||||
version = "1.1.0"
|
version = "1.0.2"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"image",
|
"image",
|
||||||
"imageproc",
|
"imageproc",
|
||||||
|
|
|
@ -1,7 +1,7 @@
|
||||||
[package]
|
[package]
|
||||||
name = "gd-icon-renderer"
|
name = "gd-icon-renderer"
|
||||||
description = "A tool to render Geometry Dash icons."
|
description = "A tool to render Geometry Dash icons."
|
||||||
version = "1.1.0"
|
version = "1.0.2"
|
||||||
edition = "2021"
|
edition = "2021"
|
||||||
license-file = "LICENSE"
|
license-file = "LICENSE"
|
||||||
repository = "https://git.reidlab.online/reidlab/gd-icon-renderer"
|
repository = "https://git.reidlab.online/reidlab/gd-icon-renderer"
|
||||||
|
|
|
@ -42,5 +42,7 @@ Provide your `GJ_GameSheet02-uhd`, `GJ_GameSheetGlow-uhd`, `Robot_AnimDesc2`, an
|
||||||
## Todo
|
## Todo
|
||||||
|
|
||||||
- Add examples to the repo.
|
- Add examples to the repo.
|
||||||
|
- Swap to a custom `plist` parser. Current one is kinda slow.
|
||||||
|
- Stop the fucking cloning. Majority of speed lost from cloning is @ [`./src/renderer.rs:178`](./src/renderer.rs)
|
||||||
- Trim extra alpha space on the final result.
|
- Trim extra alpha space on the final result.
|
||||||
- I think theres some weird shifting and offsets going on, please investigate 🥺. Really big on `spider_16` for some reason?? Related issue on the inspired project [here](https://github.com/oatmealine/gd-icon-renderer/issues/2).
|
- I think theres some weird shifting and offsets going on, please investigate 🥺. Really big on `spider_16` for some reason?? Related issue on the inspired project [here](https://github.com/oatmealine/gd-icon-renderer/issues/2).
|
|
@ -2,7 +2,6 @@ use plist;
|
||||||
|
|
||||||
use std::collections::HashMap;
|
use std::collections::HashMap;
|
||||||
|
|
||||||
use image::GenericImageView;
|
|
||||||
use image::DynamicImage;
|
use image::DynamicImage;
|
||||||
|
|
||||||
/// "{1,2}" -> `(1, 2)`
|
/// "{1,2}" -> `(1, 2)`
|
||||||
|
@ -196,9 +195,11 @@ pub fn load_animations(path: &str) -> Animations {
|
||||||
}
|
}
|
||||||
|
|
||||||
/// Trims out a sprite from an image according to a .plist spritesheet.
|
/// Trims out a sprite from an image according to a .plist spritesheet.
|
||||||
pub fn get_sprite(spritesheet: Spritesheet, img: &DynamicImage, key: String) -> Option<(DynamicImage, Sprite)> {
|
pub fn get_sprite(spritesheet: Spritesheet, img: DynamicImage, key: String) -> Option<(DynamicImage, Sprite)> {
|
||||||
let sprite = spritesheet.sprites.get(&key);
|
let sprite = spritesheet.sprites.get(&key);
|
||||||
|
|
||||||
|
let mut canvas = img;
|
||||||
|
|
||||||
if sprite.is_none() {
|
if sprite.is_none() {
|
||||||
return None;
|
return None;
|
||||||
}
|
}
|
||||||
|
@ -211,7 +212,7 @@ pub fn get_sprite(spritesheet: Spritesheet, img: &DynamicImage, key: String) ->
|
||||||
(left, top, width, height) = (left, top, height, width);
|
(left, top, width, height) = (left, top, height, width);
|
||||||
}
|
}
|
||||||
|
|
||||||
let mut canvas: DynamicImage = image::DynamicImage::ImageRgba8(img.view(left as u32, top as u32, width as u32, height as u32).to_image());
|
canvas = canvas.crop(left as u32, top as u32, width as u32, height as u32);
|
||||||
|
|
||||||
if sprite.rotated {
|
if sprite.rotated {
|
||||||
canvas = canvas.rotate270();
|
canvas = canvas.rotate270();
|
||||||
|
@ -224,7 +225,8 @@ pub fn get_sprite(spritesheet: Spritesheet, img: &DynamicImage, key: String) ->
|
||||||
}
|
}
|
||||||
|
|
||||||
/// Trims out a sprite from an image according to a LoadedSpritesheet object.
|
/// Trims out a sprite from an image according to a LoadedSpritesheet object.
|
||||||
pub fn get_sprite_from_loaded(spritesheet: &LoadedSpritesheet, key: String) -> Option<(DynamicImage, Sprite)> {
|
pub fn get_sprite_from_loaded(spritesheet: LoadedSpritesheet, key: String) -> Option<(DynamicImage, Sprite)> {
|
||||||
let sprite = get_sprite(spritesheet.spritesheet.clone(), &spritesheet.texture, key);
|
let texture = spritesheet.texture;
|
||||||
|
let sprite = get_sprite(spritesheet.spritesheet, texture, key);
|
||||||
return sprite;
|
return sprite;
|
||||||
}
|
}
|
|
@ -129,14 +129,14 @@ pub fn render_normal(basename: String, col1: [f32; 3], col2: [f32; 3], glow: boo
|
||||||
|
|
||||||
let layers = vec![
|
let layers = vec![
|
||||||
(if glow || (is_black(col1) && is_black(col2)) {
|
(if glow || (is_black(col1) && is_black(col2)) {
|
||||||
assets::get_sprite_from_loaded(&game_sheet_glow, format!("{}_glow_001.png", basename))
|
assets::get_sprite_from_loaded(game_sheet_glow, format!("{}_glow_001.png", basename))
|
||||||
} else {
|
} else {
|
||||||
None
|
None
|
||||||
}),
|
}),
|
||||||
assets::get_sprite_from_loaded(&game_sheet_02, format!("{}_2_001.png", basename)),
|
assets::get_sprite_from_loaded(game_sheet_02.clone(), format!("{}_2_001.png", basename)),
|
||||||
assets::get_sprite_from_loaded(&game_sheet_02, format!("{}_3_001.png", basename)),
|
assets::get_sprite_from_loaded(game_sheet_02.clone(), format!("{}_3_001.png", basename)),
|
||||||
assets::get_sprite_from_loaded(&game_sheet_02, format!("{}_001.png", basename)),
|
assets::get_sprite_from_loaded(game_sheet_02.clone(), format!("{}_001.png", basename)),
|
||||||
assets::get_sprite_from_loaded(&game_sheet_02, format!("{}_extra_001.png", basename))
|
assets::get_sprite_from_loaded(game_sheet_02, format!("{}_extra_001.png", basename))
|
||||||
];
|
];
|
||||||
|
|
||||||
let colors: Vec<Option<[f32; 3]>> = vec![
|
let colors: Vec<Option<[f32; 3]>> = vec![
|
||||||
|
@ -203,7 +203,7 @@ pub fn render_zany(basename: String, col1: [f32; 3], col2: [f32; 3], glow: bool,
|
||||||
|
|
||||||
layers.extend(names.iter().enumerate().map(|(i, v)| {
|
layers.extend(names.iter().enumerate().map(|(i, v)| {
|
||||||
(
|
(
|
||||||
assets::get_sprite_from_loaded(&game_sheet_02, v.clone()),
|
assets::get_sprite_from_loaded(game_sheet_02.clone(), v.clone()),
|
||||||
a.position,
|
a.position,
|
||||||
flip(a.scale, a.flipped),
|
flip(a.scale, a.flipped),
|
||||||
a.rotation,
|
a.rotation,
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue