mirror of https://github.com/Leinnan/rpack.git
Bevy crate improvements, example, docs
This commit is contained in:
parent
e0945af626
commit
a33dd60392
|
|
@ -253,6 +253,15 @@ version = "1.0.95"
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
checksum = "34ac096ce696dc2fcabef30516bb13c0a68a11d30131d3df6f04711467681b04"
|
checksum = "34ac096ce696dc2fcabef30516bb13c0a68a11d30131d3df6f04711467681b04"
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "approx"
|
||||||
|
version = "0.5.1"
|
||||||
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
|
checksum = "cab112f0a86d568ea0e627cc1d6be74a1e9cd55214684db5561995f6dad897c6"
|
||||||
|
dependencies = [
|
||||||
|
"num-traits",
|
||||||
|
]
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "arbitrary"
|
name = "arbitrary"
|
||||||
version = "1.4.1"
|
version = "1.4.1"
|
||||||
|
|
@ -811,6 +820,7 @@ version = "0.15.1"
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
checksum = "b747210d7db09dfacc237707d4fd31c8b43d7744cd5e5829e2c4ca86b9e47baf"
|
checksum = "b747210d7db09dfacc237707d4fd31c8b43d7744cd5e5829e2c4ca86b9e47baf"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
|
"arrayvec",
|
||||||
"bevy_ecs_macros",
|
"bevy_ecs_macros",
|
||||||
"bevy_ptr",
|
"bevy_ptr",
|
||||||
"bevy_reflect",
|
"bevy_reflect",
|
||||||
|
|
@ -941,6 +951,7 @@ version = "0.15.1"
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
checksum = "fd7fc4db9a1793ee71f79abb15e7a8fcfe4e2081e5f18ed91b802bf6cf30e088"
|
checksum = "fd7fc4db9a1793ee71f79abb15e7a8fcfe4e2081e5f18ed91b802bf6cf30e088"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
|
"bevy_a11y",
|
||||||
"bevy_app",
|
"bevy_app",
|
||||||
"bevy_asset",
|
"bevy_asset",
|
||||||
"bevy_color",
|
"bevy_color",
|
||||||
|
|
@ -955,16 +966,22 @@ dependencies = [
|
||||||
"bevy_input",
|
"bevy_input",
|
||||||
"bevy_log",
|
"bevy_log",
|
||||||
"bevy_math",
|
"bevy_math",
|
||||||
|
"bevy_pbr",
|
||||||
"bevy_picking",
|
"bevy_picking",
|
||||||
"bevy_ptr",
|
"bevy_ptr",
|
||||||
"bevy_reflect",
|
"bevy_reflect",
|
||||||
"bevy_render",
|
"bevy_render",
|
||||||
"bevy_scene",
|
"bevy_scene",
|
||||||
"bevy_sprite",
|
"bevy_sprite",
|
||||||
|
"bevy_state",
|
||||||
"bevy_tasks",
|
"bevy_tasks",
|
||||||
|
"bevy_text",
|
||||||
"bevy_time",
|
"bevy_time",
|
||||||
"bevy_transform",
|
"bevy_transform",
|
||||||
|
"bevy_ui",
|
||||||
"bevy_utils",
|
"bevy_utils",
|
||||||
|
"bevy_window",
|
||||||
|
"bevy_winit",
|
||||||
]
|
]
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
|
|
@ -1043,6 +1060,35 @@ dependencies = [
|
||||||
"glam",
|
"glam",
|
||||||
]
|
]
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "bevy_pbr"
|
||||||
|
version = "0.15.1"
|
||||||
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
|
checksum = "f7f17067399cf00f4441e93d39fb4c391a16cc223e0d35346ac388e66712c418"
|
||||||
|
dependencies = [
|
||||||
|
"bevy_app",
|
||||||
|
"bevy_asset",
|
||||||
|
"bevy_color",
|
||||||
|
"bevy_core_pipeline",
|
||||||
|
"bevy_derive",
|
||||||
|
"bevy_ecs",
|
||||||
|
"bevy_image",
|
||||||
|
"bevy_math",
|
||||||
|
"bevy_reflect",
|
||||||
|
"bevy_render",
|
||||||
|
"bevy_transform",
|
||||||
|
"bevy_utils",
|
||||||
|
"bevy_window",
|
||||||
|
"bitflags 2.6.0",
|
||||||
|
"bytemuck",
|
||||||
|
"derive_more",
|
||||||
|
"fixedbitset 0.5.7",
|
||||||
|
"nonmax",
|
||||||
|
"radsort",
|
||||||
|
"smallvec",
|
||||||
|
"static_assertions",
|
||||||
|
]
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "bevy_picking"
|
name = "bevy_picking"
|
||||||
version = "0.15.1"
|
version = "0.15.1"
|
||||||
|
|
@ -1223,19 +1269,75 @@ dependencies = [
|
||||||
"rectangle-pack",
|
"rectangle-pack",
|
||||||
]
|
]
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "bevy_state"
|
||||||
|
version = "0.15.1"
|
||||||
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
|
checksum = "fd10c8b01a982642596406fc4486fcd52239aa9c4aa47fed27abab93a69fba59"
|
||||||
|
dependencies = [
|
||||||
|
"bevy_app",
|
||||||
|
"bevy_ecs",
|
||||||
|
"bevy_hierarchy",
|
||||||
|
"bevy_reflect",
|
||||||
|
"bevy_state_macros",
|
||||||
|
"bevy_utils",
|
||||||
|
]
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "bevy_state_macros"
|
||||||
|
version = "0.15.1"
|
||||||
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
|
checksum = "23773797bf8077a6ad9299f10b063b6947f22dad311d855c4b3523102ab4381b"
|
||||||
|
dependencies = [
|
||||||
|
"bevy_macro_utils",
|
||||||
|
"proc-macro2",
|
||||||
|
"quote",
|
||||||
|
"syn 2.0.95",
|
||||||
|
]
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "bevy_tasks"
|
name = "bevy_tasks"
|
||||||
version = "0.15.1"
|
version = "0.15.1"
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
checksum = "5c28f2db2619203aa82342dbbe77e49aeea4f933212c0b7a1f285e94c4008e5b"
|
checksum = "5c28f2db2619203aa82342dbbe77e49aeea4f933212c0b7a1f285e94c4008e5b"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
|
"async-channel",
|
||||||
"async-executor",
|
"async-executor",
|
||||||
|
"concurrent-queue",
|
||||||
"futures-channel",
|
"futures-channel",
|
||||||
"futures-lite",
|
"futures-lite",
|
||||||
"pin-project",
|
"pin-project",
|
||||||
"wasm-bindgen-futures",
|
"wasm-bindgen-futures",
|
||||||
]
|
]
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "bevy_text"
|
||||||
|
version = "0.15.1"
|
||||||
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
|
checksum = "17ee0b5f52946d222521f93773a6230f42e868548f881c4c5bddb1393a96298b"
|
||||||
|
dependencies = [
|
||||||
|
"bevy_app",
|
||||||
|
"bevy_asset",
|
||||||
|
"bevy_color",
|
||||||
|
"bevy_derive",
|
||||||
|
"bevy_ecs",
|
||||||
|
"bevy_hierarchy",
|
||||||
|
"bevy_image",
|
||||||
|
"bevy_math",
|
||||||
|
"bevy_reflect",
|
||||||
|
"bevy_render",
|
||||||
|
"bevy_sprite",
|
||||||
|
"bevy_transform",
|
||||||
|
"bevy_utils",
|
||||||
|
"bevy_window",
|
||||||
|
"cosmic-text",
|
||||||
|
"derive_more",
|
||||||
|
"serde",
|
||||||
|
"smallvec",
|
||||||
|
"sys-locale",
|
||||||
|
"unicode-bidi",
|
||||||
|
]
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "bevy_time"
|
name = "bevy_time"
|
||||||
version = "0.15.1"
|
version = "0.15.1"
|
||||||
|
|
@ -1263,6 +1365,39 @@ dependencies = [
|
||||||
"derive_more",
|
"derive_more",
|
||||||
]
|
]
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "bevy_ui"
|
||||||
|
version = "0.15.1"
|
||||||
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
|
checksum = "4556fc2202c6339f95e0c24ca4c96ee959854b702e23ecf73e05fb20e67d67b0"
|
||||||
|
dependencies = [
|
||||||
|
"accesskit",
|
||||||
|
"bevy_a11y",
|
||||||
|
"bevy_app",
|
||||||
|
"bevy_asset",
|
||||||
|
"bevy_color",
|
||||||
|
"bevy_core_pipeline",
|
||||||
|
"bevy_derive",
|
||||||
|
"bevy_ecs",
|
||||||
|
"bevy_hierarchy",
|
||||||
|
"bevy_image",
|
||||||
|
"bevy_input",
|
||||||
|
"bevy_math",
|
||||||
|
"bevy_picking",
|
||||||
|
"bevy_reflect",
|
||||||
|
"bevy_render",
|
||||||
|
"bevy_sprite",
|
||||||
|
"bevy_text",
|
||||||
|
"bevy_transform",
|
||||||
|
"bevy_utils",
|
||||||
|
"bevy_window",
|
||||||
|
"bytemuck",
|
||||||
|
"derive_more",
|
||||||
|
"nonmax",
|
||||||
|
"smallvec",
|
||||||
|
"taffy",
|
||||||
|
]
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "bevy_utils"
|
name = "bevy_utils"
|
||||||
version = "0.15.1"
|
version = "0.15.1"
|
||||||
|
|
@ -1307,6 +1442,35 @@ dependencies = [
|
||||||
"smol_str",
|
"smol_str",
|
||||||
]
|
]
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "bevy_winit"
|
||||||
|
version = "0.15.1"
|
||||||
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
|
checksum = "36e84e7f94583cac93de4ba641029eb0b6551d35e559c829209f2b1b9fe532d8"
|
||||||
|
dependencies = [
|
||||||
|
"accesskit",
|
||||||
|
"accesskit_winit",
|
||||||
|
"approx",
|
||||||
|
"bevy_a11y",
|
||||||
|
"bevy_app",
|
||||||
|
"bevy_derive",
|
||||||
|
"bevy_ecs",
|
||||||
|
"bevy_hierarchy",
|
||||||
|
"bevy_input",
|
||||||
|
"bevy_log",
|
||||||
|
"bevy_math",
|
||||||
|
"bevy_reflect",
|
||||||
|
"bevy_tasks",
|
||||||
|
"bevy_utils",
|
||||||
|
"bevy_window",
|
||||||
|
"cfg-if",
|
||||||
|
"crossbeam-channel",
|
||||||
|
"raw-window-handle",
|
||||||
|
"wasm-bindgen",
|
||||||
|
"web-sys",
|
||||||
|
"winit",
|
||||||
|
]
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "bindgen"
|
name = "bindgen"
|
||||||
version = "0.70.1"
|
version = "0.70.1"
|
||||||
|
|
@ -1787,6 +1951,29 @@ dependencies = [
|
||||||
"libc",
|
"libc",
|
||||||
]
|
]
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "cosmic-text"
|
||||||
|
version = "0.12.1"
|
||||||
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
|
checksum = "59fd57d82eb4bfe7ffa9b1cec0c05e2fd378155b47f255a67983cb4afe0e80c2"
|
||||||
|
dependencies = [
|
||||||
|
"bitflags 2.6.0",
|
||||||
|
"fontdb",
|
||||||
|
"log",
|
||||||
|
"rangemap",
|
||||||
|
"rayon",
|
||||||
|
"rustc-hash",
|
||||||
|
"rustybuzz",
|
||||||
|
"self_cell",
|
||||||
|
"swash",
|
||||||
|
"sys-locale",
|
||||||
|
"ttf-parser 0.21.1",
|
||||||
|
"unicode-bidi",
|
||||||
|
"unicode-linebreak",
|
||||||
|
"unicode-script",
|
||||||
|
"unicode-segmentation",
|
||||||
|
]
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "cpufeatures"
|
name = "cpufeatures"
|
||||||
version = "0.2.16"
|
version = "0.2.16"
|
||||||
|
|
@ -2421,6 +2608,38 @@ version = "0.1.4"
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
checksum = "a0d2fde1f7b3d48b8395d5f2de76c18a528bd6a9cdde438df747bfcba3e05d6f"
|
checksum = "a0d2fde1f7b3d48b8395d5f2de76c18a528bd6a9cdde438df747bfcba3e05d6f"
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "font-types"
|
||||||
|
version = "0.7.3"
|
||||||
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
|
checksum = "b3971f9a5ca983419cdc386941ba3b9e1feba01a0ab888adf78739feb2798492"
|
||||||
|
dependencies = [
|
||||||
|
"bytemuck",
|
||||||
|
]
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "fontconfig-parser"
|
||||||
|
version = "0.5.7"
|
||||||
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
|
checksum = "c1fcfcd44ca6e90c921fee9fa665d530b21ef1327a4c1a6c5250ea44b776ada7"
|
||||||
|
dependencies = [
|
||||||
|
"roxmltree 0.20.0",
|
||||||
|
]
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "fontdb"
|
||||||
|
version = "0.16.2"
|
||||||
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
|
checksum = "b0299020c3ef3f60f526a4f64ab4a3d4ce116b1acbf24cdd22da0068e5d81dc3"
|
||||||
|
dependencies = [
|
||||||
|
"fontconfig-parser",
|
||||||
|
"log",
|
||||||
|
"memmap2",
|
||||||
|
"slotmap",
|
||||||
|
"tinyvec",
|
||||||
|
"ttf-parser 0.20.0",
|
||||||
|
]
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "foreign-types"
|
name = "foreign-types"
|
||||||
version = "0.5.0"
|
version = "0.5.0"
|
||||||
|
|
@ -2730,6 +2949,12 @@ dependencies = [
|
||||||
"bitflags 2.6.0",
|
"bitflags 2.6.0",
|
||||||
]
|
]
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "grid"
|
||||||
|
version = "0.14.0"
|
||||||
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
|
checksum = "be136d9dacc2a13cc70bb6c8f902b414fb2641f8db1314637c6b7933411a8f82"
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "guillotiere"
|
name = "guillotiere"
|
||||||
version = "0.6.2"
|
version = "0.6.2"
|
||||||
|
|
@ -3855,7 +4080,7 @@ version = "0.25.0"
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
checksum = "22ec719bbf3b2a81c109a4e20b1f129b5566b7dce654bc3872f6a05abf82b2c4"
|
checksum = "22ec719bbf3b2a81c109a4e20b1f129b5566b7dce654bc3872f6a05abf82b2c4"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"ttf-parser",
|
"ttf-parser 0.25.1",
|
||||||
]
|
]
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
|
|
@ -4164,6 +4389,12 @@ version = "0.1.3"
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
checksum = "9c8a99fddc9f0ba0a85884b8d14e3592853e787d581ca1816c91349b10e4eeab"
|
checksum = "9c8a99fddc9f0ba0a85884b8d14e3592853e787d581ca1816c91349b10e4eeab"
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "rangemap"
|
||||||
|
version = "1.5.1"
|
||||||
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
|
checksum = "f60fcc7d6849342eff22c4350c8b9a989ee8ceabc4b481253e8946b9fe83d684"
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "rav1e"
|
name = "rav1e"
|
||||||
version = "0.7.1"
|
version = "0.7.1"
|
||||||
|
|
@ -4246,6 +4477,16 @@ version = "0.5.0"
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
checksum = "3b42e27ef78c35d3998403c1d26f3efd9e135d3e5121b0a4845cc5cc27547f4f"
|
checksum = "3b42e27ef78c35d3998403c1d26f3efd9e135d3e5121b0a4845cc5cc27547f4f"
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "read-fonts"
|
||||||
|
version = "0.22.7"
|
||||||
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
|
checksum = "69aacb76b5c29acfb7f90155d39759a29496aebb49395830e928a9703d2eec2f"
|
||||||
|
dependencies = [
|
||||||
|
"bytemuck",
|
||||||
|
"font-types",
|
||||||
|
]
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "rectangle-pack"
|
name = "rectangle-pack"
|
||||||
version = "0.4.2"
|
version = "0.4.2"
|
||||||
|
|
@ -4400,6 +4641,12 @@ version = "0.19.0"
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
checksum = "3cd14fd5e3b777a7422cca79358c57a8f6e3a703d9ac187448d0daf220c2407f"
|
checksum = "3cd14fd5e3b777a7422cca79358c57a8f6e3a703d9ac187448d0daf220c2407f"
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "roxmltree"
|
||||||
|
version = "0.20.0"
|
||||||
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
|
checksum = "6c20b6793b5c2fa6553b250154b78d6d0db37e72700ae35fad9387a46f487c97"
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "rpack"
|
name = "rpack"
|
||||||
version = "0.1.0"
|
version = "0.1.0"
|
||||||
|
|
@ -4495,6 +4742,23 @@ version = "1.0.19"
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
checksum = "f7c45b9784283f1b2e7fb61b42047c2fd678ef0960d4f6f1eba131594cc369d4"
|
checksum = "f7c45b9784283f1b2e7fb61b42047c2fd678ef0960d4f6f1eba131594cc369d4"
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "rustybuzz"
|
||||||
|
version = "0.14.1"
|
||||||
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
|
checksum = "cfb9cf8877777222e4a3bc7eb247e398b56baba500c38c1c46842431adc8b55c"
|
||||||
|
dependencies = [
|
||||||
|
"bitflags 2.6.0",
|
||||||
|
"bytemuck",
|
||||||
|
"libm",
|
||||||
|
"smallvec",
|
||||||
|
"ttf-parser 0.21.1",
|
||||||
|
"unicode-bidi-mirroring",
|
||||||
|
"unicode-ccc",
|
||||||
|
"unicode-properties",
|
||||||
|
"unicode-script",
|
||||||
|
]
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "ryu"
|
name = "ryu"
|
||||||
version = "1.0.18"
|
version = "1.0.18"
|
||||||
|
|
@ -4522,6 +4786,12 @@ version = "1.2.0"
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
checksum = "94143f37725109f92c262ed2cf5e59bce7498c01bcc1502d7b9afe439a4e9f49"
|
checksum = "94143f37725109f92c262ed2cf5e59bce7498c01bcc1502d7b9afe439a4e9f49"
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "self_cell"
|
||||||
|
version = "1.1.0"
|
||||||
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
|
checksum = "c2fdfc24bc566f839a2da4c4295b82db7d25a24253867d5c64355abb5799bdbe"
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "send_wrapper"
|
name = "send_wrapper"
|
||||||
version = "0.6.0"
|
version = "0.6.0"
|
||||||
|
|
@ -4645,6 +4915,16 @@ version = "0.3.11"
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
checksum = "38b58827f4464d87d377d175e90bf58eb00fd8716ff0a62f80356b5e61555d0d"
|
checksum = "38b58827f4464d87d377d175e90bf58eb00fd8716ff0a62f80356b5e61555d0d"
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "skrifa"
|
||||||
|
version = "0.22.3"
|
||||||
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
|
checksum = "8e1c44ad1f6c5bdd4eefed8326711b7dbda9ea45dfd36068c427d332aa382cbe"
|
||||||
|
dependencies = [
|
||||||
|
"bytemuck",
|
||||||
|
"read-fonts",
|
||||||
|
]
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "slab"
|
name = "slab"
|
||||||
version = "0.4.9"
|
version = "0.4.9"
|
||||||
|
|
@ -4806,6 +5086,17 @@ dependencies = [
|
||||||
"siphasher",
|
"siphasher",
|
||||||
]
|
]
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "swash"
|
||||||
|
version = "0.1.19"
|
||||||
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
|
checksum = "cbd59f3f359ddd2c95af4758c18270eddd9c730dde98598023cdabff472c2ca2"
|
||||||
|
dependencies = [
|
||||||
|
"skrifa",
|
||||||
|
"yazi",
|
||||||
|
"zeno",
|
||||||
|
]
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "syn"
|
name = "syn"
|
||||||
version = "1.0.109"
|
version = "1.0.109"
|
||||||
|
|
@ -4839,6 +5130,15 @@ dependencies = [
|
||||||
"syn 2.0.95",
|
"syn 2.0.95",
|
||||||
]
|
]
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "sys-locale"
|
||||||
|
version = "0.3.2"
|
||||||
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
|
checksum = "8eab9a99a024a169fe8a903cf9d4a3b3601109bcc13bd9e3c6fff259138626c4"
|
||||||
|
dependencies = [
|
||||||
|
"libc",
|
||||||
|
]
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "system-deps"
|
name = "system-deps"
|
||||||
version = "6.2.2"
|
version = "6.2.2"
|
||||||
|
|
@ -4852,6 +5152,19 @@ dependencies = [
|
||||||
"version-compare",
|
"version-compare",
|
||||||
]
|
]
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "taffy"
|
||||||
|
version = "0.5.2"
|
||||||
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
|
checksum = "9cb893bff0f80ae17d3a57e030622a967b8dbc90e38284d9b4b1442e23873c94"
|
||||||
|
dependencies = [
|
||||||
|
"arrayvec",
|
||||||
|
"grid",
|
||||||
|
"num-traits",
|
||||||
|
"serde",
|
||||||
|
"slotmap",
|
||||||
|
]
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "target-lexicon"
|
name = "target-lexicon"
|
||||||
version = "0.12.16"
|
version = "0.12.16"
|
||||||
|
|
@ -5132,6 +5445,18 @@ dependencies = [
|
||||||
"wasm-bindgen",
|
"wasm-bindgen",
|
||||||
]
|
]
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "ttf-parser"
|
||||||
|
version = "0.20.0"
|
||||||
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
|
checksum = "17f77d76d837a7830fe1d4f12b7b4ba4192c1888001c7164257e4bc6d21d96b4"
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "ttf-parser"
|
||||||
|
version = "0.21.1"
|
||||||
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
|
checksum = "2c591d83f69777866b9126b24c6dd9a18351f177e49d625920d19f989fd31cf8"
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "ttf-parser"
|
name = "ttf-parser"
|
||||||
version = "0.25.1"
|
version = "0.25.1"
|
||||||
|
|
@ -5167,12 +5492,48 @@ version = "2.8.1"
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
checksum = "75b844d17643ee918803943289730bec8aac480150456169e647ed0b576ba539"
|
checksum = "75b844d17643ee918803943289730bec8aac480150456169e647ed0b576ba539"
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "unicode-bidi"
|
||||||
|
version = "0.3.18"
|
||||||
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
|
checksum = "5c1cb5db39152898a79168971543b1cb5020dff7fe43c8dc468b0885f5e29df5"
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "unicode-bidi-mirroring"
|
||||||
|
version = "0.2.0"
|
||||||
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
|
checksum = "23cb788ffebc92c5948d0e997106233eeb1d8b9512f93f41651f52b6c5f5af86"
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "unicode-ccc"
|
||||||
|
version = "0.2.0"
|
||||||
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
|
checksum = "1df77b101bcc4ea3d78dafc5ad7e4f58ceffe0b2b16bf446aeb50b6cb4157656"
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "unicode-ident"
|
name = "unicode-ident"
|
||||||
version = "1.0.14"
|
version = "1.0.14"
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
checksum = "adb9e6ca4f869e1180728b7950e35922a7fc6397f7b641499e8f3ef06e50dc83"
|
checksum = "adb9e6ca4f869e1180728b7950e35922a7fc6397f7b641499e8f3ef06e50dc83"
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "unicode-linebreak"
|
||||||
|
version = "0.1.5"
|
||||||
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
|
checksum = "3b09c83c3c29d37506a3e260c08c03743a6bb66a9cd432c6934ab501a190571f"
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "unicode-properties"
|
||||||
|
version = "0.1.3"
|
||||||
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
|
checksum = "e70f2a8b45122e719eb623c01822704c4e0907e7e426a05927e1a1cfff5b75d0"
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "unicode-script"
|
||||||
|
version = "0.5.7"
|
||||||
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
|
checksum = "9fb421b350c9aff471779e262955939f565ec18b86c15364e6bdf0d662ca7c1f"
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "unicode-segmentation"
|
name = "unicode-segmentation"
|
||||||
version = "1.12.0"
|
version = "1.12.0"
|
||||||
|
|
@ -5256,7 +5617,7 @@ dependencies = [
|
||||||
"imagesize",
|
"imagesize",
|
||||||
"kurbo",
|
"kurbo",
|
||||||
"log",
|
"log",
|
||||||
"roxmltree",
|
"roxmltree 0.19.0",
|
||||||
"simplecss",
|
"simplecss",
|
||||||
"siphasher",
|
"siphasher",
|
||||||
"svgtypes",
|
"svgtypes",
|
||||||
|
|
@ -6095,6 +6456,12 @@ version = "0.1.0"
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
checksum = "ec7a2a501ed189703dba8b08142f057e887dfc4b2cc4db2d343ac6376ba3e0b9"
|
checksum = "ec7a2a501ed189703dba8b08142f057e887dfc4b2cc4db2d343ac6376ba3e0b9"
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "yazi"
|
||||||
|
version = "0.1.6"
|
||||||
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
|
checksum = "c94451ac9513335b5e23d7a8a2b61a7102398b8cca5160829d313e84c9d98be1"
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "yoke"
|
name = "yoke"
|
||||||
version = "0.7.5"
|
version = "0.7.5"
|
||||||
|
|
@ -6281,6 +6648,12 @@ dependencies = [
|
||||||
"zvariant 4.2.0",
|
"zvariant 4.2.0",
|
||||||
]
|
]
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "zeno"
|
||||||
|
version = "0.2.3"
|
||||||
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
|
checksum = "dd15f8e0dbb966fd9245e7498c7e9e5055d9e5c8b676b95bd67091cd11a1e697"
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "zerocopy"
|
name = "zerocopy"
|
||||||
version = "0.7.35"
|
version = "0.7.35"
|
||||||
|
|
|
||||||
20
README.md
20
README.md
|
|
@ -1,12 +1,26 @@
|
||||||
# rpack [](https://github.com/Leinnan/rpack/actions?workflow=CI)
|
# rpack [](https://github.com/Leinnan/rpack/actions?workflow=CI)
|
||||||
|
|
||||||
|
Create spritesheets in seconds!
|
||||||
|
|
||||||
|
## rPack egui
|
||||||
|
|
||||||
|
To open it in browser click one of the icons below:
|
||||||
|
|
||||||
[](https://mevlyshkin.itch.io/rpack)
|
[](https://mevlyshkin.itch.io/rpack)
|
||||||
[](http://rpack.mevlyshkin.com/)
|
[](http://rpack.mevlyshkin.com/)
|
||||||
|
|
||||||
|
A both desktop and web frontend for generating tilemaps. Just drag and drop images into the program and generate tilemaps.
|
||||||
|
|
||||||
Create spritesheets in seconds!
|
Source code is available in `crates/rpack` directory of the repo.
|
||||||
|
|
||||||
Attempt to build texture atlas packer GUI.
|
|
||||||
|
|
||||||

|

|
||||||
|
|
||||||
|
## Bevy rPack
|
||||||
|
|
||||||
|
A Bevy plugin with support for the `rpack.json` atlases.
|
||||||
|
|
||||||
|
More info available at [crates/bevy_rpack](https://github.com/Leinnan/rpack/tree/master/crates/bevy_rpack).
|
||||||
|
|
||||||
|
## rPack CLI
|
||||||
|
|
||||||
|
Command line interface for generating tilemaps. Code stored in `crates/rpack_cli` directory. Right now this is the part of the project that could change the most.
|
||||||
|
|
@ -17,7 +17,27 @@ bevy = { version = "0.15", optional = true, default-features = false, features =
|
||||||
"bevy_asset",
|
"bevy_asset",
|
||||||
"bevy_sprite",
|
"bevy_sprite",
|
||||||
"bevy_image",
|
"bevy_image",
|
||||||
|
"bevy_ui",
|
||||||
] }
|
] }
|
||||||
serde = { version = "1.0", features = ["derive"] }
|
serde = { version = "1.0", features = ["derive"] }
|
||||||
serde_json = "1.0"
|
serde_json = "1.0"
|
||||||
thiserror = "2.0"
|
thiserror = "2.0"
|
||||||
|
|
||||||
|
[dev-dependencies]
|
||||||
|
bevy = { version = "0.15", default-features = false, features = [
|
||||||
|
"bevy_asset",
|
||||||
|
"bevy_core_pipeline",
|
||||||
|
"bevy_render",
|
||||||
|
"bevy_sprite",
|
||||||
|
"bevy_state",
|
||||||
|
"bevy_window",
|
||||||
|
"bevy_winit",
|
||||||
|
"bevy_ui",
|
||||||
|
"multi_threaded",
|
||||||
|
"png",
|
||||||
|
"webgl2",
|
||||||
|
] }
|
||||||
|
|
||||||
|
[lints.rust]
|
||||||
|
unsafe_code = "forbid"
|
||||||
|
missing_docs = "warn"
|
||||||
|
|
@ -0,0 +1,59 @@
|
||||||
|
# Bevy_rPack
|
||||||
|
|
||||||
|
A Bevy plugin with support for the `rpack.json` atlases.
|
||||||
|
|
||||||
|
## Example
|
||||||
|
|
||||||
|
```rust
|
||||||
|
use bevy::prelude::*;
|
||||||
|
use bevy_rpack::prelude::*;
|
||||||
|
|
||||||
|
#[allow(dead_code)]
|
||||||
|
#[derive(Resource)]
|
||||||
|
struct Holder(pub Handle<RpackAtlasAsset>);
|
||||||
|
|
||||||
|
fn main() {
|
||||||
|
App::new()
|
||||||
|
.add_plugins((DefaultPlugins, RpackAssetPlugin))
|
||||||
|
.add_systems(Startup, setup)
|
||||||
|
.add_systems(Update, on_loaded)
|
||||||
|
.run();
|
||||||
|
}
|
||||||
|
|
||||||
|
fn setup(mut commands: Commands, asset_server: Res<AssetServer>) {
|
||||||
|
commands.insert_resource(Holder(asset_server.load("Tilemap.rpack.json")));
|
||||||
|
commands.spawn(Camera2d);
|
||||||
|
}
|
||||||
|
|
||||||
|
fn on_loaded(
|
||||||
|
mut ev_asset: EventReader<AssetEvent<RpackAtlasAsset>>,
|
||||||
|
assets: Res<Assets<RpackAtlasAsset>>,
|
||||||
|
mut commands: Commands,
|
||||||
|
) {
|
||||||
|
for ev in ev_asset.read() {
|
||||||
|
let AssetEvent::LoadedWithDependencies { id: _ } = ev else {
|
||||||
|
continue;
|
||||||
|
};
|
||||||
|
|
||||||
|
if let Ok(sprite) = assets.make_sprite_from_atlas("Sword006") {
|
||||||
|
commands.spawn(Sprite {
|
||||||
|
color: Color::linear_rgb(1.0, 0.0, 0.0),
|
||||||
|
..sprite
|
||||||
|
});
|
||||||
|
};
|
||||||
|
if let Ok(image_node) = assets.make_image_node_from_atlas("Axe010") {
|
||||||
|
commands.spawn(image_node);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
```
|
||||||
|
|
||||||
|
## Licence
|
||||||
|
|
||||||
|
`bevy_rpack` is dual-licensed under MIT and Apache 2.0 at your option.
|
||||||
|
|
||||||
|
## Bevy compatibility table
|
||||||
|
|
||||||
|
Bevy version | Crate version
|
||||||
|
--- | ---
|
||||||
|
0.15 | 0.1
|
||||||
Binary file not shown.
|
After Width: | Height: | Size: 7.9 KiB |
|
|
@ -0,0 +1,72 @@
|
||||||
|
{
|
||||||
|
"filename": "tilemap.png",
|
||||||
|
"frames": [
|
||||||
|
{
|
||||||
|
"frame": {
|
||||||
|
"h": 34,
|
||||||
|
"w": 34,
|
||||||
|
"x": 74,
|
||||||
|
"y": 2
|
||||||
|
},
|
||||||
|
"key": "Sword007"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"frame": {
|
||||||
|
"h": 34,
|
||||||
|
"w": 34,
|
||||||
|
"x": 38,
|
||||||
|
"y": 2
|
||||||
|
},
|
||||||
|
"key": "Axe011"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"frame": {
|
||||||
|
"h": 34,
|
||||||
|
"w": 34,
|
||||||
|
"x": 2,
|
||||||
|
"y": 74
|
||||||
|
},
|
||||||
|
"key": "Axe010"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"frame": {
|
||||||
|
"h": 34,
|
||||||
|
"w": 34,
|
||||||
|
"x": 2,
|
||||||
|
"y": 2
|
||||||
|
},
|
||||||
|
"key": "Sword006"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"frame": {
|
||||||
|
"h": 34,
|
||||||
|
"w": 34,
|
||||||
|
"x": 2,
|
||||||
|
"y": 38
|
||||||
|
},
|
||||||
|
"key": "Sword009"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"frame": {
|
||||||
|
"h": 34,
|
||||||
|
"w": 34,
|
||||||
|
"x": 74,
|
||||||
|
"y": 38
|
||||||
|
},
|
||||||
|
"key": "Axe009"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"frame": {
|
||||||
|
"h": 34,
|
||||||
|
"w": 34,
|
||||||
|
"x": 38,
|
||||||
|
"y": 38
|
||||||
|
},
|
||||||
|
"key": "Sword008"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"size": [
|
||||||
|
128,
|
||||||
|
128
|
||||||
|
]
|
||||||
|
}
|
||||||
|
|
@ -0,0 +1,43 @@
|
||||||
|
//! Simple example that loads the tilemap and once is loaded it creates a sprite with it.
|
||||||
|
|
||||||
|
use bevy::prelude::*;
|
||||||
|
use bevy_rpack::prelude::*;
|
||||||
|
|
||||||
|
#[allow(dead_code)]
|
||||||
|
#[derive(Resource)]
|
||||||
|
struct Holder(pub Handle<RpackAtlasAsset>);
|
||||||
|
|
||||||
|
fn main() {
|
||||||
|
App::new()
|
||||||
|
.add_plugins((DefaultPlugins, RpackAssetPlugin))
|
||||||
|
.add_systems(Startup, setup)
|
||||||
|
.add_systems(Update, on_loaded)
|
||||||
|
.run();
|
||||||
|
}
|
||||||
|
|
||||||
|
fn setup(mut commands: Commands, asset_server: Res<AssetServer>) {
|
||||||
|
commands.insert_resource(Holder(asset_server.load("tilemap.rpack.json")));
|
||||||
|
commands.spawn(Camera2d);
|
||||||
|
}
|
||||||
|
|
||||||
|
fn on_loaded(
|
||||||
|
mut ev_asset: EventReader<AssetEvent<RpackAtlasAsset>>,
|
||||||
|
assets: Res<Assets<RpackAtlasAsset>>,
|
||||||
|
mut commands: Commands,
|
||||||
|
) {
|
||||||
|
for ev in ev_asset.read() {
|
||||||
|
let AssetEvent::LoadedWithDependencies { id: _ } = ev else {
|
||||||
|
continue;
|
||||||
|
};
|
||||||
|
|
||||||
|
if let Ok(sprite) = assets.make_sprite_from_atlas("Sword006") {
|
||||||
|
commands.spawn(Sprite {
|
||||||
|
color: Color::linear_rgb(1.0, 0.0, 0.0),
|
||||||
|
..sprite
|
||||||
|
});
|
||||||
|
};
|
||||||
|
if let Ok(image_node) = assets.make_image_node_from_atlas("Axe010") {
|
||||||
|
commands.spawn(image_node);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
@ -1,16 +1,24 @@
|
||||||
#[cfg(feature = "bevy")]
|
#![doc = include_str!("../README.md")]
|
||||||
mod bevy;
|
|
||||||
|
|
||||||
|
#[cfg(feature = "bevy")]
|
||||||
|
/// Contains the Bevy plugin for handling `Rpack` assets and atlases.
|
||||||
|
mod plugin;
|
||||||
|
|
||||||
|
/// Re-exports all types for working with texture atlases.
|
||||||
pub mod prelude {
|
pub mod prelude {
|
||||||
#[cfg(feature = "bevy")]
|
#[cfg(feature = "bevy")]
|
||||||
pub use super::bevy::{
|
/// Provides easy access to `Rpack` asset-related functionality in a Bevy application.
|
||||||
RpackAssetPlugin, RpackAtlasAsset, RpackAtlasAssetError, RpackAtlasAssetLoader,
|
pub use super::plugin::{
|
||||||
|
RpackAssetHelper, RpackAssetPlugin, RpackAtlasAsset, RpackAtlasAssetError,
|
||||||
|
RpackAtlasAssetLoader, RpackAtlasError,
|
||||||
};
|
};
|
||||||
|
/// Re-exports core types for working with texture atlases.
|
||||||
pub use super::{AtlasAsset, AtlasFrame, SerializableRect};
|
pub use super::{AtlasAsset, AtlasFrame, SerializableRect};
|
||||||
}
|
}
|
||||||
|
|
||||||
/// Defines a rectangle in pixels with the origin at the top-left of the texture atlas.
|
/// Defines a rectangle in pixels with the origin at the top-left of the texture atlas.
|
||||||
#[derive(Copy, Clone, Debug, serde::Deserialize, serde::Serialize)]
|
#[derive(Copy, Clone, Debug, serde::Deserialize, serde::Serialize)]
|
||||||
|
#[cfg_attr(feature = "bevy", derive(bevy::prelude::Reflect))]
|
||||||
pub struct SerializableRect {
|
pub struct SerializableRect {
|
||||||
/// Horizontal position the rectangle begins at.
|
/// Horizontal position the rectangle begins at.
|
||||||
pub x: u32,
|
pub x: u32,
|
||||||
|
|
@ -22,15 +30,24 @@ pub struct SerializableRect {
|
||||||
pub h: u32,
|
pub h: u32,
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/// Represents a single frame within a texture atlas, including its identifier and position.
|
||||||
#[derive(Clone, Debug, serde::Deserialize, serde::Serialize)]
|
#[derive(Clone, Debug, serde::Deserialize, serde::Serialize)]
|
||||||
|
#[cfg_attr(feature = "bevy", derive(bevy::prelude::Reflect))]
|
||||||
pub struct AtlasFrame {
|
pub struct AtlasFrame {
|
||||||
|
/// A unique identifier for the frame.
|
||||||
pub key: String,
|
pub key: String,
|
||||||
|
/// The rectangular area of the frame within the texture atlas.
|
||||||
pub frame: SerializableRect,
|
pub frame: SerializableRect,
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/// Represents an entire texture atlas asset, including its metadata and frames.
|
||||||
#[derive(Clone, Debug, serde::Deserialize, serde::Serialize)]
|
#[derive(Clone, Debug, serde::Deserialize, serde::Serialize)]
|
||||||
|
#[cfg_attr(feature = "bevy", derive(bevy::prelude::Asset, bevy::prelude::Reflect))]
|
||||||
pub struct AtlasAsset {
|
pub struct AtlasAsset {
|
||||||
|
/// The overall dimensions of the texture atlas in pixels (width, height).
|
||||||
pub size: [u32; 2],
|
pub size: [u32; 2],
|
||||||
|
/// The filename associated with the atlas, typically used for loading or debugging.
|
||||||
pub filename: String,
|
pub filename: String,
|
||||||
|
/// A collection of frames contained within the texture atlas.
|
||||||
pub frames: Vec<AtlasFrame>,
|
pub frames: Vec<AtlasFrame>,
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -4,6 +4,17 @@ use bevy::image::ImageSampler;
|
||||||
use bevy::{prelude::*, utils::HashMap};
|
use bevy::{prelude::*, utils::HashMap};
|
||||||
use thiserror::Error;
|
use thiserror::Error;
|
||||||
|
|
||||||
|
/// Errors that can occur while accessing and creating components from [`RpackAtlasAsset`].
|
||||||
|
#[derive(Debug, Error)]
|
||||||
|
pub enum RpackAtlasError {
|
||||||
|
/// An error that occured due to no atlas being loaded yet
|
||||||
|
#[error("There is no atlas.")]
|
||||||
|
NoAtlas,
|
||||||
|
/// An error that occured because atlas does not contain provided key.
|
||||||
|
#[error("There is no frame with provided key.")]
|
||||||
|
WrongKey,
|
||||||
|
}
|
||||||
|
|
||||||
/// This is an asset containing the texture atlas image, the texture atlas layout, and a map of the original file names to their corresponding indices in the texture atlas.
|
/// This is an asset containing the texture atlas image, the texture atlas layout, and a map of the original file names to their corresponding indices in the texture atlas.
|
||||||
#[derive(Asset, Debug, Reflect)]
|
#[derive(Asset, Debug, Reflect)]
|
||||||
pub struct RpackAtlasAsset {
|
pub struct RpackAtlasAsset {
|
||||||
|
|
@ -27,29 +38,100 @@ impl From<SerializableRect> for URect {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
impl RpackAtlasAsset {
|
/// A helper trait for accessing and creating components from `Rpack` atlas data.
|
||||||
// When atlas contains the given key returns a copy of TextureAtlas and Image
|
#[allow(dead_code)]
|
||||||
pub fn get_atlas_data<T: AsRef<str>>(&self, key: T) -> Option<(TextureAtlas, Handle<Image>)> {
|
pub trait RpackAssetHelper {
|
||||||
self.files.get(key.as_ref()).map(|s| {
|
/// Retrieves the atlas data (texture atlas and image) for the given atlas key, if available in any of the loaded Atlases.
|
||||||
(
|
fn find_atlas_data_by_key<T: AsRef<str>>(
|
||||||
|
&self,
|
||||||
|
key: T,
|
||||||
|
) -> Result<(TextureAtlas, Handle<Image>), RpackAtlasError>;
|
||||||
|
/// Creates a [`Sprite`] component for the given atlas key, if available in any of the loaded Atlases.
|
||||||
|
fn make_sprite_from_atlas<T: AsRef<str>>(&self, key: T) -> Result<Sprite, RpackAtlasError>;
|
||||||
|
/// Creates a [`ImageNode`] component for the given atlas key, if available in any of the loaded Atlases.
|
||||||
|
fn make_image_node_from_atlas<T: AsRef<str>>(
|
||||||
|
&self,
|
||||||
|
key: T,
|
||||||
|
) -> Result<ImageNode, RpackAtlasError>;
|
||||||
|
}
|
||||||
|
|
||||||
|
impl RpackAssetHelper for Assets<RpackAtlasAsset> {
|
||||||
|
fn find_atlas_data_by_key<T: AsRef<str>>(
|
||||||
|
&self,
|
||||||
|
key: T,
|
||||||
|
) -> Result<(TextureAtlas, Handle<Image>), RpackAtlasError> {
|
||||||
|
if self.is_empty() {
|
||||||
|
return Err(RpackAtlasError::NoAtlas);
|
||||||
|
}
|
||||||
|
for (_, a) in self.iter() {
|
||||||
|
if let Ok(atlas_data) = a.find_atlas_data_by_key(key.as_ref()) {
|
||||||
|
return Ok(atlas_data);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
Err(RpackAtlasError::WrongKey)
|
||||||
|
}
|
||||||
|
|
||||||
|
fn make_sprite_from_atlas<T: AsRef<str>>(&self, key: T) -> Result<Sprite, RpackAtlasError> {
|
||||||
|
if self.is_empty() {
|
||||||
|
return Err(RpackAtlasError::NoAtlas);
|
||||||
|
}
|
||||||
|
for (_, a) in self.iter() {
|
||||||
|
if let Ok(sprite) = a.make_sprite_from_atlas(key.as_ref()) {
|
||||||
|
return Ok(sprite);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
Err(RpackAtlasError::WrongKey)
|
||||||
|
}
|
||||||
|
|
||||||
|
fn make_image_node_from_atlas<T: AsRef<str>>(
|
||||||
|
&self,
|
||||||
|
key: T,
|
||||||
|
) -> Result<ImageNode, RpackAtlasError> {
|
||||||
|
if self.is_empty() {
|
||||||
|
return Err(RpackAtlasError::NoAtlas);
|
||||||
|
}
|
||||||
|
for (_, a) in self.iter() {
|
||||||
|
if let Ok(image_node) = a.make_image_node_from_atlas(key.as_ref()) {
|
||||||
|
return Ok(image_node);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
Err(RpackAtlasError::WrongKey)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
impl RpackAssetHelper for RpackAtlasAsset {
|
||||||
|
fn find_atlas_data_by_key<T: AsRef<str>>(
|
||||||
|
&self,
|
||||||
|
key: T,
|
||||||
|
) -> Result<(TextureAtlas, Handle<Image>), RpackAtlasError> {
|
||||||
|
match self.files.get(key.as_ref()) {
|
||||||
|
Some(s) => Ok((
|
||||||
TextureAtlas {
|
TextureAtlas {
|
||||||
index: *s,
|
index: *s,
|
||||||
layout: self.atlas.clone(),
|
layout: self.atlas.clone(),
|
||||||
},
|
},
|
||||||
self.image.clone(),
|
self.image.clone(),
|
||||||
)
|
)),
|
||||||
})
|
None => Err(RpackAtlasError::WrongKey),
|
||||||
|
}
|
||||||
}
|
}
|
||||||
// When atlas contains the given key creates a Sprite component
|
|
||||||
pub fn make_sprite<T: AsRef<str>>(&self, key: T) -> Option<Sprite> {
|
fn make_sprite_from_atlas<T: AsRef<str>>(&self, key: T) -> Result<Sprite, RpackAtlasError> {
|
||||||
if let Some((atlas, image)) = self.get_atlas_data(key) {
|
if let Ok((atlas, image)) = self.find_atlas_data_by_key(key) {
|
||||||
Some(Sprite {
|
Ok(Sprite::from_atlas_image(image, atlas))
|
||||||
image,
|
|
||||||
texture_atlas: Some(atlas),
|
|
||||||
..Default::default()
|
|
||||||
})
|
|
||||||
} else {
|
} else {
|
||||||
None
|
Err(RpackAtlasError::WrongKey)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
fn make_image_node_from_atlas<T: AsRef<str>>(
|
||||||
|
&self,
|
||||||
|
key: T,
|
||||||
|
) -> Result<ImageNode, RpackAtlasError> {
|
||||||
|
if let Ok((atlas, image)) = self.find_atlas_data_by_key(key) {
|
||||||
|
Ok(ImageNode::from_atlas_image(image, atlas))
|
||||||
|
} else {
|
||||||
|
Err(RpackAtlasError::WrongKey)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
@ -69,12 +151,14 @@ pub struct RpackAssetPlugin;
|
||||||
|
|
||||||
impl Plugin for RpackAssetPlugin {
|
impl Plugin for RpackAssetPlugin {
|
||||||
fn build(&self, app: &mut App) {
|
fn build(&self, app: &mut App) {
|
||||||
|
app.register_type::<super::AtlasAsset>();
|
||||||
app.register_type::<RpackAtlasAsset>();
|
app.register_type::<RpackAtlasAsset>();
|
||||||
app.init_asset::<RpackAtlasAsset>();
|
app.init_asset::<RpackAtlasAsset>();
|
||||||
app.init_asset_loader::<RpackAtlasAssetLoader>();
|
app.init_asset_loader::<RpackAtlasAssetLoader>();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/// Errors that can occur while loading or processing a `RpackAtlasAsset`.
|
||||||
#[non_exhaustive]
|
#[non_exhaustive]
|
||||||
#[derive(Debug, Error)]
|
#[derive(Debug, Error)]
|
||||||
pub enum RpackAtlasAssetError {
|
pub enum RpackAtlasAssetError {
|
||||||
|
|
@ -82,6 +166,7 @@ pub enum RpackAtlasAssetError {
|
||||||
/// during parsing of a `.rpack.json` file.
|
/// during parsing of a `.rpack.json` file.
|
||||||
#[error("could not load asset: {0}")]
|
#[error("could not load asset: {0}")]
|
||||||
Io(#[from] std::io::Error),
|
Io(#[from] std::io::Error),
|
||||||
|
/// An error that occurred while parsing the `.rpack.json` file into an asset structure.
|
||||||
#[error("could not parse asset: {0}")]
|
#[error("could not parse asset: {0}")]
|
||||||
ParsingError(#[from] serde_json::Error),
|
ParsingError(#[from] serde_json::Error),
|
||||||
/// A Bevy [`LoadDirectError`](bevy::asset::LoadDirectError) that occured
|
/// A Bevy [`LoadDirectError`](bevy::asset::LoadDirectError) that occured
|
||||||
|
|
@ -101,6 +186,7 @@ impl From<bevy::asset::LoadDirectError> for RpackAtlasAssetError {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/// The loader responsible for loading `RpackAtlasAsset` files from `.rpack.json` files.
|
||||||
#[derive(Default)]
|
#[derive(Default)]
|
||||||
pub struct RpackAtlasAssetLoader;
|
pub struct RpackAtlasAssetLoader;
|
||||||
|
|
||||||
|
|
@ -1,9 +1,11 @@
|
||||||
use std::{collections::HashMap, path::Path};
|
use std::collections::HashMap;
|
||||||
|
|
||||||
use egui::{CollapsingHeader, Color32, DroppedFile, FontFamily, FontId, Image, RichText};
|
use egui::{CollapsingHeader, Color32, DroppedFile, FontFamily, FontId, Image, RichText};
|
||||||
use image::{DynamicImage, GenericImageView};
|
use image::GenericImageView;
|
||||||
use rpack_cli::{ImageFile, Spritesheet};
|
use rpack_cli::{ImageFile, Spritesheet};
|
||||||
use texture_packer::{importer::ImageImporter, TexturePackerConfig};
|
use texture_packer::TexturePackerConfig;
|
||||||
|
|
||||||
|
use crate::helpers::DroppedFileHelper;
|
||||||
pub const MY_ACCENT_COLOR32: Color32 = Color32::from_rgb(230, 102, 1);
|
pub const MY_ACCENT_COLOR32: Color32 = Color32::from_rgb(230, 102, 1);
|
||||||
pub const TOP_SIDE_MARGIN: f32 = 10.0;
|
pub const TOP_SIDE_MARGIN: f32 = 10.0;
|
||||||
pub const HEADER_HEIGHT: f32 = 45.0;
|
pub const HEADER_HEIGHT: f32 = 45.0;
|
||||||
|
|
@ -13,7 +15,7 @@ pub const GIT_HASH: &str = env!("GIT_HASH");
|
||||||
/// We derive Deserialize/Serialize so we can persist app state on shutdown.
|
/// We derive Deserialize/Serialize so we can persist app state on shutdown.
|
||||||
#[derive(serde::Deserialize, serde::Serialize)]
|
#[derive(serde::Deserialize, serde::Serialize)]
|
||||||
#[serde(default)] // if we add new fields, give them default values when deserializing old state
|
#[serde(default)] // if we add new fields, give them default values when deserializing old state
|
||||||
pub struct TemplateApp {
|
pub struct Application {
|
||||||
#[serde(skip)]
|
#[serde(skip)]
|
||||||
dropped_files: Vec<DroppedFile>,
|
dropped_files: Vec<DroppedFile>,
|
||||||
#[serde(skip)]
|
#[serde(skip)]
|
||||||
|
|
@ -33,7 +35,7 @@ pub struct TemplateApp {
|
||||||
#[serde(skip)]
|
#[serde(skip)]
|
||||||
image_data: HashMap<String, ImageFile>,
|
image_data: HashMap<String, ImageFile>,
|
||||||
}
|
}
|
||||||
impl Default for TemplateApp {
|
impl Default for Application {
|
||||||
fn default() -> Self {
|
fn default() -> Self {
|
||||||
Self {
|
Self {
|
||||||
dropped_files: vec![],
|
dropped_files: vec![],
|
||||||
|
|
@ -57,13 +59,14 @@ impl Default for TemplateApp {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
impl TemplateApp {
|
impl Application {
|
||||||
pub fn rebuild_image_data(&mut self) {
|
pub fn rebuild_image_data(&mut self) {
|
||||||
let prefix = Self::get_common_prefix(&self.dropped_files);
|
let prefix = crate::helpers::get_common_prefix(&self.dropped_files);
|
||||||
|
|
||||||
self.image_data = self
|
self.image_data = self
|
||||||
.dropped_files
|
.dropped_files
|
||||||
.iter()
|
.iter()
|
||||||
.flat_map(|f| Self::image_from_dropped_file(f, &prefix))
|
.flat_map(|f| f.create_image(&prefix))
|
||||||
.collect();
|
.collect();
|
||||||
self.update_min_size();
|
self.update_min_size();
|
||||||
}
|
}
|
||||||
|
|
@ -102,48 +105,6 @@ impl TemplateApp {
|
||||||
|
|
||||||
Default::default()
|
Default::default()
|
||||||
}
|
}
|
||||||
fn get_common_prefix(paths: &[DroppedFile]) -> String {
|
|
||||||
if paths.is_empty() {
|
|
||||||
return String::new();
|
|
||||||
} else if paths.len() == 1 {
|
|
||||||
let full_name = paths[0].file_path();
|
|
||||||
let path = Path::new(&full_name)
|
|
||||||
.file_name()
|
|
||||||
.unwrap_or_default()
|
|
||||||
.to_str()
|
|
||||||
.unwrap_or_default();
|
|
||||||
return full_name.strip_suffix(&path).unwrap_or_default().to_owned();
|
|
||||||
}
|
|
||||||
let mut prefix = paths[0].file_path();
|
|
||||||
|
|
||||||
for s in paths.iter().skip(1) {
|
|
||||||
let s = s.file_path();
|
|
||||||
while !s.starts_with(&prefix) {
|
|
||||||
prefix.pop(); // Remove the last character of the prefix
|
|
||||||
if prefix.is_empty() {
|
|
||||||
return String::new();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
prefix
|
|
||||||
}
|
|
||||||
pub fn image_from_dropped_file<P>(file: &DroppedFile, prefix: P) -> Option<(String, ImageFile)>
|
|
||||||
where
|
|
||||||
P: AsRef<str>,
|
|
||||||
{
|
|
||||||
let path = file.file_path();
|
|
||||||
let base_id = path.replace(".png", "");
|
|
||||||
|
|
||||||
let id = base_id
|
|
||||||
.strip_prefix(prefix.as_ref())
|
|
||||||
.unwrap_or(&base_id)
|
|
||||||
.to_owned()
|
|
||||||
.replace("\\", "/");
|
|
||||||
|
|
||||||
let image: DynamicImage = dynamic_image_from_file(file)?;
|
|
||||||
Some((path, ImageFile { id, image }))
|
|
||||||
}
|
|
||||||
|
|
||||||
fn build_atlas(&mut self, ctx: &egui::Context) {
|
fn build_atlas(&mut self, ctx: &egui::Context) {
|
||||||
self.data = None;
|
self.data = None;
|
||||||
|
|
@ -232,7 +193,7 @@ impl TemplateApp {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
impl eframe::App for TemplateApp {
|
impl eframe::App for Application {
|
||||||
/// Called by the frame work to save state before shutdown.
|
/// Called by the frame work to save state before shutdown.
|
||||||
fn save(&mut self, storage: &mut dyn eframe::Storage) {
|
fn save(&mut self, storage: &mut dyn eframe::Storage) {
|
||||||
eframe::set_value(storage, eframe::APP_KEY, self);
|
eframe::set_value(storage, eframe::APP_KEY, self);
|
||||||
|
|
@ -273,6 +234,10 @@ impl eframe::App for TemplateApp {
|
||||||
.min_width(200.0)
|
.min_width(200.0)
|
||||||
.frame(egui::Frame::canvas(&ctx.style()))
|
.frame(egui::Frame::canvas(&ctx.style()))
|
||||||
.show_animated(ctx, !self.image_data.is_empty(), |ui| {
|
.show_animated(ctx, !self.image_data.is_empty(), |ui| {
|
||||||
|
|
||||||
|
egui::ScrollArea::vertical()
|
||||||
|
.id_salt("leftPanel_scroll")
|
||||||
|
.show(ui, |ui| {
|
||||||
CollapsingHeader::new("Settings")
|
CollapsingHeader::new("Settings")
|
||||||
.default_open(true)
|
.default_open(true)
|
||||||
.show(ui, |ui| {
|
.show(ui, |ui| {
|
||||||
|
|
@ -350,6 +315,7 @@ impl eframe::App for TemplateApp {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
});
|
||||||
});
|
});
|
||||||
egui::CentralPanel::default().show(ctx, |ui| {
|
egui::CentralPanel::default().show(ctx, |ui| {
|
||||||
egui::ScrollArea::vertical()
|
egui::ScrollArea::vertical()
|
||||||
|
|
@ -415,8 +381,10 @@ impl eframe::App for TemplateApp {
|
||||||
.add(egui::Button::new("Copy JSON to Clipboard"))
|
.add(egui::Button::new("Copy JSON to Clipboard"))
|
||||||
.clicked()
|
.clicked()
|
||||||
{
|
{
|
||||||
|
let s = data.atlas_asset_json.to_string();
|
||||||
|
println!("JSON: {s}");
|
||||||
ui.output_mut(|o| {
|
ui.output_mut(|o| {
|
||||||
o.copied_text = data.atlas_asset_json.to_string()
|
o.copied_text = s;
|
||||||
});
|
});
|
||||||
};
|
};
|
||||||
ui.add_space(10.0);
|
ui.add_space(10.0);
|
||||||
|
|
@ -442,49 +410,6 @@ impl eframe::App for TemplateApp {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
trait FilePath {
|
|
||||||
fn file_path(&self) -> String;
|
|
||||||
}
|
|
||||||
|
|
||||||
impl FilePath for DroppedFile {
|
|
||||||
fn file_path(&self) -> String {
|
|
||||||
let id;
|
|
||||||
#[cfg(not(target_arch = "wasm32"))]
|
|
||||||
{
|
|
||||||
let path = self.path.as_ref().unwrap().clone();
|
|
||||||
id = path.to_str().unwrap().to_owned();
|
|
||||||
}
|
|
||||||
#[cfg(target_arch = "wasm32")]
|
|
||||||
{
|
|
||||||
id = self.name.clone();
|
|
||||||
}
|
|
||||||
id.replace(".png", "")
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
fn dynamic_image_from_file(file: &DroppedFile) -> Option<DynamicImage> {
|
|
||||||
#[cfg(target_arch = "wasm32")]
|
|
||||||
{
|
|
||||||
let bytes = file.bytes.as_ref().clone()?;
|
|
||||||
|
|
||||||
if let Ok(r) = ImageImporter::import_from_memory(bytes) {
|
|
||||||
Some(r.into())
|
|
||||||
} else {
|
|
||||||
None
|
|
||||||
}
|
|
||||||
}
|
|
||||||
#[cfg(not(target_arch = "wasm32"))]
|
|
||||||
{
|
|
||||||
let path = file.path.as_ref()?;
|
|
||||||
|
|
||||||
if let Ok(r) = ImageImporter::import_from_file(path) {
|
|
||||||
Some(r)
|
|
||||||
} else {
|
|
||||||
None
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
fn powered_by_egui_and_eframe(ui: &mut egui::Ui) {
|
fn powered_by_egui_and_eframe(ui: &mut egui::Ui) {
|
||||||
ui.horizontal(|ui| {
|
ui.horizontal(|ui| {
|
||||||
ui.hyperlink_to(format!("Build: {}", GIT_HASH), env!("CARGO_PKG_HOMEPAGE"));
|
ui.hyperlink_to(format!("Build: {}", GIT_HASH), env!("CARGO_PKG_HOMEPAGE"));
|
||||||
|
|
|
||||||
|
|
@ -0,0 +1,91 @@
|
||||||
|
use std::path::Path;
|
||||||
|
|
||||||
|
use egui::DroppedFile;
|
||||||
|
use image::DynamicImage;
|
||||||
|
use rpack_cli::ImageFile;
|
||||||
|
use texture_packer::importer::ImageImporter;
|
||||||
|
|
||||||
|
pub fn get_common_prefix(paths: &[DroppedFile]) -> String {
|
||||||
|
if paths.is_empty() {
|
||||||
|
return String::new();
|
||||||
|
}
|
||||||
|
let full_name = paths[0].file_path();
|
||||||
|
let path = Path::new(&full_name)
|
||||||
|
.file_name()
|
||||||
|
.unwrap_or_default()
|
||||||
|
.to_str()
|
||||||
|
.unwrap_or_default();
|
||||||
|
|
||||||
|
let mut prefix = full_name.strip_suffix(&path).unwrap_or_default().to_owned();
|
||||||
|
|
||||||
|
for s in paths.iter().skip(1) {
|
||||||
|
let s = s.file_path();
|
||||||
|
while !(s.starts_with(&prefix) || prefix.is_empty()) {
|
||||||
|
prefix.pop();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
prefix
|
||||||
|
}
|
||||||
|
|
||||||
|
pub trait DroppedFileHelper {
|
||||||
|
fn file_path(&self) -> String;
|
||||||
|
fn create_image<P>(&self, prefix: P) -> Option<(String, ImageFile)>
|
||||||
|
where
|
||||||
|
P: AsRef<str>;
|
||||||
|
fn dynamic_image(&self) -> Option<DynamicImage>;
|
||||||
|
}
|
||||||
|
|
||||||
|
impl DroppedFileHelper for DroppedFile {
|
||||||
|
fn file_path(&self) -> String {
|
||||||
|
let id;
|
||||||
|
#[cfg(not(target_arch = "wasm32"))]
|
||||||
|
{
|
||||||
|
let path = self.path.as_ref().unwrap().clone();
|
||||||
|
id = path.to_str().unwrap().to_owned();
|
||||||
|
}
|
||||||
|
#[cfg(target_arch = "wasm32")]
|
||||||
|
{
|
||||||
|
id = self.name.clone();
|
||||||
|
}
|
||||||
|
id.replace(".png", "").replace("\\", "/")
|
||||||
|
}
|
||||||
|
fn create_image<P>(&self, prefix: P) -> Option<(String, ImageFile)>
|
||||||
|
where
|
||||||
|
P: AsRef<str>,
|
||||||
|
{
|
||||||
|
let path = self.file_path();
|
||||||
|
let base_id = path.replace(".png", "");
|
||||||
|
|
||||||
|
let id = base_id
|
||||||
|
.strip_prefix(prefix.as_ref())
|
||||||
|
.unwrap_or(&base_id)
|
||||||
|
.to_owned();
|
||||||
|
|
||||||
|
let image: DynamicImage = self.dynamic_image()?;
|
||||||
|
Some((path, ImageFile { id, image }))
|
||||||
|
}
|
||||||
|
|
||||||
|
fn dynamic_image(&self) -> Option<DynamicImage> {
|
||||||
|
#[cfg(target_arch = "wasm32")]
|
||||||
|
{
|
||||||
|
let bytes = self.bytes.as_ref().clone()?;
|
||||||
|
|
||||||
|
if let Ok(r) = ImageImporter::import_from_memory(bytes) {
|
||||||
|
Some(r.into())
|
||||||
|
} else {
|
||||||
|
None
|
||||||
|
}
|
||||||
|
}
|
||||||
|
#[cfg(not(target_arch = "wasm32"))]
|
||||||
|
{
|
||||||
|
let path = self.path.as_ref()?;
|
||||||
|
|
||||||
|
if let Ok(r) = ImageImporter::import_from_file(path) {
|
||||||
|
Some(r)
|
||||||
|
} else {
|
||||||
|
None
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
@ -2,4 +2,5 @@
|
||||||
|
|
||||||
mod app;
|
mod app;
|
||||||
mod fonts;
|
mod fonts;
|
||||||
pub use app::TemplateApp;
|
mod helpers;
|
||||||
|
pub use app::Application;
|
||||||
|
|
|
||||||
|
|
@ -15,7 +15,7 @@ fn main() -> eframe::Result<()> {
|
||||||
eframe::run_native(
|
eframe::run_native(
|
||||||
"rPack",
|
"rPack",
|
||||||
native_options,
|
native_options,
|
||||||
Box::new(|cc| Ok(Box::new(rpack::TemplateApp::new(cc)))),
|
Box::new(|cc| Ok(Box::new(rpack::Application::new(cc)))),
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -40,7 +40,7 @@ fn main() {
|
||||||
.start(
|
.start(
|
||||||
canvas,
|
canvas,
|
||||||
web_options,
|
web_options,
|
||||||
Box::new(|cc| Ok(Box::new(rpack::TemplateApp::new(cc)))),
|
Box::new(|cc| Ok(Box::new(rpack::Application::new(cc)))),
|
||||||
)
|
)
|
||||||
.await;
|
.await;
|
||||||
|
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue