From 2d367e6ded03f46940c2d5ece1a5bd0898ecac10 Mon Sep 17 00:00:00 2001 From: tali Date: Fri, 19 Jan 2024 18:19:59 -0500 Subject: [PATCH] fixup gen_sprites --- gen_sprites.sh | 9 ++++++--- src/bin/gen_sprite_map.ml | 22 +++++++++++++--------- 2 files changed, 19 insertions(+), 12 deletions(-) diff --git a/gen_sprites.sh b/gen_sprites.sh index 3542f33..5d70b88 100755 --- a/gen_sprites.sh +++ b/gen_sprites.sh @@ -6,7 +6,7 @@ if [[ $# < 1 ]]; then fi src_dir=$1 -out_dir=assets/sprite/ +out_dir=assets/sprites/ dpi=192 svg_to_png="inkscape -C" @@ -24,8 +24,11 @@ function gen() { dst_png=$out_dir/$name.png dst_map=$out_dir/$name.map - $svg_to_png $src -o $dst_png -d $dpi || exit 1 - $gen_sprite_map < $src > $dst_map || exit 1 + [[ "$src" -nt "$dst_png" ]] && + ($svg_to_png $src -o $dst_png -d $dpi || exit 1) + + [[ "$src" -nt "$dst_map" ]] && + ($gen_sprite_map < $src > $dst_map || exit 1) } gen blocks 192 diff --git a/src/bin/gen_sprite_map.ml b/src/bin/gen_sprite_map.ml index 1c3b096..1689de8 100644 --- a/src/bin/gen_sprite_map.ml +++ b/src/bin/gen_sprite_map.ml @@ -16,6 +16,12 @@ let sexp_of_clip c = List.map Sexplib.Conv.sexp_of_int [c.x; c.y; c.w; c.h; c.ox; c.oy]) +let sexp_of_sprite_map clips = + Sexp.List ( + Atom "map" :: + (List.sort (fun a b -> compare b.name a.name) clips |> + List.rev_map sexp_of_clip)) + let svg v = ("http://www.w3.org/2000/svg", v) let ink v = ("http://www.inkscape.org/namespaces/inkscape", v) let sodi v = ("http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd", v) @@ -98,17 +104,15 @@ let extract_clips xml = | `El_end -> el_end () do () done; - List.sort - (fun a b -> String.compare a.name b.name) - s.clips + s.clips let gen_sprite_map ic oc = - Xmlm.make_input (`Channel ic) |> - extract_clips |> - List.iter (fun clip -> - Format.kasprintf (output_string oc) - "%a\n" Sexp.pp (sexp_of_clip clip)) - + let sprite_map = + Xmlm.make_input (`Channel ic) |> + extract_clips + in + Format.kasprintf (output_string oc) "%a\n" + Sexp.pp_hum (sexp_of_sprite_map sprite_map) let () = gen_sprite_map stdin stdout