From 2bbf69023bcb13f03a89ed3fb7f479863091f588 Mon Sep 17 00:00:00 2001 From: shishanyue <62888460+shishanyue@users.noreply.github.com> Date: Wed, 18 Jun 2025 22:36:13 +0800 Subject: [PATCH 01/18] add filter for load_folder --- Cargo.toml | 11 + .../chars/gabe/gabe-idle-run.png | Bin 0 -> 1997 bytes .../rpg_with_waste/chars/hat-guy/hat-guy.png | Bin 0 -> 456 bytes .../chars/mani/mani-idle-run.png | Bin 0 -> 2884 bytes .../rpg_with_waste/chars/sensei/sensei.png | Bin 0 -> 716 bytes .../chars/vendor/generic-rpg-vendor.png | Bin 0 -> 3056 bytes .../textures/rpg_with_waste/chars/waste.txt | 0 .../textures/rpg_with_waste/mobs/boss_bee.png | Bin 0 -> 1223 bytes .../textures/rpg_with_waste/mobs/fox-run.png | Bin 0 -> 1098 bytes .../rpg_with_waste/mobs/kobold-idle.png | Bin 0 -> 2526 bytes .../rpg_with_waste/mobs/slime-blue.png | Bin 0 -> 552 bytes .../rpg_with_waste/mobs/slime-green.png | Bin 0 -> 570 bytes .../rpg_with_waste/mobs/slime-orange.png | Bin 0 -> 579 bytes .../rpg_with_waste/mobs/worm-run-idle.png | Bin 0 -> 754 bytes .../props/generic-rpg-barrel01.png | Bin 0 -> 405 bytes .../props/generic-rpg-barrel02.png | Bin 0 -> 462 bytes .../props/generic-rpg-barrel03.png | Bin 0 -> 372 bytes .../props/generic-rpg-board01.png | Bin 0 -> 359 bytes .../props/generic-rpg-board02.png | Bin 0 -> 375 bytes .../props/generic-rpg-board03.png | Bin 0 -> 479 bytes .../props/generic-rpg-board04.png | Bin 0 -> 347 bytes .../props/generic-rpg-bridge.png | Bin 0 -> 1843 bytes .../props/generic-rpg-crate01.png | Bin 0 -> 436 bytes .../props/generic-rpg-crate02.png | Bin 0 -> 587 bytes .../props/generic-rpg-crate03.png | Bin 0 -> 346 bytes .../props/generic-rpg-fence-complete.png | Bin 0 -> 700 bytes .../props/generic-rpg-fence-raw01.png | Bin 0 -> 350 bytes .../props/generic-rpg-fence-raw02.png | Bin 0 -> 357 bytes .../props/generic-rpg-fence-raw03.png | Bin 0 -> 342 bytes .../props/generic-rpg-fence-raw04.png | Bin 0 -> 340 bytes .../props/generic-rpg-fence-raw05.png | Bin 0 -> 330 bytes .../props/generic-rpg-fence-raw06.png | Bin 0 -> 266 bytes .../props/generic-rpg-fence-raw07.png | Bin 0 -> 268 bytes .../props/generic-rpg-fence-raw08.png | Bin 0 -> 269 bytes .../props/generic-rpg-fence-raw09.png | Bin 0 -> 336 bytes .../props/generic-rpg-fence-raw10.png | Bin 0 -> 340 bytes .../props/generic-rpg-fence-raw11.png | Bin 0 -> 271 bytes .../props/generic-rpg-fence-raw12.png | Bin 0 -> 278 bytes .../props/generic-rpg-fence-raw13.png | Bin 0 -> 268 bytes .../props/generic-rpg-fence-raw14.png | Bin 0 -> 312 bytes .../props/generic-rpg-fence-raw15.png | Bin 0 -> 344 bytes .../props/generic-rpg-fence-raw16.png | Bin 0 -> 335 bytes .../props/generic-rpg-fence-raw17.png | Bin 0 -> 443 bytes .../props/generic-rpg-fence-raw18.png | Bin 0 -> 367 bytes .../props/generic-rpg-fence-raw19.png | Bin 0 -> 308 bytes .../props/generic-rpg-fence-raw20.png | Bin 0 -> 291 bytes .../props/generic-rpg-fence-raw21.png | Bin 0 -> 366 bytes .../props/generic-rpg-fence-raw22.png | Bin 0 -> 329 bytes .../props/generic-rpg-fence-raw23.png | Bin 0 -> 339 bytes .../props/generic-rpg-fence-raw24.png | Bin 0 -> 394 bytes .../props/generic-rpg-fence-raw25.png | Bin 0 -> 383 bytes .../props/generic-rpg-fence01.png | Bin 0 -> 228 bytes .../props/generic-rpg-fence02.png | Bin 0 -> 201 bytes .../props/generic-rpg-fence03.png | Bin 0 -> 228 bytes .../props/generic-rpg-fence04.png | Bin 0 -> 207 bytes .../props/generic-rpg-fence05.png | Bin 0 -> 241 bytes .../props/generic-rpg-fence06.png | Bin 0 -> 147 bytes .../props/generic-rpg-fence07.png | Bin 0 -> 129 bytes .../props/generic-rpg-fence08.png | Bin 0 -> 267 bytes .../props/generic-rpg-fence09.png | Bin 0 -> 201 bytes .../props/generic-rpg-fence10.png | Bin 0 -> 183 bytes .../props/generic-rpg-fence11.png | Bin 0 -> 216 bytes .../props/generic-rpg-fence12.png | Bin 0 -> 234 bytes .../props/generic-rpg-fence13.png | Bin 0 -> 137 bytes .../props/generic-rpg-fence14.png | Bin 0 -> 159 bytes .../props/generic-rpg-fish01.png | Bin 0 -> 121 bytes .../props/generic-rpg-fish02.png | Bin 0 -> 102 bytes .../props/generic-rpg-fish03.png | Bin 0 -> 114 bytes .../props/generic-rpg-fish04.png | Bin 0 -> 109 bytes .../props/generic-rpg-flower01.png | Bin 0 -> 194 bytes .../props/generic-rpg-flower02.png | Bin 0 -> 201 bytes .../props/generic-rpg-flower03.png | Bin 0 -> 199 bytes .../props/generic-rpg-flowers.png | Bin 0 -> 715 bytes .../props/generic-rpg-grass01.png | Bin 0 -> 132 bytes .../props/generic-rpg-grass02.png | Bin 0 -> 156 bytes .../props/generic-rpg-house-inn.png | Bin 0 -> 2851 bytes .../props/generic-rpg-loot01.png | Bin 0 -> 250 bytes .../props/generic-rpg-loot02.png | Bin 0 -> 183 bytes .../props/generic-rpg-loot03.png | Bin 0 -> 293 bytes .../props/generic-rpg-loot04.png | Bin 0 -> 286 bytes .../props/generic-rpg-loot05.png | Bin 0 -> 291 bytes .../props/generic-rpg-mini-lake.png | Bin 0 -> 1016 bytes .../props/generic-rpg-rock01.png | Bin 0 -> 272 bytes .../props/generic-rpg-rock02.png | Bin 0 -> 387 bytes .../props/generic-rpg-rock03.png | Bin 0 -> 388 bytes .../props/generic-rpg-rock04.png | Bin 0 -> 476 bytes .../props/generic-rpg-rock05.png | Bin 0 -> 391 bytes .../props/generic-rpg-rock06.png | Bin 0 -> 483 bytes .../rpg_with_waste/props/generic-rpg-rod.png | Bin 0 -> 469 bytes .../props/generic-rpg-trasure-open.png | Bin 0 -> 634 bytes .../props/generic-rpg-treasure-closed.png | Bin 0 -> 576 bytes .../props/generic-rpg-tree01.png | Bin 0 -> 2735 bytes .../props/generic-rpg-tree02.png | Bin 0 -> 2880 bytes .../tiles/generic-rpg-Slice.png | Bin 0 -> 86 bytes .../tiles/generic-rpg-tile-waterfall01.png | Bin 0 -> 129 bytes .../tiles/generic-rpg-tile-waterfall02.png | Bin 0 -> 192 bytes .../tiles/generic-rpg-tile-waterfall03.png | Bin 0 -> 179 bytes .../tiles/generic-rpg-tile-waterfall04.png | Bin 0 -> 245 bytes .../tiles/generic-rpg-tile-waterfall05.png | Bin 0 -> 370 bytes .../tiles/generic-rpg-tile-waterfall06.png | Bin 0 -> 388 bytes .../tiles/generic-rpg-tile-waterfall07.png | Bin 0 -> 374 bytes .../tiles/generic-rpg-tile01.png | Bin 0 -> 133 bytes .../tiles/generic-rpg-tile02.png | Bin 0 -> 249 bytes .../tiles/generic-rpg-tile03.png | Bin 0 -> 146 bytes .../tiles/generic-rpg-tile04.png | Bin 0 -> 242 bytes .../tiles/generic-rpg-tile05.png | Bin 0 -> 120 bytes .../tiles/generic-rpg-tile06.png | Bin 0 -> 246 bytes .../tiles/generic-rpg-tile07.png | Bin 0 -> 151 bytes .../tiles/generic-rpg-tile08.png | Bin 0 -> 245 bytes .../tiles/generic-rpg-tile09.png | Bin 0 -> 171 bytes .../tiles/generic-rpg-tile10.png | Bin 0 -> 264 bytes .../tiles/generic-rpg-tile11.png | Bin 0 -> 119 bytes .../tiles/generic-rpg-tile12.png | Bin 0 -> 227 bytes .../tiles/generic-rpg-tile13.png | Bin 0 -> 128 bytes .../tiles/generic-rpg-tile14.png | Bin 0 -> 209 bytes .../tiles/generic-rpg-tile15.png | Bin 0 -> 140 bytes .../tiles/generic-rpg-tile16.png | Bin 0 -> 280 bytes .../tiles/generic-rpg-tile17.png | Bin 0 -> 124 bytes .../tiles/generic-rpg-tile18.png | Bin 0 -> 120 bytes .../tiles/generic-rpg-tile19.png | Bin 0 -> 283 bytes .../tiles/generic-rpg-tile20.png | Bin 0 -> 135 bytes .../tiles/generic-rpg-tile21.png | Bin 0 -> 237 bytes .../tiles/generic-rpg-tile22.png | Bin 0 -> 114 bytes .../tiles/generic-rpg-tile23.png | Bin 0 -> 232 bytes .../tiles/generic-rpg-tile24.png | Bin 0 -> 113 bytes .../tiles/generic-rpg-tile25.png | Bin 0 -> 237 bytes .../tiles/generic-rpg-tile26.png | Bin 0 -> 114 bytes .../tiles/generic-rpg-tile27.png | Bin 0 -> 219 bytes .../tiles/generic-rpg-tile28.png | Bin 0 -> 127 bytes .../tiles/generic-rpg-tile29.png | Bin 0 -> 214 bytes .../tiles/generic-rpg-tile30.png | Bin 0 -> 114 bytes .../tiles/generic-rpg-tile31.png | Bin 0 -> 295 bytes .../tiles/generic-rpg-tile32.png | Bin 0 -> 150 bytes .../tiles/generic-rpg-tile33.png | Bin 0 -> 290 bytes .../tiles/generic-rpg-tile34.png | Bin 0 -> 143 bytes .../tiles/generic-rpg-tile35.png | Bin 0 -> 217 bytes .../tiles/generic-rpg-tile37.png | Bin 0 -> 246 bytes .../tiles/generic-rpg-tile38.png | Bin 0 -> 86 bytes .../tiles/generic-rpg-tile39.png | Bin 0 -> 278 bytes .../tiles/generic-rpg-tile40.png | Bin 0 -> 142 bytes .../tiles/generic-rpg-tile41.png | Bin 0 -> 264 bytes .../tiles/generic-rpg-tile42.png | Bin 0 -> 122 bytes .../tiles/generic-rpg-tile43.png | Bin 0 -> 272 bytes .../tiles/generic-rpg-tile44.png | Bin 0 -> 260 bytes .../tiles/generic-rpg-tile45.png | Bin 0 -> 274 bytes .../tiles/generic-rpg-tile46.png | Bin 0 -> 241 bytes .../tiles/generic-rpg-tile47.png | Bin 0 -> 237 bytes .../tiles/generic-rpg-tile48.png | Bin 0 -> 230 bytes .../tiles/generic-rpg-tile49.png | Bin 0 -> 217 bytes .../tiles/generic-rpg-tile50.png | Bin 0 -> 229 bytes .../tiles/generic-rpg-tile51.png | Bin 0 -> 149 bytes .../tiles/generic-rpg-tile52.png | Bin 0 -> 253 bytes .../tiles/generic-rpg-tile53.png | Bin 0 -> 204 bytes .../tiles/generic-rpg-tile54.png | Bin 0 -> 209 bytes .../tiles/generic-rpg-tile55.png | Bin 0 -> 199 bytes .../tiles/generic-rpg-tile56.png | Bin 0 -> 146 bytes .../tiles/generic-rpg-tile57.png | Bin 0 -> 316 bytes .../tiles/generic-rpg-tile58.png | Bin 0 -> 164 bytes .../tiles/generic-rpg-tile59.png | Bin 0 -> 298 bytes .../tiles/generic-rpg-tile60.png | Bin 0 -> 305 bytes .../tiles/generic-rpg-tile61.png | Bin 0 -> 298 bytes .../tiles/generic-rpg-tile62.png | Bin 0 -> 258 bytes .../tiles/generic-rpg-tile63.png | Bin 0 -> 301 bytes .../tiles/generic-rpg-tile64.png | Bin 0 -> 219 bytes .../tiles/generic-rpg-tile65.png | Bin 0 -> 183 bytes .../tiles/generic-rpg-tile66.png | Bin 0 -> 190 bytes .../tiles/generic-rpg-tile67.png | Bin 0 -> 167 bytes .../tiles/generic-rpg-tile68.png | Bin 0 -> 150 bytes .../tiles/generic-rpg-tile69.png | Bin 0 -> 214 bytes .../tiles/generic-rpg-tile70.png | Bin 0 -> 86 bytes .../tiles/generic-rpg-tile71.png | Bin 0 -> 86 bytes .../ui/generic-rpg-ui-inventario.png | Bin 0 -> 3468 bytes .../ui/generic-rpg-ui-inventario01.png | Bin 0 -> 121 bytes .../ui/generic-rpg-ui-inventario02.png | Bin 0 -> 105 bytes .../ui/generic-rpg-ui-inventario03.png | Bin 0 -> 102 bytes .../ui/generic-rpg-ui-inventario04.png | Bin 0 -> 171 bytes .../ui/generic-rpg-ui-text-box.png | Bin 0 -> 372 bytes assets/textures/rpg_with_waste/waste.txt | 0 crates/bevy_asset/src/folder.rs | 5 +- crates/bevy_asset/src/lib.rs | 2 +- crates/bevy_asset/src/server/mod.rs | 35 ++- examples/2d/texture_atlas.rs | 2 +- examples/asset/asset_loading.rs | 2 +- examples/asset/folder_filter.rs | 296 ++++++++++++++++++ 184 files changed, 342 insertions(+), 11 deletions(-) create mode 100644 assets/textures/rpg_with_waste/chars/gabe/gabe-idle-run.png create mode 100644 assets/textures/rpg_with_waste/chars/hat-guy/hat-guy.png create mode 100644 assets/textures/rpg_with_waste/chars/mani/mani-idle-run.png create mode 100644 assets/textures/rpg_with_waste/chars/sensei/sensei.png create mode 100644 assets/textures/rpg_with_waste/chars/vendor/generic-rpg-vendor.png create mode 100644 assets/textures/rpg_with_waste/chars/waste.txt create mode 100644 assets/textures/rpg_with_waste/mobs/boss_bee.png create mode 100644 assets/textures/rpg_with_waste/mobs/fox-run.png create mode 100644 assets/textures/rpg_with_waste/mobs/kobold-idle.png create mode 100644 assets/textures/rpg_with_waste/mobs/slime-blue.png create mode 100644 assets/textures/rpg_with_waste/mobs/slime-green.png create mode 100644 assets/textures/rpg_with_waste/mobs/slime-orange.png create mode 100644 assets/textures/rpg_with_waste/mobs/worm-run-idle.png create mode 100644 assets/textures/rpg_with_waste/props/generic-rpg-barrel01.png create mode 100644 assets/textures/rpg_with_waste/props/generic-rpg-barrel02.png create mode 100644 assets/textures/rpg_with_waste/props/generic-rpg-barrel03.png create mode 100644 assets/textures/rpg_with_waste/props/generic-rpg-board01.png create mode 100644 assets/textures/rpg_with_waste/props/generic-rpg-board02.png create mode 100644 assets/textures/rpg_with_waste/props/generic-rpg-board03.png create mode 100644 assets/textures/rpg_with_waste/props/generic-rpg-board04.png create mode 100644 assets/textures/rpg_with_waste/props/generic-rpg-bridge.png create mode 100644 assets/textures/rpg_with_waste/props/generic-rpg-crate01.png create mode 100644 assets/textures/rpg_with_waste/props/generic-rpg-crate02.png create mode 100644 assets/textures/rpg_with_waste/props/generic-rpg-crate03.png create mode 100644 assets/textures/rpg_with_waste/props/generic-rpg-fence-complete.png create mode 100644 assets/textures/rpg_with_waste/props/generic-rpg-fence-raw01.png create mode 100644 assets/textures/rpg_with_waste/props/generic-rpg-fence-raw02.png create mode 100644 assets/textures/rpg_with_waste/props/generic-rpg-fence-raw03.png create mode 100644 assets/textures/rpg_with_waste/props/generic-rpg-fence-raw04.png create mode 100644 assets/textures/rpg_with_waste/props/generic-rpg-fence-raw05.png create mode 100644 assets/textures/rpg_with_waste/props/generic-rpg-fence-raw06.png create mode 100644 assets/textures/rpg_with_waste/props/generic-rpg-fence-raw07.png create mode 100644 assets/textures/rpg_with_waste/props/generic-rpg-fence-raw08.png create mode 100644 assets/textures/rpg_with_waste/props/generic-rpg-fence-raw09.png create mode 100644 assets/textures/rpg_with_waste/props/generic-rpg-fence-raw10.png create mode 100644 assets/textures/rpg_with_waste/props/generic-rpg-fence-raw11.png create mode 100644 assets/textures/rpg_with_waste/props/generic-rpg-fence-raw12.png create mode 100644 assets/textures/rpg_with_waste/props/generic-rpg-fence-raw13.png create mode 100644 assets/textures/rpg_with_waste/props/generic-rpg-fence-raw14.png create mode 100644 assets/textures/rpg_with_waste/props/generic-rpg-fence-raw15.png create mode 100644 assets/textures/rpg_with_waste/props/generic-rpg-fence-raw16.png create mode 100644 assets/textures/rpg_with_waste/props/generic-rpg-fence-raw17.png create mode 100644 assets/textures/rpg_with_waste/props/generic-rpg-fence-raw18.png create mode 100644 assets/textures/rpg_with_waste/props/generic-rpg-fence-raw19.png create mode 100644 assets/textures/rpg_with_waste/props/generic-rpg-fence-raw20.png create mode 100644 assets/textures/rpg_with_waste/props/generic-rpg-fence-raw21.png create mode 100644 assets/textures/rpg_with_waste/props/generic-rpg-fence-raw22.png create mode 100644 assets/textures/rpg_with_waste/props/generic-rpg-fence-raw23.png create mode 100644 assets/textures/rpg_with_waste/props/generic-rpg-fence-raw24.png create mode 100644 assets/textures/rpg_with_waste/props/generic-rpg-fence-raw25.png create mode 100644 assets/textures/rpg_with_waste/props/generic-rpg-fence01.png create mode 100644 assets/textures/rpg_with_waste/props/generic-rpg-fence02.png create mode 100644 assets/textures/rpg_with_waste/props/generic-rpg-fence03.png create mode 100644 assets/textures/rpg_with_waste/props/generic-rpg-fence04.png create mode 100644 assets/textures/rpg_with_waste/props/generic-rpg-fence05.png create mode 100644 assets/textures/rpg_with_waste/props/generic-rpg-fence06.png create mode 100644 assets/textures/rpg_with_waste/props/generic-rpg-fence07.png create mode 100644 assets/textures/rpg_with_waste/props/generic-rpg-fence08.png create mode 100644 assets/textures/rpg_with_waste/props/generic-rpg-fence09.png create mode 100644 assets/textures/rpg_with_waste/props/generic-rpg-fence10.png create mode 100644 assets/textures/rpg_with_waste/props/generic-rpg-fence11.png create mode 100644 assets/textures/rpg_with_waste/props/generic-rpg-fence12.png create mode 100644 assets/textures/rpg_with_waste/props/generic-rpg-fence13.png create mode 100644 assets/textures/rpg_with_waste/props/generic-rpg-fence14.png create mode 100644 assets/textures/rpg_with_waste/props/generic-rpg-fish01.png create mode 100644 assets/textures/rpg_with_waste/props/generic-rpg-fish02.png create mode 100644 assets/textures/rpg_with_waste/props/generic-rpg-fish03.png create mode 100644 assets/textures/rpg_with_waste/props/generic-rpg-fish04.png create mode 100644 assets/textures/rpg_with_waste/props/generic-rpg-flower01.png create mode 100644 assets/textures/rpg_with_waste/props/generic-rpg-flower02.png create mode 100644 assets/textures/rpg_with_waste/props/generic-rpg-flower03.png create mode 100644 assets/textures/rpg_with_waste/props/generic-rpg-flowers.png create mode 100644 assets/textures/rpg_with_waste/props/generic-rpg-grass01.png create mode 100644 assets/textures/rpg_with_waste/props/generic-rpg-grass02.png create mode 100644 assets/textures/rpg_with_waste/props/generic-rpg-house-inn.png create mode 100644 assets/textures/rpg_with_waste/props/generic-rpg-loot01.png create mode 100644 assets/textures/rpg_with_waste/props/generic-rpg-loot02.png create mode 100644 assets/textures/rpg_with_waste/props/generic-rpg-loot03.png create mode 100644 assets/textures/rpg_with_waste/props/generic-rpg-loot04.png create mode 100644 assets/textures/rpg_with_waste/props/generic-rpg-loot05.png create mode 100644 assets/textures/rpg_with_waste/props/generic-rpg-mini-lake.png create mode 100644 assets/textures/rpg_with_waste/props/generic-rpg-rock01.png create mode 100644 assets/textures/rpg_with_waste/props/generic-rpg-rock02.png create mode 100644 assets/textures/rpg_with_waste/props/generic-rpg-rock03.png create mode 100644 assets/textures/rpg_with_waste/props/generic-rpg-rock04.png create mode 100644 assets/textures/rpg_with_waste/props/generic-rpg-rock05.png create mode 100644 assets/textures/rpg_with_waste/props/generic-rpg-rock06.png create mode 100644 assets/textures/rpg_with_waste/props/generic-rpg-rod.png create mode 100644 assets/textures/rpg_with_waste/props/generic-rpg-trasure-open.png create mode 100644 assets/textures/rpg_with_waste/props/generic-rpg-treasure-closed.png create mode 100644 assets/textures/rpg_with_waste/props/generic-rpg-tree01.png create mode 100644 assets/textures/rpg_with_waste/props/generic-rpg-tree02.png create mode 100644 assets/textures/rpg_with_waste/tiles/generic-rpg-Slice.png create mode 100644 assets/textures/rpg_with_waste/tiles/generic-rpg-tile-waterfall01.png create mode 100644 assets/textures/rpg_with_waste/tiles/generic-rpg-tile-waterfall02.png create mode 100644 assets/textures/rpg_with_waste/tiles/generic-rpg-tile-waterfall03.png create mode 100644 assets/textures/rpg_with_waste/tiles/generic-rpg-tile-waterfall04.png create mode 100644 assets/textures/rpg_with_waste/tiles/generic-rpg-tile-waterfall05.png create mode 100644 assets/textures/rpg_with_waste/tiles/generic-rpg-tile-waterfall06.png create mode 100644 assets/textures/rpg_with_waste/tiles/generic-rpg-tile-waterfall07.png create mode 100644 assets/textures/rpg_with_waste/tiles/generic-rpg-tile01.png create mode 100644 assets/textures/rpg_with_waste/tiles/generic-rpg-tile02.png create mode 100644 assets/textures/rpg_with_waste/tiles/generic-rpg-tile03.png create mode 100644 assets/textures/rpg_with_waste/tiles/generic-rpg-tile04.png create mode 100644 assets/textures/rpg_with_waste/tiles/generic-rpg-tile05.png create mode 100644 assets/textures/rpg_with_waste/tiles/generic-rpg-tile06.png create mode 100644 assets/textures/rpg_with_waste/tiles/generic-rpg-tile07.png create mode 100644 assets/textures/rpg_with_waste/tiles/generic-rpg-tile08.png create mode 100644 assets/textures/rpg_with_waste/tiles/generic-rpg-tile09.png create mode 100644 assets/textures/rpg_with_waste/tiles/generic-rpg-tile10.png create mode 100644 assets/textures/rpg_with_waste/tiles/generic-rpg-tile11.png create mode 100644 assets/textures/rpg_with_waste/tiles/generic-rpg-tile12.png create mode 100644 assets/textures/rpg_with_waste/tiles/generic-rpg-tile13.png create mode 100644 assets/textures/rpg_with_waste/tiles/generic-rpg-tile14.png create mode 100644 assets/textures/rpg_with_waste/tiles/generic-rpg-tile15.png create mode 100644 assets/textures/rpg_with_waste/tiles/generic-rpg-tile16.png create mode 100644 assets/textures/rpg_with_waste/tiles/generic-rpg-tile17.png create mode 100644 assets/textures/rpg_with_waste/tiles/generic-rpg-tile18.png create mode 100644 assets/textures/rpg_with_waste/tiles/generic-rpg-tile19.png create mode 100644 assets/textures/rpg_with_waste/tiles/generic-rpg-tile20.png create mode 100644 assets/textures/rpg_with_waste/tiles/generic-rpg-tile21.png create mode 100644 assets/textures/rpg_with_waste/tiles/generic-rpg-tile22.png create mode 100644 assets/textures/rpg_with_waste/tiles/generic-rpg-tile23.png create mode 100644 assets/textures/rpg_with_waste/tiles/generic-rpg-tile24.png create mode 100644 assets/textures/rpg_with_waste/tiles/generic-rpg-tile25.png create mode 100644 assets/textures/rpg_with_waste/tiles/generic-rpg-tile26.png create mode 100644 assets/textures/rpg_with_waste/tiles/generic-rpg-tile27.png create mode 100644 assets/textures/rpg_with_waste/tiles/generic-rpg-tile28.png create mode 100644 assets/textures/rpg_with_waste/tiles/generic-rpg-tile29.png create mode 100644 assets/textures/rpg_with_waste/tiles/generic-rpg-tile30.png create mode 100644 assets/textures/rpg_with_waste/tiles/generic-rpg-tile31.png create mode 100644 assets/textures/rpg_with_waste/tiles/generic-rpg-tile32.png create mode 100644 assets/textures/rpg_with_waste/tiles/generic-rpg-tile33.png create mode 100644 assets/textures/rpg_with_waste/tiles/generic-rpg-tile34.png create mode 100644 assets/textures/rpg_with_waste/tiles/generic-rpg-tile35.png create mode 100644 assets/textures/rpg_with_waste/tiles/generic-rpg-tile37.png create mode 100644 assets/textures/rpg_with_waste/tiles/generic-rpg-tile38.png create mode 100644 assets/textures/rpg_with_waste/tiles/generic-rpg-tile39.png create mode 100644 assets/textures/rpg_with_waste/tiles/generic-rpg-tile40.png create mode 100644 assets/textures/rpg_with_waste/tiles/generic-rpg-tile41.png create mode 100644 assets/textures/rpg_with_waste/tiles/generic-rpg-tile42.png create mode 100644 assets/textures/rpg_with_waste/tiles/generic-rpg-tile43.png create mode 100644 assets/textures/rpg_with_waste/tiles/generic-rpg-tile44.png create mode 100644 assets/textures/rpg_with_waste/tiles/generic-rpg-tile45.png create mode 100644 assets/textures/rpg_with_waste/tiles/generic-rpg-tile46.png create mode 100644 assets/textures/rpg_with_waste/tiles/generic-rpg-tile47.png create mode 100644 assets/textures/rpg_with_waste/tiles/generic-rpg-tile48.png create mode 100644 assets/textures/rpg_with_waste/tiles/generic-rpg-tile49.png create mode 100644 assets/textures/rpg_with_waste/tiles/generic-rpg-tile50.png create mode 100644 assets/textures/rpg_with_waste/tiles/generic-rpg-tile51.png create mode 100644 assets/textures/rpg_with_waste/tiles/generic-rpg-tile52.png create mode 100644 assets/textures/rpg_with_waste/tiles/generic-rpg-tile53.png create mode 100644 assets/textures/rpg_with_waste/tiles/generic-rpg-tile54.png create mode 100644 assets/textures/rpg_with_waste/tiles/generic-rpg-tile55.png create mode 100644 assets/textures/rpg_with_waste/tiles/generic-rpg-tile56.png create mode 100644 assets/textures/rpg_with_waste/tiles/generic-rpg-tile57.png create mode 100644 assets/textures/rpg_with_waste/tiles/generic-rpg-tile58.png create mode 100644 assets/textures/rpg_with_waste/tiles/generic-rpg-tile59.png create mode 100644 assets/textures/rpg_with_waste/tiles/generic-rpg-tile60.png create mode 100644 assets/textures/rpg_with_waste/tiles/generic-rpg-tile61.png create mode 100644 assets/textures/rpg_with_waste/tiles/generic-rpg-tile62.png create mode 100644 assets/textures/rpg_with_waste/tiles/generic-rpg-tile63.png create mode 100644 assets/textures/rpg_with_waste/tiles/generic-rpg-tile64.png create mode 100644 assets/textures/rpg_with_waste/tiles/generic-rpg-tile65.png create mode 100644 assets/textures/rpg_with_waste/tiles/generic-rpg-tile66.png create mode 100644 assets/textures/rpg_with_waste/tiles/generic-rpg-tile67.png create mode 100644 assets/textures/rpg_with_waste/tiles/generic-rpg-tile68.png create mode 100644 assets/textures/rpg_with_waste/tiles/generic-rpg-tile69.png create mode 100644 assets/textures/rpg_with_waste/tiles/generic-rpg-tile70.png create mode 100644 assets/textures/rpg_with_waste/tiles/generic-rpg-tile71.png create mode 100644 assets/textures/rpg_with_waste/ui/generic-rpg-ui-inventario.png create mode 100644 assets/textures/rpg_with_waste/ui/generic-rpg-ui-inventario01.png create mode 100644 assets/textures/rpg_with_waste/ui/generic-rpg-ui-inventario02.png create mode 100644 assets/textures/rpg_with_waste/ui/generic-rpg-ui-inventario03.png create mode 100644 assets/textures/rpg_with_waste/ui/generic-rpg-ui-inventario04.png create mode 100644 assets/textures/rpg_with_waste/ui/generic-rpg-ui-text-box.png create mode 100644 assets/textures/rpg_with_waste/waste.txt create mode 100644 examples/asset/folder_filter.rs diff --git a/Cargo.toml b/Cargo.toml index ed2b369f5fe77..be7ae76c1d2de 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -1781,6 +1781,17 @@ description = "Demonstrates various methods to load assets" category = "Assets" wasm = false +[[example]] +name = "folder_filter" +path = "examples/asset/folder_filter.rs" +doc-scrape-examples = true + +[package.metadata.example.folder_filter] +name = "Folder Filter" +description = "Load Folder With Filter" +category = "Assets" +wasm = false + [[example]] name = "asset_settings" path = "examples/asset/asset_settings.rs" diff --git a/assets/textures/rpg_with_waste/chars/gabe/gabe-idle-run.png b/assets/textures/rpg_with_waste/chars/gabe/gabe-idle-run.png new file mode 100644 index 0000000000000000000000000000000000000000..c8f57e34cf8c2a246e7027db5b106e0f76dbca52 GIT binary patch literal 1997 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 literal 0 HcmV?d00001 diff --git a/assets/textures/rpg_with_waste/mobs/fox-run.png b/assets/textures/rpg_with_waste/mobs/fox-run.png new file mode 100644 index 0000000000000000000000000000000000000000..822f0c73dd662bfe72541944b5bf867515dd6a92 GIT binary patch literal 1098 zcmV-Q1hxB#P)rj0`Ws={vtW-<|GBmnyB_4-C4q?t9;T-~au;C$Ly7 z7K_DVu~;k?i^XEGSS*$iIMYsGTHIZ^r{wdyH?JJIe)s0pm95D*d^PO^rbWMdNW(t{ z0x|WwhvDZU;@@4lr{u55xL+Dqdbcf>E6Q_90MyEJH2h;+)u-)uCa#Obu9fG2K(M8S z+o=w>v9=uwZ0AFZTiw4hb4YT~EccZ7zwZ4|XwR<|8SKBpV!5IKyl-wWzd8WmEgu2! zwo2S8aIJ=aOszbJ=ag`VE*EEGZCic+tafqZuQdwf|cMlPP>JFMCz8WPW6LF3u zAXD{!32PiJEQRr0)gOu{c>QYqgwn!o-ah)s{O*9GttFM_0J>`>;i^7hCeHVrJ-Yv_ z1F&-ND9CGdzyUYuCFBy%q2V9njxIrNlEj%-|FIfkYR}VJBU0$)(@-$I{d3&r89+ox z0N?)dHT~}4rJcXAwykzPv|#xZAo7eLanr;J(A&D6IG%J@l-%T+)(j9AXLS9vxDxxx z(*_S`AJf}E598(8B%?;VBgK&$d1mD2K0APUk#s`0(L@tR3Moy|k$01|WCWC7eg}{$ zKFKky(P`q;(cfRz@|+SZpH3vscrKyXH76TKppgOr{Ptrb^$=G?b0aU6FbcB9OP+O( z7M4_&ON9CEpNF5b+@$SyoW*iQ{rtzD0Bqi0zua74es>U!nNgp$^ zlOh!02>SQs+61YYiHI&e8xv=>eqwZV2&afsiWovDA~32|cq7d+Y0XS*&(hpG{)5Q< zB-@lV!t3FgVpNgzF)SiVqKI?axafi~%_B*$rh-h0=Q$^P{x1KX+1$vlBeKsharB?Un}&J)TTGHu(z7lVb+CFZ za|~x8f)N?Gst-+|c@~_pQu?G5=}=OVqSR{rBv^E)dK2q>-`N8KchE(5agaU@#5C6b23whyDGxbndF_bjt2T!D+{9oq)=3&COH#WJ}-;qiptZIPw0?B;A0Mj QBLDyZ07*qoM6N<$f|`sQ%>V!Z literal 0 HcmV?d00001 diff --git a/assets/textures/rpg_with_waste/mobs/kobold-idle.png b/assets/textures/rpg_with_waste/mobs/kobold-idle.png new file mode 100644 index 0000000000000000000000000000000000000000..516018d9e07cfa37a862d5cf4c1a197412f05147 GIT binary patch literal 2526 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 literal 0 HcmV?d00001 diff --git a/assets/textures/rpg_with_waste/mobs/slime-blue.png b/assets/textures/rpg_with_waste/mobs/slime-blue.png new file mode 100644 index 0000000000000000000000000000000000000000..f2d3d4423f24e16b296e9ed52a1fa4268333c7a3 GIT binary patch literal 552 zcmV+@0@wYCP)j6PV-@NLVn! z;&clU5<*zcLEGGw_P~p}(BE`-eeZp*Ute>8!C){L3b9W3)n#CtQPd7NcFN#ecP zuNxRuUl{Ox@?V>89x9XF+6k=k5UXrLRT%N!%+r}C8Z8gKWj;wz4>s@XA#?+}DU7Nw z42X>up4j~PhuVbZAveK;GzCIjV;+a+&wTm3`LOBpZ{Ry8U}98#`3itC8&0*aOs33+ z^Y$Dn06=e`hQP^fu>k;UCPvlYQ+>1=U097S>ZJ%8hrs&n@uIS@e-J!ztMaE0000%A_P)YRs)ENR*2vK9D*)gjyZjgX`*jArFOTCVE*gNnKdTI8>9UJ)VDf2&$ZJ!nQ@kyV zqFpa4&ErI38)W$M<;M*St1k?ApBVvfK67@jOy1d_1xw#_VkNk^&O8oF7hNoD5M=$E z=X=miA4fNZVfBRp&yBLno8MWQR+^AGyZ00?oNd7Msu(U&hyE@1k;8t6=6 zB<43Utp1=JKrMz$&Q>N^{($NuDK$Y#O=MTkkzG9( z@BKh6rWL0a3(V!y*DIzM-!WfIz*{I zN_~srYI92;le2yLU01-#+1k@~G*`omPCRJMyLld`GH||-2Y{|7IP!$?8r*zUjJQLw z%{@e&iVNr)<;g9YB=y3fe=R;2m@C(CYE_|4<8y95=E`;C8e#Os1Vo(*0FZWK5!7PJ zUr{@;NFsL^h&mP2yO#rV+2@+5e@a!zikziwrJ=2&vZA3Uou?aR>SZkdlslD3bY$TgvK{(Dfb<(IQ za*gE3TBP$1A_^jD)?#^klgZ4ku74WmR~hGh?|bvj3js75jYgx=7VF;w0IrYn?=jz-GsA!Q@o?ax2NX+jY4Ne`1+z1|&&0FE?KU31 z%%jn+O2Z>6`8u1uxPA2iqx$;+j5Bf2*vH4@cJNR`uW4({>z13;MDdmU&+_m z?e6M}{b$4i(;A|w5S!Kz7r8{B0hxpi!o$B@n66mz{2O-F-QXTDs{d2~0MK`00D!;t z0s!Ds>EDx@0WS+MZ2S0{Af6MxA3&`$Kqj>mD!4qmL9H{K`aiGlJ25{zfRp5M#EE`EWlc4;LQO@LnJ*R+hDQA z{|+sG-9xh5asl;4Njx$N?CRwE#F>%G25Q9~U8m=J8>y`OlyJp9Vvi{P{sttwEdXG5 z={12FgU$e@z;E09s$%|9G^Cp RY|a1x002ovPDHLkV1nFb7KQ)- literal 0 HcmV?d00001 diff --git a/assets/textures/rpg_with_waste/mobs/worm-run-idle.png b/assets/textures/rpg_with_waste/mobs/worm-run-idle.png new file mode 100644 index 0000000000000000000000000000000000000000..37783159d6fb57569f9304262b19b5447403cf0e GIT binary patch literal 754 zcmeAS@N?(olHy`uVBq!ia0y~yVEh1NOK>m)Nh6{7ejs%$z$e5tDWGn_w2OyN-~RLG z4;MGTh?u;pmXVWdSf#C>tBp-WSYSs_#T?eutDGtSm0bV#_wQ$5cxlM+e*(k*8w@W? z5;w*K{+`;(73=D?lYRMHhNu5o#Zrzk^nPI2`Jdtcho{PRPm@jmueALCLTO@z*uEBp z*W0=N|6u?ce!b57|K?~{Ht$5?#{Wty{}tI4k%2#xwuF+UiYCak!Dw@xS`& zXCw2#4CATkIcr-NA2$|j%@bICRO;3L$bFO5`?s1G0Ui1K(S>Vo`;P;C(dRwyskL%AAhJ%`SexCoJv|v(u!m8M=voG84I=XPW zFFrTZM{V-S6r-6w@?2$(91iXJwlnj24(P2g{`Z?j_)UX|0#BpC$^Kc@kK=8fq=P%y z+{9UKFlt_SHsgP=%;n3n@9%KTeZ2Yg^l1lf9Fn_gHOKOaio9fhRM6>FAD5UKY)kmW z5!zR0zx#Tn43poEdxh&CHH+=vGv&{shI^0CJUrX*;YQa~ws~9CyTc8SJpAER*IVhJ z<)i-pP7QO}mpx{$dnVWXxB1Kv$^4n+QORX-`?c%d@(Y)Jsrj^Tm+RfPE0%A3P#_~{ z^&nsH?w^h6S~E}_#hLa^l}q)1>c7jMOa40Y z{kU0pI#+>J=GfZUyY|y1CT^d+=eA+9VeNmVInS+6>8~w*w*BY#tzHMN-u~47VAtQ( wrAzh~x5_^9TJp#w&%FGWXOu5ElzCUyvv)>o$o;=}3>f7Mp00i_>zopr05rgai2wiq literal 0 HcmV?d00001 diff --git a/assets/textures/rpg_with_waste/props/generic-rpg-barrel01.png b/assets/textures/rpg_with_waste/props/generic-rpg-barrel01.png new file mode 100644 index 0000000000000000000000000000000000000000..6a56a788c357dc55c2b6a333e7811bd527a80285 GIT binary patch literal 405 zcmV;G0c!qAt56otR2T^u^J6s1c*K}V-n7YjnAAoK^g2%TMuE-p@@xET5mgcfz`DpZAnLTSii zM~6Ti+C}ZqAw!C!Lwst~-09xjbKW~&NF>uV5v6`iEe=#XCQG9CZHv2w;vqdK4NI6L z(=^xOTxxkx|M==9qcn)eWXS`dYlf>BAeUOAYX$%wfL1$?8mze*)L@NPJMUzebjpO4 z2XxIKeBobetYM*Vc2`- zPH8Y-%_o4W8Dtbc&Fa&>A+Q+JtnLF3d-iVp{kzW)Sd2-?UWeg*#c+Cl?9Q;u;>vK9 zt)K$oTR(H`R~pUQyM>6>^Q^TCiiYsfPS)M`2g|(A^XrgVwoPkK00000NkvXXu0mjfoZqy@ literal 0 HcmV?d00001 diff --git a/assets/textures/rpg_with_waste/props/generic-rpg-barrel02.png b/assets/textures/rpg_with_waste/props/generic-rpg-barrel02.png new file mode 100644 index 0000000000000000000000000000000000000000..8d7317cd53f34e1169ae5512bc87f52f4ac9ea18 GIT binary patch literal 462 zcmV;<0WtoGP)wr?;4ohWNbo!Jj)nW>32?zOo0v*r;S| zRC@RR+`p4p#R6+ahWF;VA1GHEB#a1W2N&Hz20vzUDK0~ zw=bpsPfy&d-;;siJ_RDAlxQW>+m-d>SK^Dy0NyKhKQOCUp!RUd-D6d_JyK7JUae$0 zQcsD8uhN&#TJPi;I-HXRcH0T=32s$LxE4Lh5T3GpUB z?M|giDZlXK9$x$u^#(puT3aE2QhtFcEqu*Z86#TX3L4Qm%~siQ9JgyE^gB#xkvIvi zAX8e5+cf}0LDTGv2mz3b`PZuTr;gIV{=o-ubaewjGOkF*)$0B?3jnp%Q>c3MZ~Ltc95r0003lNklS5dJnPxryKl6g>C@JyfWNL_Adl!J`D9La+!@&K zgt$Ao;L+`#HH&Q+y!@gC0N-CfI|T@Rz{z;AlNeZ)6orL>9_4`7`E0HmeF(IHg=eG4c-2-_z1gMd|lZrep#N@TpiG>(mJbPTlyz1AkQHVN5r0003#NklV*CM z!FV2`^YB%2uTNL)3Pe;s#6G9I;gmOw*yqpNYewud5kYavR?oPDvJ(JwdT0EF3ctq2 Vrx&pNJ23zN002ovPDHLkV1fbIr&0g_ literal 0 HcmV?d00001 diff --git a/assets/textures/rpg_with_waste/props/generic-rpg-board03.png b/assets/textures/rpg_with_waste/props/generic-rpg-board03.png new file mode 100644 index 0000000000000000000000000000000000000000..6a4685370298ae20b5dd59ea9c063e842dd32267 GIT binary patch literal 479 zcmV<50U-W~P)4QB#Kt0JNM#kQuL;B^;EGj*_yNH} zVjT#PU^8%Rn#{WA?Vb-7=H_PJ%+9`DK}6VxZV)N}=#3-ciV;~vOwg#s0D$4dOT{p` zAR?V$1CyMc7p(s~_rK_kBavfAzkTTJ3;;gff2{s~yMRs*D!sLC5Gt;2!(y4o=?Q6j zwu%#5KCmS$mU(TPb205oDLF4aBa^*Ri!~W{;lgm@p*N0%AR^R#Up@FonF%eqw)#g> z3INDu1(rn-05DhIi6k5L>WF9Y`1zGdlrxjq<_-X$f@5c)R7c$)R4yH{ep+&^x4Mho zI1)J~aS4tU{hFa{;D2jOGMsp*l)QxS0DA$B=ew2=q$#ppA(|p(+eAu`E|>yk(VAW9 zIEo^BK8$%$u&k&3a5_hzOQyq$&`hOk(AqK#08$)Y!&MyTb%AF|MsK+fT~Tw z_U+w^Cc3=2NF`IXxg{l{#KLr-=4zwnYNIe6sORe|h3P;M5!lDy=E}TlW|#X$@CV)X V2+p{?!Jz;E002ovPDHLkV1j(7*yI2J literal 0 HcmV?d00001 diff --git a/assets/textures/rpg_with_waste/props/generic-rpg-board04.png b/assets/textures/rpg_with_waste/props/generic-rpg-board04.png new file mode 100644 index 0000000000000000000000000000000000000000..1edbc13d2dbc6db5f29d56d6fc7291533d59a007 GIT binary patch literal 347 zcmV-h0i^zkP)gOmX=qAtJ4Uk%pF%H;C+Bt2>F2^ zNSc9VEM$-D?QRZyFbwmUdCbht3L=6F!;?$ijz{yUaODXivXTKHiIov&MQ9a|=2IbV zkI#90v*+xh4R_B!=m5aS`}e;Dk{AdoUf0CuS7i7$E-OL=K6Tg3E-vVaeNTJJDsXW| z2g{W*d=jgj8~}*ZexF}t*Eh*dWJUOQ2LmasJ7|u!y=;wHo(ti+#DSEo1r85FELRE@ zuQAJW>l(eUpo`nkX%f+5!gx&3yML>>r-w7Y0uj}QGUbXlT=9lcru=$!!6;KEB4|#> t+MGM6I{`pP*Un$4VF*Nv3AYtA@e2lgoPqI*MZ5q2002ovPDHLkV1j&jkyHQx literal 0 HcmV?d00001 diff --git a/assets/textures/rpg_with_waste/props/generic-rpg-bridge.png b/assets/textures/rpg_with_waste/props/generic-rpg-bridge.png new file mode 100644 index 0000000000000000000000000000000000000000..a9756774b811def7ca243a2c0631bd9ec559a4bc GIT binary patch literal 1843 zcmV-32h8}1P))Og1b#tN7$q{jZ-EgA^{Wt1QQStEU|mQ`bGhscoq%p8d#X_nJ^qzb;_t! z3IKxl(}d60>tT+N_2wu70TI)??p>_l_RVcfPYuxSxM=nKFe8>wbhhvk07TU(hhv8K zvn~xv86_0qiN5fpFZ&<>zD%Bl zKfJ#G@SzpMPiAMeGKTL^5RP?_fVJef(MMxAGg2H}|)rh~YB$ zWN{h4y>|@H-+Ujxi~sP!)9*vVHXMp~noTDyM&E|(yo>!PITJYeR~H>XeAs{N01yCh z$T@)LB2Y5OoPpaNat{G1lN&tw_0BK000Js z3!&n*3Q)sA<$d+oi^0sIbL!jz0AOYLWGcz&sX=U(`L*s|tLKkA&IHmM0G>?j2;v3|U3W0E z7|g&<@X%mp(Q$`~MkdAMOLjk-GEappAm0i#TIax*IeCb*ZUJ-Gb z1XCELA+zi1su~p{H!h%7DM<0;XOcxwJs8BvDQ)B9SVWFWMeLIq91;~yjGvo$_OUd&(C#j_ke5N zXR*`o`KvuN5Lc92L*=^Xo0|z4Dzd70PSeraqCDy7635c&maRA~WEt`Yw^7SVCDAO+ z8geZ1ZI(Jt`Nkk#IH+V$?CA({FKHR{P7sYXJs3Jp=&Uq4TTQmg$bAKAFv*~!d=t3d zGT9hWx#{7`g%Xxlw-RgRT9;y}WITwK8#xGBK7^4Bept;9pGc>K-V)guQEF(Cn;sgN zlq?waGEf~HClOEea$NJjRisri=zTKbT1BrnhgGvilnqtQ8gYUA5O=L>*~no4$>6;U zK%B5nZ;r8>H7Nblp(}@O9bDf~7w{y5PgW$qk3DJDxK^J`lz)KQ?eYM<&l8;RE;ehJ zs+GK8nyiF{^KRDA5tMf=98~`%ku2TpWJJ$!!ZxsK*7)+!L9{!nJM2WfR}S3@;GJG} zu$3WC(6#!cGCu(EW{o2K0Yt%TvXYEwKZ#gv8=R)8OU1SBCK^+!8Wz9?Z_x0;t+>|R zO!PSL>MOFo9}=W{R?QkFg|VTI5l{5B_hbdLjFWZYC8WuNVnpwM)4+X1%^LLE`d2?` z1^nNTCun8)Bmkhwbfn)nia^xR;2l4UqdOCh3y53S?_y>7B)sEiQC*Hsz~zqXJRAIN zAa6K6A2wxFmjeTxI=6tq%%byTVn?_S0$zieMMwM314Nz%RUdq3>=D=txQ}iK(uwP< hde%tvbt5(oUI9P@@rMmMF^B*F002ovPDHLkV1nvjbFcsa literal 0 HcmV?d00001 diff --git a/assets/textures/rpg_with_waste/props/generic-rpg-crate01.png b/assets/textures/rpg_with_waste/props/generic-rpg-crate01.png new file mode 100644 index 0000000000000000000000000000000000000000..9980613d04cd97f3c69c95aa013f4511a0b2b54d GIT binary patch literal 436 zcmV;l0ZaagP)mS2iMBnhmH!G3k7G$%%i zzzM|7tnS$XX|mEJFtg40tqF#^XMYlek5%9uP9e8?wA2sZ?wdD+s7llT0000 zfcsCTvF`$r7a!-9Emv^?-o5!@0E*WyW0UZc$?XELw)wyha%bG5q|U`wDiKV@J!qab z=-j3NSjwj&`t$C_HDrY9Nert3)qaM zXi|impNJx%$EHLe)ChXn25XxWQ{*`aQX&`xFBNZamH(Q zxf1L_paOAxQC?@UdBn#4RpdeEc-zl3tOIZI4!33j&?QGjD9W^4qf3s;v|QtUFLL+e z&Zr{)i(gN7a2~e(BqLL#OOBHN=4oRh=TZScp`TW| zAy30l6otR81yKi0V6LKK7{W}m1%bpZAwgmJ86;bpkW5caFF{OAU@Ip`n;D8B6%%!o zteGJbO`0Og8>K6x%uVJbvb9;s#$pCb9d8g3{lI^;y%Q!(o`0{`>8GC7+i2$qKD6?9Z_YP)l&H6vzK(!3|6_bGig60%hr9smu%rMFlZb3|SyszXQs|r)VT#Xa^=#WvGzSp%Vj3 zHwY3e{QyNBIvm4gu+MolSCmv>Bm91ot-sCPJ>A{^8Ql{~DNxd*mNwVxa!>3-lTyO8 z8%2B1)dUSjdeqXh$tt+dyV>A{U25XpXQ7meti9)G0N~Kb&JrrNB8ykW7`R0`XfY(2M?M$nE8VaQp zqH1rOR_PAJtW(!{H;Z7I$Z=m!&s6wX)ZDik0H(jc>`cS=k6MoVh^oD9njH7_)V~(f zn@bG-m(sc+dI&}>I&U`83?#n?iUrH~}FuQ3|3EU*+ejFD1?n;||BdJVp zF15b9(!tC)qzx@f=(u^A5FC?+OPNepG2@<1R&1>XwpJguRtrwGk%_wx2SK%w@n%Mn z|H}ZL#?Q-yz`-CmNnauc&NB#{XZUcQVZo_3GHk7r)l;6qcyKTXY^^?Qtpv7KAGTHt zY^`8xwZg$5u(kTIwG!A`eb`zpu(g7%)d~lLz}D)+)=FS&^3~l0C4yE6!|ziA#tzMLa)=ZM*lVtu^?p9 zXi)GR-QmL4-QfZS&l?jcUo-&tc>gM&cD)=WkwZp;RBHx+i7|GmD%F}_uJ>xhWbhYv zI*W0zU;QQFC0etXsEILAqBW0n8`D`FOi+#FjF6UM0M*w%QLh6~0B~i#w-Q}mZ3k{4 zkYxcV$NJq63cNS55{I#I58}5+#=`{;Z=P+he}Ce4AR>E^XI$`-3tlqvjK}Avj67o^ wg7l=e8dvDPkp6ma{U`vSqss_CTgPq03Mh5BAmkJKMgRZ+07*qoM6N<$f?uJO2><{9 literal 0 HcmV?d00001 diff --git a/assets/textures/rpg_with_waste/props/generic-rpg-fence-raw02.png b/assets/textures/rpg_with_waste/props/generic-rpg-fence-raw02.png new file mode 100644 index 0000000000000000000000000000000000000000..23e1e584e03f739997c1c5f319c9ca81d02959f1 GIT binary patch literal 357 zcmV-r0h<1aP)H{g{usB4`7=Y z2!;@gg)kQ8E;(=a;tvZu%g(>w%#O0w;?vFPg#dKNL*=`(SC-ssSLwB@nbE%u(&SWS zCQgGyW_0?CEbjCdBr++oP^>nZ+o`T!7Y$gnr|Gc91A@b}HN&bvELWEt=jyskN6aI#Z= zeX;r4KWyo%H60hp%XLJ5f17;f_IJVcj5iqE6doC;oNB(#agJGsE$8m`{)s^69K3z< zr9Cq<^WnACIR(p=PAfCd(VQ6JaG@dk`wa;YDBFI_aD!}ogJ5sZidQ%su>u`#D9o?Z?3HzBA0hl_1gXa lfiVZlY7W+?Fn2IAJiV4Jz1sYJJTSZ%JYD@<);T3K0RVWOlb!$o literal 0 HcmV?d00001 diff --git a/assets/textures/rpg_with_waste/props/generic-rpg-fence-raw04.png b/assets/textures/rpg_with_waste/props/generic-rpg-fence-raw04.png new file mode 100644 index 0000000000000000000000000000000000000000..40067176ea2ae9acec116c2cf3dcf43c5ff62939 GIT binary patch literal 340 zcmV-a0jvIrP)Q0r@}Gf$fuV8l8b(}dnDA+CE8}HoE8~S5M6>}g%`kw^5Ud8A`Tvfgs_QeH zU)A-Q;mrScSY5z^%V{u;gaBiutsjQd&isGJV8STGU?I=Upr-VTVbOkOxEO{Dko^h+ zZk^bji%l)djng0CoLl$UP$boqP@@=GElfQNRt*oZIshwR$=mmlXvNsnvTWVA4TI=90S|&1(>Pv*RNl2%y4kl z|6jj;F`W7T^*_VGS^qc21peO`6ZoIu;H>{={(t=s6Gzbl6JR(v>p!vq$coW5A!A15 m?96t2!T(>D2{^MZHUI!Isb)y^r0000 zF-rqM5QV?h%XNqUAw|mc77G;{Z<#TOCQ_h$M~}wmM?@ zodWM~UjQU=lyOB7uMSdKFc>Yfd@x#)$^wAEZ-BheMNpjQKM0DmZG`>?pm+KU!0q#4 zF7R;o13;~6N^7UHaI1D^qWf?<3rmY#F1Vh5=Gnabmx=6`*8l(j literal 0 HcmV?d00001 diff --git a/assets/textures/rpg_with_waste/props/generic-rpg-fence-raw06.png b/assets/textures/rpg_with_waste/props/generic-rpg-fence-raw06.png new file mode 100644 index 0000000000000000000000000000000000000000..f6e9deb7b71ddfea9388f45d536c509f6cacec25 GIT binary patch literal 266 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`7d>4ZLo9le|9pKd&a4;kUgnei zxsUpX7yUiM(_4MrASw88ORzZ~^Xs|J|0bt2w5?=_DUO!ZcLrkSO^PnN7p(0OZ{;;^ z(O^FJr~Y`r)vuE0*1!67rr_CsYc>!NONwQ<+`;F;b;RQMexAa<`jh4i(h4^lqQBqp zFh9@|$RU>@vfIIz)AZ@3z;j14AC;49mH%8VW0Ag(m?;s3^E7kNOSYJa4pr&p)Jg733M=WS)&;blK<)AEYNK+iFFy85}Sb4q9e E0IcU^H2?qr literal 0 HcmV?d00001 diff --git a/assets/textures/rpg_with_waste/props/generic-rpg-fence-raw07.png b/assets/textures/rpg_with_waste/props/generic-rpg-fence-raw07.png new file mode 100644 index 0000000000000000000000000000000000000000..524ac91b78bfbffa6e2c4265ab0e28b33a90bb44 GIT binary patch literal 268 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`mpxq^Lo9lee|&u{&a4-c`TG0+ z|Ic3hpSrE?e`1YYf6- zO^PnN7p!`1JSYC@*O?E`{4eJL0i7cf4Qm8t1)efVbQJ$NE%5xu^cv<3jFWhGl=kN` z#3UTjVBs${T^c`SXG4nq9gDw=%hTA{gf27kY}x+900cJ3#($Wf!u%)LR`T2pS7VUS zi@#~9Dz_Te{{CiY1merYe~5o?uC44d=ZV9g)R_l5&ag9ZJ0xjVZGOlJ^d5t!tDnm{ Hr-UW|{^)H< literal 0 HcmV?d00001 diff --git a/assets/textures/rpg_with_waste/props/generic-rpg-fence-raw08.png b/assets/textures/rpg_with_waste/props/generic-rpg-fence-raw08.png new file mode 100644 index 0000000000000000000000000000000000000000..5521d89e6cdf74b330f25b3db2cff24ec8911ba6 GIT binary patch literal 269 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`S3F%DLo9le|9pKd&aAoMp5+sJ zW@cvR$M;Noc!0oXNmicrDSc)Z#H)`=>3qPlMUd z=1=#b@L;DSGM+CRa>N%fdnioGWZ0B8iRZ>$srJx0FIq~D>CHO0q_r{e@te0Gr|`Vh zwOb;&;QQ>U6B`>J?ti{#YERB_@jv#-;=Z#OLGt@`ge4w+$?uS0n7P5dY~4Y7U!eaO NJYD@<);T3K0RS4tZG!*+ literal 0 HcmV?d00001 diff --git a/assets/textures/rpg_with_waste/props/generic-rpg-fence-raw09.png b/assets/textures/rpg_with_waste/props/generic-rpg-fence-raw09.png new file mode 100644 index 0000000000000000000000000000000000000000..444353ee27c6c1a2837b2d48a6158a80d1e1807b GIT binary patch literal 336 zcmV-W0k8gvP)Pg->8(yFx%LY^=q`Hf4%5VqqY8gxI99v#|&k;y`R7xRsSy2);lt zgft^^(>Ook%&rH9`8(%u?qx<q>_0ufzCw(czyo-S#4%Hx~@KexAy}02KZHmYpjlIb!ZRLabs?~EM;Ph z(jjIu9JgZ@p@b&U&bH<0BlMtS7EFxs??T6JO-ONd?B;M-mcChW6I0ymOAO+A{4pqI zW4XUPX%sprrXvBcd#4KEW$Q}-b|0^~y}AS7=;^s+1f<&&LKL!Ko70000gw7Sj)aK{O-~&Q?%`A`?sa z0t;mBCJw=_yY=q6J=Ooc_kVf!+6tuF-sS^wr&m3SdZed|yI8p7vr6GK> Q1n5HsPgg&ebxsLQ091Txi2wiq literal 0 HcmV?d00001 diff --git a/assets/textures/rpg_with_waste/props/generic-rpg-fence-raw12.png b/assets/textures/rpg_with_waste/props/generic-rpg-fence-raw12.png new file mode 100644 index 0000000000000000000000000000000000000000..dbf962e9df237b30f6d94fcc8f082f6926967c3d GIT binary patch literal 278 zcmV+x0qOpUP)fq$S@{NQa--3U9~UX1fZTnq5*2RqKdM3)4B4ZFmQdb36wD= c(~Ivs0ODI{E_a^u_W%F@07*qoM6N<$f)s6c9{>OV literal 0 HcmV?d00001 diff --git a/assets/textures/rpg_with_waste/props/generic-rpg-fence-raw13.png b/assets/textures/rpg_with_waste/props/generic-rpg-fence-raw13.png new file mode 100644 index 0000000000000000000000000000000000000000..ed53feeda8381f73c6e8747f770382e5bde34f49 GIT binary patch literal 268 zcmV+n0rUQeP)0g2QkG1QIoaBvUBN^fJR05DUqI0KpY78~{VI1VPZ4DI|g;%*>ULVkjAe zCLQoxn||+alYT-eg^e@_HNfn!5wRV%PKd>YS;vlhr|W%(=?aKFM?bb zB+K%-nJi0kT{sD3by1bnx`81Y+=vFZ?*-rRA~;`~zX=SvF7QRWzM$K&|4JvpU!G7` zBAdsxW*)HzwyPbZ@elxinz;#7KNhFPRRj2d>c;{gC3EV71n6BGrmoH{4NFk}Lw6L(ytwKN>J0aNk3jw!DXW=JkXO~igq}yQaR;fY?$rmhw zU@;P2itMbLVP(hU!h`qT%)Q(@Fes(aHEgtH*l3IH<++#4r^+S9qt}(u!zBQ|*A*;L zFv$SAe_wCy1VV}M$Gc?dk9UL;SvhdiLt4ZZZvK^@h*kpk%`X6EuNMH^)UFuS{^4Np zw5NQnGS5CXB_Mu8b7}6(eR|Gx5K6={2%NiC>zMsB+vP6-)9x||oNU?=xe?A1_=||c zYLeufPhaQ^ZUIpBey)80SJnH@Tk#+O)ia2R06^tX)FkU)sPPTl!*dx9`>OZ=0000< KMNUMnLSTZ{YK|HJ literal 0 HcmV?d00001 diff --git a/assets/textures/rpg_with_waste/props/generic-rpg-fence-raw15.png b/assets/textures/rpg_with_waste/props/generic-rpg-fence-raw15.png new file mode 100644 index 0000000000000000000000000000000000000000..48306b30f87e99156e082e0c0c33d73b35c49f9b GIT binary patch literal 344 zcmV-e0jK_nP)As=7>3`oa+`}k!NFh9r9%f5x)cgRM+yA}9fi7xgM!YToU#gC6go)*PI0(jkRc>< zAs`_R2l6@H5xu+U3mLxe-tWnq;0nSMW%t-K^`~%5-fY0Dy0)B(Q*s|AdmjED&`Ndsr zUgst%MKP~DHvl~JX*=}{<96zShrYRuQc8VcwQ0r@}Gf$fuV8l8b(}dnDA+CE8}HoE8~S5M6>}g%`kw^5Ud8A`Tvfgs_QeH zU)A-Q;mrScSY5z^%V{u;gaBiutsjQd&isGJV8STG5a;-pfq{X6VbOkOxEKt;0+t2Y zuQ1@&iQT!#YJWp%mK&!(FfcGMFxh7yRGd8i!;%e!z&Fnb?jm_FfjP1dcxKGvP?kr#+m|bzTiKyD*)W9lcpPkJNEzp002ovPDHLkV1i1tneG4p literal 0 HcmV?d00001 diff --git a/assets/textures/rpg_with_waste/props/generic-rpg-fence-raw17.png b/assets/textures/rpg_with_waste/props/generic-rpg-fence-raw17.png new file mode 100644 index 0000000000000000000000000000000000000000..21b2079e899e07f23cccc4fc5612f731d820fe79 GIT binary patch literal 443 zcmV;s0Yv_ZP)i_zi3#rxA-IDTLELg)Aaii3Ai5 zg&eV2!TkVHP$F0dA>@iDVXp9Yao^tV4_@*9GxKNO%u`xxqS#&hCIB<5KLYyES)E@O z#|q#>TydkCqESt8cd`?Rm5bYaEtCX6nH^Y;E#GVBG^(k9zO^@CW&bAt54V4~zC5Kj z?1l{h3i-TbRoXY%+8f|XpV7xpOped`dA(tmWaI$;6~1S3e3rwF2>{j)o@v*X-a7Dx z<>5-7tV&beE~EXS6sdO4JMRWD;X zcIc^St^Gr%DOzh>848`Iv`R&3m5M^ADXt8~)8E(lTQJ?-&ue4>Jzr5cw#>bbDcj0l~r1se?jWkfM`x>J}*e3L!;sv5Nf*E}`Jy;Gk`BC`53{;GH^2 zhk}0~2t|h*&yc@5A}P7=xA{F~(qw!7JCqE7xQiOV>^A%Z@d)V>yUz z1#nfZ%gx0$0L^M$SVM(rkTwIP<4i#D{Q)QRMN34pJxM;A?Fm{UK0m%Q0TzI+xOj9D z<0i7a%N|ekl846e9{`=Vt+fD3x^C{UPVc_x2Z35z!OP<>0Q-Apsd+SZGU3S<<`YL_ zC)W(1PD-Vug`(P-`P32ttSld(&<_HYPB`419bT3hQZ1x456J~Mp)Z40gWKz~g#;(` zGq+?pp)cm>Tn+750E)o#{VQ4`2CW9V;zGO{pp2Pa-xRoR3k!fv^$!lBl`&}h`^^9V N002ovPDHLkV1n}XpB(@I literal 0 HcmV?d00001 diff --git a/assets/textures/rpg_with_waste/props/generic-rpg-fence-raw19.png b/assets/textures/rpg_with_waste/props/generic-rpg-fence-raw19.png new file mode 100644 index 0000000000000000000000000000000000000000..2bb913e39ccd40719b6ddba1c83062ad3148803a GIT binary patch literal 308 zcmV-40n7f0P)As=7>1v-Nj5?H6FL+pCmkGvQ+Ma!ujr6P9CYw62qJERO9yc%(b1uqI+YIn2|;kX z5Uxv&i8(KZKGSi0@AL8T-3cirS%$s70vH8rG3@n~=O!%o4~&AfK!bH1p1jrp@c%^3 zP6PHQT^4|vE)0-8n@9zritwkGPX6>ns3N{Tjz)oXeUX(wg%QqpZi43~#;!&|RSJUd zALoC9GogxTi^uAM=coL`D%(Qo2+dBTnm{KpVF5UYg<|aS4!q5_cZXAf><+}I9V>wL z4T*DDDA^qpK2$nFE4D=|wgte;d?hx!U9MOc&I!s2Z}AK39aA|P$s=z70000`kySkG1S`Qxj9_Dv6R<(SzePGzr1R=d?c0L%-gFc83~V{K@bvIa9BDqk0s!Jj`vJrt z(Yu2Cx1&`qTX6nJ0OzM`$aCK-FTj5gZ-D6Kt^hn{ATQ@t#<0ES5(wUR#u<=T89FHy pA3JmQbD{urQo6UGlTz7H^b62rQDyJUfye*=002ovPDHLkV1lW=da?ij literal 0 HcmV?d00001 diff --git a/assets/textures/rpg_with_waste/props/generic-rpg-fence-raw21.png b/assets/textures/rpg_with_waste/props/generic-rpg-fence-raw21.png new file mode 100644 index 0000000000000000000000000000000000000000..223f358a4877197dcffc0b60d2cc9b3e7dc39b5a GIT binary patch literal 366 zcmV-!0g?WRP)@OQsMPPwt>6 z=uqejcrodq5UxY9h-1m=2LefV_j7kTk(3f9o^Bo(04D1>nS4&_f@k9fX5)qu`nNz4 zTu>*X6%d@k4{~+(gB*f0Z3ea}wIc8s^mut+NlkDDmzwadcL0FrcT3&vGg;4x_-$Zp z&@ucVhyD8UV{|w_llc5{)V_)ZTW=_f)Iqo1uC|23dUda`jAJ6*B;NIU>{1i$mW7Y+ zof25aab+TnlUUGhS+(|xfRjeNntBz-)zpKNM%8kqlxiUfSxO1P8%7fHV%X=!u+K!+Ml3rc4m4#{d8T literal 0 HcmV?d00001 diff --git a/assets/textures/rpg_with_waste/props/generic-rpg-fence-raw22.png b/assets/textures/rpg_with_waste/props/generic-rpg-fence-raw22.png new file mode 100644 index 0000000000000000000000000000000000000000..c137ab804215f4fad0e7469316f72546771ccca3 GIT binary patch literal 329 zcmV-P0k-~$P)zucMMfspW*zfuFni- z{=Y*}!$QafFpanXQLzx`_?H1!=AvIZxOI<>bOTHng)jn*Y!|30VXuIQ&W&Vwfskef z1|rhI?$$Vl-3$y28)t84Xm9ahU|?WiU^~9x|1Zk~M!W`Sm}^@c)cm zGy?+z1B2dgRz`v@fP?`viWss+7$CYtg1Llf1BeBq1`KZls=7WiH11u4HSr(=#?gl6 ba4-M>>4aEaZ^>DN00000NkvXXu0mjf@%D-c literal 0 HcmV?d00001 diff --git a/assets/textures/rpg_with_waste/props/generic-rpg-fence-raw23.png b/assets/textures/rpg_with_waste/props/generic-rpg-fence-raw23.png new file mode 100644 index 0000000000000000000000000000000000000000..8f69161186a8f00a4588f3510652979d5c0bd42a GIT binary patch literal 339 zcmeAS@N?(olHy`uVBq!ia0vp^0zhoQ!3HEH;(vuRFfdAax;Tb-bSD4#`dXY>wV_k# z?qaqJ7aOXcPx$}!oZ^4YBF8z8c{OYJEBG1|9gCjTS7DNy}7pXl+GX~=R*yWhZ*K1GHjM*YfI=f$vTi=yrA&Clv_-y%Hs^@ dVhafdhVz!u?=SrPc@Y>`44$rjF6*2UngG`dfs+6L literal 0 HcmV?d00001 diff --git a/assets/textures/rpg_with_waste/props/generic-rpg-fence-raw24.png b/assets/textures/rpg_with_waste/props/generic-rpg-fence-raw24.png new file mode 100644 index 0000000000000000000000000000000000000000..8f2286f0e6d77512d86feb339c57499e41196ef0 GIT binary patch literal 394 zcmV;50d@X~P)NF|GT!H_J;3SuTGA$6Ceggn*o}5xKq>gdF zT3Hu>ux+8;p8ikHuGUr&xnAJ?^~>t>@#$vlW<#ZC%?8h^1_)>1P?4O48>}q^06pI? z)W4pnW$dzBh-3ze((`@oi5gmU2QTYnkn;{?8CZT|L#ys^h6g|_z>Pw^oCSO5%UJ+7 z3R!+*vLSY(P^kpFFEybNt+yl{`u3Q*kxFvr6Htvx|? z51je`j-jgSGn`-5^_k(!|98~31`b$gW$=yDAD}E|T3Nxsz(Ax2sF4InHRH_xcMMzi z?ITzK5cB|gnkEF?Iw8sB);%@`H6=s|M~WE`z{}v~%}HX$%N@pmFaSMsFu4it|9;zK{UzB9QUFbAVg?4n zd4gJis`UWd@df`GTH_c@YPP_|+FN|6X$1zLng`g9FZh4PE}DUXfq}uKg@Iw??ClKx zsh$kKEE5uYgG z<_M3Cy`|}o>Lq?}|6SuYDdxZ~IN(%{Tr| b93#WKOiL-RU!V5_oz39s>gTe~DWM4fkVst) literal 0 HcmV?d00001 diff --git a/assets/textures/rpg_with_waste/props/generic-rpg-fence02.png b/assets/textures/rpg_with_waste/props/generic-rpg-fence02.png new file mode 100644 index 0000000000000000000000000000000000000000..66e1c204ca457a11928e2d2b5486c42bb198495b GIT binary patch literal 201 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`6FglULo9le6BY;<{QLE_TZuU$ zf#=%X&i{#T?!WsiIZ^cCYJ$aw7k?8X0u!`h@bEU=y!;;>OX;@hWA<5O`J{SSMOvo-bb071)>h$0`|fARmf u2p&$U5AOaC5!CSO6lp(rK-$5Ofnj;S597PNx9x#$WAJqKb6Mw<&;$UMpHJxk literal 0 HcmV?d00001 diff --git a/assets/textures/rpg_with_waste/props/generic-rpg-fence03.png b/assets/textures/rpg_with_waste/props/generic-rpg-fence03.png new file mode 100644 index 0000000000000000000000000000000000000000..d41b816abcafa56a7fc89d9da5598793d03b8db4 GIT binary patch literal 228 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`t36#DLo9le6BY;<{QLEl+qI#$ zx0f-NM?N9(?#v(Z$9}%Gn=cqSNy2iP^m6+Htfmq||BVd{3=WAbIDL@EaayvInP?=l zk@S3-F2*Me$NtY={9ib%O?txu>!~3Q8^t5??j}16eu&>R@8k9L@jSODA2QtY?S{jI ziH(hoj^7Sd?~v)9B^0&D(&DxK?T@TH*DoHGl#ux2tNRaRN6h~%f_iR+UP~-^*zPfO aF*0mg?DwG2|F$X6*$kepelF{r5}E)ahgbFh literal 0 HcmV?d00001 diff --git a/assets/textures/rpg_with_waste/props/generic-rpg-fence04.png b/assets/textures/rpg_with_waste/props/generic-rpg-fence04.png new file mode 100644 index 0000000000000000000000000000000000000000..d1374f8ecb662b64a98f453f1b51a41646e55b65 GIT binary patch literal 207 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`(>z@qLo9le6BY;<{QLE_+lcvJ ze&4_Uw`=W`Hz~Y6cjUi;nWE)1>E-qY83rnccoXl={PF+TOa21hmM1eLfM5da#G6M> z7z)0Re$(*r|FakWTc$o_(|K`DNi^UM>$K?aH$aLc*M^!#>R)gmiJ0*doX#ig=&xt8*@IxQ3i(ni+oiUe75Wdx{$%s)z4*}Q$iB} Dg{D%= literal 0 HcmV?d00001 diff --git a/assets/textures/rpg_with_waste/props/generic-rpg-fence05.png b/assets/textures/rpg_with_waste/props/generic-rpg-fence05.png new file mode 100644 index 0000000000000000000000000000000000000000..8baa1857da53c805e862a4583561cfd9b7e063fc GIT binary patch literal 241 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`J3L(+Lo9le6BY;<{QLE_Tcb56 zCnw@)-cY3ST=dC`#i}3d z?ZP)anGy9TJs}}s$G=SFHkI2SS^uvWE|5JqrD8i!o|&1sIqh=Tn#`sZ20Kdmt9b-c n8A6j9l?wKr`)$AP2pfZjfNdBT>$j^wKQMT@`njxgN@xNA)F)vu literal 0 HcmV?d00001 diff --git a/assets/textures/rpg_with_waste/props/generic-rpg-fence06.png b/assets/textures/rpg_with_waste/props/generic-rpg-fence06.png new file mode 100644 index 0000000000000000000000000000000000000000..c70a71b1e7faca9a7798c260cd4fbfba5ec12cca GIT binary patch literal 147 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`QJyZ2Ar`&K2?v<#{{A{zu=m{W z|NqZk{9m{-@lZO0A;WscoSYmU5HR%2B1Ye>=LI+oafd9ZDH_q^>bP0l+XkKYp^kp literal 0 HcmV?d00001 diff --git a/assets/textures/rpg_with_waste/props/generic-rpg-fence07.png b/assets/textures/rpg_with_waste/props/generic-rpg-fence07.png new file mode 100644 index 0000000000000000000000000000000000000000..4c5fe0f1d78681d752d01781ae7332f0f65da1dd GIT binary patch literal 129 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`9-c0aAr`&K2?`ABu2=s5zu)qg zy_Zu=OemN8X4?JQz+Wdn*g9@L+c%@FG#%Ivnd@P@lG ZgYz7T*hUe9(MP?Hp)(@wIO&SCgG7j`!mY4W*XeZkV*8O#V7oA~{*irb4+0RleB|4&9?a<=a z+ke-%N&LQMYj#L4;qJ^I|Bt=o=P}?h?s<{nQm$r~o^09>bKpmP@t67-vqN+K->$V& zmX`ijkZ^O$CuwFNXr3js?8&mJ_a&}OsWa5r{kV+rXk5b1)w)Mc95`@b!MDGxZhfEU zY@amo?T@Da|8!?s@Ft{KSiH6e>OA~)ue70x>D<4P5NYa$Y-GM O7(8A5T-G@yGywo;7;PE= literal 0 HcmV?d00001 diff --git a/assets/textures/rpg_with_waste/props/generic-rpg-fence09.png b/assets/textures/rpg_with_waste/props/generic-rpg-fence09.png new file mode 100644 index 0000000000000000000000000000000000000000..189e4a52c6a3817a22c46ed06590476b2275eb9d GIT binary patch literal 201 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`6FglULo9le6C_vjX4ekQwcUjzq_pXX19a)xf{tZjp>}f_3 yPam*}M9%!LzsczMtLrD1#~Dp|`66j5Gegk|ml>5So;U&B#^CAd=d#Wzp$Pym>rc@D literal 0 HcmV?d00001 diff --git a/assets/textures/rpg_with_waste/props/generic-rpg-fence10.png b/assets/textures/rpg_with_waste/props/generic-rpg-fence10.png new file mode 100644 index 0000000000000000000000000000000000000000..2645e20cdc82cfb2346f65c4af9e16e3798fdb24 GIT binary patch literal 183 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`b)GJcAr`&K2@6a1+=(ud%*@P(eZ3`* z*=`ozkhN>I?h%g5$3s$5`>w7}wc7PxeSTHv)dnT)&;Jc-8B#30u9h@%|alS7-nL literal 0 HcmV?d00001 diff --git a/assets/textures/rpg_with_waste/props/generic-rpg-fence12.png b/assets/textures/rpg_with_waste/props/generic-rpg-fence12.png new file mode 100644 index 0000000000000000000000000000000000000000..38c1a6505e055a0a46e9596a2d48419d7ca02581 GIT binary patch literal 234 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`8$DedLo9le6Amz&9b@^oKkoTo z`T0_6HIsONKx!FN#Zyix2aX4(2lVH3KRou5pZNuo#E-A9#VgqaitLzyfZOh5^!FPQ zSEke*j6Jx^SWs^1{=3hOg-jY68HIZHOG-#Yl&k%7FPq5b{OJGvcb_FY`CLlgANV11 zoJrZvGo?P6JAgNs@layH<1g$P2}!4Nqki`Cae7|9IsahsJ+C!!dspka#OQ30jc+jZ f7LT0ypPga%3EN2%X1+QMbUcHntDnm{r-UW|+s;`f literal 0 HcmV?d00001 diff --git a/assets/textures/rpg_with_waste/props/generic-rpg-fence13.png b/assets/textures/rpg_with_waste/props/generic-rpg-fence13.png new file mode 100644 index 0000000000000000000000000000000000000000..78890e5914efb041b7b128f596580acdee820081 GIT binary patch literal 137 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`0iG_7Ar`&K2?v<}<@f!o-+S)2 zy`8Dg50(5m{~G+I_A~CU`r2=yYTFt0NtI)OlkF&};@zS3j3^P6gTe~DWM4f Dv~D(Y literal 0 HcmV?d00001 diff --git a/assets/textures/rpg_with_waste/props/generic-rpg-fish01.png b/assets/textures/rpg_with_waste/props/generic-rpg-fish01.png new file mode 100644 index 0000000000000000000000000000000000000000..313b7aff52dc6e5b77801dd011c58df27b061df9 GIT binary patch literal 121 zcmeAS@N?(olHy`uVBq!ia0vp^>>$j+1|*LJgpk=Y&4Tq!geXZ`>uFP2daA#lB*>wB&ZC;<)RVE&pv3ha^qu+0_PV)zE^?`;k Nc)I$ztaD0e0s!N@CARNz>g>WdftHo#&1w^~*kz8$I{UNJYD@< J);T3K0RWwABxe8s literal 0 HcmV?d00001 diff --git a/assets/textures/rpg_with_waste/props/generic-rpg-flower01.png b/assets/textures/rpg_with_waste/props/generic-rpg-flower01.png new file mode 100644 index 0000000000000000000000000000000000000000..464523232f89d9b118797c37a1883eea37345357 GIT binary patch literal 194 zcmeAS@N?(olHy`uVBq!ia0vp^96-#@!3HEvBYEP0RHvtlV+hC0+7J7;vBc3u6t#MHamaM+*v?LTArCtCqdzJImQ} zKZgF=OsBMD3t4dn6^qtMy$?TcVo8Yl@8ubB;~v|;N}sDMu50WHtBlh2&%U_zmFcOF zUY!FE>y|~N7Mx|!u#;@)jGwZ8GQ*vm&$S=fy4KnKc%7W}4CponPgg&ebxsLQ0LCUv Am;e9( literal 0 HcmV?d00001 diff --git a/assets/textures/rpg_with_waste/props/generic-rpg-flower03.png b/assets/textures/rpg_with_waste/props/generic-rpg-flower03.png new file mode 100644 index 0000000000000000000000000000000000000000..4d1373bbb30120051b39d309584510a0262a4492 GIT binary patch literal 199 zcmeAS@N?(olHy`uVBq!ia0vp^96-#@!3HEvBYEP0RG+7dV+hC0++kP+v2u2(XFW%M*bQy!EtDnm{r-UW|(-%&9 literal 0 HcmV?d00001 diff --git a/assets/textures/rpg_with_waste/props/generic-rpg-flowers.png b/assets/textures/rpg_with_waste/props/generic-rpg-flowers.png new file mode 100644 index 0000000000000000000000000000000000000000..2820f5eb96bb17846fbafb7b64f1189d5a7fe7e8 GIT binary patch literal 715 zcmV;+0yO=JP)p=dy=*9u&1tt}z ziDh$`WnbDvmVx88Z#iTe$;wf&RGi=@;}cWcyT9KZRpE}R!38aC5`K=VIEoXO4^^Cs zQ&0^G00zE-H%noU8&xqoSOoyMw=Q-5*`qkrI21=dcx2^x?W%~FkLtWSzK@Sf!YKB&>L3*-U9&de!chB0L9NYB6Z8=gp6K@&(}`C zH+JbG)ae=B){qlEi$;irH=#a2akzrwa0RFj=*y}moUqX!_E8+(_8!&;I9}hTjkPhI xziHA2tqbSB(dP&qIIR71!WU_*Iz_u-;t%hoi-BdO#_0e6002ovPDHLkV1hJXNM-;4 literal 0 HcmV?d00001 diff --git a/assets/textures/rpg_with_waste/props/generic-rpg-grass01.png b/assets/textures/rpg_with_waste/props/generic-rpg-grass01.png new file mode 100644 index 0000000000000000000000000000000000000000..f7718c95fbcfbdd4ed19665712014ad336adf81e GIT binary patch literal 132 zcmeAS@N?(olHy`uVBq!ia0vp@K+Mj;1|%;R9G3!8-kvUwAre!Q|9pKd&TMy}tma_7 z#P8{;Ov=naAiPpa0tg}sJQbKr3XjF_uS+x)RBJoeZq0vFrH1Xmk%$kP2hx=9s5$*} a_%6)w*28F}+%q$feGHzielF{r5}E)DpeQ*2 literal 0 HcmV?d00001 diff --git a/assets/textures/rpg_with_waste/props/generic-rpg-grass02.png b/assets/textures/rpg_with_waste/props/generic-rpg-grass02.png new file mode 100644 index 0000000000000000000000000000000000000000..a5e38a8ba9574c9e683fad1de84e816acaa5f260 GIT binary patch literal 156 zcmeAS@N?(olHy`uVBq!ia0vp^0zk~k!3HF)wbmE`sbo(V#}JK)y%P@d9x&iw=3TWb zc-zU0yUVOUX2yG*D3q>HOrEc!qZIIb&w6%-Bp>JGIjuZu9S_&&GhBVPekRKX&#jrJ zHyRlqtoZWoan`Zyj@8#@SLO9&&f}IY%l-7u>yMH44{i@e+aQk=O^~e&p00i_>zopr E0M-RJy8r+H literal 0 HcmV?d00001 diff --git a/assets/textures/rpg_with_waste/props/generic-rpg-house-inn.png b/assets/textures/rpg_with_waste/props/generic-rpg-house-inn.png new file mode 100644 index 0000000000000000000000000000000000000000..007f3b73181fb7d297a11b5d34f9fc1ea713d4cc GIT binary patch literal 2851 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 BfT;ig literal 0 HcmV?d00001 diff --git a/assets/textures/rpg_with_waste/props/generic-rpg-loot01.png b/assets/textures/rpg_with_waste/props/generic-rpg-loot01.png new file mode 100644 index 0000000000000000000000000000000000000000..5f158afab52c2161a9fc4a441e44ce313a2e9132 GIT binary patch literal 250 zcmeAS@N?(olHy`uVBq!ia0vp^JRr=$1|-8uW1a)4gPtyqAsQ2tQxq6_rhNH#_{Q^h zu}LZ`ew?3gUy!q8$@lrJ^B)CoKWAtF1UfTIr#jx8(%lFGogzmg?smTEVZE&P&%Wl@ zxBrKi=l^eCZ5VXv_x~#E>-Ea2d;hbDDqCkhzhYe=J#p?tdAS}*D>tvI|KGQ2{HfnN zmwWk138|ReoPWk|{_tOK@iv@1anil|L`^%kM9o09>uJ$#r_+y0>=D)7D8=)=dBYTq w!?)AdOWw2leI&rBpZ}fu9zQ4ksF*Is);+z`I?m1r0D6YO)78&qol`;+033I05C8xG literal 0 HcmV?d00001 diff --git a/assets/textures/rpg_with_waste/props/generic-rpg-loot02.png b/assets/textures/rpg_with_waste/props/generic-rpg-loot02.png new file mode 100644 index 0000000000000000000000000000000000000000..57732b93587a686bfff0ae13a061eee69863bade GIT binary patch literal 183 zcmeAS@N?(olHy`uVBq!ia0vp^+#t-s1|(OmDOUqhb)GJcAre!QO@c1{K7ZiAfr5AU zRNdHQ7?!oQHa0dUKEGnk^X{eqV-ADTdZs`gVFi{4UB7R|Na#G7DJcO2el~x)59zJC zbr`7izyX&F7AgiaMB?qV+rkBX=1pv56nbInIbWirH~ygN#G9(0e@L9WyZZ=7ziEU{ eBJ+kDtPD|_I#%sFl=^@!VeoYIb6Mw<&;$Ux_(CxN literal 0 HcmV?d00001 diff --git a/assets/textures/rpg_with_waste/props/generic-rpg-loot03.png b/assets/textures/rpg_with_waste/props/generic-rpg-loot03.png new file mode 100644 index 0000000000000000000000000000000000000000..b0c154a1b20c7882a9104f96b6acb2b2cca4263a GIT binary patch literal 293 zcmV+=0owkFP)IIT%Y(InYunm^piM*v z3xZ)~Vd=p$$oI`TUwZHHfB)Z~X8_7cqKnTZ|JBpSi@}N}`J0M}iiqn=K~VvWy(k4m zJ-_NXhfeFnx$M~G-u|u=gt5PYG!~a$-*4r~nsr9gsoBW$JC}&)!`-u%lSDm$_k0D+ z0Qiay*H)J|0C;u|YNuPcF!ourmOr8}_8HD20FDc<01W35UcOofZ&Xq}II1ESx6Z|D rpD}*y(;Z~S{i#t&^)IeF$PBHW_u zSqwK}Qco=06egIUuoNF$fwCzVij|Bo>+1UFW4NcOFp**Rkt2*K?m>3fpFe;8FPL`m zzpIVSe-;J?28O$*zcJXFd|_ZP5oKUt_`-1b%xe@AS+IHA)_UA zij+;c7#RAXDvF?V9|OZ(&Tj~ZCk52~w{r_-Ncb)fH*EpuLxw}U)-uf7(8LH2r=)n+a07*qoM6N<$f~XaOl>h($ literal 0 HcmV?d00001 diff --git a/assets/textures/rpg_with_waste/props/generic-rpg-loot05.png b/assets/textures/rpg_with_waste/props/generic-rpg-loot05.png new file mode 100644 index 0000000000000000000000000000000000000000..3eaf8173e4931cdc48c53cb228c9fc9f2c43e08f GIT binary patch literal 291 zcmV+;0o?wHP)Ri z%t~?#s=aa_i}o=yJG<~tq+wz;-x}=JVCDC)YHQK@@uha;i6&KBiywH7@OC%l`Slur zdmnL%8p|xRrXRR{Y5+K_J_X@v>+98V{a zG)(MXZUD$<7pLY29-A^|J#WZomv6~R19002ovPDHLkV1krDb*caW literal 0 HcmV?d00001 diff --git a/assets/textures/rpg_with_waste/props/generic-rpg-mini-lake.png b/assets/textures/rpg_with_waste/props/generic-rpg-mini-lake.png new file mode 100644 index 0000000000000000000000000000000000000000..8a2d5770d2a59c1a15e109c8edb144914a3e8cdd GIT binary patch literal 1016 zcmVwWr%xOCG8v&nY+bc=TKN?#JR~J&1L}2s`Bly!>SQ_wu@K&nk1u4FKrc ztCjIs5qzjDP~PF-Z0&hoep2Q{{vug&pw_k!<|GQP3jio)GNOor>!O&+1mdaRIVheK zQ{%O~?)VK&4Ir{rdc#z?N@8g?0RX7oK56y^*TvFo0?EraI32t4%hm53+2$Nt=^HVo z*pNyu8q=^cCd<>yrZZPB$`ee5Q+FKDL5KEo1WYkZFvaF^L>pSxme-x`Qotq@r`*8QpZAeP*@#CWX|pr=aQlae zpW-gXxjsWT1W_FAEnA!8Lnk*(B!TY1 z&nY*6jN&zIU2UkQEN|Mocn)aFs0ux(lU4z#%_xXt{XaIM%@$-8?DW8d|Fx4mV-cA zQb8|koGN70!U)>^Wwqpqr-HyW_6t85ICqBt^lLqUF9rOl6S%e>{F2ZwNDyGZ<`3R} zp}PgM1@r^=AUZ%u@bi1XQs(=!cLo66o4e5Kbb@kGYkGwtGLm>A8#qkzn9P?GR%2>) z3y&VXiR(B>&rYg9kpL^Vl}WzFm@4_LJ literal 0 HcmV?d00001 diff --git a/assets/textures/rpg_with_waste/props/generic-rpg-rock01.png b/assets/textures/rpg_with_waste/props/generic-rpg-rock01.png new file mode 100644 index 0000000000000000000000000000000000000000..150a645baa47f09ef24a32fd7084e8f32a3ec356 GIT binary patch literal 272 zcmeAS@N?(olHy`uVBq!ia0vp^0zk~c!3HEhl+{lMQrA6Q978lFCja^RTAbPF!-u|~ z{b%lPEag;YmfCUT*Kd1fX6EL5`C)EiC1(p8uS&2fNf&i~{a(NK{+a?i;Z28*Z3`0qcNkgvC*+Hn)z_H!GS{u4jkC9{#Ywe zsPW*+RQ|(vFW;8{0kO6DsR0kJIRxeuWoQB|Jp4a?8fQVcfsxFdum5{uO*S#H0YTf6 zf9gD+xl#je+_+-+=hs*6K1sfFzxvPEeg6NtzNE0kPPxkD5X0?{tQvktSs6b5C>O8h RvIF^)!PC{xWt~$(69E2sbJ+j@ literal 0 HcmV?d00001 diff --git a/assets/textures/rpg_with_waste/props/generic-rpg-rock02.png b/assets/textures/rpg_with_waste/props/generic-rpg-rock02.png new file mode 100644 index 0000000000000000000000000000000000000000..4803105cef26940fe7b6cdbde69bc977b970e272 GIT binary patch literal 387 zcmV-}0et?6P)P000RH1^@s6$3KVo0003>Nkl|Y^B7$5ba(a_X z;LyKd!M))c>>lUyrS!q$xbMDq-`(#lDJ7 z&TP9Q){y#kpf+#;IMaawn7Oqzzb{6dHBVwU*ZBHk6ndJ(1}h!N hzVDSe=k;dm{0D!r(8`y`in0Iz002ovPDHLkV1f!Ou&4k4 literal 0 HcmV?d00001 diff --git a/assets/textures/rpg_with_waste/props/generic-rpg-rock03.png b/assets/textures/rpg_with_waste/props/generic-rpg-rock03.png new file mode 100644 index 0000000000000000000000000000000000000000..ed8db5184b94b83983a5b0f75a42da8c2b01170f GIT binary patch literal 388 zcmV-~0ek+5P)As=7>1t|lcD(w9fU4|;A9aOCn8KR(A9Suuhji`Up$4sEaViuCOI@TilTdIe zIP@>X;WB(3>>V*C3Vq>*yL|V)-}i*Glv4ah3p)~kQe<0MHP$}!Mzbwx=dUkM#&BUr zk`<8KXL@yUlNqW5N|9~F1L70yblzyTCCfCf!PqksX!GP0M@i$`JMWDe)Px3GmR z4bKjizBiWqa6)wrU1prpza*O?7?3ul;o%ZUe zYR6jGk(6g6bbzIl!kPO5(7pfR@%jV+|EppyYgFH#YZH)n3#K;StquUlIdflvT8mO- zTMoXM4j9p$z_eFqx_;XPQlV4)fMOkhpw`kjjQ+T9@F=Cs;{8F=_JM>FNGS2|$=bBF i_Yo!K%>At&c1XV4TkPha?eA>nX5Axo-_nv$1JA`r0aSW=prsdv0KRvQT@u$a)H@*?YpYL~XKDL4v+J3JFm>FN8ujiQ-gT#~`?_F%2b4HV4;BdOFiCDHe)+yDTG+QcbD zxil(w4434+8Mq`fnD8V5fQWry5<|-u=gi)nOA72e&w1p(F1fIaN8qn}KYjswu-II4 So8JNe0000PTmeG(weLhOb7jKbz8byTHBz`v4KwZDdf#14^p^l82TW`t$pZsw3$}%BKhC z0g8*U1ZX4>9oL`^)1_CDD=x-zWp@zuo;CNH2Bls>rB(u9?ll<=$`N1U^%XHdQ4-xsP`;m`r!s|Zva>q0$F7e2A>B7>)@5jw=M({py-b!LWtOh luV?w+wZuP4QD!O5_Xok}+y@T~6(s-w002ovPDHLkV1jUKs-6G< literal 0 HcmV?d00001 diff --git a/assets/textures/rpg_with_waste/props/generic-rpg-rock06.png b/assets/textures/rpg_with_waste/props/generic-rpg-rock06.png new file mode 100644 index 0000000000000000000000000000000000000000..79d8a58a829056c60b62fbfa043a54ac0e238a92 GIT binary patch literal 483 zcmV<90UZ8`P)il$W&TS2s6cGI*TaN?fh>+T!r&6QXIP3vLoEa$ZVfMmfO6ERjnT+EJZp|)4Y z#_<}?b`OwBW&i+#ps#%kJO=>Y>k|e+AMY1CkOfn8jgWF)3sDi80FL?Rb2#S0aV^}u zHj(pMuzPt$z_sul$F-13W^jMH3IG}*i_iq1-5^;oMX6jRc6LzT*M@#Rhl-Fz9Nzva z5&*D!d6?@TYVQ{-h;y9i*jg1Tfkek90NB2IQ!%m|21lx}btHTW2!KWwC7A{xr9`4* zlV7YL8ybRz0MK0WvtO)$2^q3rig`#iNGY|2c7uEh$ftnNZqVp?bS`>#ku~*4w6Lo= Z@CUEANLYyZvMm4r002ovPDHLkV1mF&%5eYy literal 0 HcmV?d00001 diff --git a/assets/textures/rpg_with_waste/props/generic-rpg-rod.png b/assets/textures/rpg_with_waste/props/generic-rpg-rod.png new file mode 100644 index 0000000000000000000000000000000000000000..f0e7e170a7dc40f48217333cf1ef0b6addc78f4f GIT binary patch literal 469 zcmV;`0V@89P)9U$K0004;Nkl`;O6e4Ag&?^4l133NG*ke zh;&jZt|Ef#<-F&h7n*CUtwR?-2qf>__rCXYyfDr=>R~&%OaQRsoPK%EAVw>VL<3-)bELbMXs~A*%Omed??!zmpIfaN zL-FpJW+ozx;cA}%;OyWMi|Z+r;u!$IxMwlDa720l)g)6LoKgq8ph790fo=l;bKJ93 zw3?3A3lyla6{s3(ZcelKGqL4VRae`eYWs+V+e(`i{}ZvLD_6bgT2fRqY>H^R7Fp3W z8HPczw~^+EwrkOK-y;AZG?s!$e!zCEuT9ZthayK5cJfs2bVvw6LI^5%Iuv&Dgd9=b zpH4LrnKigQS^r(($FAD0Md6d1fbC^v9z5Z(U&rCs^bMZy7yx_%Ld@?oIvfVI00000 LNkvXXu0mjfAP3H* literal 0 HcmV?d00001 diff --git a/assets/textures/rpg_with_waste/props/generic-rpg-trasure-open.png b/assets/textures/rpg_with_waste/props/generic-rpg-trasure-open.png new file mode 100644 index 0000000000000000000000000000000000000000..2bea8b407517336310ce63c016dec3e2180ee2e2 GIT binary patch literal 634 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 literal 0 HcmV?d00001 diff --git a/assets/textures/rpg_with_waste/props/generic-rpg-tree02.png b/assets/textures/rpg_with_waste/props/generic-rpg-tree02.png new file mode 100644 index 0000000000000000000000000000000000000000..ef3976b66b8d81b78d1d22fc97570a2f13ce4c87 GIT binary patch literal 2880 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 ZhEMN=?l-(BTnsdm!PC{xWt~$(69AOwFrNSb literal 0 HcmV?d00001 diff --git a/assets/textures/rpg_with_waste/tiles/generic-rpg-tile-waterfall02.png b/assets/textures/rpg_with_waste/tiles/generic-rpg-tile-waterfall02.png new file mode 100644 index 0000000000000000000000000000000000000000..dcfe37f63478ce43a20e1def9e0a96d7f3e604b9 GIT binary patch literal 192 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`?Vc`d3lCqK)Yutv*5E>7=E)EDqi5JKN2t{`Za!Id@PPD(c$>+Mg|DMO@&1^6-gzH) z!bOj5j0ORPe=JhjN+P0+HcVJNG4+u+o12%AkkNu03}O)_6SyK)FJSXXoulIUc(dfQ r6?zp*SNd*A+xR+M@_`taqXt9OZ-t8tKbM^aI*Gy4)z4*}Q$iB}Bri;$ literal 0 HcmV?d00001 diff --git a/assets/textures/rpg_with_waste/tiles/generic-rpg-tile-waterfall03.png b/assets/textures/rpg_with_waste/tiles/generic-rpg-tile-waterfall03.png new file mode 100644 index 0000000000000000000000000000000000000000..293a6b58dc16deec0ebae00aca20cb18bbc6433d GIT binary patch literal 179 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`Rh}-6Ar`&Ke?C7yU(d$HAgnrT zWfB87Gc$8@$T81Nya_IR%+osKHH;f%9Afnk_^KY%X4&g-!l3JLL#NPxV*?=QS}ODR z{DA`pKIF7nIv%~DbNDrD&ARHPD|=rtCB-&AWNN#||6fu$G*+U33q-?Yn&J(4&)kKv0^hc=vpeHdb1(j_>5$hY_o*UlbMnc zahX}dYd`wi@wZ8En>i*m&bp-kY3~6bDA;{+zKOnp!GfyC_xwuP+}iH(SHwD;=#E%C zG4+vnlhj8k2d)DgN5W^_a=EEDwNNODVWEM*?mAIt9x-kno`^jMj6QPD;VtGoeMCQk p_t0yml(Y4pDg$`bPBA1gGU%@guGHh4unXu922WQ%mvv4FO#q5hSyKQ2 literal 0 HcmV?d00001 diff --git a/assets/textures/rpg_with_waste/tiles/generic-rpg-tile-waterfall05.png b/assets/textures/rpg_with_waste/tiles/generic-rpg-tile-waterfall05.png new file mode 100644 index 0000000000000000000000000000000000000000..f72d7ead1fe29919c3822a6db0e6cc4f7c30faa6 GIT binary patch literal 370 zcmV-&0ge8NP)vUEF^;BbC@D!ByyNugSl|&gct%A zR>#6wTz1*ZC2Ia^Zg%GTXLe7}eMkY$54Hek^(Tn-j5P3A%$wMiFo0aLJ+tv5==SoB zH1O=Vbc>A|VQAwfHPXPN)t}5AGlSOrTt0TE^wcN^s3&E#Ken(YwF2CLrS``hv5^C4 zvgXQe0;t?XE*wB+MVW@N%97CzJvBl`RVv5tfGWVvWYTpujm%f-sS$Ll;E!1}swZU{ zVTc%91cg_KJJrn1cULKD7%POn+a07*qoM6N<$f~2pglmGw# literal 0 HcmV?d00001 diff --git a/assets/textures/rpg_with_waste/tiles/generic-rpg-tile-waterfall06.png b/assets/textures/rpg_with_waste/tiles/generic-rpg-tile-waterfall06.png new file mode 100644 index 0000000000000000000000000000000000000000..b61f16d2e3383c0980df9d0161c77afc7fa57f66 GIT binary patch literal 388 zcmV-~0ek+5P)%A2tp>8E-nt@B98t6PG&BJ%BAj7tf3`K zL8ap0R4&A!+}R(dL?0Z-z4v|Z-kqRzlL&tVKvG>r<9K(StH)OWgg=_mGzYK(;7N%m zr6GYCv(~0{fVGbUY~hb^ixxWQoV}SLPfFaP#eM6Ywi6oNlafaB6yaA+lG5Qby}kp0 z{jx#Z2~EKMcoS6~m~#-t0JueqAd0cIxK$d{>pQ6O02j*`6hHc8*GfzfS=d^b9!i65 zshi@2lTXZo+oolVK@`(=LK@9G=$=&*rPRNdP)a3*S|@7}0EX8U01CAZ_Fql&T;_nZ zmLh-jkSsI4ZSVZbt9p(?t%FcXCHCdl!a%1u{$keH!3NGSdEaGl0gsu+xM_i<M4L&p{&wYx|(C|wG**tHNW z=^%H_g|k22>F&$-eD8Z)&gy@RQVhC&dZphkt2KZ%-jW8cR<{lf$b(X8;A%a#Z0fhm z3dqVDZyAK4+Fx<5f0qfeaMp1UhIFdMz1yb%7 literal 0 HcmV?d00001 diff --git a/assets/textures/rpg_with_waste/tiles/generic-rpg-tile01.png b/assets/textures/rpg_with_waste/tiles/generic-rpg-tile01.png new file mode 100644 index 0000000000000000000000000000000000000000..5c6c3fc1361dd7940f4d6fbdf8f7dcd6bc77de69 GIT binary patch literal 133 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`KAtX)Ar`&KXa4T{XwS^r&?$6w zF#*?vUMVG_8UU=#x@WD4>UdU7&~Zx=$V^4=5H?`-00000NkvXXu0mjfRt0Q$ literal 0 HcmV?d00001 diff --git a/assets/textures/rpg_with_waste/tiles/generic-rpg-tile03.png b/assets/textures/rpg_with_waste/tiles/generic-rpg-tile03.png new file mode 100644 index 0000000000000000000000000000000000000000..3dacf2f6592411aaed3d99c7d6a191d3f927e822 GIT binary patch literal 146 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`k)AG&Ar`&KXa4T{XwS^r&?$6w zFJU(+?Siq0O91c^7~XnMvSc*f** rY}2>@|M#{Q-s%Xwd~G|Afh|MkBBd)6c`x?>En)C<^>bP0l+XkKwR1Pd literal 0 HcmV?d00001 diff --git a/assets/textures/rpg_with_waste/tiles/generic-rpg-tile04.png b/assets/textures/rpg_with_waste/tiles/generic-rpg-tile04.png new file mode 100644 index 0000000000000000000000000000000000000000..dfb9977a33e38785d3f08a822bcef331157a3613 GIT binary patch literal 242 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`J3U<-Lo9leQ*^Tb|GytSgHh5T zul96wNkka zEE@>Sj@RNbsB2%U+Quk)yx;i7pP?5U zG;e7>5Piq6qImY9ERVwl3KJ9=TCdu$zD>0M!R)Bg#FE;PVAL#M`s0Oq$>jH8#Z61U uG+AxmFWi$~9sNPG{-8eV>)!1i9~f$8I!mAQpU?^P2!p4qpUXO@geCwllVOnn literal 0 HcmV?d00001 diff --git a/assets/textures/rpg_with_waste/tiles/generic-rpg-tile07.png b/assets/textures/rpg_with_waste/tiles/generic-rpg-tile07.png new file mode 100644 index 0000000000000000000000000000000000000000..1bf5aa69bc1a59fcb3ffac3eb4be612f10e988d8 GIT binary patch literal 151 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`ah@)YAr`&KXa4T{XwS^r&?$5_ z#IT_?rgyUcUX}X|Czr<=J(<;MY+x|qCF_i|O}q|l%=rvQH#%(N*63nQan2C$FtC3l yJiq3Z>Nf`$zswg3*L`G;3aG`HJ!C%7#>^mnPUb{rg3vOcO$?r{elF{r5}E+WD>Bmn literal 0 HcmV?d00001 diff --git a/assets/textures/rpg_with_waste/tiles/generic-rpg-tile08.png b/assets/textures/rpg_with_waste/tiles/generic-rpg-tile08.png new file mode 100644 index 0000000000000000000000000000000000000000..c6a715cce5894a16e626d91643b288a6f4fefe50 GIT binary patch literal 245 zcmV{Rh3#qI{5#k9vMS2B`Alq7L?^$w!2p=Rz5Uf)~`!unTO=5@|uoI{H ze|Bbeim%jWS1h+901l@V02O5v3m1UZWI!E8V_>(D?+ga!6HAMrqU`CR$+ek{#`bd$ zEyA7|09u6g)P)+?gcia0R2l|F5<37KduM=00FcB^$pQGe2f%oKtJ vf56WK*jB>Ar`&KDHay5?H^y;&ZGbD zZju7K!NjH9HyMtt&6m{blRv)t#hFCMJ8U5`_U95ld$X=*RNMBx@YF_;8QjJO1`om< zI0EF@n6nxtEaE!Epy(>frs(>o(X&+C00=f5ka+*@zGCF(-M`D*s&shxm>F)Jl6bX3 S@H-38b_P#ZKbLh*2~7YKe>*1t literal 0 HcmV?d00001 diff --git a/assets/textures/rpg_with_waste/tiles/generic-rpg-tile10.png b/assets/textures/rpg_with_waste/tiles/generic-rpg-tile10.png new file mode 100644 index 0000000000000000000000000000000000000000..dedf2095b030d5575d30c398627cc37f2b4528b8 GIT binary patch literal 264 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`=RI8v;asUiSjclIOZC)eVmpMc6c|Z}0%}6Yp+W%Go;OoR+iE|MP$53!Z#_ zXGtn+!wHe|@0q7hxa*kGRU2p_%6wwWnqQAre7no&vW%f4YyR7Jxw<>zpGWDP@aOfJ zE$^V#=q^-Y@^RACI|X|*%^A|Yl+zgI_Bv=US$DJ`FIe634|B5FtVJ_-ip;!}Vzopr0E-H0IRF3v literal 0 HcmV?d00001 diff --git a/assets/textures/rpg_with_waste/tiles/generic-rpg-tile11.png b/assets/textures/rpg_with_waste/tiles/generic-rpg-tile11.png new file mode 100644 index 0000000000000000000000000000000000000000..d0f43fc2901f75b29391b4425f6bfb1e011afde4 GIT binary patch literal 119 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`cAhSdAr`&KXa4T{XwS^r&>7P^ z*?;enGYv7ug>5I7$4$y-;0Z`^SU2+r!|ntL34^8oq*B@bd>51Jb<2`qVDL}mH96@} R{SaspgQu&X%Q~loCII|lCP4rI literal 0 HcmV?d00001 diff --git a/assets/textures/rpg_with_waste/tiles/generic-rpg-tile12.png b/assets/textures/rpg_with_waste/tiles/generic-rpg-tile12.png new file mode 100644 index 0000000000000000000000000000000000000000..fbde8a9cc55f7ecf4507bd43cdb9ba76344fb72f GIT binary patch literal 227 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`t2|vCLo9le&-~r@@&A)xeMyP! z`%+g})XiCVAZ7-mB!}jz1t0F;-QRpDeOApYRc5`0b&|6sxF28J&I1Gyx$0~NMly50 z&Tj;Q!q?Gl;{Wpmw+P+=)YmdKI;Vst0JR`i@Bjb+ literal 0 HcmV?d00001 diff --git a/assets/textures/rpg_with_waste/tiles/generic-rpg-tile13.png b/assets/textures/rpg_with_waste/tiles/generic-rpg-tile13.png new file mode 100644 index 0000000000000000000000000000000000000000..546b7fe32121dbcb7121b4dca02e11ef8acb7047 GIT binary patch literal 128 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`?w&4=Ar`&KXa4T{XwS^r&?$7* z`9{OZ<#C5@>O7H{kgdjN-lD^t&}Lx3bJIaahV4L7V-9mdpl6wh-^%^R4xBh};DE)0 boq`OHON46|-9C^6G?Ky7)z4*}Q$iB}ea0*J literal 0 HcmV?d00001 diff --git a/assets/textures/rpg_with_waste/tiles/generic-rpg-tile14.png b/assets/textures/rpg_with_waste/tiles/generic-rpg-tile14.png new file mode 100644 index 0000000000000000000000000000000000000000..7476a1df2d8bf3a66a93452b0f27fa3ced5cb9c6 GIT binary patch literal 209 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`Gdx`!Lo9leQ!FfA+cN{f<7?Y_ zM346yi_G9Qp1?Gt=#8fyz+TiCE?^in* zrtzIHVz3mP$Q5wuV0Zm?k8(yGSpy*OvG_SHg_*%d)OuSCTjvy@8yP%Z{an^LB{Ts5 DvY$y{ literal 0 HcmV?d00001 diff --git a/assets/textures/rpg_with_waste/tiles/generic-rpg-tile15.png b/assets/textures/rpg_with_waste/tiles/generic-rpg-tile15.png new file mode 100644 index 0000000000000000000000000000000000000000..b825171009e640752a983df862bb8e05cfe81231 GIT binary patch literal 140 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`!JaOTAr`&KXa4T{XwS^r&>GV_ z*?+If{f3jvNGY0fr-fsKE^lM6qvhs6|4o8Ux{CQhSjn+is%2{R?W{&>t_B? l;5afd@4%B_ea(J1hM6Y>1KIp*E&z>Z@O1TaS?83{1OSaWFGv6Y literal 0 HcmV?d00001 diff --git a/assets/textures/rpg_with_waste/tiles/generic-rpg-tile16.png b/assets/textures/rpg_with_waste/tiles/generic-rpg-tile16.png new file mode 100644 index 0000000000000000000000000000000000000000..d0eab48e51bc5e16722064b8d9dd83a5a84c2665 GIT binary patch literal 280 zcmV+z0q6dSP)oNYvY1SsK+2YMSt<+Hg3%Zgmz>?{ z{^xY=fBJ=BVnk_X!JcaKND_r|g)|PE^%HkQX#hH{5~GEFJDlbK;-98w9PMsIX||Wu z%TN{y0000I literal 0 HcmV?d00001 diff --git a/assets/textures/rpg_with_waste/tiles/generic-rpg-tile17.png b/assets/textures/rpg_with_waste/tiles/generic-rpg-tile17.png new file mode 100644 index 0000000000000000000000000000000000000000..c108608bd67bfeb3b7f0a660a6556d78d1b3d281 GIT binary patch literal 124 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`&YmugAr`&KXa4T{XwS^r&?)0P z*?(`#=ExI<3fFyP@;D;(8YG=2G8#B*7&Rn`_ee1?rl_j0vAJZa+-6v%vg9Dp5CbKi VFDqsQz5*J@;OXk;vd$@?2>{F(BU1nX literal 0 HcmV?d00001 diff --git a/assets/textures/rpg_with_waste/tiles/generic-rpg-tile18.png b/assets/textures/rpg_with_waste/tiles/generic-rpg-tile18.png new file mode 100644 index 0000000000000000000000000000000000000000..7e8c31c9b81507acf5281a3d8926446cb8a0f531 GIT binary patch literal 120 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`_MR?|Ar`&KXa4T{XwS^r&?$6w zF?riFZy&V0rMz17Ue zd++;oqCS-XaJoJ*g_Ab`0D0J|KfPx>6lZA!^9FHQ0ss=0Ag%mS~3xA;Dz0124upCy|7y}aiTtzv;ik?kQKF+kg(DN zV{dk1*5FsTT#(DY*_pFx@0B^k$XT-Y(Zb+Hxmy3+k!f0 hZHUv-+k0ggyaA7#bm7&f{bT?D002ovPDHLkV1k9(b$kE- literal 0 HcmV?d00001 diff --git a/assets/textures/rpg_with_waste/tiles/generic-rpg-tile20.png b/assets/textures/rpg_with_waste/tiles/generic-rpg-tile20.png new file mode 100644 index 0000000000000000000000000000000000000000..570419757b2ef19fff8cf36dd418553f9a2d6491 GIT binary patch literal 135 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`ex5FlAr`&KXa4T{XwS^r&?$6w zFM|OPGJ^UnC|KX>} j{(Dn?yw~kn#K&O$Pv*n%`PME#lNmf+{an^LB{Ts5G*5_ca?`0UN<$`@(-`1GVB|I_)njevs8;SFmJ9{FZFr}o(fg)YSc z<_&BNj10y-tukj%=p`#%XOKv6`X(O9rob+w$&hAvGj2hgM8H)BMOV?7R~^O=?*6sj iaYZnl!LlKVnc=yVvyp4szI{OVGkCiCxvXR literal 0 HcmV?d00001 diff --git a/assets/textures/rpg_with_waste/tiles/generic-rpg-tile23.png b/assets/textures/rpg_with_waste/tiles/generic-rpg-tile23.png new file mode 100644 index 0000000000000000000000000000000000000000..c9ca882522448258f002fe6ab06c3cb5dea9b14c GIT binary patch literal 232 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`>pfi@Lo9le&-~r@(Vm%^`S6oq zeMt!r*uF3I$9vr~4ct#=buRuODam*47yt8|+S41JKFDU1uMXsKE|5HPXvbIGIl+a0 zESQ;_xtx!Fe9R-uGfjglF-d|g{MN6(+kY-)5;xdbd%ob=1_hw$%!dWHSr-(}kOJyA znLbneZ+oT++Z;=sjwFM}rzaixUvWj4#b-)}oN2-ai33e%8kagqD5w=4jBQvaIbFh! c`2;J&P7_P#!WB2fflg=eboFyt=akR{0H@klS^xk5 literal 0 HcmV?d00001 diff --git a/assets/textures/rpg_with_waste/tiles/generic-rpg-tile24.png b/assets/textures/rpg_with_waste/tiles/generic-rpg-tile24.png new file mode 100644 index 0000000000000000000000000000000000000000..b4cc644973a7cfd2544117ce897cc983536d25c9 GIT binary patch literal 113 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`7M?DSAr`&KXa4T{XwS^r&?$6w zFW`QGX!aN{%Y8hvs3rodoPEq)FYbrUasKhc+Ae=`?S~3bl=)#pV$@z9N#5b^*CmS19tk|c*tJRMhUm_W-#|kc NJYD@<);T3K0RTy6CjbBd literal 0 HcmV?d00001 diff --git a/assets/textures/rpg_with_waste/tiles/generic-rpg-tile27.png b/assets/textures/rpg_with_waste/tiles/generic-rpg-tile27.png new file mode 100644 index 0000000000000000000000000000000000000000..8a02dc2745aff7f5ac65440e2fec02065b1b8c9b GIT binary patch literal 219 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`i#%N%Lo9le&-~r@(Vm%^`S6oq zeMt!r*uF3I$9vr~4ZI1HlV{buQtf)y_4v3XNI2onFEM9hA3n(q3feb{KA1Llt~Fpj z{P8i5+5QlTnh7Fd4oA1i)buKyI}vg1pL}Fv=i6#FAZRmgXO-;RaJNyr<>bO{=CRH9*%g Nc)I$ztaD0e0su>3SHl1R literal 0 HcmV?d00001 diff --git a/assets/textures/rpg_with_waste/tiles/generic-rpg-tile28.png b/assets/textures/rpg_with_waste/tiles/generic-rpg-tile28.png new file mode 100644 index 0000000000000000000000000000000000000000..37fe95b73b98fc5ed59ac12c614b423c9157872c GIT binary patch literal 127 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`Zk{fVAr`&KXa4T{XwS^r&?$6w zFPnI((o(+Dr-f)A0_LMHFdguTU6tukMyTdR$UW>>5#yf+Oh(%I7!RI3~Uw@ZhCdlTKbN}$o zbUyAR2`=LsN50uIKMwo6=>LmZ9*jCqvRW9`x=Q+`46+!u@-Q&$on^UwYtzT~K!-AT My85}Sb4q9e08S=UM*si- literal 0 HcmV?d00001 diff --git a/assets/textures/rpg_with_waste/tiles/generic-rpg-tile30.png b/assets/textures/rpg_with_waste/tiles/generic-rpg-tile30.png new file mode 100644 index 0000000000000000000000000000000000000000..3a57cbf6462bed37b19478f0e37d78bb70b9d9d0 GIT binary patch literal 114 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`mYyz-Ar`&KXa4T{XwS^r&?$6w zFgTe~DWM4f(zYUR literal 0 HcmV?d00001 diff --git a/assets/textures/rpg_with_waste/tiles/generic-rpg-tile31.png b/assets/textures/rpg_with_waste/tiles/generic-rpg-tile31.png new file mode 100644 index 0000000000000000000000000000000000000000..a87b16d7f8f591495d3fdfd59715382d47c160b3 GIT binary patch literal 295 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`?>t=`Lo9leQ!FfA+cQfg-1#-_ z;r{IgbIu+(!0`O}tj@(NQqx2>XC(wYb~0r=l@63nJbmywPtkdOLz%yNXAUelcC_Ht z%Ww;`>CX}q?qtP%xqm!P2fuTPAV$;R}hGCqLYemUzS@eEWNZ=p!SEWs>h$V;F8G%t*BRwn)S9 zkjtdo8yOby9(d|IDW)Os#FJos&+mt(HLriTa&lv%gTf=@BkeKFJ~{V|Jq%VJOm0fi qSIAzbA(gmuQi}e8KlYNR*cobS1M8$~b}<8e&fw|l=d#Wzp$P!->VH@O literal 0 HcmV?d00001 diff --git a/assets/textures/rpg_with_waste/tiles/generic-rpg-tile32.png b/assets/textures/rpg_with_waste/tiles/generic-rpg-tile32.png new file mode 100644 index 0000000000000000000000000000000000000000..c051b75f6d7f7b0bf2587ecedf10964b38fc8c24 GIT binary patch literal 150 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`v7RoDAr`&KXa4T{XwS^r(An77 znD}Ys^c3j>CkhI#{f{v&JQd@>nXu?c*{dB1R~XpTyo3bruuhRUG$mW@+=Og3zio;i y3=T|R@IlhgKtO$dRp<4B3WcQ2tdV@vwHd4~E4>!pYs~?)h{4m<&t;ucLK6UMr!^S> literal 0 HcmV?d00001 diff --git a/assets/textures/rpg_with_waste/tiles/generic-rpg-tile33.png b/assets/textures/rpg_with_waste/tiles/generic-rpg-tile33.png new file mode 100644 index 0000000000000000000000000000000000000000..ad559527edd57744c9a138005195f0858dbc38e7 GIT binary patch literal 290 zcmV+-0p0$IP)15JumMkUkir3+M-FYO4X#$j9*Y@r_>Nb;Tgb^ZVl?D(pC zxIRB|j@iRW=}C8fO=~QC9o^RT__(CR_I*cJO3t=%SzmdvKE+YKI*^B1t4}_C!_TEn ziu<2F$Ywh>UA0q#ZH}c*$7Sgk2abHRW#%?>3}O)WT;1?;b1n5)- N22WQ%mvv4FO#lYdQd9r{ literal 0 HcmV?d00001 diff --git a/assets/textures/rpg_with_waste/tiles/generic-rpg-tile37.png b/assets/textures/rpg_with_waste/tiles/generic-rpg-tile37.png new file mode 100644 index 0000000000000000000000000000000000000000..efcb8c0cbe4355559765f8e47cd4863c6bf09632 GIT binary patch literal 246 zcmVq zo$t^2&Jof3q8P#H@L+qK8=e%UnH?P%g1rn7EoO+U20$RsN@O)^Jz+fPRM-Wn6@(vP&f90NWkry;oJG2^!lZbvGanV($d&a15B59 zHGq;EfG#4OM;SKrac=-2yFCYhkQD%cUy;P3c31n0=1N&o-=07*qoM6N<$g22&i@Bjb+ literal 0 HcmV?d00001 diff --git a/assets/textures/rpg_with_waste/tiles/generic-rpg-tile40.png b/assets/textures/rpg_with_waste/tiles/generic-rpg-tile40.png new file mode 100644 index 0000000000000000000000000000000000000000..191bdf0a71c6eee77454a5088747e9363ae04308 GIT binary patch literal 142 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`p`I>|Ar`&KXa4T{XwNJ)qvn+= z^W$sVdH(Nhl`J}YK=&hU-K|^KhOdOPgg&ebxsLQ0MW)X2LJ#7 literal 0 HcmV?d00001 diff --git a/assets/textures/rpg_with_waste/tiles/generic-rpg-tile41.png b/assets/textures/rpg_with_waste/tiles/generic-rpg-tile41.png new file mode 100644 index 0000000000000000000000000000000000000000..cc70b01883bd6f4a2c311e416e9949a818950cfe GIT binary patch literal 264 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`=RI8P`VW}Gqdx$nHJ1;-ZMHjvaT2JFl3OIFip79keI~4;Hts% UZfBPC0iazopr07c6s`v3p{ literal 0 HcmV?d00001 diff --git a/assets/textures/rpg_with_waste/tiles/generic-rpg-tile43.png b/assets/textures/rpg_with_waste/tiles/generic-rpg-tile43.png new file mode 100644 index 0000000000000000000000000000000000000000..35babee8b0d0267c7ebb47075cb53bc183001616 GIT binary patch literal 272 zcmV+r0q_2aP)8TZ#p0MqKIQBBCh@Wzu$aS z(y_JqlG|izc*`S!vN6g>j8w!IWTz!0B%H{+lJsHaezvEbMg}tW=Po3!KX%}N!l?YP)u^fDH-LaZ#0m6q}AKovTu)3w|}X9C?L2F~|@KWPrDNDIB$| zDuwz6-#~>(3&u<*1E}ev0>&aw46r;gq~_r@Qe9xbv`BNR3$Rod@L)+~#CcC@!@oYH zlJo6}XgvpDgGHPJSq1zmvswn*aa+07*qoM6N<$g6)WHLjV8( literal 0 HcmV?d00001 diff --git a/assets/textures/rpg_with_waste/tiles/generic-rpg-tile46.png b/assets/textures/rpg_with_waste/tiles/generic-rpg-tile46.png new file mode 100644 index 0000000000000000000000000000000000000000..243933f772dbd760d2d880c44248b49d6e84db40 GIT binary patch literal 241 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`J3L(+Lo9leYa%E8n9s;}ulJW1oZqIFoBoku;g9&*IRthH@jN4gHnlmi>$#Glu60gJd zosWJLvK?ESUnt#hcBMhWXK&V{0&Cb5+!c2vzKBauyms@&ENdNI$s(z(5)l(b4~ZO@ z)5%*B5oKfm1W!z|9Ah3N>vyU2CWOn__a$8r+-6-6J&`f_-S^&z&xfY`$}VW0Ft>-V nK&l~6!0fDxqytC59C3y?E+41k-EWrx{lMVq>gTe~DWM4fx%ye? literal 0 HcmV?d00001 diff --git a/assets/textures/rpg_with_waste/tiles/generic-rpg-tile47.png b/assets/textures/rpg_with_waste/tiles/generic-rpg-tile47.png new file mode 100644 index 0000000000000000000000000000000000000000..2d568b4d59d7c57585659b2c8a77c676a5148676 GIT binary patch literal 237 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`TRdGHLo9leYa%E8nBT~vaB#`7 z5BH;IGy;L*b)Pwnog!y>fFPQ0Us}SQUt;Id6|XYPP_zRIO_r4KC~xe1TWvAB@OAX3 zmR{lcpF%g*3Gmy!l39Xx`yli-TlpqWzRM!FgM$-k~n8@Ak~1!$L_1pe#RXP zMJ9fBUniL`Cm1pqv*ha}a5GCdbh6fPbux;ms;~jUGUIku&uyZX3XvClRgMbCvl;DS dVBXNc!oaL<%XoZlz5~$x44$rjF6*2UngBXROy2+i literal 0 HcmV?d00001 diff --git a/assets/textures/rpg_with_waste/tiles/generic-rpg-tile48.png b/assets/textures/rpg_with_waste/tiles/generic-rpg-tile48.png new file mode 100644 index 0000000000000000000000000000000000000000..d7827d52ba66cbf8e8ae1ef666ffa26761484fb6 GIT binary patch literal 230 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`Ydu{YLo9leYa%E8nBUmg=;#sH z$|$>McRjmv4~X03+52$+b_3^iGcB086_5Tn@FZAYknI7pQw1>qB9 zIt-jWy4*?{WO`Mq86%5Y)IL6<$=*dVW#`}yVx$-k#Hua~Tm zkdRoGQ|mp8+b8EfP_@AU=1=>#8@!Bb$V^K}P_UJncu=6vtt+-+4xifms!k7fr!Fmt zuKRcQH(wTzXJc#ofA5e0^M=f}&c)J6Nx$bgHhJ>OO%-W%TsPB#nc;JqY4459FDrm< OW$<+Mb6Mw<&;$U6G)}t! literal 0 HcmV?d00001 diff --git a/assets/textures/rpg_with_waste/tiles/generic-rpg-tile50.png b/assets/textures/rpg_with_waste/tiles/generic-rpg-tile50.png new file mode 100644 index 0000000000000000000000000000000000000000..c3dccca8c2e593b682e38ba9db1fc4375d133244 GIT binary patch literal 229 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`Ydl>XLo9leYa%E8nBVA9@N9!Z zbN^nA!}a-zY+^yChYw6^UN2cAAt5p2!_6X~q#tvF-hnKJO>Q}D2TY6~6g76ftzMH; z!d!gzNMSqUF1MV7Pb;TCVO7#$kd%<{FlKmG)0Ei2uaJGtR9O8kgTx6_;p6X^Y6|;h zHca;4dnAux;f4B-@5PuOU)x?_=ep4#^>uWJxPVvVi$@ZklJQ(FY#U}MXp2o)Jh8E{ ak&&UR%=v(uxfUPL-3*?telF{r5}E*d@l`$m literal 0 HcmV?d00001 diff --git a/assets/textures/rpg_with_waste/tiles/generic-rpg-tile51.png b/assets/textures/rpg_with_waste/tiles/generic-rpg-tile51.png new file mode 100644 index 0000000000000000000000000000000000000000..ca94b8c3986f5e809ab9f4ee8921376ce8fd9559 GIT binary patch literal 149 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`F`h1tAr`&KHIb8k%x`2m;L@k2 z=qh@Or=t8nUn-jda~E%dVkq;b|DI)xyV54{9$@n@VzB&@*zm-_!93-`;)zPk=VZiG w?l%~>vr5*yaXo2%;CS4Whx@l1JO!E_aZGUEEB5n`fc7wWy85}Sb4q9e0FF>H9RL6T literal 0 HcmV?d00001 diff --git a/assets/textures/rpg_with_waste/tiles/generic-rpg-tile52.png b/assets/textures/rpg_with_waste/tiles/generic-rpg-tile52.png new file mode 100644 index 0000000000000000000000000000000000000000..44bd6653ecf51a8d420c2fd6c7383ca15647fcfb GIT binary patch literal 253 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`M?75|Lo9leYa%E8n9s;{PDU)n zflY1Odr1yPu_V(umO34w^EwxZvhb+iVu)c_&G;hGaTDW@LrxxntXCOI7@Z#6{cGJ4 z>%f)ZWIi#4S)+_`Dcgc2E-@F`yG3(6=dwm#I36dmnlYMBiKlVp&7u#chi4vc;?c4D zwumR1Z(rJnjpC_4-s|>UWsqN?cp|H2LEDBu-^J2CBqlgqoRh7_m+o)(brNH&@4A^5 zhf`K4_VBQ$|2@7;P}XPV{$n5RM@zV#o$@Q2hoQ96Ii=O!VGhtg44$rjF6*2UngEh* BUK;=a literal 0 HcmV?d00001 diff --git a/assets/textures/rpg_with_waste/tiles/generic-rpg-tile53.png b/assets/textures/rpg_with_waste/tiles/generic-rpg-tile53.png new file mode 100644 index 0000000000000000000000000000000000000000..5ca24fa27fe93bd731e4cb1164db05b50716dd1a GIT binary patch literal 204 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`lRaG=Lo9leYa%E8nBT~Bz@_t9 zAhR291EZJ|m&%MQ0Y9So_N65Nfx*Vw{wxNwR=aPDc>eEg4Lnjifyc5qVnXB7Gl`CK zxGo-*Sdb*(EFn?z##J%`NIaahGwl%%2u$|hdqkkQ@#ONjL%cuV>z+BlvY9n9aotRd x!}a-zYi3>5lbD|gngVH?xa-Z}TEuixlJYD@<);T3K0RW*BO56Yd literal 0 HcmV?d00001 diff --git a/assets/textures/rpg_with_waste/tiles/generic-rpg-tile54.png b/assets/textures/rpg_with_waste/tiles/generic-rpg-tile54.png new file mode 100644 index 0000000000000000000000000000000000000000..0808a563b3167b443689856c947dffc94a46693f GIT binary patch literal 209 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`Gdx`!Lo9leYa%E8nBT~Bz@_t9 zAhR291EUxl8(W)kJFB6JPtJYe^aC>wH}TkgTU5}f%N}oR00cf3Kc_7`d`ZZe*+(vo zvAch-#^L(>#2rlXKz&`0k4swV=ms9S__TJ0LYuLX%$(MVGbOg~JGx48wvG3?nHFtL zn$h=-K;|S&o?Y`wwd-L-^27bx4Z_YEI7?2{VPJ@zpnv16Q-1`|jSQZyelF{r5}E)A C=t+kF literal 0 HcmV?d00001 diff --git a/assets/textures/rpg_with_waste/tiles/generic-rpg-tile55.png b/assets/textures/rpg_with_waste/tiles/generic-rpg-tile55.png new file mode 100644 index 0000000000000000000000000000000000000000..413224486ee164f60deb81b8923b6a37b82bffbd GIT binary patch literal 199 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`eV#6kAr`&KHIb8k%x`2m;L`al zklBrQ!7N6d6LUD#?;DjwL@m;|QS`x-83+ywZnKss;sF93A)hP|%_Dle-x#RI=+AdC zx4;L@?tP6wF!AAoHUB}fJ<<0Mi9VUtX>0%lK6YOxF~;)A8XOck%wQxxTV|Jpu+O9Y k+YQ=O6q_Zt?@MK1Fb&c4l8q452D*&F)78&qol`;+0AXrBumAu6 literal 0 HcmV?d00001 diff --git a/assets/textures/rpg_with_waste/tiles/generic-rpg-tile56.png b/assets/textures/rpg_with_waste/tiles/generic-rpg-tile56.png new file mode 100644 index 0000000000000000000000000000000000000000..5a37f17250c4217220b358b811d3da2c74d20f13 GIT binary patch literal 146 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`k)AG&Ar`&KHIb8k%x`otc=#l` zjnCVg4Ftr3OpOf;3`Ayd8ym>j`|V>aaF&pem~q0Cfz6Fq!nC0g2t1oSdySa?RdX8$ pByl{AOStoE+CrvTn@=z@+~eU}x$@`xi9kyjJYD@<);T3K0RXb^E8GA8 literal 0 HcmV?d00001 diff --git a/assets/textures/rpg_with_waste/tiles/generic-rpg-tile57.png b/assets/textures/rpg_with_waste/tiles/generic-rpg-tile57.png new file mode 100644 index 0000000000000000000000000000000000000000..4e98383113e50781712f6f32793219231fa84293 GIT binary patch literal 316 zcmV-C0mJ@@P)S>t%*0`8eCh1_;L0H#U8T{xe-re8p-Uhn4O1QCl+5cXSzNtv6adwu}(b73E^={aiv O0000A0uPB9l=X>d$zV3{n{48%X#{(Kip`|)1aXPcr(H6z0%X`v1O7SHhmTFc<+>gTe~ HDWM4fJ#juj literal 0 HcmV?d00001 diff --git a/assets/textures/rpg_with_waste/tiles/generic-rpg-tile59.png b/assets/textures/rpg_with_waste/tiles/generic-rpg-tile59.png new file mode 100644 index 0000000000000000000000000000000000000000..a0cde78a935e08dfa0c368726e3030acecafefd7 GIT binary patch literal 298 zcmV+_0oDGAP)=7gqNKW8c7A);-?X~h2f#d)IA&>)DNWj)0(Naj^TF8q@-Uio! zh26)@yw5(No{>fiyS#+*T-ajN4=B&YE-!xyiNg%q1Udk)-<+5j00gzr&nl7%0HBxC z=1unw59vX(U{Yb7WdMM!?;C~0b4*#+S%#pN&3y~sXb`72I3yx+A3-fyJg6m(;{t&E zw9qb@2sW69kM9h~#3Y`Fk3kcmo{^>>5J`nNy;%tfY!5!Y*@=w?|H3f^P1z?iKAZcc w;6q$3_|llfO$B^;?0P43D!9JRgT$d0-h}OXini04Gynhq07*qoM6N<$f=iQpumAu6 literal 0 HcmV?d00001 diff --git a/assets/textures/rpg_with_waste/tiles/generic-rpg-tile60.png b/assets/textures/rpg_with_waste/tiles/generic-rpg-tile60.png new file mode 100644 index 0000000000000000000000000000000000000000..6e67cbb19d78039e4466e6a8822a141741fc0d9a GIT binary patch literal 305 zcmV-10nYx3P)1pw6ox;ElD%}u1w3^&DF*ulh2Eiiy@U?!6uM=1E>egN5E2NO&Y5xnQH;lc7j-Ck zQCul$@^4S?|3AGasdD$}h^VS9qm44nOryg%<x$K3vUIi=Pf_LbhQV#Cec@cHh(XdKzMbb z>-^7AFFqjhHFkP%hCoz?cNZ7U?L$CRhPNcD6S&XAqPb-<7(4`Id4Z(InFG*SRKFCJ wA<3|VhOI6!_6(>t*WGBd7|Z9+2ldDP066StADUV6_y7O^07*qoM6N<$f{s{#3IG5A literal 0 HcmV?d00001 diff --git a/assets/textures/rpg_with_waste/tiles/generic-rpg-tile62.png b/assets/textures/rpg_with_waste/tiles/generic-rpg-tile62.png new file mode 100644 index 0000000000000000000000000000000000000000..f5f4e07adada6fedc9585e2998c9b57754563dc6 GIT binary patch literal 258 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`Cp}#pLo9leYa%E8nBVB4aB#`7 z5BH;IG=e~9$k`VSI?P&q^63e8eu?d8Oy}c%WU}Bu%#6g-2e0$=MBjg8cHqc2TR-M= zGGZwoHj1bIc(3cTOMHTHEas* zin|hD#3d+RyZK_4wT`Z2k_@Gj~Ym)U7l)VY~lG!I#|z z%#Yu`*VqA6(WdN|#beMt;p&svh=T`qT;20xf9KokHsf|y$-WJD6F2-^dZ?h~Egv%w zG@sQM1-XPxzB;h2>+$i2H8X13m#Q*9K0WEk{}bn|iz5V%?ld@@n3JM#$57f>;G*b5 qp=L(4IYur`fy^113{_PJSQ$LdrF$-G&lCjupTX1B&t;ucLK6U)v3s`w literal 0 HcmV?d00001 diff --git a/assets/textures/rpg_with_waste/tiles/generic-rpg-tile64.png b/assets/textures/rpg_with_waste/tiles/generic-rpg-tile64.png new file mode 100644 index 0000000000000000000000000000000000000000..9aa272da9ce24e94a7df92ee85bb4b93a67a5f0b GIT binary patch literal 219 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`i#%N%Lo9leYa%E8nBVB5aK~_V zV`t1+g9Aqn95_($Y=c57+l(9g)K>&}1hzVQ1hP8MX^ohD@9zHQ+pJRSX_g9eL95wCwh3GsW(`lzBs#V!=Ln?V{u88VX%JcS##K^6!sQ{8=<)Xk zA~U#?LwoXOe!p1B)5F7_zAz>I*xG!_Z89}yf%YCKXyHwg@JVi8s@k@YVZ#Jnmv_Dk RF9Kc5;OXk;vd$@?2>>aVQyc&Q literal 0 HcmV?d00001 diff --git a/assets/textures/rpg_with_waste/tiles/generic-rpg-tile65.png b/assets/textures/rpg_with_waste/tiles/generic-rpg-tile65.png new file mode 100644 index 0000000000000000000000000000000000000000..a60a2d4c969e64dca50947692da6aaef3f1b2d98 GIT binary patch literal 183 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`b)GJcAr`&KDKGwhnBVB~L4AJv z!fS>d3lCqK)HqRw`N+EX*3C0LuAVt?;J^p3;Mt8p@Nnw|#ZNp9ng8DF`s`ygFfd^I zbMkrO3X8fqjfJnHPsIcj{;^19D~X7jl+JMah(6ER-`5Qd3<3l?bcFW@q%k}`{nFW1 gHsB3YgcB3P0%6t3@#XJ716{)4>FVdQ&MBb@03n1*1^@s6 literal 0 HcmV?d00001 diff --git a/assets/textures/rpg_with_waste/tiles/generic-rpg-tile66.png b/assets/textures/rpg_with_waste/tiles/generic-rpg-tile66.png new file mode 100644 index 0000000000000000000000000000000000000000..1de9294aced304eb93e03e8b5bfa44d0a895e071 GIT binary patch literal 190 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`t)4E9Ar`&KDKGwhnBT~9;75_w z;rjf}YIk zJY?`bP0l+XkKmE}ge literal 0 HcmV?d00001 diff --git a/assets/textures/rpg_with_waste/tiles/generic-rpg-tile67.png b/assets/textures/rpg_with_waste/tiles/generic-rpg-tile67.png new file mode 100644 index 0000000000000000000000000000000000000000..b53c74e306a2e2653bf82ea1c0017a10e44df98f GIT binary patch literal 167 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`d7dtgAr`&KDKGwhnBVB4Q1(~r zaP~rH9?RY+9-k#yZtTqI4KJ*%+fFWz<7?nPvMxTg!tC%I#h+>F%#W{a=h1m`>&~8f zS?1)gG>kWW2RNo3=BoNvPnzci0lN~ O%;4$j=d#Wzp$PyO;yiu; literal 0 HcmV?d00001 diff --git a/assets/textures/rpg_with_waste/tiles/generic-rpg-tile68.png b/assets/textures/rpg_with_waste/tiles/generic-rpg-tile68.png new file mode 100644 index 0000000000000000000000000000000000000000..3eb10318591d0a346e71b18a383d2ea201fb5ef5 GIT binary patch literal 150 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`v7RoDAr`&KDKGwhnBVB4Q1(~r z@Mg(pJo(x|k~2K6_V9U_F{D}FWD9uH6v*7x%DCQStKQ{q(ovcV7FrknP&4JT|uKKsJWY2SsPpzbftqTEyV#>gTe~DWM4fCrdF@ literal 0 HcmV?d00001 diff --git a/assets/textures/rpg_with_waste/tiles/generic-rpg-tile69.png b/assets/textures/rpg_with_waste/tiles/generic-rpg-tile69.png new file mode 100644 index 0000000000000000000000000000000000000000..51a490cc33a1acae78e5ba632933324d94ae5614 GIT binary patch literal 214 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`b3I)gLo9leQ(pZ2Fu#$b;BT@? zv)cclHv6A8JX`x5d1R+e2 zg?kJo7ZNj1PRLgCo5!dly#K(>l-&(lY(92hiyC4S%KmDlvIV?pN;f|9@MXiq8&f)X zRy=FH?$mz5{K3`>ikChy8C5J@$(tT5!>#iqqbcR(V;-L4k`fH*VwxYnvR_OBI+VfF L)z4*}Q$iB}rn^{z literal 0 HcmV?d00001 diff --git a/assets/textures/rpg_with_waste/tiles/generic-rpg-tile70.png b/assets/textures/rpg_with_waste/tiles/generic-rpg-tile70.png new file mode 100644 index 0000000000000000000000000000000000000000..07bab3c2a73d9c2a3b153e4b0355b8e62852f126 GIT binary patch literal 86 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`vYsxEAr`&KXa4T{XwS^r&?$6w jF@?HBQDEb=1aY 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 E0Ds;dyZ`_I literal 0 HcmV?d00001 diff --git a/assets/textures/rpg_with_waste/ui/generic-rpg-ui-inventario03.png b/assets/textures/rpg_with_waste/ui/generic-rpg-ui-inventario03.png new file mode 100644 index 0000000000000000000000000000000000000000..b2c9c7001d1f2208f66b5b1d8cdf1b3b2294f926 GIT binary patch literal 102 zcmeAS@N?(olHy`uVBq!ia0vp^>_E)M!3HGx`C7_=l&+_XV+hC0# zIdJIEp%WdxOl&g>JP)Xzz0xDG;bKK^>XGLP42`n|XKugo!V;*F!PC{xWt~$(698pQ BA%y?{ literal 0 HcmV?d00001 diff --git a/assets/textures/rpg_with_waste/ui/generic-rpg-ui-inventario04.png b/assets/textures/rpg_with_waste/ui/generic-rpg-ui-inventario04.png new file mode 100644 index 0000000000000000000000000000000000000000..27fe22397c58c310c4dade7ccc97ee9eaf499c37 GIT binary patch literal 171 zcmeAS@N?(olHy`uVBq!ia0vp^>>$j+1|*LJgB>AsjPv`}T4+7>Km&@0gnH z;Z~7aCa^}gg!iD~n%D!ZI$M2Gbt9GEZl2Jw;<`+Ef&GUA&-iPzCZBnryi`P`EXkKm zpe7|YZBE2yJ>!GNwP&uH6Y)9PzIS)o)ddW(rY}t1aZO;J62xGdd;iXD`91gNDO@qy U*IKjlF3@%cPgg&ebxsLQ0D>z&^#A|> literal 0 HcmV?d00001 diff --git a/assets/textures/rpg_with_waste/ui/generic-rpg-ui-text-box.png b/assets/textures/rpg_with_waste/ui/generic-rpg-ui-text-box.png new file mode 100644 index 0000000000000000000000000000000000000000..0842f8510aaf4da75ac84ea5dda8c63c22fe35cd GIT binary patch literal 372 zcmeAS@N?(olHy`uVBq!ia0vp^1wgF8!3HEx<^9>iz`$tj>EalY(fIcEMz6yG5^WE^ z&pGPtk>*%Zw88nHnD|$=SFd, + pub filter: Option bool + Send + Sync + 'static>> } diff --git a/crates/bevy_asset/src/lib.rs b/crates/bevy_asset/src/lib.rs index 4b29beae799b5..fce2e2769a0a3 100644 --- a/crates/bevy_asset/src/lib.rs +++ b/crates/bevy_asset/src/lib.rs @@ -1618,7 +1618,7 @@ mod tests { .init_asset::() .register_asset_loader(CoolTextLoader); let asset_server = app.world().resource::().clone(); - let handle: Handle = asset_server.load_folder("text"); + let handle: Handle = asset_server.load_folder("text",None); gate_opener.open(a_path); gate_opener.open(b_path); gate_opener.open(c_path); diff --git a/crates/bevy_asset/src/server/mod.rs b/crates/bevy_asset/src/server/mod.rs index e120888616692..fa201ddd66b10 100644 --- a/crates/bevy_asset/src/server/mod.rs +++ b/crates/bevy_asset/src/server/mod.rs @@ -26,7 +26,7 @@ use alloc::{ }; use atomicow::CowArc; use bevy_ecs::prelude::*; -use bevy_platform::collections::HashSet; +use bevy_platform::collections::{HashMap, HashSet}; use bevy_tasks::IoTaskPool; use core::{any::TypeId, future::Future, panic::AssertUnwindSafe, task::Poll}; use crossbeam_channel::{Receiver, Sender}; @@ -944,7 +944,11 @@ impl AssetServer { /// removed, added or moved. This includes files in subdirectories and moving, adding, /// or removing complete subdirectories. #[must_use = "not using the returned strong handle may result in the unexpected release of the assets"] - pub fn load_folder<'a>(&self, path: impl Into>) -> Handle { + pub fn load_folder<'a>( + &self, + path: impl Into>, + filter: Option bool + Send + Sync + 'static>>, + ) -> Handle { let path = path.into().into_owned(); let (handle, should_load) = self .data @@ -959,23 +963,34 @@ impl AssetServer { return handle; } let id = handle.id().untyped(); - self.load_folder_internal(id, path); + self.load_folder_internal(id, path, filter); handle } - pub(crate) fn load_folder_internal(&self, id: UntypedAssetId, path: AssetPath) { + pub(crate) fn load_folder_internal( + &self, + id: UntypedAssetId, + path: AssetPath, + filter: Option bool + Send + Sync + 'static>>, + ) { async fn load_folder<'a>( source: AssetSourceId<'static>, path: &'a Path, reader: &'a dyn ErasedAssetReader, server: &'a AssetServer, handles: &'a mut Vec, + filter: Option bool + Send + Sync + 'static>>, ) -> Result<(), AssetLoadError> { let is_dir = reader.is_directory(path).await?; if is_dir { let mut path_stream = reader.read_directory(path.as_ref()).await?; while let Some(child_path) = path_stream.next().await { + if let Some(ref filter_fn) = filter { + if !filter_fn(path) { + continue; + } + } if reader.is_directory(&child_path).await? { Box::pin(load_folder( source.clone(), @@ -983,6 +998,7 @@ impl AssetServer { reader, server, handles, + filter.clone(), )) .await?; } else { @@ -1030,11 +1046,12 @@ impl AssetServer { }; let mut handles = Vec::new(); - match load_folder(source.id(), path.path(), asset_reader, &server, &mut handles).await { + let filter_clone = filter.clone(); + match load_folder(source.id(), path.path(), asset_reader, &server, &mut handles,filter).await { Ok(_) => server.send_asset_event(InternalAssetEvent::Loaded { id, loaded_asset: LoadedAsset::new_with_dependencies( - LoadedFolder { handles }, + LoadedFolder { handles,filter:filter_clone }, ) .into(), }), @@ -1690,7 +1707,11 @@ pub fn handle_internal_asset_events(world: &mut World) { AssetPath::from(current_folder.clone()).with_source(source.clone()); for folder_handle in infos.get_path_handles(&parent_asset_path) { info!("Reloading folder {parent_asset_path} because the content has changed"); - server.load_folder_internal(folder_handle.id(), parent_asset_path.clone()); + server.load_folder_internal( + folder_handle.id(), + parent_asset_path.clone(), + None, + ); } } }; diff --git a/examples/2d/texture_atlas.rs b/examples/2d/texture_atlas.rs index 25106adcfb48f..45b6ef380d136 100644 --- a/examples/2d/texture_atlas.rs +++ b/examples/2d/texture_atlas.rs @@ -31,7 +31,7 @@ struct RpgSpriteFolder(Handle); fn load_textures(mut commands: Commands, asset_server: Res) { // Load multiple, individual sprites from a folder - commands.insert_resource(RpgSpriteFolder(asset_server.load_folder("textures/rpg"))); + commands.insert_resource(RpgSpriteFolder(asset_server.load_folder("textures/rpg",None))); } fn check_textures( diff --git a/examples/asset/asset_loading.rs b/examples/asset/asset_loading.rs index 49d2dca279025..cecbb28845c59 100644 --- a/examples/asset/asset_loading.rs +++ b/examples/asset/asset_loading.rs @@ -52,7 +52,7 @@ fn setup( // to load. // If you want to keep the assets in the folder alive, make sure you store the returned handle // somewhere. - let _loaded_folder: Handle = asset_server.load_folder("models/torus"); + let _loaded_folder: Handle = asset_server.load_folder("models/torus",None); // If you want a handle to a specific asset in a loaded folder, the easiest way to get one is to call load. // It will _not_ be loaded a second time. diff --git a/examples/asset/folder_filter.rs b/examples/asset/folder_filter.rs new file mode 100644 index 0000000000000..a4fb9f5598ac0 --- /dev/null +++ b/examples/asset/folder_filter.rs @@ -0,0 +1,296 @@ +//! In this example we generate four texture atlases (sprite sheets) from a folder containing +//! individual sprites. +//! +//! The texture atlases are generated with different padding and sampling to demonstrate the +//! effect of these settings, and how bleeding issues can be resolved by padding the sprites. +//! +//! Only one padded and one unpadded texture atlas are rendered to the screen. +//! An upscaled sprite from each of the four atlases are rendered to the screen. + +use std::sync::Arc; + +use bevy::{asset::LoadedFolder, image::ImageSampler, prelude::*}; + +fn main() { + App::new() + .add_plugins(DefaultPlugins.set(ImagePlugin::default_nearest())) // fallback to nearest sampling + .init_state::() + .add_systems(OnEnter(AppState::Setup), load_textures) + .add_systems(Update, check_textures.run_if(in_state(AppState::Setup))) + .add_systems(OnEnter(AppState::Finished), setup) + .run(); +} + +#[derive(Debug, Clone, Copy, Default, PartialEq, Eq, Hash, States)] +enum AppState { + #[default] + Setup, + Finished, +} + +#[derive(Resource, Default)] +struct RpgSpriteFolder(Handle); + +fn load_textures(mut commands: Commands, asset_server: Res) { + // Load multiple, individual sprites from a folder + commands.insert_resource(RpgSpriteFolder(asset_server.load_folder( + "textures/rpg_with_waste", + Some(Arc::new(|path| { + info!("{:?}", path); + !path.is_dir() && path.extension().unwrap() == "png" + })), + ))); +} + +fn check_textures( + mut next_state: ResMut>, + rpg_sprite_folder: Res, + mut events: EventReader>, +) { + // Advance the `AppState` once all sprite handles have been loaded by the `AssetServer` + for event in events.read() { + if event.is_loaded_with_dependencies(&rpg_sprite_folder.0) { + next_state.set(AppState::Finished); + } + } +} + +fn setup( + mut commands: Commands, + rpg_sprite_handles: Res, + asset_server: Res, + mut texture_atlases: ResMut>, + loaded_folders: Res>, + mut textures: ResMut>, +) { + let loaded_folder = loaded_folders.get(&rpg_sprite_handles.0).unwrap(); + + // Create texture atlases with different padding and sampling + + let (texture_atlas_linear, linear_sources, linear_texture) = create_texture_atlas( + loaded_folder, + None, + Some(ImageSampler::linear()), + &mut textures, + ); + let atlas_linear_handle = texture_atlases.add(texture_atlas_linear); + + let (texture_atlas_nearest, nearest_sources, nearest_texture) = create_texture_atlas( + loaded_folder, + None, + Some(ImageSampler::nearest()), + &mut textures, + ); + let atlas_nearest_handle = texture_atlases.add(texture_atlas_nearest); + + let (texture_atlas_linear_padded, linear_padded_sources, linear_padded_texture) = + create_texture_atlas( + loaded_folder, + Some(UVec2::new(6, 6)), + Some(ImageSampler::linear()), + &mut textures, + ); + let atlas_linear_padded_handle = texture_atlases.add(texture_atlas_linear_padded.clone()); + + let (texture_atlas_nearest_padded, nearest_padded_sources, nearest_padded_texture) = + create_texture_atlas( + loaded_folder, + Some(UVec2::new(6, 6)), + Some(ImageSampler::nearest()), + &mut textures, + ); + let atlas_nearest_padded_handle = texture_atlases.add(texture_atlas_nearest_padded); + + commands.spawn(Camera2d); + + // Padded textures are to the right, unpadded to the left + + // Draw unpadded texture atlas + commands.spawn(( + Sprite::from_image(linear_texture.clone()), + Transform { + translation: Vec3::new(-250.0, -160.0, 0.0), + scale: Vec3::splat(0.5), + ..default() + }, + )); + + // Draw padded texture atlas + commands.spawn(( + Sprite::from_image(linear_padded_texture.clone()), + Transform { + translation: Vec3::new(250.0, -160.0, 0.0), + scale: Vec3::splat(0.5), + ..default() + }, + )); + + let font = asset_server.load("fonts/FiraSans-Bold.ttf"); + + // Padding label text style + let text_style: TextFont = TextFont { + font: font.clone(), + font_size: 42.0, + ..default() + }; + + // Labels to indicate padding + + // No padding + create_label( + &mut commands, + (-250.0, 250.0, 0.0), + "No padding", + text_style.clone(), + ); + + // Padding + create_label(&mut commands, (250.0, 250.0, 0.0), "Padding", text_style); + + // Get handle to a sprite to render + let vendor_handle: Handle = asset_server + .get_handle("textures/rpg/chars/vendor/generic-rpg-vendor.png") + .unwrap(); + + // Configuration array to render sprites through iteration + let configurations: [( + &str, + Handle, + TextureAtlasSources, + Handle, + f32, + ); 4] = [ + ( + "Linear", + atlas_linear_handle, + linear_sources, + linear_texture, + -350.0, + ), + ( + "Nearest", + atlas_nearest_handle, + nearest_sources, + nearest_texture, + -150.0, + ), + ( + "Linear", + atlas_linear_padded_handle, + linear_padded_sources, + linear_padded_texture, + 150.0, + ), + ( + "Nearest", + atlas_nearest_padded_handle, + nearest_padded_sources, + nearest_padded_texture, + 350.0, + ), + ]; + + // Label text style + let sampling_label_style = TextFont { + font, + font_size: 25.0, + ..default() + }; + + let base_y = 80.0; // y position of the sprites + + for (sampling, atlas_handle, atlas_sources, atlas_texture, x) in configurations { + // Render a sprite from the texture_atlas + create_sprite_from_atlas( + &mut commands, + (x, base_y, 0.0), + atlas_texture, + atlas_sources, + atlas_handle, + &vendor_handle, + ); + + // Render a label to indicate the sampling setting + create_label( + &mut commands, + (x, base_y + 110.0, 0.0), // Offset to y position of the sprite + sampling, + sampling_label_style.clone(), + ); + } +} + +/// Create a texture atlas with the given padding and sampling settings +/// from the individual sprites in the given folder. +fn create_texture_atlas( + folder: &LoadedFolder, + padding: Option, + sampling: Option, + textures: &mut ResMut>, +) -> (TextureAtlasLayout, TextureAtlasSources, Handle) { + // Build a texture atlas using the individual sprites + let mut texture_atlas_builder = TextureAtlasBuilder::default(); + texture_atlas_builder.padding(padding.unwrap_or_default()); + for handle in folder.handles.iter() { + let id = handle.id().typed_unchecked::(); + let Some(texture) = textures.get(id) else { + warn!( + "{} did not resolve to an `Image` asset.", + handle.path().unwrap() + ); + continue; + }; + + texture_atlas_builder.add_texture(Some(id), texture); + } + + let (texture_atlas_layout, texture_atlas_sources, texture) = + texture_atlas_builder.build().unwrap(); + let texture = textures.add(texture); + + // Update the sampling settings of the texture atlas + let image = textures.get_mut(&texture).unwrap(); + image.sampler = sampling.unwrap_or_default(); + + (texture_atlas_layout, texture_atlas_sources, texture) +} + +/// Create and spawn a sprite from a texture atlas +fn create_sprite_from_atlas( + commands: &mut Commands, + translation: (f32, f32, f32), + atlas_texture: Handle, + atlas_sources: TextureAtlasSources, + atlas_handle: Handle, + vendor_handle: &Handle, +) { + commands.spawn(( + Transform { + translation: Vec3::new(translation.0, translation.1, translation.2), + scale: Vec3::splat(3.0), + ..default() + }, + Sprite::from_atlas_image( + atlas_texture, + atlas_sources.handle(atlas_handle, vendor_handle).unwrap(), + ), + )); +} + +/// Create and spawn a label (text) +fn create_label( + commands: &mut Commands, + translation: (f32, f32, f32), + text: &str, + text_style: TextFont, +) { + commands.spawn(( + Text2d::new(text), + text_style, + TextLayout::new_with_justify(Justify::Center), + Transform { + translation: Vec3::new(translation.0, translation.1, translation.2), + ..default() + }, + )); +} From 7e51fc0749a5d3034ac9eb859a6c5ff7c20fdea7 Mon Sep 17 00:00:00 2001 From: shishanyue <62888460+shishanyue@users.noreply.github.com> Date: Wed, 18 Jun 2025 23:31:39 +0800 Subject: [PATCH 02/18] maybe ok? --- crates/bevy_asset/src/folder.rs | 4 ++-- crates/bevy_asset/src/server/mod.rs | 25 +++++++++++++++++++------ examples/asset/folder_filter.rs | 9 +++++---- 3 files changed, 26 insertions(+), 12 deletions(-) diff --git a/crates/bevy_asset/src/folder.rs b/crates/bevy_asset/src/folder.rs index 83e7a2082ffd1..a0ae548b7246f 100644 --- a/crates/bevy_asset/src/folder.rs +++ b/crates/bevy_asset/src/folder.rs @@ -2,7 +2,7 @@ use std::{path::Path, sync::Arc}; use alloc::vec::Vec; -use crate::{io::ErasedAssetReader, Asset, UntypedHandle}; +use crate::{Asset, UntypedHandle}; use bevy_reflect::TypePath; /// A "loaded folder" containing handles for all assets stored in a given [`AssetPath`]. @@ -15,5 +15,5 @@ pub struct LoadedFolder { /// The handles of all assets stored in the folder. #[dependency] pub handles: Vec, - pub filter: Option bool + Send + Sync + 'static>> + pub filter: Option bool + Send + Sync + 'static>> } diff --git a/crates/bevy_asset/src/server/mod.rs b/crates/bevy_asset/src/server/mod.rs index fa201ddd66b10..bd60d6d2affaa 100644 --- a/crates/bevy_asset/src/server/mod.rs +++ b/crates/bevy_asset/src/server/mod.rs @@ -947,7 +947,7 @@ impl AssetServer { pub fn load_folder<'a>( &self, path: impl Into>, - filter: Option bool + Send + Sync + 'static>>, + filter: Option bool + Send + Sync + 'static>>, ) -> Handle { let path = path.into().into_owned(); let (handle, should_load) = self @@ -972,7 +972,7 @@ impl AssetServer { &self, id: UntypedAssetId, path: AssetPath, - filter: Option bool + Send + Sync + 'static>>, + filter: Option bool + Send + Sync + 'static>>, ) { async fn load_folder<'a>( source: AssetSourceId<'static>, @@ -980,18 +980,19 @@ impl AssetServer { reader: &'a dyn ErasedAssetReader, server: &'a AssetServer, handles: &'a mut Vec, - filter: Option bool + Send + Sync + 'static>>, + filter: Option bool + Send + Sync + 'static>>, ) -> Result<(), AssetLoadError> { let is_dir = reader.is_directory(path).await?; if is_dir { let mut path_stream = reader.read_directory(path.as_ref()).await?; while let Some(child_path) = path_stream.next().await { + let child_is_dir = reader.is_directory(&child_path).await?; if let Some(ref filter_fn) = filter { - if !filter_fn(path) { + if !filter_fn(&child_path, child_is_dir) { continue; } } - if reader.is_directory(&child_path).await? { + if child_is_dir { Box::pin(load_folder( source.clone(), &child_path, @@ -1003,6 +1004,11 @@ impl AssetServer { .await?; } else { let path = child_path.to_str().expect("Path should be a valid string."); + if let Some(ref filter_fn) = filter { + if !filter_fn(&child_path, false) { + continue; + } + } let asset_path = AssetPath::parse(path).with_source(source.clone()); match server.load_untyped_async(asset_path).await { Ok(handle) => handles.push(handle), @@ -1637,6 +1643,13 @@ impl AssetServer { /// A system that manages internal [`AssetServer`] events, such as finalizing asset loads. pub fn handle_internal_asset_events(world: &mut World) { world.resource_scope(|world, server: Mut| { + let mut folder_filters: HashMap< + AssetPath<'_>, + Option bool + Send + Sync + 'static>>, + > = HashMap::new(); + for (id, loaded_folder) in world.get_resource::>().unwrap().iter() { + folder_filters.insert(server.get_path(id).unwrap(), loaded_folder.filter.clone()); + } let mut infos = server.data.infos.write(); let var_name = vec![]; let mut untyped_failures = var_name; @@ -1710,7 +1723,7 @@ pub fn handle_internal_asset_events(world: &mut World) { server.load_folder_internal( folder_handle.id(), parent_asset_path.clone(), - None, + folder_filters.get(&parent_asset_path).unwrap().clone(), ); } } diff --git a/examples/asset/folder_filter.rs b/examples/asset/folder_filter.rs index a4fb9f5598ac0..e199a069579ac 100644 --- a/examples/asset/folder_filter.rs +++ b/examples/asset/folder_filter.rs @@ -35,9 +35,10 @@ fn load_textures(mut commands: Commands, asset_server: Res) { // Load multiple, individual sprites from a folder commands.insert_resource(RpgSpriteFolder(asset_server.load_folder( "textures/rpg_with_waste", - Some(Arc::new(|path| { - info!("{:?}", path); - !path.is_dir() && path.extension().unwrap() == "png" + Some(Arc::new(|path,is_dir| { + let a = is_dir || path.extension().unwrap_or_default() == "png"; + info!("is_dir:{},path:{:?} {}",is_dir,path,a); + a })), ))); } @@ -149,7 +150,7 @@ fn setup( // Get handle to a sprite to render let vendor_handle: Handle = asset_server - .get_handle("textures/rpg/chars/vendor/generic-rpg-vendor.png") + .get_handle("textures/rpg_with_waste/chars/vendor/generic-rpg-vendor.png") .unwrap(); // Configuration array to render sprites through iteration From c29cbcbf35e447695fd46a7978863588447de606 Mon Sep 17 00:00:00 2001 From: shishanyue <62888460+shishanyue@users.noreply.github.com> Date: Thu, 19 Jun 2025 00:05:12 +0800 Subject: [PATCH 03/18] fix CI --- crates/bevy_asset/src/folder.rs | 2 +- crates/bevy_asset/src/lib.rs | 2 +- examples/2d/texture_atlas.rs | 4 +++- examples/README.md | 1 + examples/asset/asset_loading.rs | 2 +- examples/asset/folder_filter.rs | 13 +++++++------ 6 files changed, 14 insertions(+), 10 deletions(-) diff --git a/crates/bevy_asset/src/folder.rs b/crates/bevy_asset/src/folder.rs index a0ae548b7246f..6fa5e4263b8ee 100644 --- a/crates/bevy_asset/src/folder.rs +++ b/crates/bevy_asset/src/folder.rs @@ -15,5 +15,5 @@ pub struct LoadedFolder { /// The handles of all assets stored in the folder. #[dependency] pub handles: Vec, - pub filter: Option bool + Send + Sync + 'static>> + pub filter: Option bool + Send + Sync + 'static>>, } diff --git a/crates/bevy_asset/src/lib.rs b/crates/bevy_asset/src/lib.rs index fce2e2769a0a3..1859ea8f8041e 100644 --- a/crates/bevy_asset/src/lib.rs +++ b/crates/bevy_asset/src/lib.rs @@ -1618,7 +1618,7 @@ mod tests { .init_asset::() .register_asset_loader(CoolTextLoader); let asset_server = app.world().resource::().clone(); - let handle: Handle = asset_server.load_folder("text",None); + let handle: Handle = asset_server.load_folder("text", None); gate_opener.open(a_path); gate_opener.open(b_path); gate_opener.open(c_path); diff --git a/examples/2d/texture_atlas.rs b/examples/2d/texture_atlas.rs index 45b6ef380d136..8e9b2b819ea05 100644 --- a/examples/2d/texture_atlas.rs +++ b/examples/2d/texture_atlas.rs @@ -31,7 +31,9 @@ struct RpgSpriteFolder(Handle); fn load_textures(mut commands: Commands, asset_server: Res) { // Load multiple, individual sprites from a folder - commands.insert_resource(RpgSpriteFolder(asset_server.load_folder("textures/rpg",None))); + commands.insert_resource(RpgSpriteFolder( + asset_server.load_folder("textures/rpg", None), + )); } fn check_textures( diff --git a/examples/README.md b/examples/README.md index bccadd438eab9..3d0cfd97c612f 100644 --- a/examples/README.md +++ b/examples/README.md @@ -254,6 +254,7 @@ Example | Description [Custom Asset IO](../examples/asset/custom_asset_reader.rs) | Implements a custom AssetReader [Embedded Asset](../examples/asset/embedded_asset.rs) | Embed an asset in the application binary and load it [Extra asset source](../examples/asset/extra_source.rs) | Load an asset from a non-standard asset source +[Folder Filter](../examples/asset/folder_filter.rs) | Load Folder With Filter [Hot Reloading of Assets](../examples/asset/hot_asset_reloading.rs) | Demonstrates automatic reloading of assets when modified on disk [Multi-asset synchronization](../examples/asset/multi_asset_sync.rs) | Demonstrates how to wait for multiple assets to be loaded. [Repeated texture configuration](../examples/asset/repeated_texture.rs) | How to configure the texture to repeat instead of the default clamp to edges diff --git a/examples/asset/asset_loading.rs b/examples/asset/asset_loading.rs index cecbb28845c59..5e53be37243db 100644 --- a/examples/asset/asset_loading.rs +++ b/examples/asset/asset_loading.rs @@ -52,7 +52,7 @@ fn setup( // to load. // If you want to keep the assets in the folder alive, make sure you store the returned handle // somewhere. - let _loaded_folder: Handle = asset_server.load_folder("models/torus",None); + let _loaded_folder: Handle = asset_server.load_folder("models/torus", None); // If you want a handle to a specific asset in a loaded folder, the easiest way to get one is to call load. // It will _not_ be loaded a second time. diff --git a/examples/asset/folder_filter.rs b/examples/asset/folder_filter.rs index e199a069579ac..4e7eed052c5c7 100644 --- a/examples/asset/folder_filter.rs +++ b/examples/asset/folder_filter.rs @@ -1,5 +1,6 @@ //! In this example we generate four texture atlases (sprite sheets) from a folder containing -//! individual sprites. +//! individual sprites.But the folder containing waste files called "waste.txt" +//! So we use filter to ingrone the waste files //! //! The texture atlases are generated with different padding and sampling to demonstrate the //! effect of these settings, and how bleeding issues can be resolved by padding the sprites. @@ -35,11 +36,11 @@ fn load_textures(mut commands: Commands, asset_server: Res) { // Load multiple, individual sprites from a folder commands.insert_resource(RpgSpriteFolder(asset_server.load_folder( "textures/rpg_with_waste", - Some(Arc::new(|path,is_dir| { - let a = is_dir || path.extension().unwrap_or_default() == "png"; - info!("is_dir:{},path:{:?} {}",is_dir,path,a); - a - })), + Some(Arc::new(|path, is_dir| { + let need = is_dir || path.extension().unwrap_or_default() == "png"; + info!("is_dir:{} path:{:?} need:{}", is_dir, path, need); + need + })), ))); } From 3808ea9edeb93fc36bac1181a296d0b313c80f47 Mon Sep 17 00:00:00 2001 From: shishanyue <62888460+shishanyue@users.noreply.github.com> Date: Thu, 19 Jun 2025 11:42:35 +0800 Subject: [PATCH 04/18] add LoadBatch to LoadedFolder --- Cargo.toml | 8 +- crates/bevy_asset/Cargo.toml | 2 + crates/bevy_asset/src/folder.rs | 61 +++++++- crates/bevy_asset/src/lib.rs | 2 +- crates/bevy_asset/src/server/mod.rs | 138 ++++++++++++++---- examples/2d/texture_atlas.rs | 4 +- examples/README.md | 2 +- examples/asset/asset_loading.rs | 2 +- .../{folder_filter.rs => folder_batch.rs} | 18 +-- 9 files changed, 184 insertions(+), 53 deletions(-) rename examples/asset/{folder_filter.rs => folder_batch.rs} (96%) diff --git a/Cargo.toml b/Cargo.toml index be7ae76c1d2de..cd2f26d4ec62e 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -1782,13 +1782,13 @@ category = "Assets" wasm = false [[example]] -name = "folder_filter" -path = "examples/asset/folder_filter.rs" +name = "folder_batch" +path = "examples/asset/folder_batch.rs" doc-scrape-examples = true -[package.metadata.example.folder_filter] +[package.metadata.example.folder_batch] name = "Folder Filter" -description = "Load Folder With Filter" +description = "Load Folder With Batch" category = "Assets" wasm = false diff --git a/crates/bevy_asset/Cargo.toml b/crates/bevy_asset/Cargo.toml index e91987f40af59..03a2c0218d068 100644 --- a/crates/bevy_asset/Cargo.toml +++ b/crates/bevy_asset/Cargo.toml @@ -62,6 +62,8 @@ uuid = { version = "1.13.1", default-features = false, features = [ "v4", "serde", ] } +glob = "0.3.2" + tracing = { version = "0.1", default-features = false } [target.'cfg(target_os = "android")'.dependencies] diff --git a/crates/bevy_asset/src/folder.rs b/crates/bevy_asset/src/folder.rs index 6fa5e4263b8ee..9471dd6d0b3b8 100644 --- a/crates/bevy_asset/src/folder.rs +++ b/crates/bevy_asset/src/folder.rs @@ -1,10 +1,66 @@ -use std::{path::Path, sync::Arc}; +use std::sync::Arc; use alloc::vec::Vec; use crate::{Asset, UntypedHandle}; use bevy_reflect::TypePath; +/// This is use for [`AssetServer::load_folderload_folder_with_batch`](crate::prelude::AssetServer::load_folder_with_batch). +#[derive(Debug, Clone, Copy, Default)] +pub enum LoadBatchKind { + #[default] + White, //Allow loading + Black, //Disallow loading +} + +impl LoadBatchKind { + pub fn apply(&self, expr: bool) -> bool { + match self { + LoadBatchKind::White => expr, + LoadBatchKind::Black => !expr, + } + } +} + +#[derive(Debug, Clone, Default)] +pub struct LoadBatch { + pub paths: Option>>, + pub paths_kind: LoadBatchKind, + pub extensions: Option>>, + pub extensions_kind: LoadBatchKind, +} + +impl LoadBatch { + pub fn new( + paths: Vec<&'static str>, + paths_kind: LoadBatchKind, + extensions: Vec<&'static str>, + extensions_kind: LoadBatchKind, + ) -> Self { + Self { + paths: Some(Arc::new(paths)), + paths_kind, + extensions: Some(Arc::new(extensions)), + extensions_kind, + } + } + pub fn paths(paths: Vec<&'static str>, paths_kind: LoadBatchKind) -> Self { + Self { + paths: Some(Arc::new(paths)), + paths_kind, + extensions: None, + ..Default::default() + } + } + pub fn extensions(extensions: Vec<&'static str>, extensions_kind: LoadBatchKind) -> Self { + Self { + paths: None, + extensions: Some(Arc::new(extensions)), + extensions_kind, + ..Default::default() + } + } +} /// A "loaded folder" containing handles for all assets stored in a given [`AssetPath`]. /// /// This is produced by [`AssetServer::load_folder`](crate::prelude::AssetServer::load_folder). @@ -15,5 +71,6 @@ pub struct LoadedFolder { /// The handles of all assets stored in the folder. #[dependency] pub handles: Vec, - pub filter: Option bool + Send + Sync + 'static>>, + /// For filtering files that are required or not required. + pub load_batch: Option, } diff --git a/crates/bevy_asset/src/lib.rs b/crates/bevy_asset/src/lib.rs index 1859ea8f8041e..4b29beae799b5 100644 --- a/crates/bevy_asset/src/lib.rs +++ b/crates/bevy_asset/src/lib.rs @@ -1618,7 +1618,7 @@ mod tests { .init_asset::() .register_asset_loader(CoolTextLoader); let asset_server = app.world().resource::().clone(); - let handle: Handle = asset_server.load_folder("text", None); + let handle: Handle = asset_server.load_folder("text"); gate_opener.open(a_path); gate_opener.open(b_path); gate_opener.open(c_path); diff --git a/crates/bevy_asset/src/server/mod.rs b/crates/bevy_asset/src/server/mod.rs index bd60d6d2affaa..ed7e0da490a14 100644 --- a/crates/bevy_asset/src/server/mod.rs +++ b/crates/bevy_asset/src/server/mod.rs @@ -2,7 +2,7 @@ mod info; mod loaders; use crate::{ - folder::LoadedFolder, + folder::{LoadBatch, LoadedFolder}, io::{ AssetReaderError, AssetSource, AssetSourceEvent, AssetSourceId, AssetSources, AssetWriterError, ErasedAssetReader, MissingAssetSourceError, MissingAssetWriterError, @@ -15,8 +15,8 @@ use crate::{ }, path::AssetPath, Asset, AssetEvent, AssetHandleProvider, AssetId, AssetLoadFailedEvent, AssetMetaCheck, Assets, - DeserializeMetaError, ErasedLoadedAsset, Handle, LoadedUntypedAsset, UnapprovedPathMode, - UntypedAssetId, UntypedAssetLoadFailedEvent, UntypedHandle, + DeserializeMetaError, ErasedLoadedAsset, Handle, LoadBatchKind, LoadedUntypedAsset, + UnapprovedPathMode, UntypedAssetId, UntypedAssetLoadFailedEvent, UntypedHandle, }; use alloc::{borrow::ToOwned, boxed::Box, vec, vec::Vec}; use alloc::{ @@ -32,6 +32,7 @@ use core::{any::TypeId, future::Future, panic::AssertUnwindSafe, task::Poll}; use crossbeam_channel::{Receiver, Sender}; use either::Either; use futures_lite::{FutureExt, StreamExt}; +use glob::Pattern; use info::*; use loaders::*; use parking_lot::{RwLock, RwLockWriteGuard}; @@ -944,10 +945,38 @@ impl AssetServer { /// removed, added or moved. This includes files in subdirectories and moving, adding, /// or removing complete subdirectories. #[must_use = "not using the returned strong handle may result in the unexpected release of the assets"] - pub fn load_folder<'a>( + pub fn load_folder<'a>(&self, path: impl Into>) -> Handle { + let path = path.into().into_owned(); + let (handle, should_load) = self + .data + .infos + .write() + .get_or_create_path_handle::( + path.clone(), + HandleLoadingMode::Request, + None, + ); + if !should_load { + return handle; + } + let id = handle.id().untyped(); + self.load_folder_internal(id, path, None); + + handle + } + /// Loads all assets from the specified folder recursively with batch. The [`LoadedFolder`] asset (when it loads) will + /// contain handles to all assets in the folder. You can wait for all assets to load by checking the [`LoadedFolder`]'s + /// [`RecursiveDependencyLoadState`]. + /// + /// Loading the same folder multiple times will return the same handle. If the `file_watcher` + /// feature is enabled, [`LoadedFolder`] handles will reload when a file in the folder is + /// removed, added or moved. This includes files in subdirectories and moving, adding, + /// or removing complete subdirectories. + #[must_use = "not using the returned strong handle may result in the unexpected release of the assets"] + pub fn load_folder_with_batch<'a>( &self, path: impl Into>, - filter: Option bool + Send + Sync + 'static>>, + load_batch: LoadBatch, ) -> Handle { let path = path.into().into_owned(); let (handle, should_load) = self @@ -963,16 +992,14 @@ impl AssetServer { return handle; } let id = handle.id().untyped(); - self.load_folder_internal(id, path, filter); - + self.load_folder_internal(id, path, Some(load_batch)); handle } - pub(crate) fn load_folder_internal( &self, id: UntypedAssetId, path: AssetPath, - filter: Option bool + Send + Sync + 'static>>, + load_batch: Option, ) { async fn load_folder<'a>( source: AssetSourceId<'static>, @@ -980,36 +1007,51 @@ impl AssetServer { reader: &'a dyn ErasedAssetReader, server: &'a AssetServer, handles: &'a mut Vec, - filter: Option bool + Send + Sync + 'static>>, + patterns: &'a Vec, + patterns_kind: LoadBatchKind, + extensions: &'a Option>>, + extensions_kind: LoadBatchKind, ) -> Result<(), AssetLoadError> { let is_dir = reader.is_directory(path).await?; if is_dir { let mut path_stream = reader.read_directory(path.as_ref()).await?; while let Some(child_path) = path_stream.next().await { - let child_is_dir = reader.is_directory(&child_path).await?; - if let Some(ref filter_fn) = filter { - if !filter_fn(&child_path, child_is_dir) { - continue; - } - } - if child_is_dir { + if reader.is_directory(&child_path).await? { Box::pin(load_folder( source.clone(), &child_path, reader, server, handles, - filter.clone(), + patterns, + patterns_kind, + extensions, + extensions_kind, )) .await?; } else { let path = child_path.to_str().expect("Path should be a valid string."); - if let Some(ref filter_fn) = filter { - if !filter_fn(&child_path, false) { - continue; - } + + if !patterns_kind + .apply(patterns.iter().any(|pattern| pattern.matches(path))) + { + continue; + } + + if let Some(extensions) = extensions { + match child_path.extension() { + Some(ext) => { + if !extensions_kind.apply(extensions.contains( + &ext.to_str().expect("Path should be a valid string."), + )) { + continue; + } + } + None => break, + }; } let asset_path = AssetPath::parse(path).with_source(source.clone()); + match server.load_untyped_async(asset_path).await { Ok(handle) => handles.push(handle), // skip assets that cannot be loaded @@ -1026,6 +1068,32 @@ impl AssetServer { } let path = path.into_owned(); + let patterns: Vec = load_batch + .as_ref() + .map(|batch| { + batch + .paths + .clone() + .unwrap_or(Arc::new(vec!["*/*"])) + .iter() + .map(|path| Pattern::new(path).expect("Failed to create pattern from path")) + .collect() + }) + .unwrap_or(vec![Pattern::new("*/*").unwrap()]); + let patterns_kind = load_batch + .as_ref() + .map(|batch| batch.paths_kind) + .unwrap_or_default(); + + let extensions = load_batch + .as_ref() + .map(|batch| batch.extensions.clone()) + .unwrap_or_default(); + let extensions_kind = load_batch + .as_ref() + .map(|batch| batch.extensions_kind) + .unwrap_or_default(); + let server = self.clone(); IoTaskPool::get() .spawn(async move { @@ -1052,12 +1120,11 @@ impl AssetServer { }; let mut handles = Vec::new(); - let filter_clone = filter.clone(); - match load_folder(source.id(), path.path(), asset_reader, &server, &mut handles,filter).await { + match load_folder(source.id(), path.path(), asset_reader, &server, &mut handles,&patterns,patterns_kind,&extensions,extensions_kind).await { Ok(_) => server.send_asset_event(InternalAssetEvent::Loaded { id, loaded_asset: LoadedAsset::new_with_dependencies( - LoadedFolder { handles,filter:filter_clone }, + LoadedFolder { handles,load_batch }, ) .into(), }), @@ -1643,12 +1710,16 @@ impl AssetServer { /// A system that manages internal [`AssetServer`] events, such as finalizing asset loads. pub fn handle_internal_asset_events(world: &mut World) { world.resource_scope(|world, server: Mut| { - let mut folder_filters: HashMap< - AssetPath<'_>, - Option bool + Send + Sync + 'static>>, - > = HashMap::new(); - for (id, loaded_folder) in world.get_resource::>().unwrap().iter() { - folder_filters.insert(server.get_path(id).unwrap(), loaded_folder.filter.clone()); + let mut load_batchs: HashMap, Option> = HashMap::new(); + for (id, loaded_folder) in world + .get_resource::>() + .expect("Could not get LoadedFolder Assets") + .iter() + { + load_batchs.insert( + server.get_path(id).expect("Path should be a valid string."), + loaded_folder.load_batch.clone(), + ); } let mut infos = server.data.infos.write(); let var_name = vec![]; @@ -1723,7 +1794,10 @@ pub fn handle_internal_asset_events(world: &mut World) { server.load_folder_internal( folder_handle.id(), parent_asset_path.clone(), - folder_filters.get(&parent_asset_path).unwrap().clone(), + load_batchs + .get(&parent_asset_path) + .expect("parent folder is doesn't loaded") + .clone(), ); } } diff --git a/examples/2d/texture_atlas.rs b/examples/2d/texture_atlas.rs index 8e9b2b819ea05..25106adcfb48f 100644 --- a/examples/2d/texture_atlas.rs +++ b/examples/2d/texture_atlas.rs @@ -31,9 +31,7 @@ struct RpgSpriteFolder(Handle); fn load_textures(mut commands: Commands, asset_server: Res) { // Load multiple, individual sprites from a folder - commands.insert_resource(RpgSpriteFolder( - asset_server.load_folder("textures/rpg", None), - )); + commands.insert_resource(RpgSpriteFolder(asset_server.load_folder("textures/rpg"))); } fn check_textures( diff --git a/examples/README.md b/examples/README.md index 3d0cfd97c612f..9e1d3c4b4d47c 100644 --- a/examples/README.md +++ b/examples/README.md @@ -254,7 +254,7 @@ Example | Description [Custom Asset IO](../examples/asset/custom_asset_reader.rs) | Implements a custom AssetReader [Embedded Asset](../examples/asset/embedded_asset.rs) | Embed an asset in the application binary and load it [Extra asset source](../examples/asset/extra_source.rs) | Load an asset from a non-standard asset source -[Folder Filter](../examples/asset/folder_filter.rs) | Load Folder With Filter +[Folder Filter](../examples/asset/folder_batch.rs) | Load Folder With Batch [Hot Reloading of Assets](../examples/asset/hot_asset_reloading.rs) | Demonstrates automatic reloading of assets when modified on disk [Multi-asset synchronization](../examples/asset/multi_asset_sync.rs) | Demonstrates how to wait for multiple assets to be loaded. [Repeated texture configuration](../examples/asset/repeated_texture.rs) | How to configure the texture to repeat instead of the default clamp to edges diff --git a/examples/asset/asset_loading.rs b/examples/asset/asset_loading.rs index 5e53be37243db..49d2dca279025 100644 --- a/examples/asset/asset_loading.rs +++ b/examples/asset/asset_loading.rs @@ -52,7 +52,7 @@ fn setup( // to load. // If you want to keep the assets in the folder alive, make sure you store the returned handle // somewhere. - let _loaded_folder: Handle = asset_server.load_folder("models/torus", None); + let _loaded_folder: Handle = asset_server.load_folder("models/torus"); // If you want a handle to a specific asset in a loaded folder, the easiest way to get one is to call load. // It will _not_ be loaded a second time. diff --git a/examples/asset/folder_filter.rs b/examples/asset/folder_batch.rs similarity index 96% rename from examples/asset/folder_filter.rs rename to examples/asset/folder_batch.rs index 4e7eed052c5c7..741d23403aadf 100644 --- a/examples/asset/folder_filter.rs +++ b/examples/asset/folder_batch.rs @@ -1,6 +1,6 @@ //! In this example we generate four texture atlases (sprite sheets) from a folder containing //! individual sprites.But the folder containing waste files called "waste.txt" -//! So we use filter to ingrone the waste files +//! So we use load_folder_with_batch to ingrone the waste files and textures/rpg_with_waste/tiles/* //! //! The texture atlases are generated with different padding and sampling to demonstrate the //! effect of these settings, and how bleeding issues can be resolved by padding the sprites. @@ -8,9 +8,8 @@ //! Only one padded and one unpadded texture atlas are rendered to the screen. //! An upscaled sprite from each of the four atlases are rendered to the screen. -use std::sync::Arc; - use bevy::{asset::LoadedFolder, image::ImageSampler, prelude::*}; +use bevy_asset::{LoadBatch, LoadBatchKind}; fn main() { App::new() @@ -34,13 +33,14 @@ struct RpgSpriteFolder(Handle); fn load_textures(mut commands: Commands, asset_server: Res) { // Load multiple, individual sprites from a folder - commands.insert_resource(RpgSpriteFolder(asset_server.load_folder( + commands.insert_resource(RpgSpriteFolder(asset_server.load_folder_with_batch( "textures/rpg_with_waste", - Some(Arc::new(|path, is_dir| { - let need = is_dir || path.extension().unwrap_or_default() == "png"; - info!("is_dir:{} path:{:?} need:{}", is_dir, path, need); - need - })), + LoadBatch::new( + vec!["textures/rpg_with_waste/tiles/*"], + LoadBatchKind::Black, + vec!["png"], + LoadBatchKind::White, + ), ))); } From b09c199b6e3ce172d7c73e50bffb06f518471bbb Mon Sep 17 00:00:00 2001 From: shishanyue <62888460+shishanyue@users.noreply.github.com> Date: Thu, 19 Jun 2025 12:13:17 +0800 Subject: [PATCH 05/18] filter --- Cargo.toml | 8 ++--- crates/bevy_asset/src/folder.rs | 26 +++++++------- crates/bevy_asset/src/server/mod.rs | 34 +++++++++---------- examples/README.md | 2 +- .../{folder_batch.rs => folder_filter.rs} | 12 +++---- 5 files changed, 41 insertions(+), 41 deletions(-) rename examples/asset/{folder_batch.rs => folder_filter.rs} (97%) diff --git a/Cargo.toml b/Cargo.toml index cd2f26d4ec62e..be7ae76c1d2de 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -1782,13 +1782,13 @@ category = "Assets" wasm = false [[example]] -name = "folder_batch" -path = "examples/asset/folder_batch.rs" +name = "folder_filter" +path = "examples/asset/folder_filter.rs" doc-scrape-examples = true -[package.metadata.example.folder_batch] +[package.metadata.example.folder_filter] name = "Folder Filter" -description = "Load Folder With Batch" +description = "Load Folder With Filter" category = "Assets" wasm = false diff --git a/crates/bevy_asset/src/folder.rs b/crates/bevy_asset/src/folder.rs index 9471dd6d0b3b8..e3ab61e87ae1c 100644 --- a/crates/bevy_asset/src/folder.rs +++ b/crates/bevy_asset/src/folder.rs @@ -7,35 +7,35 @@ use bevy_reflect::TypePath; /// This is use for [`AssetServer::load_folderload_folder_with_batch`](crate::prelude::AssetServer::load_folder_with_batch). #[derive(Debug, Clone, Copy, Default)] -pub enum LoadBatchKind { +pub enum LoadFilterKind { #[default] White, //Allow loading Black, //Disallow loading } -impl LoadBatchKind { +impl LoadFilterKind { pub fn apply(&self, expr: bool) -> bool { match self { - LoadBatchKind::White => expr, - LoadBatchKind::Black => !expr, + LoadFilterKind::White => expr, + LoadFilterKind::Black => !expr, } } } #[derive(Debug, Clone, Default)] -pub struct LoadBatch { +pub struct LoadFilter { pub paths: Option>>, - pub paths_kind: LoadBatchKind, + pub paths_kind: LoadFilterKind, pub extensions: Option>>, - pub extensions_kind: LoadBatchKind, + pub extensions_kind: LoadFilterKind, } -impl LoadBatch { +impl LoadFilter { pub fn new( paths: Vec<&'static str>, - paths_kind: LoadBatchKind, + paths_kind: LoadFilterKind, extensions: Vec<&'static str>, - extensions_kind: LoadBatchKind, + extensions_kind: LoadFilterKind, ) -> Self { Self { paths: Some(Arc::new(paths)), @@ -44,7 +44,7 @@ impl LoadBatch { extensions_kind, } } - pub fn paths(paths: Vec<&'static str>, paths_kind: LoadBatchKind) -> Self { + pub fn paths(paths: Vec<&'static str>, paths_kind: LoadFilterKind) -> Self { Self { paths: Some(Arc::new(paths)), paths_kind, @@ -52,7 +52,7 @@ impl LoadBatch { ..Default::default() } } - pub fn extensions(extensions: Vec<&'static str>, extensions_kind: LoadBatchKind) -> Self { + pub fn extensions(extensions: Vec<&'static str>, extensions_kind: LoadFilterKind) -> Self { Self { paths: None, extensions: Some(Arc::new(extensions)), @@ -72,5 +72,5 @@ pub struct LoadedFolder { #[dependency] pub handles: Vec, /// For filtering files that are required or not required. - pub load_batch: Option, + pub load_filter: Option, } diff --git a/crates/bevy_asset/src/server/mod.rs b/crates/bevy_asset/src/server/mod.rs index ed7e0da490a14..8922870c21fb6 100644 --- a/crates/bevy_asset/src/server/mod.rs +++ b/crates/bevy_asset/src/server/mod.rs @@ -2,7 +2,7 @@ mod info; mod loaders; use crate::{ - folder::{LoadBatch, LoadedFolder}, + folder::{LoadFilter, LoadedFolder}, io::{ AssetReaderError, AssetSource, AssetSourceEvent, AssetSourceId, AssetSources, AssetWriterError, ErasedAssetReader, MissingAssetSourceError, MissingAssetWriterError, @@ -15,7 +15,7 @@ use crate::{ }, path::AssetPath, Asset, AssetEvent, AssetHandleProvider, AssetId, AssetLoadFailedEvent, AssetMetaCheck, Assets, - DeserializeMetaError, ErasedLoadedAsset, Handle, LoadBatchKind, LoadedUntypedAsset, + DeserializeMetaError, ErasedLoadedAsset, Handle, LoadFilterKind, LoadedUntypedAsset, UnapprovedPathMode, UntypedAssetId, UntypedAssetLoadFailedEvent, UntypedHandle, }; use alloc::{borrow::ToOwned, boxed::Box, vec, vec::Vec}; @@ -973,10 +973,10 @@ impl AssetServer { /// removed, added or moved. This includes files in subdirectories and moving, adding, /// or removing complete subdirectories. #[must_use = "not using the returned strong handle may result in the unexpected release of the assets"] - pub fn load_folder_with_batch<'a>( + pub fn load_folder_with_filter<'a>( &self, path: impl Into>, - load_batch: LoadBatch, + load_filter: LoadFilter, ) -> Handle { let path = path.into().into_owned(); let (handle, should_load) = self @@ -992,14 +992,14 @@ impl AssetServer { return handle; } let id = handle.id().untyped(); - self.load_folder_internal(id, path, Some(load_batch)); + self.load_folder_internal(id, path, Some(load_filter)); handle } pub(crate) fn load_folder_internal( &self, id: UntypedAssetId, path: AssetPath, - load_batch: Option, + load_filter: Option, ) { async fn load_folder<'a>( source: AssetSourceId<'static>, @@ -1008,9 +1008,9 @@ impl AssetServer { server: &'a AssetServer, handles: &'a mut Vec, patterns: &'a Vec, - patterns_kind: LoadBatchKind, + patterns_kind: LoadFilterKind, extensions: &'a Option>>, - extensions_kind: LoadBatchKind, + extensions_kind: LoadFilterKind, ) -> Result<(), AssetLoadError> { let is_dir = reader.is_directory(path).await?; if is_dir { @@ -1068,7 +1068,7 @@ impl AssetServer { } let path = path.into_owned(); - let patterns: Vec = load_batch + let patterns: Vec = load_filter .as_ref() .map(|batch| { batch @@ -1080,16 +1080,16 @@ impl AssetServer { .collect() }) .unwrap_or(vec![Pattern::new("*/*").unwrap()]); - let patterns_kind = load_batch + let patterns_kind = load_filter .as_ref() .map(|batch| batch.paths_kind) .unwrap_or_default(); - let extensions = load_batch + let extensions = load_filter .as_ref() .map(|batch| batch.extensions.clone()) .unwrap_or_default(); - let extensions_kind = load_batch + let extensions_kind = load_filter .as_ref() .map(|batch| batch.extensions_kind) .unwrap_or_default(); @@ -1124,7 +1124,7 @@ impl AssetServer { Ok(_) => server.send_asset_event(InternalAssetEvent::Loaded { id, loaded_asset: LoadedAsset::new_with_dependencies( - LoadedFolder { handles,load_batch }, + LoadedFolder { handles,load_filter }, ) .into(), }), @@ -1710,15 +1710,15 @@ impl AssetServer { /// A system that manages internal [`AssetServer`] events, such as finalizing asset loads. pub fn handle_internal_asset_events(world: &mut World) { world.resource_scope(|world, server: Mut| { - let mut load_batchs: HashMap, Option> = HashMap::new(); + let mut load_filters: HashMap, Option> = HashMap::new(); for (id, loaded_folder) in world .get_resource::>() .expect("Could not get LoadedFolder Assets") .iter() { - load_batchs.insert( + load_filters.insert( server.get_path(id).expect("Path should be a valid string."), - loaded_folder.load_batch.clone(), + loaded_folder.load_filter.clone(), ); } let mut infos = server.data.infos.write(); @@ -1794,7 +1794,7 @@ pub fn handle_internal_asset_events(world: &mut World) { server.load_folder_internal( folder_handle.id(), parent_asset_path.clone(), - load_batchs + load_filters .get(&parent_asset_path) .expect("parent folder is doesn't loaded") .clone(), diff --git a/examples/README.md b/examples/README.md index 9e1d3c4b4d47c..3d0cfd97c612f 100644 --- a/examples/README.md +++ b/examples/README.md @@ -254,7 +254,7 @@ Example | Description [Custom Asset IO](../examples/asset/custom_asset_reader.rs) | Implements a custom AssetReader [Embedded Asset](../examples/asset/embedded_asset.rs) | Embed an asset in the application binary and load it [Extra asset source](../examples/asset/extra_source.rs) | Load an asset from a non-standard asset source -[Folder Filter](../examples/asset/folder_batch.rs) | Load Folder With Batch +[Folder Filter](../examples/asset/folder_filter.rs) | Load Folder With Filter [Hot Reloading of Assets](../examples/asset/hot_asset_reloading.rs) | Demonstrates automatic reloading of assets when modified on disk [Multi-asset synchronization](../examples/asset/multi_asset_sync.rs) | Demonstrates how to wait for multiple assets to be loaded. [Repeated texture configuration](../examples/asset/repeated_texture.rs) | How to configure the texture to repeat instead of the default clamp to edges diff --git a/examples/asset/folder_batch.rs b/examples/asset/folder_filter.rs similarity index 97% rename from examples/asset/folder_batch.rs rename to examples/asset/folder_filter.rs index 741d23403aadf..1109c18880f84 100644 --- a/examples/asset/folder_batch.rs +++ b/examples/asset/folder_filter.rs @@ -1,6 +1,6 @@ //! In this example we generate four texture atlases (sprite sheets) from a folder containing //! individual sprites.But the folder containing waste files called "waste.txt" -//! So we use load_folder_with_batch to ingrone the waste files and textures/rpg_with_waste/tiles/* +//! So we use load_folder_with_filter to ingrone the waste files and textures/rpg_with_waste/tiles/* //! //! The texture atlases are generated with different padding and sampling to demonstrate the //! effect of these settings, and how bleeding issues can be resolved by padding the sprites. @@ -9,7 +9,7 @@ //! An upscaled sprite from each of the four atlases are rendered to the screen. use bevy::{asset::LoadedFolder, image::ImageSampler, prelude::*}; -use bevy_asset::{LoadBatch, LoadBatchKind}; +use bevy_asset::{LoadFilter, LoadFilterKind}; fn main() { App::new() @@ -33,13 +33,13 @@ struct RpgSpriteFolder(Handle); fn load_textures(mut commands: Commands, asset_server: Res) { // Load multiple, individual sprites from a folder - commands.insert_resource(RpgSpriteFolder(asset_server.load_folder_with_batch( + commands.insert_resource(RpgSpriteFolder(asset_server.load_folder_with_filter( "textures/rpg_with_waste", - LoadBatch::new( + LoadFilter::new( vec!["textures/rpg_with_waste/tiles/*"], - LoadBatchKind::Black, + LoadFilterKind::Black, vec!["png"], - LoadBatchKind::White, + LoadFilterKind::White, ), ))); } From 4853f00ef7fa51c309a1079eac689efadcf90e39 Mon Sep 17 00:00:00 2001 From: shishanyue <62888460+shishanyue@users.noreply.github.com> Date: Thu, 19 Jun 2025 12:22:02 +0800 Subject: [PATCH 06/18] a --- examples/asset/folder_filter.rs | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/examples/asset/folder_filter.rs b/examples/asset/folder_filter.rs index 1109c18880f84..d16263a2fa05f 100644 --- a/examples/asset/folder_filter.rs +++ b/examples/asset/folder_filter.rs @@ -8,8 +8,11 @@ //! Only one padded and one unpadded texture atlas are rendered to the screen. //! An upscaled sprite from each of the four atlases are rendered to the screen. -use bevy::{asset::LoadedFolder, image::ImageSampler, prelude::*}; -use bevy_asset::{LoadFilter, LoadFilterKind}; +use bevy::{ + asset::{LoadFilter, LoadFilterKind, LoadedFolder}, + image::ImageSampler, + prelude::*, +}; fn main() { App::new() From b3e1fe7f6bf94025b15fec20784473ff2ad83caa Mon Sep 17 00:00:00 2001 From: shishanyue <62888460+shishanyue@users.noreply.github.com> Date: Thu, 19 Jun 2025 12:27:52 +0800 Subject: [PATCH 07/18] fix --- crates/bevy_asset/src/folder.rs | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/crates/bevy_asset/src/folder.rs b/crates/bevy_asset/src/folder.rs index e3ab61e87ae1c..2755a8e2b00b8 100644 --- a/crates/bevy_asset/src/folder.rs +++ b/crates/bevy_asset/src/folder.rs @@ -1,6 +1,4 @@ -use std::sync::Arc; - -use alloc::vec::Vec; +use std::{sync::Arc, vec::Vec}; use crate::{Asset, UntypedHandle}; use bevy_reflect::TypePath; From 3fb17ca95e1db51afd7fc64c5269f078cdbc8a79 Mon Sep 17 00:00:00 2001 From: shishanyue <62888460+shishanyue@users.noreply.github.com> Date: Thu, 19 Jun 2025 12:42:55 +0800 Subject: [PATCH 08/18] use alloc --- crates/bevy_asset/src/folder.rs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/crates/bevy_asset/src/folder.rs b/crates/bevy_asset/src/folder.rs index 2755a8e2b00b8..9add7f786508d 100644 --- a/crates/bevy_asset/src/folder.rs +++ b/crates/bevy_asset/src/folder.rs @@ -1,4 +1,4 @@ -use std::{sync::Arc, vec::Vec}; +use alloc::{sync::Arc, vec::Vec}; use crate::{Asset, UntypedHandle}; use bevy_reflect::TypePath; From 79e55f10843024ee6708033f8dc44f9ab576991e Mon Sep 17 00:00:00 2001 From: shishanyue <62888460+shishanyue@users.noreply.github.com> Date: Thu, 19 Jun 2025 12:57:29 +0800 Subject: [PATCH 09/18] ci --- examples/asset/folder_filter.rs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/examples/asset/folder_filter.rs b/examples/asset/folder_filter.rs index d16263a2fa05f..ee0d021d9aa26 100644 --- a/examples/asset/folder_filter.rs +++ b/examples/asset/folder_filter.rs @@ -1,6 +1,6 @@ //! In this example we generate four texture atlases (sprite sheets) from a folder containing //! individual sprites.But the folder containing waste files called "waste.txt" -//! So we use load_folder_with_filter to ingrone the waste files and textures/rpg_with_waste/tiles/* +//! So we use `load_folder_with_filter` to ingrone the waste files and textures/rpg_with_waste/tiles/* //! //! The texture atlases are generated with different padding and sampling to demonstrate the //! effect of these settings, and how bleeding issues can be resolved by padding the sprites. From 50939d23e0837c4bcea7a91523efbb7a970b48ab Mon Sep 17 00:00:00 2001 From: shishanyue <62888460+shishanyue@users.noreply.github.com> Date: Thu, 19 Jun 2025 13:08:14 +0800 Subject: [PATCH 10/18] ci --- examples/asset/folder_filter.rs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/examples/asset/folder_filter.rs b/examples/asset/folder_filter.rs index ee0d021d9aa26..0fad41ed707f0 100644 --- a/examples/asset/folder_filter.rs +++ b/examples/asset/folder_filter.rs @@ -1,6 +1,6 @@ //! In this example we generate four texture atlases (sprite sheets) from a folder containing //! individual sprites.But the folder containing waste files called "waste.txt" -//! So we use `load_folder_with_filter` to ingrone the waste files and textures/rpg_with_waste/tiles/* +//! So we use `load_folder_with_filter` to ingrone the waste files and `textures/rpg_with_waste/tiles`/* //! //! The texture atlases are generated with different padding and sampling to demonstrate the //! effect of these settings, and how bleeding issues can be resolved by padding the sprites. From b0e0c2feb0689410e878138a5d3ab357a973be73 Mon Sep 17 00:00:00 2001 From: shishanyue <62888460+shishanyue@users.noreply.github.com> Date: Thu, 19 Jun 2025 13:27:08 +0800 Subject: [PATCH 11/18] ci --- crates/bevy_asset/src/folder.rs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/crates/bevy_asset/src/folder.rs b/crates/bevy_asset/src/folder.rs index 9add7f786508d..6ffc955e347d9 100644 --- a/crates/bevy_asset/src/folder.rs +++ b/crates/bevy_asset/src/folder.rs @@ -3,7 +3,7 @@ use alloc::{sync::Arc, vec::Vec}; use crate::{Asset, UntypedHandle}; use bevy_reflect::TypePath; -/// This is use for [`AssetServer::load_folderload_folder_with_batch`](crate::prelude::AssetServer::load_folder_with_batch). +/// This is use for [`AssetServer::load_folder_with_filter`](crate::prelude::AssetServer::load_folder_with_filter). #[derive(Debug, Clone, Copy, Default)] pub enum LoadFilterKind { #[default] From cc82f14856fd7c13a1bcc7fe9e1837a760f90f4c Mon Sep 17 00:00:00 2001 From: shishanyue <62888460+shishanyue@users.noreply.github.com> Date: Fri, 20 Jun 2025 17:29:14 +0800 Subject: [PATCH 12/18] Remove load_folderAPI --- Cargo.toml | 11 - .../chars/gabe/gabe-idle-run.png | Bin 1997 -> 0 bytes .../rpg_with_waste/chars/hat-guy/hat-guy.png | Bin 456 -> 0 bytes .../chars/mani/mani-idle-run.png | Bin 2884 -> 0 bytes .../rpg_with_waste/chars/sensei/sensei.png | Bin 716 -> 0 bytes .../chars/vendor/generic-rpg-vendor.png | Bin 3056 -> 0 bytes .../textures/rpg_with_waste/chars/waste.txt | 0 .../textures/rpg_with_waste/mobs/boss_bee.png | Bin 1223 -> 0 bytes .../textures/rpg_with_waste/mobs/fox-run.png | Bin 1098 -> 0 bytes .../rpg_with_waste/mobs/kobold-idle.png | Bin 2526 -> 0 bytes .../rpg_with_waste/mobs/slime-blue.png | Bin 552 -> 0 bytes .../rpg_with_waste/mobs/slime-green.png | Bin 570 -> 0 bytes .../rpg_with_waste/mobs/slime-orange.png | Bin 579 -> 0 bytes .../rpg_with_waste/mobs/worm-run-idle.png | Bin 754 -> 0 bytes .../props/generic-rpg-barrel01.png | Bin 405 -> 0 bytes .../props/generic-rpg-barrel02.png | Bin 462 -> 0 bytes .../props/generic-rpg-barrel03.png | Bin 372 -> 0 bytes .../props/generic-rpg-board01.png | Bin 359 -> 0 bytes .../props/generic-rpg-board02.png | Bin 375 -> 0 bytes .../props/generic-rpg-board03.png | Bin 479 -> 0 bytes .../props/generic-rpg-board04.png | Bin 347 -> 0 bytes .../props/generic-rpg-bridge.png | Bin 1843 -> 0 bytes .../props/generic-rpg-crate01.png | Bin 436 -> 0 bytes .../props/generic-rpg-crate02.png | Bin 587 -> 0 bytes .../props/generic-rpg-crate03.png | Bin 346 -> 0 bytes .../props/generic-rpg-fence-complete.png | Bin 700 -> 0 bytes .../props/generic-rpg-fence-raw01.png | Bin 350 -> 0 bytes .../props/generic-rpg-fence-raw02.png | Bin 357 -> 0 bytes .../props/generic-rpg-fence-raw03.png | Bin 342 -> 0 bytes .../props/generic-rpg-fence-raw04.png | Bin 340 -> 0 bytes .../props/generic-rpg-fence-raw05.png | Bin 330 -> 0 bytes .../props/generic-rpg-fence-raw06.png | Bin 266 -> 0 bytes .../props/generic-rpg-fence-raw07.png | Bin 268 -> 0 bytes .../props/generic-rpg-fence-raw08.png | Bin 269 -> 0 bytes .../props/generic-rpg-fence-raw09.png | Bin 336 -> 0 bytes .../props/generic-rpg-fence-raw10.png | Bin 340 -> 0 bytes .../props/generic-rpg-fence-raw11.png | Bin 271 -> 0 bytes .../props/generic-rpg-fence-raw12.png | Bin 278 -> 0 bytes .../props/generic-rpg-fence-raw13.png | Bin 268 -> 0 bytes .../props/generic-rpg-fence-raw14.png | Bin 312 -> 0 bytes .../props/generic-rpg-fence-raw15.png | Bin 344 -> 0 bytes .../props/generic-rpg-fence-raw16.png | Bin 335 -> 0 bytes .../props/generic-rpg-fence-raw17.png | Bin 443 -> 0 bytes .../props/generic-rpg-fence-raw18.png | Bin 367 -> 0 bytes .../props/generic-rpg-fence-raw19.png | Bin 308 -> 0 bytes .../props/generic-rpg-fence-raw20.png | Bin 291 -> 0 bytes .../props/generic-rpg-fence-raw21.png | Bin 366 -> 0 bytes .../props/generic-rpg-fence-raw22.png | Bin 329 -> 0 bytes .../props/generic-rpg-fence-raw23.png | Bin 339 -> 0 bytes .../props/generic-rpg-fence-raw24.png | Bin 394 -> 0 bytes .../props/generic-rpg-fence-raw25.png | Bin 383 -> 0 bytes .../props/generic-rpg-fence01.png | Bin 228 -> 0 bytes .../props/generic-rpg-fence02.png | Bin 201 -> 0 bytes .../props/generic-rpg-fence03.png | Bin 228 -> 0 bytes .../props/generic-rpg-fence04.png | Bin 207 -> 0 bytes .../props/generic-rpg-fence05.png | Bin 241 -> 0 bytes .../props/generic-rpg-fence06.png | Bin 147 -> 0 bytes .../props/generic-rpg-fence07.png | Bin 129 -> 0 bytes .../props/generic-rpg-fence08.png | Bin 267 -> 0 bytes .../props/generic-rpg-fence09.png | Bin 201 -> 0 bytes .../props/generic-rpg-fence10.png | Bin 183 -> 0 bytes .../props/generic-rpg-fence11.png | Bin 216 -> 0 bytes .../props/generic-rpg-fence12.png | Bin 234 -> 0 bytes .../props/generic-rpg-fence13.png | Bin 137 -> 0 bytes .../props/generic-rpg-fence14.png | Bin 159 -> 0 bytes .../props/generic-rpg-fish01.png | Bin 121 -> 0 bytes .../props/generic-rpg-fish02.png | Bin 102 -> 0 bytes .../props/generic-rpg-fish03.png | Bin 114 -> 0 bytes .../props/generic-rpg-fish04.png | Bin 109 -> 0 bytes .../props/generic-rpg-flower01.png | Bin 194 -> 0 bytes .../props/generic-rpg-flower02.png | Bin 201 -> 0 bytes .../props/generic-rpg-flower03.png | Bin 199 -> 0 bytes .../props/generic-rpg-flowers.png | Bin 715 -> 0 bytes .../props/generic-rpg-grass01.png | Bin 132 -> 0 bytes .../props/generic-rpg-grass02.png | Bin 156 -> 0 bytes .../props/generic-rpg-house-inn.png | Bin 2851 -> 0 bytes .../props/generic-rpg-loot01.png | Bin 250 -> 0 bytes .../props/generic-rpg-loot02.png | Bin 183 -> 0 bytes .../props/generic-rpg-loot03.png | Bin 293 -> 0 bytes .../props/generic-rpg-loot04.png | Bin 286 -> 0 bytes .../props/generic-rpg-loot05.png | Bin 291 -> 0 bytes .../props/generic-rpg-mini-lake.png | Bin 1016 -> 0 bytes .../props/generic-rpg-rock01.png | Bin 272 -> 0 bytes .../props/generic-rpg-rock02.png | Bin 387 -> 0 bytes .../props/generic-rpg-rock03.png | Bin 388 -> 0 bytes .../props/generic-rpg-rock04.png | Bin 476 -> 0 bytes .../props/generic-rpg-rock05.png | Bin 391 -> 0 bytes .../props/generic-rpg-rock06.png | Bin 483 -> 0 bytes .../rpg_with_waste/props/generic-rpg-rod.png | Bin 469 -> 0 bytes .../props/generic-rpg-trasure-open.png | Bin 634 -> 0 bytes .../props/generic-rpg-treasure-closed.png | Bin 576 -> 0 bytes .../props/generic-rpg-tree01.png | Bin 2735 -> 0 bytes .../props/generic-rpg-tree02.png | Bin 2880 -> 0 bytes .../tiles/generic-rpg-Slice.png | Bin 86 -> 0 bytes .../tiles/generic-rpg-tile-waterfall01.png | Bin 129 -> 0 bytes .../tiles/generic-rpg-tile-waterfall02.png | Bin 192 -> 0 bytes .../tiles/generic-rpg-tile-waterfall03.png | Bin 179 -> 0 bytes .../tiles/generic-rpg-tile-waterfall04.png | Bin 245 -> 0 bytes .../tiles/generic-rpg-tile-waterfall05.png | Bin 370 -> 0 bytes .../tiles/generic-rpg-tile-waterfall06.png | Bin 388 -> 0 bytes .../tiles/generic-rpg-tile-waterfall07.png | Bin 374 -> 0 bytes .../tiles/generic-rpg-tile01.png | Bin 133 -> 0 bytes .../tiles/generic-rpg-tile02.png | Bin 249 -> 0 bytes .../tiles/generic-rpg-tile03.png | Bin 146 -> 0 bytes .../tiles/generic-rpg-tile04.png | Bin 242 -> 0 bytes .../tiles/generic-rpg-tile05.png | Bin 120 -> 0 bytes .../tiles/generic-rpg-tile06.png | Bin 246 -> 0 bytes .../tiles/generic-rpg-tile07.png | Bin 151 -> 0 bytes .../tiles/generic-rpg-tile08.png | Bin 245 -> 0 bytes .../tiles/generic-rpg-tile09.png | Bin 171 -> 0 bytes .../tiles/generic-rpg-tile10.png | Bin 264 -> 0 bytes .../tiles/generic-rpg-tile11.png | Bin 119 -> 0 bytes .../tiles/generic-rpg-tile12.png | Bin 227 -> 0 bytes .../tiles/generic-rpg-tile13.png | Bin 128 -> 0 bytes .../tiles/generic-rpg-tile14.png | Bin 209 -> 0 bytes .../tiles/generic-rpg-tile15.png | Bin 140 -> 0 bytes .../tiles/generic-rpg-tile16.png | Bin 280 -> 0 bytes .../tiles/generic-rpg-tile17.png | Bin 124 -> 0 bytes .../tiles/generic-rpg-tile18.png | Bin 120 -> 0 bytes .../tiles/generic-rpg-tile19.png | Bin 283 -> 0 bytes .../tiles/generic-rpg-tile20.png | Bin 135 -> 0 bytes .../tiles/generic-rpg-tile21.png | Bin 237 -> 0 bytes .../tiles/generic-rpg-tile22.png | Bin 114 -> 0 bytes .../tiles/generic-rpg-tile23.png | Bin 232 -> 0 bytes .../tiles/generic-rpg-tile24.png | Bin 113 -> 0 bytes .../tiles/generic-rpg-tile25.png | Bin 237 -> 0 bytes .../tiles/generic-rpg-tile26.png | Bin 114 -> 0 bytes .../tiles/generic-rpg-tile27.png | Bin 219 -> 0 bytes .../tiles/generic-rpg-tile28.png | Bin 127 -> 0 bytes .../tiles/generic-rpg-tile29.png | Bin 214 -> 0 bytes .../tiles/generic-rpg-tile30.png | Bin 114 -> 0 bytes .../tiles/generic-rpg-tile31.png | Bin 295 -> 0 bytes .../tiles/generic-rpg-tile32.png | Bin 150 -> 0 bytes .../tiles/generic-rpg-tile33.png | Bin 290 -> 0 bytes .../tiles/generic-rpg-tile34.png | Bin 143 -> 0 bytes .../tiles/generic-rpg-tile35.png | Bin 217 -> 0 bytes .../tiles/generic-rpg-tile37.png | Bin 246 -> 0 bytes .../tiles/generic-rpg-tile38.png | Bin 86 -> 0 bytes .../tiles/generic-rpg-tile39.png | Bin 278 -> 0 bytes .../tiles/generic-rpg-tile40.png | Bin 142 -> 0 bytes .../tiles/generic-rpg-tile41.png | Bin 264 -> 0 bytes .../tiles/generic-rpg-tile42.png | Bin 122 -> 0 bytes .../tiles/generic-rpg-tile43.png | Bin 272 -> 0 bytes .../tiles/generic-rpg-tile44.png | Bin 260 -> 0 bytes .../tiles/generic-rpg-tile45.png | Bin 274 -> 0 bytes .../tiles/generic-rpg-tile46.png | Bin 241 -> 0 bytes .../tiles/generic-rpg-tile47.png | Bin 237 -> 0 bytes .../tiles/generic-rpg-tile48.png | Bin 230 -> 0 bytes .../tiles/generic-rpg-tile49.png | Bin 217 -> 0 bytes .../tiles/generic-rpg-tile50.png | Bin 229 -> 0 bytes .../tiles/generic-rpg-tile51.png | Bin 149 -> 0 bytes .../tiles/generic-rpg-tile52.png | Bin 253 -> 0 bytes .../tiles/generic-rpg-tile53.png | Bin 204 -> 0 bytes .../tiles/generic-rpg-tile54.png | Bin 209 -> 0 bytes .../tiles/generic-rpg-tile55.png | Bin 199 -> 0 bytes .../tiles/generic-rpg-tile56.png | Bin 146 -> 0 bytes .../tiles/generic-rpg-tile57.png | Bin 316 -> 0 bytes .../tiles/generic-rpg-tile58.png | Bin 164 -> 0 bytes .../tiles/generic-rpg-tile59.png | Bin 298 -> 0 bytes .../tiles/generic-rpg-tile60.png | Bin 305 -> 0 bytes .../tiles/generic-rpg-tile61.png | Bin 298 -> 0 bytes .../tiles/generic-rpg-tile62.png | Bin 258 -> 0 bytes .../tiles/generic-rpg-tile63.png | Bin 301 -> 0 bytes .../tiles/generic-rpg-tile64.png | Bin 219 -> 0 bytes .../tiles/generic-rpg-tile65.png | Bin 183 -> 0 bytes .../tiles/generic-rpg-tile66.png | Bin 190 -> 0 bytes .../tiles/generic-rpg-tile67.png | Bin 167 -> 0 bytes .../tiles/generic-rpg-tile68.png | Bin 150 -> 0 bytes .../tiles/generic-rpg-tile69.png | Bin 214 -> 0 bytes .../tiles/generic-rpg-tile70.png | Bin 86 -> 0 bytes .../tiles/generic-rpg-tile71.png | Bin 86 -> 0 bytes .../ui/generic-rpg-ui-inventario.png | Bin 3468 -> 0 bytes .../ui/generic-rpg-ui-inventario01.png | Bin 121 -> 0 bytes .../ui/generic-rpg-ui-inventario02.png | Bin 105 -> 0 bytes .../ui/generic-rpg-ui-inventario03.png | Bin 102 -> 0 bytes .../ui/generic-rpg-ui-inventario04.png | Bin 171 -> 0 bytes .../ui/generic-rpg-ui-text-box.png | Bin 372 -> 0 bytes assets/textures/rpg_with_waste/waste.txt | 0 crates/bevy_asset/src/batch.rs | 25 ++ crates/bevy_asset/src/folder.rs | 74 ----- crates/bevy_asset/src/lib.rs | 23 +- crates/bevy_asset/src/server/mod.rs | 291 +++++------------ examples/2d/texture_atlas.rs | 15 +- examples/asset/folder_filter.rs | 301 ------------------ 184 files changed, 132 insertions(+), 608 deletions(-) delete mode 100644 assets/textures/rpg_with_waste/chars/gabe/gabe-idle-run.png delete mode 100644 assets/textures/rpg_with_waste/chars/hat-guy/hat-guy.png delete mode 100644 assets/textures/rpg_with_waste/chars/mani/mani-idle-run.png delete mode 100644 assets/textures/rpg_with_waste/chars/sensei/sensei.png delete mode 100644 assets/textures/rpg_with_waste/chars/vendor/generic-rpg-vendor.png delete mode 100644 assets/textures/rpg_with_waste/chars/waste.txt delete mode 100644 assets/textures/rpg_with_waste/mobs/boss_bee.png delete mode 100644 assets/textures/rpg_with_waste/mobs/fox-run.png delete mode 100644 assets/textures/rpg_with_waste/mobs/kobold-idle.png delete mode 100644 assets/textures/rpg_with_waste/mobs/slime-blue.png delete mode 100644 assets/textures/rpg_with_waste/mobs/slime-green.png delete mode 100644 assets/textures/rpg_with_waste/mobs/slime-orange.png delete mode 100644 assets/textures/rpg_with_waste/mobs/worm-run-idle.png delete mode 100644 assets/textures/rpg_with_waste/props/generic-rpg-barrel01.png delete mode 100644 assets/textures/rpg_with_waste/props/generic-rpg-barrel02.png delete mode 100644 assets/textures/rpg_with_waste/props/generic-rpg-barrel03.png delete mode 100644 assets/textures/rpg_with_waste/props/generic-rpg-board01.png delete mode 100644 assets/textures/rpg_with_waste/props/generic-rpg-board02.png delete mode 100644 assets/textures/rpg_with_waste/props/generic-rpg-board03.png delete mode 100644 assets/textures/rpg_with_waste/props/generic-rpg-board04.png delete mode 100644 assets/textures/rpg_with_waste/props/generic-rpg-bridge.png delete mode 100644 assets/textures/rpg_with_waste/props/generic-rpg-crate01.png delete mode 100644 assets/textures/rpg_with_waste/props/generic-rpg-crate02.png delete mode 100644 assets/textures/rpg_with_waste/props/generic-rpg-crate03.png delete mode 100644 assets/textures/rpg_with_waste/props/generic-rpg-fence-complete.png delete mode 100644 assets/textures/rpg_with_waste/props/generic-rpg-fence-raw01.png delete mode 100644 assets/textures/rpg_with_waste/props/generic-rpg-fence-raw02.png delete mode 100644 assets/textures/rpg_with_waste/props/generic-rpg-fence-raw03.png delete mode 100644 assets/textures/rpg_with_waste/props/generic-rpg-fence-raw04.png delete mode 100644 assets/textures/rpg_with_waste/props/generic-rpg-fence-raw05.png delete mode 100644 assets/textures/rpg_with_waste/props/generic-rpg-fence-raw06.png delete mode 100644 assets/textures/rpg_with_waste/props/generic-rpg-fence-raw07.png delete mode 100644 assets/textures/rpg_with_waste/props/generic-rpg-fence-raw08.png delete mode 100644 assets/textures/rpg_with_waste/props/generic-rpg-fence-raw09.png delete mode 100644 assets/textures/rpg_with_waste/props/generic-rpg-fence-raw10.png delete mode 100644 assets/textures/rpg_with_waste/props/generic-rpg-fence-raw11.png delete mode 100644 assets/textures/rpg_with_waste/props/generic-rpg-fence-raw12.png delete mode 100644 assets/textures/rpg_with_waste/props/generic-rpg-fence-raw13.png delete mode 100644 assets/textures/rpg_with_waste/props/generic-rpg-fence-raw14.png delete mode 100644 assets/textures/rpg_with_waste/props/generic-rpg-fence-raw15.png delete mode 100644 assets/textures/rpg_with_waste/props/generic-rpg-fence-raw16.png delete mode 100644 assets/textures/rpg_with_waste/props/generic-rpg-fence-raw17.png delete mode 100644 assets/textures/rpg_with_waste/props/generic-rpg-fence-raw18.png delete mode 100644 assets/textures/rpg_with_waste/props/generic-rpg-fence-raw19.png delete mode 100644 assets/textures/rpg_with_waste/props/generic-rpg-fence-raw20.png delete mode 100644 assets/textures/rpg_with_waste/props/generic-rpg-fence-raw21.png delete mode 100644 assets/textures/rpg_with_waste/props/generic-rpg-fence-raw22.png delete mode 100644 assets/textures/rpg_with_waste/props/generic-rpg-fence-raw23.png delete mode 100644 assets/textures/rpg_with_waste/props/generic-rpg-fence-raw24.png delete mode 100644 assets/textures/rpg_with_waste/props/generic-rpg-fence-raw25.png delete mode 100644 assets/textures/rpg_with_waste/props/generic-rpg-fence01.png delete mode 100644 assets/textures/rpg_with_waste/props/generic-rpg-fence02.png delete mode 100644 assets/textures/rpg_with_waste/props/generic-rpg-fence03.png delete mode 100644 assets/textures/rpg_with_waste/props/generic-rpg-fence04.png delete mode 100644 assets/textures/rpg_with_waste/props/generic-rpg-fence05.png delete mode 100644 assets/textures/rpg_with_waste/props/generic-rpg-fence06.png delete mode 100644 assets/textures/rpg_with_waste/props/generic-rpg-fence07.png delete mode 100644 assets/textures/rpg_with_waste/props/generic-rpg-fence08.png delete mode 100644 assets/textures/rpg_with_waste/props/generic-rpg-fence09.png delete mode 100644 assets/textures/rpg_with_waste/props/generic-rpg-fence10.png delete mode 100644 assets/textures/rpg_with_waste/props/generic-rpg-fence11.png delete mode 100644 assets/textures/rpg_with_waste/props/generic-rpg-fence12.png delete mode 100644 assets/textures/rpg_with_waste/props/generic-rpg-fence13.png delete mode 100644 assets/textures/rpg_with_waste/props/generic-rpg-fence14.png delete mode 100644 assets/textures/rpg_with_waste/props/generic-rpg-fish01.png delete mode 100644 assets/textures/rpg_with_waste/props/generic-rpg-fish02.png delete mode 100644 assets/textures/rpg_with_waste/props/generic-rpg-fish03.png delete mode 100644 assets/textures/rpg_with_waste/props/generic-rpg-fish04.png delete mode 100644 assets/textures/rpg_with_waste/props/generic-rpg-flower01.png delete mode 100644 assets/textures/rpg_with_waste/props/generic-rpg-flower02.png delete mode 100644 assets/textures/rpg_with_waste/props/generic-rpg-flower03.png delete mode 100644 assets/textures/rpg_with_waste/props/generic-rpg-flowers.png delete mode 100644 assets/textures/rpg_with_waste/props/generic-rpg-grass01.png delete mode 100644 assets/textures/rpg_with_waste/props/generic-rpg-grass02.png delete mode 100644 assets/textures/rpg_with_waste/props/generic-rpg-house-inn.png delete mode 100644 assets/textures/rpg_with_waste/props/generic-rpg-loot01.png delete mode 100644 assets/textures/rpg_with_waste/props/generic-rpg-loot02.png delete mode 100644 assets/textures/rpg_with_waste/props/generic-rpg-loot03.png delete mode 100644 assets/textures/rpg_with_waste/props/generic-rpg-loot04.png delete mode 100644 assets/textures/rpg_with_waste/props/generic-rpg-loot05.png delete mode 100644 assets/textures/rpg_with_waste/props/generic-rpg-mini-lake.png delete mode 100644 assets/textures/rpg_with_waste/props/generic-rpg-rock01.png delete mode 100644 assets/textures/rpg_with_waste/props/generic-rpg-rock02.png delete mode 100644 assets/textures/rpg_with_waste/props/generic-rpg-rock03.png delete mode 100644 assets/textures/rpg_with_waste/props/generic-rpg-rock04.png delete mode 100644 assets/textures/rpg_with_waste/props/generic-rpg-rock05.png delete mode 100644 assets/textures/rpg_with_waste/props/generic-rpg-rock06.png delete mode 100644 assets/textures/rpg_with_waste/props/generic-rpg-rod.png delete mode 100644 assets/textures/rpg_with_waste/props/generic-rpg-trasure-open.png delete mode 100644 assets/textures/rpg_with_waste/props/generic-rpg-treasure-closed.png delete mode 100644 assets/textures/rpg_with_waste/props/generic-rpg-tree01.png delete mode 100644 assets/textures/rpg_with_waste/props/generic-rpg-tree02.png delete mode 100644 assets/textures/rpg_with_waste/tiles/generic-rpg-Slice.png delete mode 100644 assets/textures/rpg_with_waste/tiles/generic-rpg-tile-waterfall01.png delete mode 100644 assets/textures/rpg_with_waste/tiles/generic-rpg-tile-waterfall02.png delete mode 100644 assets/textures/rpg_with_waste/tiles/generic-rpg-tile-waterfall03.png delete mode 100644 assets/textures/rpg_with_waste/tiles/generic-rpg-tile-waterfall04.png delete mode 100644 assets/textures/rpg_with_waste/tiles/generic-rpg-tile-waterfall05.png delete mode 100644 assets/textures/rpg_with_waste/tiles/generic-rpg-tile-waterfall06.png delete mode 100644 assets/textures/rpg_with_waste/tiles/generic-rpg-tile-waterfall07.png delete mode 100644 assets/textures/rpg_with_waste/tiles/generic-rpg-tile01.png delete mode 100644 assets/textures/rpg_with_waste/tiles/generic-rpg-tile02.png delete mode 100644 assets/textures/rpg_with_waste/tiles/generic-rpg-tile03.png delete mode 100644 assets/textures/rpg_with_waste/tiles/generic-rpg-tile04.png delete mode 100644 assets/textures/rpg_with_waste/tiles/generic-rpg-tile05.png delete mode 100644 assets/textures/rpg_with_waste/tiles/generic-rpg-tile06.png delete mode 100644 assets/textures/rpg_with_waste/tiles/generic-rpg-tile07.png delete mode 100644 assets/textures/rpg_with_waste/tiles/generic-rpg-tile08.png delete mode 100644 assets/textures/rpg_with_waste/tiles/generic-rpg-tile09.png delete mode 100644 assets/textures/rpg_with_waste/tiles/generic-rpg-tile10.png delete mode 100644 assets/textures/rpg_with_waste/tiles/generic-rpg-tile11.png delete mode 100644 assets/textures/rpg_with_waste/tiles/generic-rpg-tile12.png delete mode 100644 assets/textures/rpg_with_waste/tiles/generic-rpg-tile13.png delete mode 100644 assets/textures/rpg_with_waste/tiles/generic-rpg-tile14.png delete mode 100644 assets/textures/rpg_with_waste/tiles/generic-rpg-tile15.png delete mode 100644 assets/textures/rpg_with_waste/tiles/generic-rpg-tile16.png delete mode 100644 assets/textures/rpg_with_waste/tiles/generic-rpg-tile17.png delete mode 100644 assets/textures/rpg_with_waste/tiles/generic-rpg-tile18.png delete mode 100644 assets/textures/rpg_with_waste/tiles/generic-rpg-tile19.png delete mode 100644 assets/textures/rpg_with_waste/tiles/generic-rpg-tile20.png delete mode 100644 assets/textures/rpg_with_waste/tiles/generic-rpg-tile21.png delete mode 100644 assets/textures/rpg_with_waste/tiles/generic-rpg-tile22.png delete mode 100644 assets/textures/rpg_with_waste/tiles/generic-rpg-tile23.png delete mode 100644 assets/textures/rpg_with_waste/tiles/generic-rpg-tile24.png delete mode 100644 assets/textures/rpg_with_waste/tiles/generic-rpg-tile25.png delete mode 100644 assets/textures/rpg_with_waste/tiles/generic-rpg-tile26.png delete mode 100644 assets/textures/rpg_with_waste/tiles/generic-rpg-tile27.png delete mode 100644 assets/textures/rpg_with_waste/tiles/generic-rpg-tile28.png delete mode 100644 assets/textures/rpg_with_waste/tiles/generic-rpg-tile29.png delete mode 100644 assets/textures/rpg_with_waste/tiles/generic-rpg-tile30.png delete mode 100644 assets/textures/rpg_with_waste/tiles/generic-rpg-tile31.png delete mode 100644 assets/textures/rpg_with_waste/tiles/generic-rpg-tile32.png delete mode 100644 assets/textures/rpg_with_waste/tiles/generic-rpg-tile33.png delete mode 100644 assets/textures/rpg_with_waste/tiles/generic-rpg-tile34.png delete mode 100644 assets/textures/rpg_with_waste/tiles/generic-rpg-tile35.png delete mode 100644 assets/textures/rpg_with_waste/tiles/generic-rpg-tile37.png delete mode 100644 assets/textures/rpg_with_waste/tiles/generic-rpg-tile38.png delete mode 100644 assets/textures/rpg_with_waste/tiles/generic-rpg-tile39.png delete mode 100644 assets/textures/rpg_with_waste/tiles/generic-rpg-tile40.png delete mode 100644 assets/textures/rpg_with_waste/tiles/generic-rpg-tile41.png delete mode 100644 assets/textures/rpg_with_waste/tiles/generic-rpg-tile42.png delete mode 100644 assets/textures/rpg_with_waste/tiles/generic-rpg-tile43.png delete mode 100644 assets/textures/rpg_with_waste/tiles/generic-rpg-tile44.png delete mode 100644 assets/textures/rpg_with_waste/tiles/generic-rpg-tile45.png delete mode 100644 assets/textures/rpg_with_waste/tiles/generic-rpg-tile46.png delete mode 100644 assets/textures/rpg_with_waste/tiles/generic-rpg-tile47.png delete mode 100644 assets/textures/rpg_with_waste/tiles/generic-rpg-tile48.png delete mode 100644 assets/textures/rpg_with_waste/tiles/generic-rpg-tile49.png delete mode 100644 assets/textures/rpg_with_waste/tiles/generic-rpg-tile50.png delete mode 100644 assets/textures/rpg_with_waste/tiles/generic-rpg-tile51.png delete mode 100644 assets/textures/rpg_with_waste/tiles/generic-rpg-tile52.png delete mode 100644 assets/textures/rpg_with_waste/tiles/generic-rpg-tile53.png delete mode 100644 assets/textures/rpg_with_waste/tiles/generic-rpg-tile54.png delete mode 100644 assets/textures/rpg_with_waste/tiles/generic-rpg-tile55.png delete mode 100644 assets/textures/rpg_with_waste/tiles/generic-rpg-tile56.png delete mode 100644 assets/textures/rpg_with_waste/tiles/generic-rpg-tile57.png delete mode 100644 assets/textures/rpg_with_waste/tiles/generic-rpg-tile58.png delete mode 100644 assets/textures/rpg_with_waste/tiles/generic-rpg-tile59.png delete mode 100644 assets/textures/rpg_with_waste/tiles/generic-rpg-tile60.png delete mode 100644 assets/textures/rpg_with_waste/tiles/generic-rpg-tile61.png delete mode 100644 assets/textures/rpg_with_waste/tiles/generic-rpg-tile62.png delete mode 100644 assets/textures/rpg_with_waste/tiles/generic-rpg-tile63.png delete mode 100644 assets/textures/rpg_with_waste/tiles/generic-rpg-tile64.png delete mode 100644 assets/textures/rpg_with_waste/tiles/generic-rpg-tile65.png delete mode 100644 assets/textures/rpg_with_waste/tiles/generic-rpg-tile66.png delete mode 100644 assets/textures/rpg_with_waste/tiles/generic-rpg-tile67.png delete mode 100644 assets/textures/rpg_with_waste/tiles/generic-rpg-tile68.png delete mode 100644 assets/textures/rpg_with_waste/tiles/generic-rpg-tile69.png delete mode 100644 assets/textures/rpg_with_waste/tiles/generic-rpg-tile70.png delete mode 100644 assets/textures/rpg_with_waste/tiles/generic-rpg-tile71.png delete mode 100644 assets/textures/rpg_with_waste/ui/generic-rpg-ui-inventario.png delete mode 100644 assets/textures/rpg_with_waste/ui/generic-rpg-ui-inventario01.png delete mode 100644 assets/textures/rpg_with_waste/ui/generic-rpg-ui-inventario02.png delete mode 100644 assets/textures/rpg_with_waste/ui/generic-rpg-ui-inventario03.png delete mode 100644 assets/textures/rpg_with_waste/ui/generic-rpg-ui-inventario04.png delete mode 100644 assets/textures/rpg_with_waste/ui/generic-rpg-ui-text-box.png delete mode 100644 assets/textures/rpg_with_waste/waste.txt create mode 100644 crates/bevy_asset/src/batch.rs delete mode 100644 crates/bevy_asset/src/folder.rs delete mode 100644 examples/asset/folder_filter.rs diff --git a/Cargo.toml b/Cargo.toml index be7ae76c1d2de..ed2b369f5fe77 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -1781,17 +1781,6 @@ description = "Demonstrates various methods to load assets" category = "Assets" wasm = false -[[example]] -name = "folder_filter" -path = "examples/asset/folder_filter.rs" -doc-scrape-examples = true - -[package.metadata.example.folder_filter] -name = "Folder Filter" -description = "Load Folder With Filter" -category = "Assets" -wasm = false - [[example]] name = "asset_settings" path = "examples/asset/asset_settings.rs" diff --git a/assets/textures/rpg_with_waste/chars/gabe/gabe-idle-run.png b/assets/textures/rpg_with_waste/chars/gabe/gabe-idle-run.png deleted file mode 100644 index c8f57e34cf8c2a246e7027db5b106e0f76dbca52..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1997 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 diff --git a/assets/textures/rpg_with_waste/mobs/fox-run.png b/assets/textures/rpg_with_waste/mobs/fox-run.png deleted file mode 100644 index 822f0c73dd662bfe72541944b5bf867515dd6a92..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1098 zcmV-Q1hxB#P)rj0`Ws={vtW-<|GBmnyB_4-C4q?t9;T-~au;C$Ly7 z7K_DVu~;k?i^XEGSS*$iIMYsGTHIZ^r{wdyH?JJIe)s0pm95D*d^PO^rbWMdNW(t{ z0x|WwhvDZU;@@4lr{u55xL+Dqdbcf>E6Q_90MyEJH2h;+)u-)uCa#Obu9fG2K(M8S z+o=w>v9=uwZ0AFZTiw4hb4YT~EccZ7zwZ4|XwR<|8SKBpV!5IKyl-wWzd8WmEgu2! zwo2S8aIJ=aOszbJ=ag`VE*EEGZCic+tafqZuQdwf|cMlPP>JFMCz8WPW6LF3u zAXD{!32PiJEQRr0)gOu{c>QYqgwn!o-ah)s{O*9GttFM_0J>`>;i^7hCeHVrJ-Yv_ z1F&-ND9CGdzyUYuCFBy%q2V9njxIrNlEj%-|FIfkYR}VJBU0$)(@-$I{d3&r89+ox z0N?)dHT~}4rJcXAwykzPv|#xZAo7eLanr;J(A&D6IG%J@l-%T+)(j9AXLS9vxDxxx z(*_S`AJf}E598(8B%?;VBgK&$d1mD2K0APUk#s`0(L@tR3Moy|k$01|WCWC7eg}{$ zKFKky(P`q;(cfRz@|+SZpH3vscrKyXH76TKppgOr{Ptrb^$=G?b0aU6FbcB9OP+O( z7M4_&ON9CEpNF5b+@$SyoW*iQ{rtzD0Bqi0zua74es>U!nNgp$^ zlOh!02>SQs+61YYiHI&e8xv=>eqwZV2&afsiWovDA~32|cq7d+Y0XS*&(hpG{)5Q< zB-@lV!t3FgVpNgzF)SiVqKI?axafi~%_B*$rh-h0=Q$^P{x1KX+1$vlBeKsharB?Un}&J)TTGHu(z7lVb+CFZ za|~x8f)N?Gst-+|c@~_pQu?G5=}=OVqSR{rBv^E)dK2q>-`N8KchE(5agaU@#5C6b23whyDGxbndF_bjt2T!D+{9oq)=3&COH#WJ}-;qiptZIPw0?B;A0Mj QBLDyZ07*qoM6N<$f|`sQ%>V!Z diff --git a/assets/textures/rpg_with_waste/mobs/kobold-idle.png b/assets/textures/rpg_with_waste/mobs/kobold-idle.png deleted file mode 100644 index 516018d9e07cfa37a862d5cf4c1a197412f05147..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2526 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 diff --git a/assets/textures/rpg_with_waste/mobs/slime-blue.png b/assets/textures/rpg_with_waste/mobs/slime-blue.png deleted file mode 100644 index f2d3d4423f24e16b296e9ed52a1fa4268333c7a3..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 552 zcmV+@0@wYCP)j6PV-@NLVn! z;&clU5<*zcLEGGw_P~p}(BE`-eeZp*Ute>8!C){L3b9W3)n#CtQPd7NcFN#ecP zuNxRuUl{Ox@?V>89x9XF+6k=k5UXrLRT%N!%+r}C8Z8gKWj;wz4>s@XA#?+}DU7Nw z42X>up4j~PhuVbZAveK;GzCIjV;+a+&wTm3`LOBpZ{Ry8U}98#`3itC8&0*aOs33+ z^Y$Dn06=e`hQP^fu>k;UCPvlYQ+>1=U097S>ZJ%8hrs&n@uIS@e-J!ztMaE0000%A_P)YRs)ENR*2vK9D*)gjyZjgX`*jArFOTCVE*gNnKdTI8>9UJ)VDf2&$ZJ!nQ@kyV zqFpa4&ErI38)W$M<;M*St1k?ApBVvfK67@jOy1d_1xw#_VkNk^&O8oF7hNoD5M=$E z=X=miA4fNZVfBRp&yBLno8MWQR+^AGyZ00?oNd7Msu(U&hyE@1k;8t6=6 zB<43Utp1=JKrMz$&Q>N^{($NuDK$Y#O=MTkkzG9( z@BKh6rWL0a3(V!y*DIzM-!WfIz*{I zN_~srYI92;le2yLU01-#+1k@~G*`omPCRJMyLld`GH||-2Y{|7IP!$?8r*zUjJQLw z%{@e&iVNr)<;g9YB=y3fe=R;2m@C(CYE_|4<8y95=E`;C8e#Os1Vo(*0FZWK5!7PJ zUr{@;NFsL^h&mP2yO#rV+2@+5e@a!zikziwrJ=2&vZA3Uou?aR>SZkdlslD3bY$TgvK{(Dfb<(IQ za*gE3TBP$1A_^jD)?#^klgZ4ku74WmR~hGh?|bvj3js75jYgx=7VF;w0IrYn?=jz-GsA!Q@o?ax2NX+jY4Ne`1+z1|&&0FE?KU31 z%%jn+O2Z>6`8u1uxPA2iqx$;+j5Bf2*vH4@cJNR`uW4({>z13;MDdmU&+_m z?e6M}{b$4i(;A|w5S!Kz7r8{B0hxpi!o$B@n66mz{2O-F-QXTDs{d2~0MK`00D!;t z0s!Ds>EDx@0WS+MZ2S0{Af6MxA3&`$Kqj>mD!4qmL9H{K`aiGlJ25{zfRp5M#EE`EWlc4;LQO@LnJ*R+hDQA z{|+sG-9xh5asl;4Njx$N?CRwE#F>%G25Q9~U8m=J8>y`OlyJp9Vvi{P{sttwEdXG5 z={12FgU$e@z;E09s$%|9G^Cp RY|a1x002ovPDHLkV1nFb7KQ)- diff --git a/assets/textures/rpg_with_waste/mobs/worm-run-idle.png b/assets/textures/rpg_with_waste/mobs/worm-run-idle.png deleted file mode 100644 index 37783159d6fb57569f9304262b19b5447403cf0e..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 754 zcmeAS@N?(olHy`uVBq!ia0y~yVEh1NOK>m)Nh6{7ejs%$z$e5tDWGn_w2OyN-~RLG z4;MGTh?u;pmXVWdSf#C>tBp-WSYSs_#T?eutDGtSm0bV#_wQ$5cxlM+e*(k*8w@W? z5;w*K{+`;(73=D?lYRMHhNu5o#Zrzk^nPI2`Jdtcho{PRPm@jmueALCLTO@z*uEBp z*W0=N|6u?ce!b57|K?~{Ht$5?#{Wty{}tI4k%2#xwuF+UiYCak!Dw@xS`& zXCw2#4CATkIcr-NA2$|j%@bICRO;3L$bFO5`?s1G0Ui1K(S>Vo`;P;C(dRwyskL%AAhJ%`SexCoJv|v(u!m8M=voG84I=XPW zFFrTZM{V-S6r-6w@?2$(91iXJwlnj24(P2g{`Z?j_)UX|0#BpC$^Kc@kK=8fq=P%y z+{9UKFlt_SHsgP=%;n3n@9%KTeZ2Yg^l1lf9Fn_gHOKOaio9fhRM6>FAD5UKY)kmW z5!zR0zx#Tn43poEdxh&CHH+=vGv&{shI^0CJUrX*;YQa~ws~9CyTc8SJpAER*IVhJ z<)i-pP7QO}mpx{$dnVWXxB1Kv$^4n+QORX-`?c%d@(Y)Jsrj^Tm+RfPE0%A3P#_~{ z^&nsH?w^h6S~E}_#hLa^l}q)1>c7jMOa40Y z{kU0pI#+>J=GfZUyY|y1CT^d+=eA+9VeNmVInS+6>8~w*w*BY#tzHMN-u~47VAtQ( wrAzh~x5_^9TJp#w&%FGWXOu5ElzCUyvv)>o$o;=}3>f7Mp00i_>zopr05rgai2wiq diff --git a/assets/textures/rpg_with_waste/props/generic-rpg-barrel01.png b/assets/textures/rpg_with_waste/props/generic-rpg-barrel01.png deleted file mode 100644 index 6a56a788c357dc55c2b6a333e7811bd527a80285..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 405 zcmV;G0c!qAt56otR2T^u^J6s1c*K}V-n7YjnAAoK^g2%TMuE-p@@xET5mgcfz`DpZAnLTSii zM~6Ti+C}ZqAw!C!Lwst~-09xjbKW~&NF>uV5v6`iEe=#XCQG9CZHv2w;vqdK4NI6L z(=^xOTxxkx|M==9qcn)eWXS`dYlf>BAeUOAYX$%wfL1$?8mze*)L@NPJMUzebjpO4 z2XxIKeBobetYM*Vc2`- zPH8Y-%_o4W8Dtbc&Fa&>A+Q+JtnLF3d-iVp{kzW)Sd2-?UWeg*#c+Cl?9Q;u;>vK9 zt)K$oTR(H`R~pUQyM>6>^Q^TCiiYsfPS)M`2g|(A^XrgVwoPkK00000NkvXXu0mjfoZqy@ diff --git a/assets/textures/rpg_with_waste/props/generic-rpg-barrel02.png b/assets/textures/rpg_with_waste/props/generic-rpg-barrel02.png deleted file mode 100644 index 8d7317cd53f34e1169ae5512bc87f52f4ac9ea18..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 462 zcmV;<0WtoGP)wr?;4ohWNbo!Jj)nW>32?zOo0v*r;S| zRC@RR+`p4p#R6+ahWF;VA1GHEB#a1W2N&Hz20vzUDK0~ zw=bpsPfy&d-;;siJ_RDAlxQW>+m-d>SK^Dy0NyKhKQOCUp!RUd-D6d_JyK7JUae$0 zQcsD8uhN&#TJPi;I-HXRcH0T=32s$LxE4Lh5T3GpUB z?M|giDZlXK9$x$u^#(puT3aE2QhtFcEqu*Z86#TX3L4Qm%~siQ9JgyE^gB#xkvIvi zAX8e5+cf}0LDTGv2mz3b`PZuTr;gIV{=o-ubaewjGOkF*)$0B?3jnp%Q>c3MZ~Ltc95r0003lNklS5dJnPxryKl6g>C@JyfWNL_Adl!J`D9La+!@&K zgt$Ao;L+`#HH&Q+y!@gC0N-CfI|T@Rz{z;AlNeZ)6orL>9_4`7`E0HmeF(IHg=eG4c-2-_z1gMd|lZrep#N@TpiG>(mJbPTlyz1AkQHVN5r0003#NklV*CM z!FV2`^YB%2uTNL)3Pe;s#6G9I;gmOw*yqpNYewud5kYavR?oPDvJ(JwdT0EF3ctq2 Vrx&pNJ23zN002ovPDHLkV1fbIr&0g_ diff --git a/assets/textures/rpg_with_waste/props/generic-rpg-board03.png b/assets/textures/rpg_with_waste/props/generic-rpg-board03.png deleted file mode 100644 index 6a4685370298ae20b5dd59ea9c063e842dd32267..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 479 zcmV<50U-W~P)4QB#Kt0JNM#kQuL;B^;EGj*_yNH} zVjT#PU^8%Rn#{WA?Vb-7=H_PJ%+9`DK}6VxZV)N}=#3-ciV;~vOwg#s0D$4dOT{p` zAR?V$1CyMc7p(s~_rK_kBavfAzkTTJ3;;gff2{s~yMRs*D!sLC5Gt;2!(y4o=?Q6j zwu%#5KCmS$mU(TPb205oDLF4aBa^*Ri!~W{;lgm@p*N0%AR^R#Up@FonF%eqw)#g> z3INDu1(rn-05DhIi6k5L>WF9Y`1zGdlrxjq<_-X$f@5c)R7c$)R4yH{ep+&^x4Mho zI1)J~aS4tU{hFa{;D2jOGMsp*l)QxS0DA$B=ew2=q$#ppA(|p(+eAu`E|>yk(VAW9 zIEo^BK8$%$u&k&3a5_hzOQyq$&`hOk(AqK#08$)Y!&MyTb%AF|MsK+fT~Tw z_U+w^Cc3=2NF`IXxg{l{#KLr-=4zwnYNIe6sORe|h3P;M5!lDy=E}TlW|#X$@CV)X V2+p{?!Jz;E002ovPDHLkV1j(7*yI2J diff --git a/assets/textures/rpg_with_waste/props/generic-rpg-board04.png b/assets/textures/rpg_with_waste/props/generic-rpg-board04.png deleted file mode 100644 index 1edbc13d2dbc6db5f29d56d6fc7291533d59a007..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 347 zcmV-h0i^zkP)gOmX=qAtJ4Uk%pF%H;C+Bt2>F2^ zNSc9VEM$-D?QRZyFbwmUdCbht3L=6F!;?$ijz{yUaODXivXTKHiIov&MQ9a|=2IbV zkI#90v*+xh4R_B!=m5aS`}e;Dk{AdoUf0CuS7i7$E-OL=K6Tg3E-vVaeNTJJDsXW| z2g{W*d=jgj8~}*ZexF}t*Eh*dWJUOQ2LmasJ7|u!y=;wHo(ti+#DSEo1r85FELRE@ zuQAJW>l(eUpo`nkX%f+5!gx&3yML>>r-w7Y0uj}QGUbXlT=9lcru=$!!6;KEB4|#> t+MGM6I{`pP*Un$4VF*Nv3AYtA@e2lgoPqI*MZ5q2002ovPDHLkV1j&jkyHQx diff --git a/assets/textures/rpg_with_waste/props/generic-rpg-bridge.png b/assets/textures/rpg_with_waste/props/generic-rpg-bridge.png deleted file mode 100644 index a9756774b811def7ca243a2c0631bd9ec559a4bc..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1843 zcmV-32h8}1P))Og1b#tN7$q{jZ-EgA^{Wt1QQStEU|mQ`bGhscoq%p8d#X_nJ^qzb;_t! z3IKxl(}d60>tT+N_2wu70TI)??p>_l_RVcfPYuxSxM=nKFe8>wbhhvk07TU(hhv8K zvn~xv86_0qiN5fpFZ&<>zD%Bl zKfJ#G@SzpMPiAMeGKTL^5RP?_fVJef(MMxAGg2H}|)rh~YB$ zWN{h4y>|@H-+Ujxi~sP!)9*vVHXMp~noTDyM&E|(yo>!PITJYeR~H>XeAs{N01yCh z$T@)LB2Y5OoPpaNat{G1lN&tw_0BK000Js z3!&n*3Q)sA<$d+oi^0sIbL!jz0AOYLWGcz&sX=U(`L*s|tLKkA&IHmM0G>?j2;v3|U3W0E z7|g&<@X%mp(Q$`~MkdAMOLjk-GEappAm0i#TIax*IeCb*ZUJ-Gb z1XCELA+zi1su~p{H!h%7DM<0;XOcxwJs8BvDQ)B9SVWFWMeLIq91;~yjGvo$_OUd&(C#j_ke5N zXR*`o`KvuN5Lc92L*=^Xo0|z4Dzd70PSeraqCDy7635c&maRA~WEt`Yw^7SVCDAO+ z8geZ1ZI(Jt`Nkk#IH+V$?CA({FKHR{P7sYXJs3Jp=&Uq4TTQmg$bAKAFv*~!d=t3d zGT9hWx#{7`g%Xxlw-RgRT9;y}WITwK8#xGBK7^4Bept;9pGc>K-V)guQEF(Cn;sgN zlq?waGEf~HClOEea$NJjRisri=zTKbT1BrnhgGvilnqtQ8gYUA5O=L>*~no4$>6;U zK%B5nZ;r8>H7Nblp(}@O9bDf~7w{y5PgW$qk3DJDxK^J`lz)KQ?eYM<&l8;RE;ehJ zs+GK8nyiF{^KRDA5tMf=98~`%ku2TpWJJ$!!ZxsK*7)+!L9{!nJM2WfR}S3@;GJG} zu$3WC(6#!cGCu(EW{o2K0Yt%TvXYEwKZ#gv8=R)8OU1SBCK^+!8Wz9?Z_x0;t+>|R zO!PSL>MOFo9}=W{R?QkFg|VTI5l{5B_hbdLjFWZYC8WuNVnpwM)4+X1%^LLE`d2?` z1^nNTCun8)Bmkhwbfn)nia^xR;2l4UqdOCh3y53S?_y>7B)sEiQC*Hsz~zqXJRAIN zAa6K6A2wxFmjeTxI=6tq%%byTVn?_S0$zieMMwM314Nz%RUdq3>=D=txQ}iK(uwP< hde%tvbt5(oUI9P@@rMmMF^B*F002ovPDHLkV1nvjbFcsa diff --git a/assets/textures/rpg_with_waste/props/generic-rpg-crate01.png b/assets/textures/rpg_with_waste/props/generic-rpg-crate01.png deleted file mode 100644 index 9980613d04cd97f3c69c95aa013f4511a0b2b54d..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 436 zcmV;l0ZaagP)mS2iMBnhmH!G3k7G$%%i zzzM|7tnS$XX|mEJFtg40tqF#^XMYlek5%9uP9e8?wA2sZ?wdD+s7llT0000 zfcsCTvF`$r7a!-9Emv^?-o5!@0E*WyW0UZc$?XELw)wyha%bG5q|U`wDiKV@J!qab z=-j3NSjwj&`t$C_HDrY9Nert3)qaM zXi|impNJx%$EHLe)ChXn25XxWQ{*`aQX&`xFBNZamH(Q zxf1L_paOAxQC?@UdBn#4RpdeEc-zl3tOIZI4!33j&?QGjD9W^4qf3s;v|QtUFLL+e z&Zr{)i(gN7a2~e(BqLL#OOBHN=4oRh=TZScp`TW| zAy30l6otR81yKi0V6LKK7{W}m1%bpZAwgmJ86;bpkW5caFF{OAU@Ip`n;D8B6%%!o zteGJbO`0Og8>K6x%uVJbvb9;s#$pCb9d8g3{lI^;y%Q!(o`0{`>8GC7+i2$qKD6?9Z_YP)l&H6vzK(!3|6_bGig60%hr9smu%rMFlZb3|SyszXQs|r)VT#Xa^=#WvGzSp%Vj3 zHwY3e{QyNBIvm4gu+MolSCmv>Bm91ot-sCPJ>A{^8Ql{~DNxd*mNwVxa!>3-lTyO8 z8%2B1)dUSjdeqXh$tt+dyV>A{U25XpXQ7meti9)G0N~Kb&JrrNB8ykW7`R0`XfY(2M?M$nE8VaQp zqH1rOR_PAJtW(!{H;Z7I$Z=m!&s6wX)ZDik0H(jc>`cS=k6MoVh^oD9njH7_)V~(f zn@bG-m(sc+dI&}>I&U`83?#n?iUrH~}FuQ3|3EU*+ejFD1?n;||BdJVp zF15b9(!tC)qzx@f=(u^A5FC?+OPNepG2@<1R&1>XwpJguRtrwGk%_wx2SK%w@n%Mn z|H}ZL#?Q-yz`-CmNnauc&NB#{XZUcQVZo_3GHk7r)l;6qcyKTXY^^?Qtpv7KAGTHt zY^`8xwZg$5u(kTIwG!A`eb`zpu(g7%)d~lLz}D)+)=FS&^3~l0C4yE6!|ziA#tzMLa)=ZM*lVtu^?p9 zXi)GR-QmL4-QfZS&l?jcUo-&tc>gM&cD)=WkwZp;RBHx+i7|GmD%F}_uJ>xhWbhYv zI*W0zU;QQFC0etXsEILAqBW0n8`D`FOi+#FjF6UM0M*w%QLh6~0B~i#w-Q}mZ3k{4 zkYxcV$NJq63cNS55{I#I58}5+#=`{;Z=P+he}Ce4AR>E^XI$`-3tlqvjK}Avj67o^ wg7l=e8dvDPkp6ma{U`vSqss_CTgPq03Mh5BAmkJKMgRZ+07*qoM6N<$f?uJO2><{9 diff --git a/assets/textures/rpg_with_waste/props/generic-rpg-fence-raw02.png b/assets/textures/rpg_with_waste/props/generic-rpg-fence-raw02.png deleted file mode 100644 index 23e1e584e03f739997c1c5f319c9ca81d02959f1..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 357 zcmV-r0h<1aP)H{g{usB4`7=Y z2!;@gg)kQ8E;(=a;tvZu%g(>w%#O0w;?vFPg#dKNL*=`(SC-ssSLwB@nbE%u(&SWS zCQgGyW_0?CEbjCdBr++oP^>nZ+o`T!7Y$gnr|Gc91A@b}HN&bvELWEt=jyskN6aI#Z= zeX;r4KWyo%H60hp%XLJ5f17;f_IJVcj5iqE6doC;oNB(#agJGsE$8m`{)s^69K3z< zr9Cq<^WnACIR(p=PAfCd(VQ6JaG@dk`wa;YDBFI_aD!}ogJ5sZidQ%su>u`#D9o?Z?3HzBA0hl_1gXa lfiVZlY7W+?Fn2IAJiV4Jz1sYJJTSZ%JYD@<);T3K0RVWOlb!$o diff --git a/assets/textures/rpg_with_waste/props/generic-rpg-fence-raw04.png b/assets/textures/rpg_with_waste/props/generic-rpg-fence-raw04.png deleted file mode 100644 index 40067176ea2ae9acec116c2cf3dcf43c5ff62939..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 340 zcmV-a0jvIrP)Q0r@}Gf$fuV8l8b(}dnDA+CE8}HoE8~S5M6>}g%`kw^5Ud8A`Tvfgs_QeH zU)A-Q;mrScSY5z^%V{u;gaBiutsjQd&isGJV8STGU?I=Upr-VTVbOkOxEO{Dko^h+ zZk^bji%l)djng0CoLl$UP$boqP@@=GElfQNRt*oZIshwR$=mmlXvNsnvTWVA4TI=90S|&1(>Pv*RNl2%y4kl z|6jj;F`W7T^*_VGS^qc21peO`6ZoIu;H>{={(t=s6Gzbl6JR(v>p!vq$coW5A!A15 m?96t2!T(>D2{^MZHUI!Isb)y^r0000 zF-rqM5QV?h%XNqUAw|mc77G;{Z<#TOCQ_h$M~}wmM?@ zodWM~UjQU=lyOB7uMSdKFc>Yfd@x#)$^wAEZ-BheMNpjQKM0DmZG`>?pm+KU!0q#4 zF7R;o13;~6N^7UHaI1D^qWf?<3rmY#F1Vh5=Gnabmx=6`*8l(j diff --git a/assets/textures/rpg_with_waste/props/generic-rpg-fence-raw06.png b/assets/textures/rpg_with_waste/props/generic-rpg-fence-raw06.png deleted file mode 100644 index f6e9deb7b71ddfea9388f45d536c509f6cacec25..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 266 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`7d>4ZLo9le|9pKd&a4;kUgnei zxsUpX7yUiM(_4MrASw88ORzZ~^Xs|J|0bt2w5?=_DUO!ZcLrkSO^PnN7p(0OZ{;;^ z(O^FJr~Y`r)vuE0*1!67rr_CsYc>!NONwQ<+`;F;b;RQMexAa<`jh4i(h4^lqQBqp zFh9@|$RU>@vfIIz)AZ@3z;j14AC;49mH%8VW0Ag(m?;s3^E7kNOSYJa4pr&p)Jg733M=WS)&;blK<)AEYNK+iFFy85}Sb4q9e E0IcU^H2?qr diff --git a/assets/textures/rpg_with_waste/props/generic-rpg-fence-raw07.png b/assets/textures/rpg_with_waste/props/generic-rpg-fence-raw07.png deleted file mode 100644 index 524ac91b78bfbffa6e2c4265ab0e28b33a90bb44..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 268 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`mpxq^Lo9lee|&u{&a4-c`TG0+ z|Ic3hpSrE?e`1YYf6- zO^PnN7p!`1JSYC@*O?E`{4eJL0i7cf4Qm8t1)efVbQJ$NE%5xu^cv<3jFWhGl=kN` z#3UTjVBs${T^c`SXG4nq9gDw=%hTA{gf27kY}x+900cJ3#($Wf!u%)LR`T2pS7VUS zi@#~9Dz_Te{{CiY1merYe~5o?uC44d=ZV9g)R_l5&ag9ZJ0xjVZGOlJ^d5t!tDnm{ Hr-UW|{^)H< diff --git a/assets/textures/rpg_with_waste/props/generic-rpg-fence-raw08.png b/assets/textures/rpg_with_waste/props/generic-rpg-fence-raw08.png deleted file mode 100644 index 5521d89e6cdf74b330f25b3db2cff24ec8911ba6..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 269 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`S3F%DLo9le|9pKd&aAoMp5+sJ zW@cvR$M;Noc!0oXNmicrDSc)Z#H)`=>3qPlMUd z=1=#b@L;DSGM+CRa>N%fdnioGWZ0B8iRZ>$srJx0FIq~D>CHO0q_r{e@te0Gr|`Vh zwOb;&;QQ>U6B`>J?ti{#YERB_@jv#-;=Z#OLGt@`ge4w+$?uS0n7P5dY~4Y7U!eaO NJYD@<);T3K0RS4tZG!*+ diff --git a/assets/textures/rpg_with_waste/props/generic-rpg-fence-raw09.png b/assets/textures/rpg_with_waste/props/generic-rpg-fence-raw09.png deleted file mode 100644 index 444353ee27c6c1a2837b2d48a6158a80d1e1807b..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 336 zcmV-W0k8gvP)Pg->8(yFx%LY^=q`Hf4%5VqqY8gxI99v#|&k;y`R7xRsSy2);lt zgft^^(>Ook%&rH9`8(%u?qx<q>_0ufzCw(czyo-S#4%Hx~@KexAy}02KZHmYpjlIb!ZRLabs?~EM;Ph z(jjIu9JgZ@p@b&U&bH<0BlMtS7EFxs??T6JO-ONd?B;M-mcChW6I0ymOAO+A{4pqI zW4XUPX%sprrXvBcd#4KEW$Q}-b|0^~y}AS7=;^s+1f<&&LKL!Ko70000gw7Sj)aK{O-~&Q?%`A`?sa z0t;mBCJw=_yY=q6J=Ooc_kVf!+6tuF-sS^wr&m3SdZed|yI8p7vr6GK> Q1n5HsPgg&ebxsLQ091Txi2wiq diff --git a/assets/textures/rpg_with_waste/props/generic-rpg-fence-raw12.png b/assets/textures/rpg_with_waste/props/generic-rpg-fence-raw12.png deleted file mode 100644 index dbf962e9df237b30f6d94fcc8f082f6926967c3d..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 278 zcmV+x0qOpUP)fq$S@{NQa--3U9~UX1fZTnq5*2RqKdM3)4B4ZFmQdb36wD= c(~Ivs0ODI{E_a^u_W%F@07*qoM6N<$f)s6c9{>OV diff --git a/assets/textures/rpg_with_waste/props/generic-rpg-fence-raw13.png b/assets/textures/rpg_with_waste/props/generic-rpg-fence-raw13.png deleted file mode 100644 index ed53feeda8381f73c6e8747f770382e5bde34f49..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 268 zcmV+n0rUQeP)0g2QkG1QIoaBvUBN^fJR05DUqI0KpY78~{VI1VPZ4DI|g;%*>ULVkjAe zCLQoxn||+alYT-eg^e@_HNfn!5wRV%PKd>YS;vlhr|W%(=?aKFM?bb zB+K%-nJi0kT{sD3by1bnx`81Y+=vFZ?*-rRA~;`~zX=SvF7QRWzM$K&|4JvpU!G7` zBAdsxW*)HzwyPbZ@elxinz;#7KNhFPRRj2d>c;{gC3EV71n6BGrmoH{4NFk}Lw6L(ytwKN>J0aNk3jw!DXW=JkXO~igq}yQaR;fY?$rmhw zU@;P2itMbLVP(hU!h`qT%)Q(@Fes(aHEgtH*l3IH<++#4r^+S9qt}(u!zBQ|*A*;L zFv$SAe_wCy1VV}M$Gc?dk9UL;SvhdiLt4ZZZvK^@h*kpk%`X6EuNMH^)UFuS{^4Np zw5NQnGS5CXB_Mu8b7}6(eR|Gx5K6={2%NiC>zMsB+vP6-)9x||oNU?=xe?A1_=||c zYLeufPhaQ^ZUIpBey)80SJnH@Tk#+O)ia2R06^tX)FkU)sPPTl!*dx9`>OZ=0000< KMNUMnLSTZ{YK|HJ diff --git a/assets/textures/rpg_with_waste/props/generic-rpg-fence-raw15.png b/assets/textures/rpg_with_waste/props/generic-rpg-fence-raw15.png deleted file mode 100644 index 48306b30f87e99156e082e0c0c33d73b35c49f9b..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 344 zcmV-e0jK_nP)As=7>3`oa+`}k!NFh9r9%f5x)cgRM+yA}9fi7xgM!YToU#gC6go)*PI0(jkRc>< zAs`_R2l6@H5xu+U3mLxe-tWnq;0nSMW%t-K^`~%5-fY0Dy0)B(Q*s|AdmjED&`Ndsr zUgst%MKP~DHvl~JX*=}{<96zShrYRuQc8VcwQ0r@}Gf$fuV8l8b(}dnDA+CE8}HoE8~S5M6>}g%`kw^5Ud8A`Tvfgs_QeH zU)A-Q;mrScSY5z^%V{u;gaBiutsjQd&isGJV8STG5a;-pfq{X6VbOkOxEKt;0+t2Y zuQ1@&iQT!#YJWp%mK&!(FfcGMFxh7yRGd8i!;%e!z&Fnb?jm_FfjP1dcxKGvP?kr#+m|bzTiKyD*)W9lcpPkJNEzp002ovPDHLkV1i1tneG4p diff --git a/assets/textures/rpg_with_waste/props/generic-rpg-fence-raw17.png b/assets/textures/rpg_with_waste/props/generic-rpg-fence-raw17.png deleted file mode 100644 index 21b2079e899e07f23cccc4fc5612f731d820fe79..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 443 zcmV;s0Yv_ZP)i_zi3#rxA-IDTLELg)Aaii3Ai5 zg&eV2!TkVHP$F0dA>@iDVXp9Yao^tV4_@*9GxKNO%u`xxqS#&hCIB<5KLYyES)E@O z#|q#>TydkCqESt8cd`?Rm5bYaEtCX6nH^Y;E#GVBG^(k9zO^@CW&bAt54V4~zC5Kj z?1l{h3i-TbRoXY%+8f|XpV7xpOped`dA(tmWaI$;6~1S3e3rwF2>{j)o@v*X-a7Dx z<>5-7tV&beE~EXS6sdO4JMRWD;X zcIc^St^Gr%DOzh>848`Iv`R&3m5M^ADXt8~)8E(lTQJ?-&ue4>Jzr5cw#>bbDcj0l~r1se?jWkfM`x>J}*e3L!;sv5Nf*E}`Jy;Gk`BC`53{;GH^2 zhk}0~2t|h*&yc@5A}P7=xA{F~(qw!7JCqE7xQiOV>^A%Z@d)V>yUz z1#nfZ%gx0$0L^M$SVM(rkTwIP<4i#D{Q)QRMN34pJxM;A?Fm{UK0m%Q0TzI+xOj9D z<0i7a%N|ekl846e9{`=Vt+fD3x^C{UPVc_x2Z35z!OP<>0Q-Apsd+SZGU3S<<`YL_ zC)W(1PD-Vug`(P-`P32ttSld(&<_HYPB`419bT3hQZ1x456J~Mp)Z40gWKz~g#;(` zGq+?pp)cm>Tn+750E)o#{VQ4`2CW9V;zGO{pp2Pa-xRoR3k!fv^$!lBl`&}h`^^9V N002ovPDHLkV1n}XpB(@I diff --git a/assets/textures/rpg_with_waste/props/generic-rpg-fence-raw19.png b/assets/textures/rpg_with_waste/props/generic-rpg-fence-raw19.png deleted file mode 100644 index 2bb913e39ccd40719b6ddba1c83062ad3148803a..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 308 zcmV-40n7f0P)As=7>1v-Nj5?H6FL+pCmkGvQ+Ma!ujr6P9CYw62qJERO9yc%(b1uqI+YIn2|;kX z5Uxv&i8(KZKGSi0@AL8T-3cirS%$s70vH8rG3@n~=O!%o4~&AfK!bH1p1jrp@c%^3 zP6PHQT^4|vE)0-8n@9zritwkGPX6>ns3N{Tjz)oXeUX(wg%QqpZi43~#;!&|RSJUd zALoC9GogxTi^uAM=coL`D%(Qo2+dBTnm{KpVF5UYg<|aS4!q5_cZXAf><+}I9V>wL z4T*DDDA^qpK2$nFE4D=|wgte;d?hx!U9MOc&I!s2Z}AK39aA|P$s=z70000`kySkG1S`Qxj9_Dv6R<(SzePGzr1R=d?c0L%-gFc83~V{K@bvIa9BDqk0s!Jj`vJrt z(Yu2Cx1&`qTX6nJ0OzM`$aCK-FTj5gZ-D6Kt^hn{ATQ@t#<0ES5(wUR#u<=T89FHy pA3JmQbD{urQo6UGlTz7H^b62rQDyJUfye*=002ovPDHLkV1lW=da?ij diff --git a/assets/textures/rpg_with_waste/props/generic-rpg-fence-raw21.png b/assets/textures/rpg_with_waste/props/generic-rpg-fence-raw21.png deleted file mode 100644 index 223f358a4877197dcffc0b60d2cc9b3e7dc39b5a..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 366 zcmV-!0g?WRP)@OQsMPPwt>6 z=uqejcrodq5UxY9h-1m=2LefV_j7kTk(3f9o^Bo(04D1>nS4&_f@k9fX5)qu`nNz4 zTu>*X6%d@k4{~+(gB*f0Z3ea}wIc8s^mut+NlkDDmzwadcL0FrcT3&vGg;4x_-$Zp z&@ucVhyD8UV{|w_llc5{)V_)ZTW=_f)Iqo1uC|23dUda`jAJ6*B;NIU>{1i$mW7Y+ zof25aab+TnlUUGhS+(|xfRjeNntBz-)zpKNM%8kqlxiUfSxO1P8%7fHV%X=!u+K!+Ml3rc4m4#{d8T diff --git a/assets/textures/rpg_with_waste/props/generic-rpg-fence-raw22.png b/assets/textures/rpg_with_waste/props/generic-rpg-fence-raw22.png deleted file mode 100644 index c137ab804215f4fad0e7469316f72546771ccca3..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 329 zcmV-P0k-~$P)zucMMfspW*zfuFni- z{=Y*}!$QafFpanXQLzx`_?H1!=AvIZxOI<>bOTHng)jn*Y!|30VXuIQ&W&Vwfskef z1|rhI?$$Vl-3$y28)t84Xm9ahU|?WiU^~9x|1Zk~M!W`Sm}^@c)cm zGy?+z1B2dgRz`v@fP?`viWss+7$CYtg1Llf1BeBq1`KZls=7WiH11u4HSr(=#?gl6 ba4-M>>4aEaZ^>DN00000NkvXXu0mjf@%D-c diff --git a/assets/textures/rpg_with_waste/props/generic-rpg-fence-raw23.png b/assets/textures/rpg_with_waste/props/generic-rpg-fence-raw23.png deleted file mode 100644 index 8f69161186a8f00a4588f3510652979d5c0bd42a..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 339 zcmeAS@N?(olHy`uVBq!ia0vp^0zhoQ!3HEH;(vuRFfdAax;Tb-bSD4#`dXY>wV_k# z?qaqJ7aOXcPx$}!oZ^4YBF8z8c{OYJEBG1|9gCjTS7DNy}7pXl+GX~=R*yWhZ*K1GHjM*YfI=f$vTi=yrA&Clv_-y%Hs^@ dVhafdhVz!u?=SrPc@Y>`44$rjF6*2UngG`dfs+6L diff --git a/assets/textures/rpg_with_waste/props/generic-rpg-fence-raw24.png b/assets/textures/rpg_with_waste/props/generic-rpg-fence-raw24.png deleted file mode 100644 index 8f2286f0e6d77512d86feb339c57499e41196ef0..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 394 zcmV;50d@X~P)NF|GT!H_J;3SuTGA$6Ceggn*o}5xKq>gdF zT3Hu>ux+8;p8ikHuGUr&xnAJ?^~>t>@#$vlW<#ZC%?8h^1_)>1P?4O48>}q^06pI? z)W4pnW$dzBh-3ze((`@oi5gmU2QTYnkn;{?8CZT|L#ys^h6g|_z>Pw^oCSO5%UJ+7 z3R!+*vLSY(P^kpFFEybNt+yl{`u3Q*kxFvr6Htvx|? z51je`j-jgSGn`-5^_k(!|98~31`b$gW$=yDAD}E|T3Nxsz(Ax2sF4InHRH_xcMMzi z?ITzK5cB|gnkEF?Iw8sB);%@`H6=s|M~WE`z{}v~%}HX$%N@pmFaSMsFu4it|9;zK{UzB9QUFbAVg?4n zd4gJis`UWd@df`GTH_c@YPP_|+FN|6X$1zLng`g9FZh4PE}DUXfq}uKg@Iw??ClKx zsh$kKEE5uYgG z<_M3Cy`|}o>Lq?}|6SuYDdxZ~IN(%{Tr| b93#WKOiL-RU!V5_oz39s>gTe~DWM4fkVst) diff --git a/assets/textures/rpg_with_waste/props/generic-rpg-fence02.png b/assets/textures/rpg_with_waste/props/generic-rpg-fence02.png deleted file mode 100644 index 66e1c204ca457a11928e2d2b5486c42bb198495b..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 201 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`6FglULo9le6BY;<{QLE_TZuU$ zf#=%X&i{#T?!WsiIZ^cCYJ$aw7k?8X0u!`h@bEU=y!;;>OX;@hWA<5O`J{SSMOvo-bb071)>h$0`|fARmf u2p&$U5AOaC5!CSO6lp(rK-$5Ofnj;S597PNx9x#$WAJqKb6Mw<&;$UMpHJxk diff --git a/assets/textures/rpg_with_waste/props/generic-rpg-fence03.png b/assets/textures/rpg_with_waste/props/generic-rpg-fence03.png deleted file mode 100644 index d41b816abcafa56a7fc89d9da5598793d03b8db4..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 228 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`t36#DLo9le6BY;<{QLEl+qI#$ zx0f-NM?N9(?#v(Z$9}%Gn=cqSNy2iP^m6+Htfmq||BVd{3=WAbIDL@EaayvInP?=l zk@S3-F2*Me$NtY={9ib%O?txu>!~3Q8^t5??j}16eu&>R@8k9L@jSODA2QtY?S{jI ziH(hoj^7Sd?~v)9B^0&D(&DxK?T@TH*DoHGl#ux2tNRaRN6h~%f_iR+UP~-^*zPfO aF*0mg?DwG2|F$X6*$kepelF{r5}E)ahgbFh diff --git a/assets/textures/rpg_with_waste/props/generic-rpg-fence04.png b/assets/textures/rpg_with_waste/props/generic-rpg-fence04.png deleted file mode 100644 index d1374f8ecb662b64a98f453f1b51a41646e55b65..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 207 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`(>z@qLo9le6BY;<{QLE_+lcvJ ze&4_Uw`=W`Hz~Y6cjUi;nWE)1>E-qY83rnccoXl={PF+TOa21hmM1eLfM5da#G6M> z7z)0Re$(*r|FakWTc$o_(|K`DNi^UM>$K?aH$aLc*M^!#>R)gmiJ0*doX#ig=&xt8*@IxQ3i(ni+oiUe75Wdx{$%s)z4*}Q$iB} Dg{D%= diff --git a/assets/textures/rpg_with_waste/props/generic-rpg-fence05.png b/assets/textures/rpg_with_waste/props/generic-rpg-fence05.png deleted file mode 100644 index 8baa1857da53c805e862a4583561cfd9b7e063fc..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 241 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`J3L(+Lo9le6BY;<{QLE_Tcb56 zCnw@)-cY3ST=dC`#i}3d z?ZP)anGy9TJs}}s$G=SFHkI2SS^uvWE|5JqrD8i!o|&1sIqh=Tn#`sZ20Kdmt9b-c n8A6j9l?wKr`)$AP2pfZjfNdBT>$j^wKQMT@`njxgN@xNA)F)vu diff --git a/assets/textures/rpg_with_waste/props/generic-rpg-fence06.png b/assets/textures/rpg_with_waste/props/generic-rpg-fence06.png deleted file mode 100644 index c70a71b1e7faca9a7798c260cd4fbfba5ec12cca..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 147 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`QJyZ2Ar`&K2?v<#{{A{zu=m{W z|NqZk{9m{-@lZO0A;WscoSYmU5HR%2B1Ye>=LI+oafd9ZDH_q^>bP0l+XkKYp^kp diff --git a/assets/textures/rpg_with_waste/props/generic-rpg-fence07.png b/assets/textures/rpg_with_waste/props/generic-rpg-fence07.png deleted file mode 100644 index 4c5fe0f1d78681d752d01781ae7332f0f65da1dd..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 129 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`9-c0aAr`&K2?`ABu2=s5zu)qg zy_Zu=OemN8X4?JQz+Wdn*g9@L+c%@FG#%Ivnd@P@lG ZgYz7T*hUe9(MP?Hp)(@wIO&SCgG7j`!mY4W*XeZkV*8O#V7oA~{*irb4+0RleB|4&9?a<=a z+ke-%N&LQMYj#L4;qJ^I|Bt=o=P}?h?s<{nQm$r~o^09>bKpmP@t67-vqN+K->$V& zmX`ijkZ^O$CuwFNXr3js?8&mJ_a&}OsWa5r{kV+rXk5b1)w)Mc95`@b!MDGxZhfEU zY@amo?T@Da|8!?s@Ft{KSiH6e>OA~)ue70x>D<4P5NYa$Y-GM O7(8A5T-G@yGywo;7;PE= diff --git a/assets/textures/rpg_with_waste/props/generic-rpg-fence09.png b/assets/textures/rpg_with_waste/props/generic-rpg-fence09.png deleted file mode 100644 index 189e4a52c6a3817a22c46ed06590476b2275eb9d..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 201 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`6FglULo9le6C_vjX4ekQwcUjzq_pXX19a)xf{tZjp>}f_3 yPam*}M9%!LzsczMtLrD1#~Dp|`66j5Gegk|ml>5So;U&B#^CAd=d#Wzp$Pym>rc@D diff --git a/assets/textures/rpg_with_waste/props/generic-rpg-fence10.png b/assets/textures/rpg_with_waste/props/generic-rpg-fence10.png deleted file mode 100644 index 2645e20cdc82cfb2346f65c4af9e16e3798fdb24..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 183 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`b)GJcAr`&K2@6a1+=(ud%*@P(eZ3`* z*=`ozkhN>I?h%g5$3s$5`>w7}wc7PxeSTHv)dnT)&;Jc-8B#30u9h@%|alS7-nL diff --git a/assets/textures/rpg_with_waste/props/generic-rpg-fence12.png b/assets/textures/rpg_with_waste/props/generic-rpg-fence12.png deleted file mode 100644 index 38c1a6505e055a0a46e9596a2d48419d7ca02581..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 234 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`8$DedLo9le6Amz&9b@^oKkoTo z`T0_6HIsONKx!FN#Zyix2aX4(2lVH3KRou5pZNuo#E-A9#VgqaitLzyfZOh5^!FPQ zSEke*j6Jx^SWs^1{=3hOg-jY68HIZHOG-#Yl&k%7FPq5b{OJGvcb_FY`CLlgANV11 zoJrZvGo?P6JAgNs@layH<1g$P2}!4Nqki`Cae7|9IsahsJ+C!!dspka#OQ30jc+jZ f7LT0ypPga%3EN2%X1+QMbUcHntDnm{r-UW|+s;`f diff --git a/assets/textures/rpg_with_waste/props/generic-rpg-fence13.png b/assets/textures/rpg_with_waste/props/generic-rpg-fence13.png deleted file mode 100644 index 78890e5914efb041b7b128f596580acdee820081..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 137 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`0iG_7Ar`&K2?v<}<@f!o-+S)2 zy`8Dg50(5m{~G+I_A~CU`r2=yYTFt0NtI)OlkF&};@zS3j3^P6gTe~DWM4f Dv~D(Y diff --git a/assets/textures/rpg_with_waste/props/generic-rpg-fish01.png b/assets/textures/rpg_with_waste/props/generic-rpg-fish01.png deleted file mode 100644 index 313b7aff52dc6e5b77801dd011c58df27b061df9..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 121 zcmeAS@N?(olHy`uVBq!ia0vp^>>$j+1|*LJgpk=Y&4Tq!geXZ`>uFP2daA#lB*>wB&ZC;<)RVE&pv3ha^qu+0_PV)zE^?`;k Nc)I$ztaD0e0s!N@CARNz>g>WdftHo#&1w^~*kz8$I{UNJYD@< J);T3K0RWwABxe8s diff --git a/assets/textures/rpg_with_waste/props/generic-rpg-flower01.png b/assets/textures/rpg_with_waste/props/generic-rpg-flower01.png deleted file mode 100644 index 464523232f89d9b118797c37a1883eea37345357..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 194 zcmeAS@N?(olHy`uVBq!ia0vp^96-#@!3HEvBYEP0RHvtlV+hC0+7J7;vBc3u6t#MHamaM+*v?LTArCtCqdzJImQ} zKZgF=OsBMD3t4dn6^qtMy$?TcVo8Yl@8ubB;~v|;N}sDMu50WHtBlh2&%U_zmFcOF zUY!FE>y|~N7Mx|!u#;@)jGwZ8GQ*vm&$S=fy4KnKc%7W}4CponPgg&ebxsLQ0LCUv Am;e9( diff --git a/assets/textures/rpg_with_waste/props/generic-rpg-flower03.png b/assets/textures/rpg_with_waste/props/generic-rpg-flower03.png deleted file mode 100644 index 4d1373bbb30120051b39d309584510a0262a4492..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 199 zcmeAS@N?(olHy`uVBq!ia0vp^96-#@!3HEvBYEP0RG+7dV+hC0++kP+v2u2(XFW%M*bQy!EtDnm{r-UW|(-%&9 diff --git a/assets/textures/rpg_with_waste/props/generic-rpg-flowers.png b/assets/textures/rpg_with_waste/props/generic-rpg-flowers.png deleted file mode 100644 index 2820f5eb96bb17846fbafb7b64f1189d5a7fe7e8..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 715 zcmV;+0yO=JP)p=dy=*9u&1tt}z ziDh$`WnbDvmVx88Z#iTe$;wf&RGi=@;}cWcyT9KZRpE}R!38aC5`K=VIEoXO4^^Cs zQ&0^G00zE-H%noU8&xqoSOoyMw=Q-5*`qkrI21=dcx2^x?W%~FkLtWSzK@Sf!YKB&>L3*-U9&de!chB0L9NYB6Z8=gp6K@&(}`C zH+JbG)ae=B){qlEi$;irH=#a2akzrwa0RFj=*y}moUqX!_E8+(_8!&;I9}hTjkPhI xziHA2tqbSB(dP&qIIR71!WU_*Iz_u-;t%hoi-BdO#_0e6002ovPDHLkV1hJXNM-;4 diff --git a/assets/textures/rpg_with_waste/props/generic-rpg-grass01.png b/assets/textures/rpg_with_waste/props/generic-rpg-grass01.png deleted file mode 100644 index f7718c95fbcfbdd4ed19665712014ad336adf81e..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 132 zcmeAS@N?(olHy`uVBq!ia0vp@K+Mj;1|%;R9G3!8-kvUwAre!Q|9pKd&TMy}tma_7 z#P8{;Ov=naAiPpa0tg}sJQbKr3XjF_uS+x)RBJoeZq0vFrH1Xmk%$kP2hx=9s5$*} a_%6)w*28F}+%q$feGHzielF{r5}E)DpeQ*2 diff --git a/assets/textures/rpg_with_waste/props/generic-rpg-grass02.png b/assets/textures/rpg_with_waste/props/generic-rpg-grass02.png deleted file mode 100644 index a5e38a8ba9574c9e683fad1de84e816acaa5f260..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 156 zcmeAS@N?(olHy`uVBq!ia0vp^0zk~k!3HF)wbmE`sbo(V#}JK)y%P@d9x&iw=3TWb zc-zU0yUVOUX2yG*D3q>HOrEc!qZIIb&w6%-Bp>JGIjuZu9S_&&GhBVPekRKX&#jrJ zHyRlqtoZWoan`Zyj@8#@SLO9&&f}IY%l-7u>yMH44{i@e+aQk=O^~e&p00i_>zopr E0M-RJy8r+H diff --git a/assets/textures/rpg_with_waste/props/generic-rpg-house-inn.png b/assets/textures/rpg_with_waste/props/generic-rpg-house-inn.png deleted file mode 100644 index 007f3b73181fb7d297a11b5d34f9fc1ea713d4cc..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2851 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 BfT;ig diff --git a/assets/textures/rpg_with_waste/props/generic-rpg-loot01.png b/assets/textures/rpg_with_waste/props/generic-rpg-loot01.png deleted file mode 100644 index 5f158afab52c2161a9fc4a441e44ce313a2e9132..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 250 zcmeAS@N?(olHy`uVBq!ia0vp^JRr=$1|-8uW1a)4gPtyqAsQ2tQxq6_rhNH#_{Q^h zu}LZ`ew?3gUy!q8$@lrJ^B)CoKWAtF1UfTIr#jx8(%lFGogzmg?smTEVZE&P&%Wl@ zxBrKi=l^eCZ5VXv_x~#E>-Ea2d;hbDDqCkhzhYe=J#p?tdAS}*D>tvI|KGQ2{HfnN zmwWk138|ReoPWk|{_tOK@iv@1anil|L`^%kM9o09>uJ$#r_+y0>=D)7D8=)=dBYTq w!?)AdOWw2leI&rBpZ}fu9zQ4ksF*Is);+z`I?m1r0D6YO)78&qol`;+033I05C8xG diff --git a/assets/textures/rpg_with_waste/props/generic-rpg-loot02.png b/assets/textures/rpg_with_waste/props/generic-rpg-loot02.png deleted file mode 100644 index 57732b93587a686bfff0ae13a061eee69863bade..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 183 zcmeAS@N?(olHy`uVBq!ia0vp^+#t-s1|(OmDOUqhb)GJcAre!QO@c1{K7ZiAfr5AU zRNdHQ7?!oQHa0dUKEGnk^X{eqV-ADTdZs`gVFi{4UB7R|Na#G7DJcO2el~x)59zJC zbr`7izyX&F7AgiaMB?qV+rkBX=1pv56nbInIbWirH~ygN#G9(0e@L9WyZZ=7ziEU{ eBJ+kDtPD|_I#%sFl=^@!VeoYIb6Mw<&;$Ux_(CxN diff --git a/assets/textures/rpg_with_waste/props/generic-rpg-loot03.png b/assets/textures/rpg_with_waste/props/generic-rpg-loot03.png deleted file mode 100644 index b0c154a1b20c7882a9104f96b6acb2b2cca4263a..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 293 zcmV+=0owkFP)IIT%Y(InYunm^piM*v z3xZ)~Vd=p$$oI`TUwZHHfB)Z~X8_7cqKnTZ|JBpSi@}N}`J0M}iiqn=K~VvWy(k4m zJ-_NXhfeFnx$M~G-u|u=gt5PYG!~a$-*4r~nsr9gsoBW$JC}&)!`-u%lSDm$_k0D+ z0Qiay*H)J|0C;u|YNuPcF!ourmOr8}_8HD20FDc<01W35UcOofZ&Xq}II1ESx6Z|D rpD}*y(;Z~S{i#t&^)IeF$PBHW_u zSqwK}Qco=06egIUuoNF$fwCzVij|Bo>+1UFW4NcOFp**Rkt2*K?m>3fpFe;8FPL`m zzpIVSe-;J?28O$*zcJXFd|_ZP5oKUt_`-1b%xe@AS+IHA)_UA zij+;c7#RAXDvF?V9|OZ(&Tj~ZCk52~w{r_-Ncb)fH*EpuLxw}U)-uf7(8LH2r=)n+a07*qoM6N<$f~XaOl>h($ diff --git a/assets/textures/rpg_with_waste/props/generic-rpg-loot05.png b/assets/textures/rpg_with_waste/props/generic-rpg-loot05.png deleted file mode 100644 index 3eaf8173e4931cdc48c53cb228c9fc9f2c43e08f..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 291 zcmV+;0o?wHP)Ri z%t~?#s=aa_i}o=yJG<~tq+wz;-x}=JVCDC)YHQK@@uha;i6&KBiywH7@OC%l`Slur zdmnL%8p|xRrXRR{Y5+K_J_X@v>+98V{a zG)(MXZUD$<7pLY29-A^|J#WZomv6~R19002ovPDHLkV1krDb*caW diff --git a/assets/textures/rpg_with_waste/props/generic-rpg-mini-lake.png b/assets/textures/rpg_with_waste/props/generic-rpg-mini-lake.png deleted file mode 100644 index 8a2d5770d2a59c1a15e109c8edb144914a3e8cdd..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1016 zcmVwWr%xOCG8v&nY+bc=TKN?#JR~J&1L}2s`Bly!>SQ_wu@K&nk1u4FKrc ztCjIs5qzjDP~PF-Z0&hoep2Q{{vug&pw_k!<|GQP3jio)GNOor>!O&+1mdaRIVheK zQ{%O~?)VK&4Ir{rdc#z?N@8g?0RX7oK56y^*TvFo0?EraI32t4%hm53+2$Nt=^HVo z*pNyu8q=^cCd<>yrZZPB$`ee5Q+FKDL5KEo1WYkZFvaF^L>pSxme-x`Qotq@r`*8QpZAeP*@#CWX|pr=aQlae zpW-gXxjsWT1W_FAEnA!8Lnk*(B!TY1 z&nY*6jN&zIU2UkQEN|Mocn)aFs0ux(lU4z#%_xXt{XaIM%@$-8?DW8d|Fx4mV-cA zQb8|koGN70!U)>^Wwqpqr-HyW_6t85ICqBt^lLqUF9rOl6S%e>{F2ZwNDyGZ<`3R} zp}PgM1@r^=AUZ%u@bi1XQs(=!cLo66o4e5Kbb@kGYkGwtGLm>A8#qkzn9P?GR%2>) z3y&VXiR(B>&rYg9kpL^Vl}WzFm@4_LJ diff --git a/assets/textures/rpg_with_waste/props/generic-rpg-rock01.png b/assets/textures/rpg_with_waste/props/generic-rpg-rock01.png deleted file mode 100644 index 150a645baa47f09ef24a32fd7084e8f32a3ec356..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 272 zcmeAS@N?(olHy`uVBq!ia0vp^0zk~c!3HEhl+{lMQrA6Q978lFCja^RTAbPF!-u|~ z{b%lPEag;YmfCUT*Kd1fX6EL5`C)EiC1(p8uS&2fNf&i~{a(NK{+a?i;Z28*Z3`0qcNkgvC*+Hn)z_H!GS{u4jkC9{#Ywe zsPW*+RQ|(vFW;8{0kO6DsR0kJIRxeuWoQB|Jp4a?8fQVcfsxFdum5{uO*S#H0YTf6 zf9gD+xl#je+_+-+=hs*6K1sfFzxvPEeg6NtzNE0kPPxkD5X0?{tQvktSs6b5C>O8h RvIF^)!PC{xWt~$(69E2sbJ+j@ diff --git a/assets/textures/rpg_with_waste/props/generic-rpg-rock02.png b/assets/textures/rpg_with_waste/props/generic-rpg-rock02.png deleted file mode 100644 index 4803105cef26940fe7b6cdbde69bc977b970e272..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 387 zcmV-}0et?6P)P000RH1^@s6$3KVo0003>Nkl|Y^B7$5ba(a_X z;LyKd!M))c>>lUyrS!q$xbMDq-`(#lDJ7 z&TP9Q){y#kpf+#;IMaawn7Oqzzb{6dHBVwU*ZBHk6ndJ(1}h!N hzVDSe=k;dm{0D!r(8`y`in0Iz002ovPDHLkV1f!Ou&4k4 diff --git a/assets/textures/rpg_with_waste/props/generic-rpg-rock03.png b/assets/textures/rpg_with_waste/props/generic-rpg-rock03.png deleted file mode 100644 index ed8db5184b94b83983a5b0f75a42da8c2b01170f..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 388 zcmV-~0ek+5P)As=7>1t|lcD(w9fU4|;A9aOCn8KR(A9Suuhji`Up$4sEaViuCOI@TilTdIe zIP@>X;WB(3>>V*C3Vq>*yL|V)-}i*Glv4ah3p)~kQe<0MHP$}!Mzbwx=dUkM#&BUr zk`<8KXL@yUlNqW5N|9~F1L70yblzyTCCfCf!PqksX!GP0M@i$`JMWDe)Px3GmR z4bKjizBiWqa6)wrU1prpza*O?7?3ul;o%ZUe zYR6jGk(6g6bbzIl!kPO5(7pfR@%jV+|EppyYgFH#YZH)n3#K;StquUlIdflvT8mO- zTMoXM4j9p$z_eFqx_;XPQlV4)fMOkhpw`kjjQ+T9@F=Cs;{8F=_JM>FNGS2|$=bBF i_Yo!K%>At&c1XV4TkPha?eA>nX5Axo-_nv$1JA`r0aSW=prsdv0KRvQT@u$a)H@*?YpYL~XKDL4v+J3JFm>FN8ujiQ-gT#~`?_F%2b4HV4;BdOFiCDHe)+yDTG+QcbD zxil(w4434+8Mq`fnD8V5fQWry5<|-u=gi)nOA72e&w1p(F1fIaN8qn}KYjswu-II4 So8JNe0000PTmeG(weLhOb7jKbz8byTHBz`v4KwZDdf#14^p^l82TW`t$pZsw3$}%BKhC z0g8*U1ZX4>9oL`^)1_CDD=x-zWp@zuo;CNH2Bls>rB(u9?ll<=$`N1U^%XHdQ4-xsP`;m`r!s|Zva>q0$F7e2A>B7>)@5jw=M({py-b!LWtOh luV?w+wZuP4QD!O5_Xok}+y@T~6(s-w002ovPDHLkV1jUKs-6G< diff --git a/assets/textures/rpg_with_waste/props/generic-rpg-rock06.png b/assets/textures/rpg_with_waste/props/generic-rpg-rock06.png deleted file mode 100644 index 79d8a58a829056c60b62fbfa043a54ac0e238a92..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 483 zcmV<90UZ8`P)il$W&TS2s6cGI*TaN?fh>+T!r&6QXIP3vLoEa$ZVfMmfO6ERjnT+EJZp|)4Y z#_<}?b`OwBW&i+#ps#%kJO=>Y>k|e+AMY1CkOfn8jgWF)3sDi80FL?Rb2#S0aV^}u zHj(pMuzPt$z_sul$F-13W^jMH3IG}*i_iq1-5^;oMX6jRc6LzT*M@#Rhl-Fz9Nzva z5&*D!d6?@TYVQ{-h;y9i*jg1Tfkek90NB2IQ!%m|21lx}btHTW2!KWwC7A{xr9`4* zlV7YL8ybRz0MK0WvtO)$2^q3rig`#iNGY|2c7uEh$ftnNZqVp?bS`>#ku~*4w6Lo= Z@CUEANLYyZvMm4r002ovPDHLkV1mF&%5eYy diff --git a/assets/textures/rpg_with_waste/props/generic-rpg-rod.png b/assets/textures/rpg_with_waste/props/generic-rpg-rod.png deleted file mode 100644 index f0e7e170a7dc40f48217333cf1ef0b6addc78f4f..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 469 zcmV;`0V@89P)9U$K0004;Nkl`;O6e4Ag&?^4l133NG*ke zh;&jZt|Ef#<-F&h7n*CUtwR?-2qf>__rCXYyfDr=>R~&%OaQRsoPK%EAVw>VL<3-)bELbMXs~A*%Omed??!zmpIfaN zL-FpJW+ozx;cA}%;OyWMi|Z+r;u!$IxMwlDa720l)g)6LoKgq8ph790fo=l;bKJ93 zw3?3A3lyla6{s3(ZcelKGqL4VRae`eYWs+V+e(`i{}ZvLD_6bgT2fRqY>H^R7Fp3W z8HPczw~^+EwrkOK-y;AZG?s!$e!zCEuT9ZthayK5cJfs2bVvw6LI^5%Iuv&Dgd9=b zpH4LrnKigQS^r(($FAD0Md6d1fbC^v9z5Z(U&rCs^bMZy7yx_%Ld@?oIvfVI00000 LNkvXXu0mjfAP3H* diff --git a/assets/textures/rpg_with_waste/props/generic-rpg-trasure-open.png b/assets/textures/rpg_with_waste/props/generic-rpg-trasure-open.png deleted file mode 100644 index 2bea8b407517336310ce63c016dec3e2180ee2e2..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 634 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 diff --git a/assets/textures/rpg_with_waste/props/generic-rpg-tree02.png b/assets/textures/rpg_with_waste/props/generic-rpg-tree02.png deleted file mode 100644 index ef3976b66b8d81b78d1d22fc97570a2f13ce4c87..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2880 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 ZhEMN=?l-(BTnsdm!PC{xWt~$(69AOwFrNSb diff --git a/assets/textures/rpg_with_waste/tiles/generic-rpg-tile-waterfall02.png b/assets/textures/rpg_with_waste/tiles/generic-rpg-tile-waterfall02.png deleted file mode 100644 index dcfe37f63478ce43a20e1def9e0a96d7f3e604b9..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 192 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`?Vc`d3lCqK)Yutv*5E>7=E)EDqi5JKN2t{`Za!Id@PPD(c$>+Mg|DMO@&1^6-gzH) z!bOj5j0ORPe=JhjN+P0+HcVJNG4+u+o12%AkkNu03}O)_6SyK)FJSXXoulIUc(dfQ r6?zp*SNd*A+xR+M@_`taqXt9OZ-t8tKbM^aI*Gy4)z4*}Q$iB}Bri;$ diff --git a/assets/textures/rpg_with_waste/tiles/generic-rpg-tile-waterfall03.png b/assets/textures/rpg_with_waste/tiles/generic-rpg-tile-waterfall03.png deleted file mode 100644 index 293a6b58dc16deec0ebae00aca20cb18bbc6433d..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 179 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`Rh}-6Ar`&Ke?C7yU(d$HAgnrT zWfB87Gc$8@$T81Nya_IR%+osKHH;f%9Afnk_^KY%X4&g-!l3JLL#NPxV*?=QS}ODR z{DA`pKIF7nIv%~DbNDrD&ARHPD|=rtCB-&AWNN#||6fu$G*+U33q-?Yn&J(4&)kKv0^hc=vpeHdb1(j_>5$hY_o*UlbMnc zahX}dYd`wi@wZ8En>i*m&bp-kY3~6bDA;{+zKOnp!GfyC_xwuP+}iH(SHwD;=#E%C zG4+vnlhj8k2d)DgN5W^_a=EEDwNNODVWEM*?mAIt9x-kno`^jMj6QPD;VtGoeMCQk p_t0yml(Y4pDg$`bPBA1gGU%@guGHh4unXu922WQ%mvv4FO#q5hSyKQ2 diff --git a/assets/textures/rpg_with_waste/tiles/generic-rpg-tile-waterfall05.png b/assets/textures/rpg_with_waste/tiles/generic-rpg-tile-waterfall05.png deleted file mode 100644 index f72d7ead1fe29919c3822a6db0e6cc4f7c30faa6..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 370 zcmV-&0ge8NP)vUEF^;BbC@D!ByyNugSl|&gct%A zR>#6wTz1*ZC2Ia^Zg%GTXLe7}eMkY$54Hek^(Tn-j5P3A%$wMiFo0aLJ+tv5==SoB zH1O=Vbc>A|VQAwfHPXPN)t}5AGlSOrTt0TE^wcN^s3&E#Ken(YwF2CLrS``hv5^C4 zvgXQe0;t?XE*wB+MVW@N%97CzJvBl`RVv5tfGWVvWYTpujm%f-sS$Ll;E!1}swZU{ zVTc%91cg_KJJrn1cULKD7%POn+a07*qoM6N<$f~2pglmGw# diff --git a/assets/textures/rpg_with_waste/tiles/generic-rpg-tile-waterfall06.png b/assets/textures/rpg_with_waste/tiles/generic-rpg-tile-waterfall06.png deleted file mode 100644 index b61f16d2e3383c0980df9d0161c77afc7fa57f66..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 388 zcmV-~0ek+5P)%A2tp>8E-nt@B98t6PG&BJ%BAj7tf3`K zL8ap0R4&A!+}R(dL?0Z-z4v|Z-kqRzlL&tVKvG>r<9K(StH)OWgg=_mGzYK(;7N%m zr6GYCv(~0{fVGbUY~hb^ixxWQoV}SLPfFaP#eM6Ywi6oNlafaB6yaA+lG5Qby}kp0 z{jx#Z2~EKMcoS6~m~#-t0JueqAd0cIxK$d{>pQ6O02j*`6hHc8*GfzfS=d^b9!i65 zshi@2lTXZo+oolVK@`(=LK@9G=$=&*rPRNdP)a3*S|@7}0EX8U01CAZ_Fql&T;_nZ zmLh-jkSsI4ZSVZbt9p(?t%FcXCHCdl!a%1u{$keH!3NGSdEaGl0gsu+xM_i<M4L&p{&wYx|(C|wG**tHNW z=^%H_g|k22>F&$-eD8Z)&gy@RQVhC&dZphkt2KZ%-jW8cR<{lf$b(X8;A%a#Z0fhm z3dqVDZyAK4+Fx<5f0qfeaMp1UhIFdMz1yb%7 diff --git a/assets/textures/rpg_with_waste/tiles/generic-rpg-tile01.png b/assets/textures/rpg_with_waste/tiles/generic-rpg-tile01.png deleted file mode 100644 index 5c6c3fc1361dd7940f4d6fbdf8f7dcd6bc77de69..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 133 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`KAtX)Ar`&KXa4T{XwS^r&?$6w zF#*?vUMVG_8UU=#x@WD4>UdU7&~Zx=$V^4=5H?`-00000NkvXXu0mjfRt0Q$ diff --git a/assets/textures/rpg_with_waste/tiles/generic-rpg-tile03.png b/assets/textures/rpg_with_waste/tiles/generic-rpg-tile03.png deleted file mode 100644 index 3dacf2f6592411aaed3d99c7d6a191d3f927e822..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 146 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`k)AG&Ar`&KXa4T{XwS^r&?$6w zFJU(+?Siq0O91c^7~XnMvSc*f** rY}2>@|M#{Q-s%Xwd~G|Afh|MkBBd)6c`x?>En)C<^>bP0l+XkKwR1Pd diff --git a/assets/textures/rpg_with_waste/tiles/generic-rpg-tile04.png b/assets/textures/rpg_with_waste/tiles/generic-rpg-tile04.png deleted file mode 100644 index dfb9977a33e38785d3f08a822bcef331157a3613..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 242 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`J3U<-Lo9leQ*^Tb|GytSgHh5T zul96wNkka zEE@>Sj@RNbsB2%U+Quk)yx;i7pP?5U zG;e7>5Piq6qImY9ERVwl3KJ9=TCdu$zD>0M!R)Bg#FE;PVAL#M`s0Oq$>jH8#Z61U uG+AxmFWi$~9sNPG{-8eV>)!1i9~f$8I!mAQpU?^P2!p4qpUXO@geCwllVOnn diff --git a/assets/textures/rpg_with_waste/tiles/generic-rpg-tile07.png b/assets/textures/rpg_with_waste/tiles/generic-rpg-tile07.png deleted file mode 100644 index 1bf5aa69bc1a59fcb3ffac3eb4be612f10e988d8..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 151 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`ah@)YAr`&KXa4T{XwS^r&?$5_ z#IT_?rgyUcUX}X|Czr<=J(<;MY+x|qCF_i|O}q|l%=rvQH#%(N*63nQan2C$FtC3l yJiq3Z>Nf`$zswg3*L`G;3aG`HJ!C%7#>^mnPUb{rg3vOcO$?r{elF{r5}E+WD>Bmn diff --git a/assets/textures/rpg_with_waste/tiles/generic-rpg-tile08.png b/assets/textures/rpg_with_waste/tiles/generic-rpg-tile08.png deleted file mode 100644 index c6a715cce5894a16e626d91643b288a6f4fefe50..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 245 zcmV{Rh3#qI{5#k9vMS2B`Alq7L?^$w!2p=Rz5Uf)~`!unTO=5@|uoI{H ze|Bbeim%jWS1h+901l@V02O5v3m1UZWI!E8V_>(D?+ga!6HAMrqU`CR$+ek{#`bd$ zEyA7|09u6g)P)+?gcia0R2l|F5<37KduM=00FcB^$pQGe2f%oKtJ vf56WK*jB>Ar`&KDHay5?H^y;&ZGbD zZju7K!NjH9HyMtt&6m{blRv)t#hFCMJ8U5`_U95ld$X=*RNMBx@YF_;8QjJO1`om< zI0EF@n6nxtEaE!Epy(>frs(>o(X&+C00=f5ka+*@zGCF(-M`D*s&shxm>F)Jl6bX3 S@H-38b_P#ZKbLh*2~7YKe>*1t diff --git a/assets/textures/rpg_with_waste/tiles/generic-rpg-tile10.png b/assets/textures/rpg_with_waste/tiles/generic-rpg-tile10.png deleted file mode 100644 index dedf2095b030d5575d30c398627cc37f2b4528b8..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 264 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`=RI8v;asUiSjclIOZC)eVmpMc6c|Z}0%}6Yp+W%Go;OoR+iE|MP$53!Z#_ zXGtn+!wHe|@0q7hxa*kGRU2p_%6wwWnqQAre7no&vW%f4YyR7Jxw<>zpGWDP@aOfJ zE$^V#=q^-Y@^RACI|X|*%^A|Yl+zgI_Bv=US$DJ`FIe634|B5FtVJ_-ip;!}Vzopr0E-H0IRF3v diff --git a/assets/textures/rpg_with_waste/tiles/generic-rpg-tile11.png b/assets/textures/rpg_with_waste/tiles/generic-rpg-tile11.png deleted file mode 100644 index d0f43fc2901f75b29391b4425f6bfb1e011afde4..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 119 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`cAhSdAr`&KXa4T{XwS^r&>7P^ z*?;enGYv7ug>5I7$4$y-;0Z`^SU2+r!|ntL34^8oq*B@bd>51Jb<2`qVDL}mH96@} R{SaspgQu&X%Q~loCII|lCP4rI diff --git a/assets/textures/rpg_with_waste/tiles/generic-rpg-tile12.png b/assets/textures/rpg_with_waste/tiles/generic-rpg-tile12.png deleted file mode 100644 index fbde8a9cc55f7ecf4507bd43cdb9ba76344fb72f..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 227 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`t2|vCLo9le&-~r@@&A)xeMyP! z`%+g})XiCVAZ7-mB!}jz1t0F;-QRpDeOApYRc5`0b&|6sxF28J&I1Gyx$0~NMly50 z&Tj;Q!q?Gl;{Wpmw+P+=)YmdKI;Vst0JR`i@Bjb+ diff --git a/assets/textures/rpg_with_waste/tiles/generic-rpg-tile13.png b/assets/textures/rpg_with_waste/tiles/generic-rpg-tile13.png deleted file mode 100644 index 546b7fe32121dbcb7121b4dca02e11ef8acb7047..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 128 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`?w&4=Ar`&KXa4T{XwS^r&?$7* z`9{OZ<#C5@>O7H{kgdjN-lD^t&}Lx3bJIaahV4L7V-9mdpl6wh-^%^R4xBh};DE)0 boq`OHON46|-9C^6G?Ky7)z4*}Q$iB}ea0*J diff --git a/assets/textures/rpg_with_waste/tiles/generic-rpg-tile14.png b/assets/textures/rpg_with_waste/tiles/generic-rpg-tile14.png deleted file mode 100644 index 7476a1df2d8bf3a66a93452b0f27fa3ced5cb9c6..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 209 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`Gdx`!Lo9leQ!FfA+cN{f<7?Y_ zM346yi_G9Qp1?Gt=#8fyz+TiCE?^in* zrtzIHVz3mP$Q5wuV0Zm?k8(yGSpy*OvG_SHg_*%d)OuSCTjvy@8yP%Z{an^LB{Ts5 DvY$y{ diff --git a/assets/textures/rpg_with_waste/tiles/generic-rpg-tile15.png b/assets/textures/rpg_with_waste/tiles/generic-rpg-tile15.png deleted file mode 100644 index b825171009e640752a983df862bb8e05cfe81231..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 140 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`!JaOTAr`&KXa4T{XwS^r&>GV_ z*?+If{f3jvNGY0fr-fsKE^lM6qvhs6|4o8Ux{CQhSjn+is%2{R?W{&>t_B? l;5afd@4%B_ea(J1hM6Y>1KIp*E&z>Z@O1TaS?83{1OSaWFGv6Y diff --git a/assets/textures/rpg_with_waste/tiles/generic-rpg-tile16.png b/assets/textures/rpg_with_waste/tiles/generic-rpg-tile16.png deleted file mode 100644 index d0eab48e51bc5e16722064b8d9dd83a5a84c2665..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 280 zcmV+z0q6dSP)oNYvY1SsK+2YMSt<+Hg3%Zgmz>?{ z{^xY=fBJ=BVnk_X!JcaKND_r|g)|PE^%HkQX#hH{5~GEFJDlbK;-98w9PMsIX||Wu z%TN{y0000I diff --git a/assets/textures/rpg_with_waste/tiles/generic-rpg-tile17.png b/assets/textures/rpg_with_waste/tiles/generic-rpg-tile17.png deleted file mode 100644 index c108608bd67bfeb3b7f0a660a6556d78d1b3d281..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 124 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`&YmugAr`&KXa4T{XwS^r&?)0P z*?(`#=ExI<3fFyP@;D;(8YG=2G8#B*7&Rn`_ee1?rl_j0vAJZa+-6v%vg9Dp5CbKi VFDqsQz5*J@;OXk;vd$@?2>{F(BU1nX diff --git a/assets/textures/rpg_with_waste/tiles/generic-rpg-tile18.png b/assets/textures/rpg_with_waste/tiles/generic-rpg-tile18.png deleted file mode 100644 index 7e8c31c9b81507acf5281a3d8926446cb8a0f531..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 120 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`_MR?|Ar`&KXa4T{XwS^r&?$6w zF?riFZy&V0rMz17Ue zd++;oqCS-XaJoJ*g_Ab`0D0J|KfPx>6lZA!^9FHQ0ss=0Ag%mS~3xA;Dz0124upCy|7y}aiTtzv;ik?kQKF+kg(DN zV{dk1*5FsTT#(DY*_pFx@0B^k$XT-Y(Zb+Hxmy3+k!f0 hZHUv-+k0ggyaA7#bm7&f{bT?D002ovPDHLkV1k9(b$kE- diff --git a/assets/textures/rpg_with_waste/tiles/generic-rpg-tile20.png b/assets/textures/rpg_with_waste/tiles/generic-rpg-tile20.png deleted file mode 100644 index 570419757b2ef19fff8cf36dd418553f9a2d6491..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 135 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`ex5FlAr`&KXa4T{XwS^r&?$6w zFM|OPGJ^UnC|KX>} j{(Dn?yw~kn#K&O$Pv*n%`PME#lNmf+{an^LB{Ts5G*5_ca?`0UN<$`@(-`1GVB|I_)njevs8;SFmJ9{FZFr}o(fg)YSc z<_&BNj10y-tukj%=p`#%XOKv6`X(O9rob+w$&hAvGj2hgM8H)BMOV?7R~^O=?*6sj iaYZnl!LlKVnc=yVvyp4szI{OVGkCiCxvXR diff --git a/assets/textures/rpg_with_waste/tiles/generic-rpg-tile23.png b/assets/textures/rpg_with_waste/tiles/generic-rpg-tile23.png deleted file mode 100644 index c9ca882522448258f002fe6ab06c3cb5dea9b14c..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 232 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`>pfi@Lo9le&-~r@(Vm%^`S6oq zeMt!r*uF3I$9vr~4ct#=buRuODam*47yt8|+S41JKFDU1uMXsKE|5HPXvbIGIl+a0 zESQ;_xtx!Fe9R-uGfjglF-d|g{MN6(+kY-)5;xdbd%ob=1_hw$%!dWHSr-(}kOJyA znLbneZ+oT++Z;=sjwFM}rzaixUvWj4#b-)}oN2-ai33e%8kagqD5w=4jBQvaIbFh! c`2;J&P7_P#!WB2fflg=eboFyt=akR{0H@klS^xk5 diff --git a/assets/textures/rpg_with_waste/tiles/generic-rpg-tile24.png b/assets/textures/rpg_with_waste/tiles/generic-rpg-tile24.png deleted file mode 100644 index b4cc644973a7cfd2544117ce897cc983536d25c9..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 113 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`7M?DSAr`&KXa4T{XwS^r&?$6w zFW`QGX!aN{%Y8hvs3rodoPEq)FYbrUasKhc+Ae=`?S~3bl=)#pV$@z9N#5b^*CmS19tk|c*tJRMhUm_W-#|kc NJYD@<);T3K0RTy6CjbBd diff --git a/assets/textures/rpg_with_waste/tiles/generic-rpg-tile27.png b/assets/textures/rpg_with_waste/tiles/generic-rpg-tile27.png deleted file mode 100644 index 8a02dc2745aff7f5ac65440e2fec02065b1b8c9b..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 219 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`i#%N%Lo9le&-~r@(Vm%^`S6oq zeMt!r*uF3I$9vr~4ZI1HlV{buQtf)y_4v3XNI2onFEM9hA3n(q3feb{KA1Llt~Fpj z{P8i5+5QlTnh7Fd4oA1i)buKyI}vg1pL}Fv=i6#FAZRmgXO-;RaJNyr<>bO{=CRH9*%g Nc)I$ztaD0e0su>3SHl1R diff --git a/assets/textures/rpg_with_waste/tiles/generic-rpg-tile28.png b/assets/textures/rpg_with_waste/tiles/generic-rpg-tile28.png deleted file mode 100644 index 37fe95b73b98fc5ed59ac12c614b423c9157872c..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 127 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`Zk{fVAr`&KXa4T{XwS^r&?$6w zFPnI((o(+Dr-f)A0_LMHFdguTU6tukMyTdR$UW>>5#yf+Oh(%I7!RI3~Uw@ZhCdlTKbN}$o zbUyAR2`=LsN50uIKMwo6=>LmZ9*jCqvRW9`x=Q+`46+!u@-Q&$on^UwYtzT~K!-AT My85}Sb4q9e08S=UM*si- diff --git a/assets/textures/rpg_with_waste/tiles/generic-rpg-tile30.png b/assets/textures/rpg_with_waste/tiles/generic-rpg-tile30.png deleted file mode 100644 index 3a57cbf6462bed37b19478f0e37d78bb70b9d9d0..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 114 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`mYyz-Ar`&KXa4T{XwS^r&?$6w zFgTe~DWM4f(zYUR diff --git a/assets/textures/rpg_with_waste/tiles/generic-rpg-tile31.png b/assets/textures/rpg_with_waste/tiles/generic-rpg-tile31.png deleted file mode 100644 index a87b16d7f8f591495d3fdfd59715382d47c160b3..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 295 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`?>t=`Lo9leQ!FfA+cQfg-1#-_ z;r{IgbIu+(!0`O}tj@(NQqx2>XC(wYb~0r=l@63nJbmywPtkdOLz%yNXAUelcC_Ht z%Ww;`>CX}q?qtP%xqm!P2fuTPAV$;R}hGCqLYemUzS@eEWNZ=p!SEWs>h$V;F8G%t*BRwn)S9 zkjtdo8yOby9(d|IDW)Os#FJos&+mt(HLriTa&lv%gTf=@BkeKFJ~{V|Jq%VJOm0fi qSIAzbA(gmuQi}e8KlYNR*cobS1M8$~b}<8e&fw|l=d#Wzp$P!->VH@O diff --git a/assets/textures/rpg_with_waste/tiles/generic-rpg-tile32.png b/assets/textures/rpg_with_waste/tiles/generic-rpg-tile32.png deleted file mode 100644 index c051b75f6d7f7b0bf2587ecedf10964b38fc8c24..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 150 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`v7RoDAr`&KXa4T{XwS^r(An77 znD}Ys^c3j>CkhI#{f{v&JQd@>nXu?c*{dB1R~XpTyo3bruuhRUG$mW@+=Og3zio;i y3=T|R@IlhgKtO$dRp<4B3WcQ2tdV@vwHd4~E4>!pYs~?)h{4m<&t;ucLK6UMr!^S> diff --git a/assets/textures/rpg_with_waste/tiles/generic-rpg-tile33.png b/assets/textures/rpg_with_waste/tiles/generic-rpg-tile33.png deleted file mode 100644 index ad559527edd57744c9a138005195f0858dbc38e7..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 290 zcmV+-0p0$IP)15JumMkUkir3+M-FYO4X#$j9*Y@r_>Nb;Tgb^ZVl?D(pC zxIRB|j@iRW=}C8fO=~QC9o^RT__(CR_I*cJO3t=%SzmdvKE+YKI*^B1t4}_C!_TEn ziu<2F$Ywh>UA0q#ZH}c*$7Sgk2abHRW#%?>3}O)WT;1?;b1n5)- N22WQ%mvv4FO#lYdQd9r{ diff --git a/assets/textures/rpg_with_waste/tiles/generic-rpg-tile37.png b/assets/textures/rpg_with_waste/tiles/generic-rpg-tile37.png deleted file mode 100644 index efcb8c0cbe4355559765f8e47cd4863c6bf09632..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 246 zcmVq zo$t^2&Jof3q8P#H@L+qK8=e%UnH?P%g1rn7EoO+U20$RsN@O)^Jz+fPRM-Wn6@(vP&f90NWkry;oJG2^!lZbvGanV($d&a15B59 zHGq;EfG#4OM;SKrac=-2yFCYhkQD%cUy;P3c31n0=1N&o-=07*qoM6N<$g22&i@Bjb+ diff --git a/assets/textures/rpg_with_waste/tiles/generic-rpg-tile40.png b/assets/textures/rpg_with_waste/tiles/generic-rpg-tile40.png deleted file mode 100644 index 191bdf0a71c6eee77454a5088747e9363ae04308..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 142 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`p`I>|Ar`&KXa4T{XwNJ)qvn+= z^W$sVdH(Nhl`J}YK=&hU-K|^KhOdOPgg&ebxsLQ0MW)X2LJ#7 diff --git a/assets/textures/rpg_with_waste/tiles/generic-rpg-tile41.png b/assets/textures/rpg_with_waste/tiles/generic-rpg-tile41.png deleted file mode 100644 index cc70b01883bd6f4a2c311e416e9949a818950cfe..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 264 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`=RI8P`VW}Gqdx$nHJ1;-ZMHjvaT2JFl3OIFip79keI~4;Hts% UZfBPC0iazopr07c6s`v3p{ diff --git a/assets/textures/rpg_with_waste/tiles/generic-rpg-tile43.png b/assets/textures/rpg_with_waste/tiles/generic-rpg-tile43.png deleted file mode 100644 index 35babee8b0d0267c7ebb47075cb53bc183001616..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 272 zcmV+r0q_2aP)8TZ#p0MqKIQBBCh@Wzu$aS z(y_JqlG|izc*`S!vN6g>j8w!IWTz!0B%H{+lJsHaezvEbMg}tW=Po3!KX%}N!l?YP)u^fDH-LaZ#0m6q}AKovTu)3w|}X9C?L2F~|@KWPrDNDIB$| zDuwz6-#~>(3&u<*1E}ev0>&aw46r;gq~_r@Qe9xbv`BNR3$Rod@L)+~#CcC@!@oYH zlJo6}XgvpDgGHPJSq1zmvswn*aa+07*qoM6N<$g6)WHLjV8( diff --git a/assets/textures/rpg_with_waste/tiles/generic-rpg-tile46.png b/assets/textures/rpg_with_waste/tiles/generic-rpg-tile46.png deleted file mode 100644 index 243933f772dbd760d2d880c44248b49d6e84db40..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 241 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`J3L(+Lo9leYa%E8n9s;}ulJW1oZqIFoBoku;g9&*IRthH@jN4gHnlmi>$#Glu60gJd zosWJLvK?ESUnt#hcBMhWXK&V{0&Cb5+!c2vzKBauyms@&ENdNI$s(z(5)l(b4~ZO@ z)5%*B5oKfm1W!z|9Ah3N>vyU2CWOn__a$8r+-6-6J&`f_-S^&z&xfY`$}VW0Ft>-V nK&l~6!0fDxqytC59C3y?E+41k-EWrx{lMVq>gTe~DWM4fx%ye? diff --git a/assets/textures/rpg_with_waste/tiles/generic-rpg-tile47.png b/assets/textures/rpg_with_waste/tiles/generic-rpg-tile47.png deleted file mode 100644 index 2d568b4d59d7c57585659b2c8a77c676a5148676..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 237 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`TRdGHLo9leYa%E8nBT~vaB#`7 z5BH;IGy;L*b)Pwnog!y>fFPQ0Us}SQUt;Id6|XYPP_zRIO_r4KC~xe1TWvAB@OAX3 zmR{lcpF%g*3Gmy!l39Xx`yli-TlpqWzRM!FgM$-k~n8@Ak~1!$L_1pe#RXP zMJ9fBUniL`Cm1pqv*ha}a5GCdbh6fPbux;ms;~jUGUIku&uyZX3XvClRgMbCvl;DS dVBXNc!oaL<%XoZlz5~$x44$rjF6*2UngBXROy2+i diff --git a/assets/textures/rpg_with_waste/tiles/generic-rpg-tile48.png b/assets/textures/rpg_with_waste/tiles/generic-rpg-tile48.png deleted file mode 100644 index d7827d52ba66cbf8e8ae1ef666ffa26761484fb6..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 230 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`Ydu{YLo9leYa%E8nBUmg=;#sH z$|$>McRjmv4~X03+52$+b_3^iGcB086_5Tn@FZAYknI7pQw1>qB9 zIt-jWy4*?{WO`Mq86%5Y)IL6<$=*dVW#`}yVx$-k#Hua~Tm zkdRoGQ|mp8+b8EfP_@AU=1=>#8@!Bb$V^K}P_UJncu=6vtt+-+4xifms!k7fr!Fmt zuKRcQH(wTzXJc#ofA5e0^M=f}&c)J6Nx$bgHhJ>OO%-W%TsPB#nc;JqY4459FDrm< OW$<+Mb6Mw<&;$U6G)}t! diff --git a/assets/textures/rpg_with_waste/tiles/generic-rpg-tile50.png b/assets/textures/rpg_with_waste/tiles/generic-rpg-tile50.png deleted file mode 100644 index c3dccca8c2e593b682e38ba9db1fc4375d133244..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 229 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`Ydl>XLo9leYa%E8nBVA9@N9!Z zbN^nA!}a-zY+^yChYw6^UN2cAAt5p2!_6X~q#tvF-hnKJO>Q}D2TY6~6g76ftzMH; z!d!gzNMSqUF1MV7Pb;TCVO7#$kd%<{FlKmG)0Ei2uaJGtR9O8kgTx6_;p6X^Y6|;h zHca;4dnAux;f4B-@5PuOU)x?_=ep4#^>uWJxPVvVi$@ZklJQ(FY#U}MXp2o)Jh8E{ ak&&UR%=v(uxfUPL-3*?telF{r5}E*d@l`$m diff --git a/assets/textures/rpg_with_waste/tiles/generic-rpg-tile51.png b/assets/textures/rpg_with_waste/tiles/generic-rpg-tile51.png deleted file mode 100644 index ca94b8c3986f5e809ab9f4ee8921376ce8fd9559..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 149 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`F`h1tAr`&KHIb8k%x`2m;L@k2 z=qh@Or=t8nUn-jda~E%dVkq;b|DI)xyV54{9$@n@VzB&@*zm-_!93-`;)zPk=VZiG w?l%~>vr5*yaXo2%;CS4Whx@l1JO!E_aZGUEEB5n`fc7wWy85}Sb4q9e0FF>H9RL6T diff --git a/assets/textures/rpg_with_waste/tiles/generic-rpg-tile52.png b/assets/textures/rpg_with_waste/tiles/generic-rpg-tile52.png deleted file mode 100644 index 44bd6653ecf51a8d420c2fd6c7383ca15647fcfb..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 253 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`M?75|Lo9leYa%E8n9s;{PDU)n zflY1Odr1yPu_V(umO34w^EwxZvhb+iVu)c_&G;hGaTDW@LrxxntXCOI7@Z#6{cGJ4 z>%f)ZWIi#4S)+_`Dcgc2E-@F`yG3(6=dwm#I36dmnlYMBiKlVp&7u#chi4vc;?c4D zwumR1Z(rJnjpC_4-s|>UWsqN?cp|H2LEDBu-^J2CBqlgqoRh7_m+o)(brNH&@4A^5 zhf`K4_VBQ$|2@7;P}XPV{$n5RM@zV#o$@Q2hoQ96Ii=O!VGhtg44$rjF6*2UngEh* BUK;=a diff --git a/assets/textures/rpg_with_waste/tiles/generic-rpg-tile53.png b/assets/textures/rpg_with_waste/tiles/generic-rpg-tile53.png deleted file mode 100644 index 5ca24fa27fe93bd731e4cb1164db05b50716dd1a..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 204 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`lRaG=Lo9leYa%E8nBT~Bz@_t9 zAhR291EZJ|m&%MQ0Y9So_N65Nfx*Vw{wxNwR=aPDc>eEg4Lnjifyc5qVnXB7Gl`CK zxGo-*Sdb*(EFn?z##J%`NIaahGwl%%2u$|hdqkkQ@#ONjL%cuV>z+BlvY9n9aotRd x!}a-zYi3>5lbD|gngVH?xa-Z}TEuixlJYD@<);T3K0RW*BO56Yd diff --git a/assets/textures/rpg_with_waste/tiles/generic-rpg-tile54.png b/assets/textures/rpg_with_waste/tiles/generic-rpg-tile54.png deleted file mode 100644 index 0808a563b3167b443689856c947dffc94a46693f..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 209 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`Gdx`!Lo9leYa%E8nBT~Bz@_t9 zAhR291EUxl8(W)kJFB6JPtJYe^aC>wH}TkgTU5}f%N}oR00cf3Kc_7`d`ZZe*+(vo zvAch-#^L(>#2rlXKz&`0k4swV=ms9S__TJ0LYuLX%$(MVGbOg~JGx48wvG3?nHFtL zn$h=-K;|S&o?Y`wwd-L-^27bx4Z_YEI7?2{VPJ@zpnv16Q-1`|jSQZyelF{r5}E)A C=t+kF diff --git a/assets/textures/rpg_with_waste/tiles/generic-rpg-tile55.png b/assets/textures/rpg_with_waste/tiles/generic-rpg-tile55.png deleted file mode 100644 index 413224486ee164f60deb81b8923b6a37b82bffbd..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 199 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`eV#6kAr`&KHIb8k%x`2m;L`al zklBrQ!7N6d6LUD#?;DjwL@m;|QS`x-83+ywZnKss;sF93A)hP|%_Dle-x#RI=+AdC zx4;L@?tP6wF!AAoHUB}fJ<<0Mi9VUtX>0%lK6YOxF~;)A8XOck%wQxxTV|Jpu+O9Y k+YQ=O6q_Zt?@MK1Fb&c4l8q452D*&F)78&qol`;+0AXrBumAu6 diff --git a/assets/textures/rpg_with_waste/tiles/generic-rpg-tile56.png b/assets/textures/rpg_with_waste/tiles/generic-rpg-tile56.png deleted file mode 100644 index 5a37f17250c4217220b358b811d3da2c74d20f13..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 146 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`k)AG&Ar`&KHIb8k%x`otc=#l` zjnCVg4Ftr3OpOf;3`Ayd8ym>j`|V>aaF&pem~q0Cfz6Fq!nC0g2t1oSdySa?RdX8$ pByl{AOStoE+CrvTn@=z@+~eU}x$@`xi9kyjJYD@<);T3K0RXb^E8GA8 diff --git a/assets/textures/rpg_with_waste/tiles/generic-rpg-tile57.png b/assets/textures/rpg_with_waste/tiles/generic-rpg-tile57.png deleted file mode 100644 index 4e98383113e50781712f6f32793219231fa84293..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 316 zcmV-C0mJ@@P)S>t%*0`8eCh1_;L0H#U8T{xe-re8p-Uhn4O1QCl+5cXSzNtv6adwu}(b73E^={aiv O0000A0uPB9l=X>d$zV3{n{48%X#{(Kip`|)1aXPcr(H6z0%X`v1O7SHhmTFc<+>gTe~ HDWM4fJ#juj diff --git a/assets/textures/rpg_with_waste/tiles/generic-rpg-tile59.png b/assets/textures/rpg_with_waste/tiles/generic-rpg-tile59.png deleted file mode 100644 index a0cde78a935e08dfa0c368726e3030acecafefd7..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 298 zcmV+_0oDGAP)=7gqNKW8c7A);-?X~h2f#d)IA&>)DNWj)0(Naj^TF8q@-Uio! zh26)@yw5(No{>fiyS#+*T-ajN4=B&YE-!xyiNg%q1Udk)-<+5j00gzr&nl7%0HBxC z=1unw59vX(U{Yb7WdMM!?;C~0b4*#+S%#pN&3y~sXb`72I3yx+A3-fyJg6m(;{t&E zw9qb@2sW69kM9h~#3Y`Fk3kcmo{^>>5J`nNy;%tfY!5!Y*@=w?|H3f^P1z?iKAZcc w;6q$3_|llfO$B^;?0P43D!9JRgT$d0-h}OXini04Gynhq07*qoM6N<$f=iQpumAu6 diff --git a/assets/textures/rpg_with_waste/tiles/generic-rpg-tile60.png b/assets/textures/rpg_with_waste/tiles/generic-rpg-tile60.png deleted file mode 100644 index 6e67cbb19d78039e4466e6a8822a141741fc0d9a..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 305 zcmV-10nYx3P)1pw6ox;ElD%}u1w3^&DF*ulh2Eiiy@U?!6uM=1E>egN5E2NO&Y5xnQH;lc7j-Ck zQCul$@^4S?|3AGasdD$}h^VS9qm44nOryg%<x$K3vUIi=Pf_LbhQV#Cec@cHh(XdKzMbb z>-^7AFFqjhHFkP%hCoz?cNZ7U?L$CRhPNcD6S&XAqPb-<7(4`Id4Z(InFG*SRKFCJ wA<3|VhOI6!_6(>t*WGBd7|Z9+2ldDP066StADUV6_y7O^07*qoM6N<$f{s{#3IG5A diff --git a/assets/textures/rpg_with_waste/tiles/generic-rpg-tile62.png b/assets/textures/rpg_with_waste/tiles/generic-rpg-tile62.png deleted file mode 100644 index f5f4e07adada6fedc9585e2998c9b57754563dc6..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 258 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`Cp}#pLo9leYa%E8nBVB4aB#`7 z5BH;IG=e~9$k`VSI?P&q^63e8eu?d8Oy}c%WU}Bu%#6g-2e0$=MBjg8cHqc2TR-M= zGGZwoHj1bIc(3cTOMHTHEas* zin|hD#3d+RyZK_4wT`Z2k_@Gj~Ym)U7l)VY~lG!I#|z z%#Yu`*VqA6(WdN|#beMt;p&svh=T`qT;20xf9KokHsf|y$-WJD6F2-^dZ?h~Egv%w zG@sQM1-XPxzB;h2>+$i2H8X13m#Q*9K0WEk{}bn|iz5V%?ld@@n3JM#$57f>;G*b5 qp=L(4IYur`fy^113{_PJSQ$LdrF$-G&lCjupTX1B&t;ucLK6U)v3s`w diff --git a/assets/textures/rpg_with_waste/tiles/generic-rpg-tile64.png b/assets/textures/rpg_with_waste/tiles/generic-rpg-tile64.png deleted file mode 100644 index 9aa272da9ce24e94a7df92ee85bb4b93a67a5f0b..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 219 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`i#%N%Lo9leYa%E8nBVB5aK~_V zV`t1+g9Aqn95_($Y=c57+l(9g)K>&}1hzVQ1hP8MX^ohD@9zHQ+pJRSX_g9eL95wCwh3GsW(`lzBs#V!=Ln?V{u88VX%JcS##K^6!sQ{8=<)Xk zA~U#?LwoXOe!p1B)5F7_zAz>I*xG!_Z89}yf%YCKXyHwg@JVi8s@k@YVZ#Jnmv_Dk RF9Kc5;OXk;vd$@?2>>aVQyc&Q diff --git a/assets/textures/rpg_with_waste/tiles/generic-rpg-tile65.png b/assets/textures/rpg_with_waste/tiles/generic-rpg-tile65.png deleted file mode 100644 index a60a2d4c969e64dca50947692da6aaef3f1b2d98..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 183 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`b)GJcAr`&KDKGwhnBVB~L4AJv z!fS>d3lCqK)HqRw`N+EX*3C0LuAVt?;J^p3;Mt8p@Nnw|#ZNp9ng8DF`s`ygFfd^I zbMkrO3X8fqjfJnHPsIcj{;^19D~X7jl+JMah(6ER-`5Qd3<3l?bcFW@q%k}`{nFW1 gHsB3YgcB3P0%6t3@#XJ716{)4>FVdQ&MBb@03n1*1^@s6 diff --git a/assets/textures/rpg_with_waste/tiles/generic-rpg-tile66.png b/assets/textures/rpg_with_waste/tiles/generic-rpg-tile66.png deleted file mode 100644 index 1de9294aced304eb93e03e8b5bfa44d0a895e071..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 190 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`t)4E9Ar`&KDKGwhnBT~9;75_w z;rjf}YIk zJY?`bP0l+XkKmE}ge diff --git a/assets/textures/rpg_with_waste/tiles/generic-rpg-tile67.png b/assets/textures/rpg_with_waste/tiles/generic-rpg-tile67.png deleted file mode 100644 index b53c74e306a2e2653bf82ea1c0017a10e44df98f..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 167 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`d7dtgAr`&KDKGwhnBVB4Q1(~r zaP~rH9?RY+9-k#yZtTqI4KJ*%+fFWz<7?nPvMxTg!tC%I#h+>F%#W{a=h1m`>&~8f zS?1)gG>kWW2RNo3=BoNvPnzci0lN~ O%;4$j=d#Wzp$PyO;yiu; diff --git a/assets/textures/rpg_with_waste/tiles/generic-rpg-tile68.png b/assets/textures/rpg_with_waste/tiles/generic-rpg-tile68.png deleted file mode 100644 index 3eb10318591d0a346e71b18a383d2ea201fb5ef5..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 150 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`v7RoDAr`&KDKGwhnBVB4Q1(~r z@Mg(pJo(x|k~2K6_V9U_F{D}FWD9uH6v*7x%DCQStKQ{q(ovcV7FrknP&4JT|uKKsJWY2SsPpzbftqTEyV#>gTe~DWM4fCrdF@ diff --git a/assets/textures/rpg_with_waste/tiles/generic-rpg-tile69.png b/assets/textures/rpg_with_waste/tiles/generic-rpg-tile69.png deleted file mode 100644 index 51a490cc33a1acae78e5ba632933324d94ae5614..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 214 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`b3I)gLo9leQ(pZ2Fu#$b;BT@? zv)cclHv6A8JX`x5d1R+e2 zg?kJo7ZNj1PRLgCo5!dly#K(>l-&(lY(92hiyC4S%KmDlvIV?pN;f|9@MXiq8&f)X zRy=FH?$mz5{K3`>ikChy8C5J@$(tT5!>#iqqbcR(V;-L4k`fH*VwxYnvR_OBI+VfF L)z4*}Q$iB}rn^{z diff --git a/assets/textures/rpg_with_waste/tiles/generic-rpg-tile70.png b/assets/textures/rpg_with_waste/tiles/generic-rpg-tile70.png deleted file mode 100644 index 07bab3c2a73d9c2a3b153e4b0355b8e62852f126..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 86 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`vYsxEAr`&KXa4T{XwS^r&?$6w jF@?HBQDEb=1aY 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 E0Ds;dyZ`_I diff --git a/assets/textures/rpg_with_waste/ui/generic-rpg-ui-inventario03.png b/assets/textures/rpg_with_waste/ui/generic-rpg-ui-inventario03.png deleted file mode 100644 index b2c9c7001d1f2208f66b5b1d8cdf1b3b2294f926..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 102 zcmeAS@N?(olHy`uVBq!ia0vp^>_E)M!3HGx`C7_=l&+_XV+hC0# zIdJIEp%WdxOl&g>JP)Xzz0xDG;bKK^>XGLP42`n|XKugo!V;*F!PC{xWt~$(698pQ BA%y?{ diff --git a/assets/textures/rpg_with_waste/ui/generic-rpg-ui-inventario04.png b/assets/textures/rpg_with_waste/ui/generic-rpg-ui-inventario04.png deleted file mode 100644 index 27fe22397c58c310c4dade7ccc97ee9eaf499c37..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 171 zcmeAS@N?(olHy`uVBq!ia0vp^>>$j+1|*LJgB>AsjPv`}T4+7>Km&@0gnH z;Z~7aCa^}gg!iD~n%D!ZI$M2Gbt9GEZl2Jw;<`+Ef&GUA&-iPzCZBnryi`P`EXkKm zpe7|YZBE2yJ>!GNwP&uH6Y)9PzIS)o)ddW(rY}t1aZO;J62xGdd;iXD`91gNDO@qy U*IKjlF3@%cPgg&ebxsLQ0D>z&^#A|> diff --git a/assets/textures/rpg_with_waste/ui/generic-rpg-ui-text-box.png b/assets/textures/rpg_with_waste/ui/generic-rpg-ui-text-box.png deleted file mode 100644 index 0842f8510aaf4da75ac84ea5dda8c63c22fe35cd..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 372 zcmeAS@N?(olHy`uVBq!ia0vp^1wgF8!3HEx<^9>iz`$tj>EalY(fIcEMz6yG5^WE^ z&pGPtk>*%Zw88nHnD|$=SFd, +} + +impl LoadBatchRequest { + pub fn new(requests: Vec<&'static str>) -> Self { + Self { requests } + } +} +/// A "loaded batch" containing handles for all assets stored in a given [`AssetPath`]. +/// +/// This is produced by [`AssetServer::load_batch`](crate::prelude::AssetServer::load_batch). +/// +/// [`AssetPath`]: crate::AssetPath +#[derive(Asset, TypePath)] +pub struct LoadedBatch { + /// The handles of all assets stored in the batch. + #[dependency] + pub handles: Vec, +} diff --git a/crates/bevy_asset/src/folder.rs b/crates/bevy_asset/src/folder.rs deleted file mode 100644 index 6ffc955e347d9..0000000000000 --- a/crates/bevy_asset/src/folder.rs +++ /dev/null @@ -1,74 +0,0 @@ -use alloc::{sync::Arc, vec::Vec}; - -use crate::{Asset, UntypedHandle}; -use bevy_reflect::TypePath; - -/// This is use for [`AssetServer::load_folder_with_filter`](crate::prelude::AssetServer::load_folder_with_filter). -#[derive(Debug, Clone, Copy, Default)] -pub enum LoadFilterKind { - #[default] - White, //Allow loading - Black, //Disallow loading -} - -impl LoadFilterKind { - pub fn apply(&self, expr: bool) -> bool { - match self { - LoadFilterKind::White => expr, - LoadFilterKind::Black => !expr, - } - } -} - -#[derive(Debug, Clone, Default)] -pub struct LoadFilter { - pub paths: Option>>, - pub paths_kind: LoadFilterKind, - pub extensions: Option>>, - pub extensions_kind: LoadFilterKind, -} - -impl LoadFilter { - pub fn new( - paths: Vec<&'static str>, - paths_kind: LoadFilterKind, - extensions: Vec<&'static str>, - extensions_kind: LoadFilterKind, - ) -> Self { - Self { - paths: Some(Arc::new(paths)), - paths_kind, - extensions: Some(Arc::new(extensions)), - extensions_kind, - } - } - pub fn paths(paths: Vec<&'static str>, paths_kind: LoadFilterKind) -> Self { - Self { - paths: Some(Arc::new(paths)), - paths_kind, - extensions: None, - ..Default::default() - } - } - pub fn extensions(extensions: Vec<&'static str>, extensions_kind: LoadFilterKind) -> Self { - Self { - paths: None, - extensions: Some(Arc::new(extensions)), - extensions_kind, - ..Default::default() - } - } -} -/// A "loaded folder" containing handles for all assets stored in a given [`AssetPath`]. -/// -/// This is produced by [`AssetServer::load_folder`](crate::prelude::AssetServer::load_folder). -/// -/// [`AssetPath`]: crate::AssetPath -#[derive(Asset, TypePath)] -pub struct LoadedFolder { - /// The handles of all assets stored in the folder. - #[dependency] - pub handles: Vec, - /// For filtering files that are required or not required. - pub load_filter: Option, -} diff --git a/crates/bevy_asset/src/lib.rs b/crates/bevy_asset/src/lib.rs index 4b29beae799b5..ea51991899b21 100644 --- a/crates/bevy_asset/src/lib.rs +++ b/crates/bevy_asset/src/lib.rs @@ -174,9 +174,9 @@ pub mod prelude { mod asset_changed; mod assets; +mod batch; mod direct_access_ext; mod event; -mod folder; mod handle; mod id; mod loader; @@ -187,10 +187,10 @@ mod render_asset; mod server; pub use assets::*; +pub use batch::*; pub use bevy_asset_macros::Asset; pub use direct_access_ext::DirectAssetAccessExt; pub use event::*; -pub use folder::*; pub use futures_lite::{AsyncReadExt, AsyncWriteExt}; pub use handle::*; pub use id::*; @@ -410,7 +410,7 @@ impl Plugin for AssetPlugin { } } app.insert_resource(embedded) - .init_asset::() + .init_asset::() .init_asset::() .init_asset::<()>() .add_event::() @@ -668,7 +668,7 @@ pub type AssetEvents = AssetEventSystems; #[cfg(test)] mod tests { use crate::{ - folder::LoadedFolder, + batch::LoadedBatch, handle::Handle, io::{ gated::{GateOpener, GatedReader}, @@ -677,7 +677,7 @@ mod tests { }, loader::{AssetLoader, LoadContext}, Asset, AssetApp, AssetEvent, AssetId, AssetLoadError, AssetLoadFailedEvent, AssetPath, - AssetPlugin, AssetServer, Assets, LoadState, UnapprovedPathMode, + AssetPlugin, AssetServer, Assets, LoadBatchRequest, LoadState, UnapprovedPathMode, }; use alloc::{ boxed::Box, @@ -1618,21 +1618,22 @@ mod tests { .init_asset::() .register_asset_loader(CoolTextLoader); let asset_server = app.world().resource::().clone(); - let handle: Handle = asset_server.load_folder("text"); + let handle: Handle = + asset_server.load_batch(LoadBatchRequest::new(vec!["text"])); gate_opener.open(a_path); gate_opener.open(b_path); gate_opener.open(c_path); let mut reader = EventCursor::default(); run_app_until(&mut app, |world| { - let events = world.resource::>>(); + let events = world.resource::>>(); let asset_server = world.resource::(); - let loaded_folders = world.resource::>(); + let loaded_batchs = world.resource::>(); let cool_texts = world.resource::>(); for event in reader.read(events) { if let AssetEvent::LoadedWithDependencies { id } = event { if *id == handle.id() { - let loaded_folder = loaded_folders.get(&handle).unwrap(); + let loaded_batch = loaded_batchs.get(&handle).unwrap(); let a_handle: Handle = asset_server.get_handle("text/a.cool.ron").unwrap(); let c_handle: Handle = @@ -1640,7 +1641,7 @@ mod tests { let mut found_a = false; let mut found_c = false; - for asset_handle in &loaded_folder.handles { + for asset_handle in &loaded_batch.handles { if asset_handle.id() == a_handle.id().untyped() { found_a = true; } else if asset_handle.id() == c_handle.id().untyped() { @@ -1649,7 +1650,7 @@ mod tests { } assert!(found_a); assert!(found_c); - assert_eq!(loaded_folder.handles.len(), 2); + assert_eq!(loaded_batch.handles.len(), 2); let a_text = cool_texts.get(&a_handle).unwrap(); let b_text = cool_texts.get(&a_text.dependencies[0]).unwrap(); diff --git a/crates/bevy_asset/src/server/mod.rs b/crates/bevy_asset/src/server/mod.rs index 8922870c21fb6..4f22a141bc69f 100644 --- a/crates/bevy_asset/src/server/mod.rs +++ b/crates/bevy_asset/src/server/mod.rs @@ -2,10 +2,9 @@ mod info; mod loaders; use crate::{ - folder::{LoadFilter, LoadedFolder}, io::{ AssetReaderError, AssetSource, AssetSourceEvent, AssetSourceId, AssetSources, - AssetWriterError, ErasedAssetReader, MissingAssetSourceError, MissingAssetWriterError, + AssetWriterError, MissingAssetSourceError, MissingAssetWriterError, MissingProcessedAssetReaderError, Reader, }, loader::{AssetLoader, ErasedAssetLoader, LoadContext, LoadedAsset}, @@ -15,8 +14,9 @@ use crate::{ }, path::AssetPath, Asset, AssetEvent, AssetHandleProvider, AssetId, AssetLoadFailedEvent, AssetMetaCheck, Assets, - DeserializeMetaError, ErasedLoadedAsset, Handle, LoadFilterKind, LoadedUntypedAsset, - UnapprovedPathMode, UntypedAssetId, UntypedAssetLoadFailedEvent, UntypedHandle, + DeserializeMetaError, ErasedLoadedAsset, Handle, LoadBatchRequest, LoadedBatch, + LoadedUntypedAsset, UnapprovedPathMode, UntypedAssetId, UntypedAssetLoadFailedEvent, + UntypedHandle, }; use alloc::{borrow::ToOwned, boxed::Box, vec, vec::Vec}; use alloc::{ @@ -26,17 +26,16 @@ use alloc::{ }; use atomicow::CowArc; use bevy_ecs::prelude::*; -use bevy_platform::collections::{HashMap, HashSet}; +use bevy_platform::collections::HashSet; use bevy_tasks::IoTaskPool; use core::{any::TypeId, future::Future, panic::AssertUnwindSafe, task::Poll}; use crossbeam_channel::{Receiver, Sender}; use either::Either; -use futures_lite::{FutureExt, StreamExt}; -use glob::Pattern; +use futures_lite::FutureExt; use info::*; use loaders::*; use parking_lot::{RwLock, RwLockWriteGuard}; -use std::path::{Path, PathBuf}; +use std::path::{self, Path, PathBuf}; use thiserror::Error; use tracing::{error, info}; @@ -936,34 +935,6 @@ impl AssetServer { handle.typed_debug_checked() } - /// Loads all assets from the specified folder recursively. The [`LoadedFolder`] asset (when it loads) will - /// contain handles to all assets in the folder. You can wait for all assets to load by checking the [`LoadedFolder`]'s - /// [`RecursiveDependencyLoadState`]. - /// - /// Loading the same folder multiple times will return the same handle. If the `file_watcher` - /// feature is enabled, [`LoadedFolder`] handles will reload when a file in the folder is - /// removed, added or moved. This includes files in subdirectories and moving, adding, - /// or removing complete subdirectories. - #[must_use = "not using the returned strong handle may result in the unexpected release of the assets"] - pub fn load_folder<'a>(&self, path: impl Into>) -> Handle { - let path = path.into().into_owned(); - let (handle, should_load) = self - .data - .infos - .write() - .get_or_create_path_handle::( - path.clone(), - HandleLoadingMode::Request, - None, - ); - if !should_load { - return handle; - } - let id = handle.id().untyped(); - self.load_folder_internal(id, path, None); - - handle - } /// Loads all assets from the specified folder recursively with batch. The [`LoadedFolder`] asset (when it loads) will /// contain handles to all assets in the folder. You can wait for all assets to load by checking the [`LoadedFolder`]'s /// [`RecursiveDependencyLoadState`]. @@ -973,166 +944,103 @@ impl AssetServer { /// removed, added or moved. This includes files in subdirectories and moving, adding, /// or removing complete subdirectories. #[must_use = "not using the returned strong handle may result in the unexpected release of the assets"] - pub fn load_folder_with_filter<'a>( - &self, - path: impl Into>, - load_filter: LoadFilter, - ) -> Handle { - let path = path.into().into_owned(); - let (handle, should_load) = self - .data - .infos - .write() - .get_or_create_path_handle::( - path.clone(), - HandleLoadingMode::Request, - None, - ); - if !should_load { - return handle; - } - let id = handle.id().untyped(); - self.load_folder_internal(id, path, Some(load_filter)); - handle + pub fn load_batch<'a>(&self, load_batch_request: LoadBatchRequest) -> Handle { + let handle = self.data.infos.write().create_loading_handle_untyped( + TypeId::of::(), + core::any::type_name::(), + ); + + self.load_batch_internal(handle.id(), load_batch_request); + handle.typed_debug_checked() } - pub(crate) fn load_folder_internal( + pub(crate) fn load_batch_internal( &self, id: UntypedAssetId, - path: AssetPath, - load_filter: Option, + load_batch_request: LoadBatchRequest, ) { - async fn load_folder<'a>( + async fn load_file<'a>( source: AssetSourceId<'static>, path: &'a Path, - reader: &'a dyn ErasedAssetReader, server: &'a AssetServer, handles: &'a mut Vec, - patterns: &'a Vec, - patterns_kind: LoadFilterKind, - extensions: &'a Option>>, - extensions_kind: LoadFilterKind, ) -> Result<(), AssetLoadError> { - let is_dir = reader.is_directory(path).await?; - if is_dir { - let mut path_stream = reader.read_directory(path.as_ref()).await?; - while let Some(child_path) = path_stream.next().await { - if reader.is_directory(&child_path).await? { - Box::pin(load_folder( - source.clone(), - &child_path, - reader, - server, - handles, - patterns, - patterns_kind, - extensions, - extensions_kind, - )) - .await?; - } else { - let path = child_path.to_str().expect("Path should be a valid string."); - - if !patterns_kind - .apply(patterns.iter().any(|pattern| pattern.matches(path))) - { - continue; - } - - if let Some(extensions) = extensions { - match child_path.extension() { - Some(ext) => { - if !extensions_kind.apply(extensions.contains( - &ext.to_str().expect("Path should be a valid string."), - )) { - continue; - } - } - None => break, - }; - } - let asset_path = AssetPath::parse(path).with_source(source.clone()); - - match server.load_untyped_async(asset_path).await { - Ok(handle) => handles.push(handle), - // skip assets that cannot be loaded - Err( - AssetLoadError::MissingAssetLoaderForTypeName(_) - | AssetLoadError::MissingAssetLoaderForExtension(_), - ) => {} - Err(err) => return Err(err), - } - } - } + let path = path + .strip_prefix("assets\\") + .unwrap() + .to_str() + .expect("Path should be a valid string."); + let asset_path = AssetPath::parse(path).with_source(source.clone()); + + match server.load_untyped_async(asset_path).await { + Ok(handle) => handles.push(handle), + // skip assets that cannot be loaded + Err( + AssetLoadError::MissingAssetLoaderForTypeName(_) + | AssetLoadError::MissingAssetLoaderForExtension(_), + ) => {} + Err(err) => return Err(err), } Ok(()) } - let path = path.into_owned(); - let patterns: Vec = load_filter - .as_ref() - .map(|batch| { - batch - .paths - .clone() - .unwrap_or(Arc::new(vec!["*/*"])) - .iter() - .map(|path| Pattern::new(path).expect("Failed to create pattern from path")) - .collect() - }) - .unwrap_or(vec![Pattern::new("*/*").unwrap()]); - let patterns_kind = load_filter - .as_ref() - .map(|batch| batch.paths_kind) - .unwrap_or_default(); - - let extensions = load_filter - .as_ref() - .map(|batch| batch.extensions.clone()) - .unwrap_or_default(); - let extensions_kind = load_filter - .as_ref() - .map(|batch| batch.extensions_kind) - .unwrap_or_default(); - let server = self.clone(); IoTaskPool::get() .spawn(async move { - let Ok(source) = server.get_source(path.source()) else { - error!( - "Failed to load {path}. AssetSource {} does not exist", - path.source() - ); - return; - }; - - let asset_reader = match server.data.mode { - AssetServerMode::Unprocessed => source.reader(), - AssetServerMode::Processed => match source.processed_reader() { - Ok(reader) => reader, - Err(_) => { - error!( - "Failed to load {path}. AssetSource {} does not have a processed AssetReader", - path.source() - ); + let mut handles = Vec::new(); + for request_path in load_batch_request.requests.iter() { + let glob_pattern = format!("assets/{}", request_path); + let glob_result = match glob::glob(&glob_pattern) { + Ok(g) => g, + Err(e) => { + error!("Invalid glob pattern {}: {}", request_path, e); return; } - }, - }; + }; - let mut handles = Vec::new(); - match load_folder(source.id(), path.path(), asset_reader, &server, &mut handles,&patterns,patterns_kind,&extensions,extensions_kind).await { - Ok(_) => server.send_asset_event(InternalAssetEvent::Loaded { - id, - loaded_asset: LoadedAsset::new_with_dependencies( - LoadedFolder { handles,load_filter }, - ) - .into(), - }), - Err(err) => { - error!("Failed to load folder. {err}"); - server.send_asset_event(InternalAssetEvent::Failed { id, error: err, path }); - }, + for entry in glob_result { + let path = match entry { + Ok(path) => path, + Err(e) => { + error!("Failed to read path matching {}: {}", request_path, e); + return; + } + }; + + if path.is_dir() { + continue; + } + + let path = AssetPath::from_path_buf(path); + + let source = match server.get_source(path.source()) { + Ok(s) => s, + Err(_) => { + error!( + "Failed to load {}. AssetSource {} does not exist", + path, + path.source() + ); + continue; + } + }; + + if let Err(err) = + load_file(source.id(), path.path(), &server, &mut handles).await + { + error!("Failed to load {}: {}", path, err); + server.send_asset_event(InternalAssetEvent::Failed { + id, + error: err, + path: path.clone(), + }); + } + } } + server.send_asset_event(InternalAssetEvent::Loaded { + id, + loaded_asset: LoadedAsset::new_with_dependencies(LoadedBatch { handles }) + .into(), + }) }) .detach(); } @@ -1710,17 +1618,6 @@ impl AssetServer { /// A system that manages internal [`AssetServer`] events, such as finalizing asset loads. pub fn handle_internal_asset_events(world: &mut World) { world.resource_scope(|world, server: Mut| { - let mut load_filters: HashMap, Option> = HashMap::new(); - for (id, loaded_folder) in world - .get_resource::>() - .expect("Could not get LoadedFolder Assets") - .iter() - { - load_filters.insert( - server.get_path(id).expect("Path should be a valid string."), - loaded_folder.load_filter.clone(), - ); - } let mut infos = server.data.infos.write(); let var_name = vec![]; let mut untyped_failures = var_name; @@ -1783,24 +1680,8 @@ pub fn handle_internal_asset_events(world: &mut World) { } } - let reload_parent_folders = |path: PathBuf, source: &AssetSourceId<'static>| { - let mut current_folder = path; - while let Some(parent) = current_folder.parent() { - current_folder = parent.to_path_buf(); - let parent_asset_path = - AssetPath::from(current_folder.clone()).with_source(source.clone()); - for folder_handle in infos.get_path_handles(&parent_asset_path) { - info!("Reloading folder {parent_asset_path} because the content has changed"); - server.load_folder_internal( - folder_handle.id(), - parent_asset_path.clone(), - load_filters - .get(&parent_asset_path) - .expect("parent folder is doesn't loaded") - .clone(), - ); - } - } + let reload_parent_folders = |_path: PathBuf, _source: &AssetSourceId<'static>| { + info!("reload_parent_folders"); }; let mut paths_to_reload = >::default(); diff --git a/examples/2d/texture_atlas.rs b/examples/2d/texture_atlas.rs index 25106adcfb48f..75a0861b63806 100644 --- a/examples/2d/texture_atlas.rs +++ b/examples/2d/texture_atlas.rs @@ -7,7 +7,8 @@ //! Only one padded and one unpadded texture atlas are rendered to the screen. //! An upscaled sprite from each of the four atlases are rendered to the screen. -use bevy::{asset::LoadedFolder, image::ImageSampler, prelude::*}; +use bevy::{image::ImageSampler, prelude::*}; +use bevy_asset::{LoadBatchRequest, LoadedBatch}; fn main() { App::new() @@ -27,17 +28,19 @@ enum AppState { } #[derive(Resource, Default)] -struct RpgSpriteFolder(Handle); +struct RpgSpriteFolder(Handle); fn load_textures(mut commands: Commands, asset_server: Res) { // Load multiple, individual sprites from a folder - commands.insert_resource(RpgSpriteFolder(asset_server.load_folder("textures/rpg"))); + commands.insert_resource(RpgSpriteFolder(asset_server.load_batch( + LoadBatchRequest::new(vec!["textures/rpg/**/*", "textures/rpg/chars/**/*"]), + ))); } fn check_textures( mut next_state: ResMut>, rpg_sprite_folder: Res, - mut events: EventReader>, + mut events: EventReader>, ) { // Advance the `AppState` once all sprite handles have been loaded by the `AssetServer` for event in events.read() { @@ -52,7 +55,7 @@ fn setup( rpg_sprite_handles: Res, asset_server: Res, mut texture_atlases: ResMut>, - loaded_folders: Res>, + loaded_folders: Res>, mut textures: ResMut>, ) { let loaded_folder = loaded_folders.get(&rpg_sprite_handles.0).unwrap(); @@ -215,7 +218,7 @@ fn setup( /// Create a texture atlas with the given padding and sampling settings /// from the individual sprites in the given folder. fn create_texture_atlas( - folder: &LoadedFolder, + folder: &LoadedBatch, padding: Option, sampling: Option, textures: &mut ResMut>, diff --git a/examples/asset/folder_filter.rs b/examples/asset/folder_filter.rs deleted file mode 100644 index 0fad41ed707f0..0000000000000 --- a/examples/asset/folder_filter.rs +++ /dev/null @@ -1,301 +0,0 @@ -//! In this example we generate four texture atlases (sprite sheets) from a folder containing -//! individual sprites.But the folder containing waste files called "waste.txt" -//! So we use `load_folder_with_filter` to ingrone the waste files and `textures/rpg_with_waste/tiles`/* -//! -//! The texture atlases are generated with different padding and sampling to demonstrate the -//! effect of these settings, and how bleeding issues can be resolved by padding the sprites. -//! -//! Only one padded and one unpadded texture atlas are rendered to the screen. -//! An upscaled sprite from each of the four atlases are rendered to the screen. - -use bevy::{ - asset::{LoadFilter, LoadFilterKind, LoadedFolder}, - image::ImageSampler, - prelude::*, -}; - -fn main() { - App::new() - .add_plugins(DefaultPlugins.set(ImagePlugin::default_nearest())) // fallback to nearest sampling - .init_state::() - .add_systems(OnEnter(AppState::Setup), load_textures) - .add_systems(Update, check_textures.run_if(in_state(AppState::Setup))) - .add_systems(OnEnter(AppState::Finished), setup) - .run(); -} - -#[derive(Debug, Clone, Copy, Default, PartialEq, Eq, Hash, States)] -enum AppState { - #[default] - Setup, - Finished, -} - -#[derive(Resource, Default)] -struct RpgSpriteFolder(Handle); - -fn load_textures(mut commands: Commands, asset_server: Res) { - // Load multiple, individual sprites from a folder - commands.insert_resource(RpgSpriteFolder(asset_server.load_folder_with_filter( - "textures/rpg_with_waste", - LoadFilter::new( - vec!["textures/rpg_with_waste/tiles/*"], - LoadFilterKind::Black, - vec!["png"], - LoadFilterKind::White, - ), - ))); -} - -fn check_textures( - mut next_state: ResMut>, - rpg_sprite_folder: Res, - mut events: EventReader>, -) { - // Advance the `AppState` once all sprite handles have been loaded by the `AssetServer` - for event in events.read() { - if event.is_loaded_with_dependencies(&rpg_sprite_folder.0) { - next_state.set(AppState::Finished); - } - } -} - -fn setup( - mut commands: Commands, - rpg_sprite_handles: Res, - asset_server: Res, - mut texture_atlases: ResMut>, - loaded_folders: Res>, - mut textures: ResMut>, -) { - let loaded_folder = loaded_folders.get(&rpg_sprite_handles.0).unwrap(); - - // Create texture atlases with different padding and sampling - - let (texture_atlas_linear, linear_sources, linear_texture) = create_texture_atlas( - loaded_folder, - None, - Some(ImageSampler::linear()), - &mut textures, - ); - let atlas_linear_handle = texture_atlases.add(texture_atlas_linear); - - let (texture_atlas_nearest, nearest_sources, nearest_texture) = create_texture_atlas( - loaded_folder, - None, - Some(ImageSampler::nearest()), - &mut textures, - ); - let atlas_nearest_handle = texture_atlases.add(texture_atlas_nearest); - - let (texture_atlas_linear_padded, linear_padded_sources, linear_padded_texture) = - create_texture_atlas( - loaded_folder, - Some(UVec2::new(6, 6)), - Some(ImageSampler::linear()), - &mut textures, - ); - let atlas_linear_padded_handle = texture_atlases.add(texture_atlas_linear_padded.clone()); - - let (texture_atlas_nearest_padded, nearest_padded_sources, nearest_padded_texture) = - create_texture_atlas( - loaded_folder, - Some(UVec2::new(6, 6)), - Some(ImageSampler::nearest()), - &mut textures, - ); - let atlas_nearest_padded_handle = texture_atlases.add(texture_atlas_nearest_padded); - - commands.spawn(Camera2d); - - // Padded textures are to the right, unpadded to the left - - // Draw unpadded texture atlas - commands.spawn(( - Sprite::from_image(linear_texture.clone()), - Transform { - translation: Vec3::new(-250.0, -160.0, 0.0), - scale: Vec3::splat(0.5), - ..default() - }, - )); - - // Draw padded texture atlas - commands.spawn(( - Sprite::from_image(linear_padded_texture.clone()), - Transform { - translation: Vec3::new(250.0, -160.0, 0.0), - scale: Vec3::splat(0.5), - ..default() - }, - )); - - let font = asset_server.load("fonts/FiraSans-Bold.ttf"); - - // Padding label text style - let text_style: TextFont = TextFont { - font: font.clone(), - font_size: 42.0, - ..default() - }; - - // Labels to indicate padding - - // No padding - create_label( - &mut commands, - (-250.0, 250.0, 0.0), - "No padding", - text_style.clone(), - ); - - // Padding - create_label(&mut commands, (250.0, 250.0, 0.0), "Padding", text_style); - - // Get handle to a sprite to render - let vendor_handle: Handle = asset_server - .get_handle("textures/rpg_with_waste/chars/vendor/generic-rpg-vendor.png") - .unwrap(); - - // Configuration array to render sprites through iteration - let configurations: [( - &str, - Handle, - TextureAtlasSources, - Handle, - f32, - ); 4] = [ - ( - "Linear", - atlas_linear_handle, - linear_sources, - linear_texture, - -350.0, - ), - ( - "Nearest", - atlas_nearest_handle, - nearest_sources, - nearest_texture, - -150.0, - ), - ( - "Linear", - atlas_linear_padded_handle, - linear_padded_sources, - linear_padded_texture, - 150.0, - ), - ( - "Nearest", - atlas_nearest_padded_handle, - nearest_padded_sources, - nearest_padded_texture, - 350.0, - ), - ]; - - // Label text style - let sampling_label_style = TextFont { - font, - font_size: 25.0, - ..default() - }; - - let base_y = 80.0; // y position of the sprites - - for (sampling, atlas_handle, atlas_sources, atlas_texture, x) in configurations { - // Render a sprite from the texture_atlas - create_sprite_from_atlas( - &mut commands, - (x, base_y, 0.0), - atlas_texture, - atlas_sources, - atlas_handle, - &vendor_handle, - ); - - // Render a label to indicate the sampling setting - create_label( - &mut commands, - (x, base_y + 110.0, 0.0), // Offset to y position of the sprite - sampling, - sampling_label_style.clone(), - ); - } -} - -/// Create a texture atlas with the given padding and sampling settings -/// from the individual sprites in the given folder. -fn create_texture_atlas( - folder: &LoadedFolder, - padding: Option, - sampling: Option, - textures: &mut ResMut>, -) -> (TextureAtlasLayout, TextureAtlasSources, Handle) { - // Build a texture atlas using the individual sprites - let mut texture_atlas_builder = TextureAtlasBuilder::default(); - texture_atlas_builder.padding(padding.unwrap_or_default()); - for handle in folder.handles.iter() { - let id = handle.id().typed_unchecked::(); - let Some(texture) = textures.get(id) else { - warn!( - "{} did not resolve to an `Image` asset.", - handle.path().unwrap() - ); - continue; - }; - - texture_atlas_builder.add_texture(Some(id), texture); - } - - let (texture_atlas_layout, texture_atlas_sources, texture) = - texture_atlas_builder.build().unwrap(); - let texture = textures.add(texture); - - // Update the sampling settings of the texture atlas - let image = textures.get_mut(&texture).unwrap(); - image.sampler = sampling.unwrap_or_default(); - - (texture_atlas_layout, texture_atlas_sources, texture) -} - -/// Create and spawn a sprite from a texture atlas -fn create_sprite_from_atlas( - commands: &mut Commands, - translation: (f32, f32, f32), - atlas_texture: Handle, - atlas_sources: TextureAtlasSources, - atlas_handle: Handle, - vendor_handle: &Handle, -) { - commands.spawn(( - Transform { - translation: Vec3::new(translation.0, translation.1, translation.2), - scale: Vec3::splat(3.0), - ..default() - }, - Sprite::from_atlas_image( - atlas_texture, - atlas_sources.handle(atlas_handle, vendor_handle).unwrap(), - ), - )); -} - -/// Create and spawn a label (text) -fn create_label( - commands: &mut Commands, - translation: (f32, f32, f32), - text: &str, - text_style: TextFont, -) { - commands.spawn(( - Text2d::new(text), - text_style, - TextLayout::new_with_justify(Justify::Center), - Transform { - translation: Vec3::new(translation.0, translation.1, translation.2), - ..default() - }, - )); -} From 172b4cbe90b83d78783f45baa1170ecb3681c872 Mon Sep 17 00:00:00 2001 From: shishanyue <62888460+shishanyue@users.noreply.github.com> Date: Fri, 20 Jun 2025 17:40:23 +0800 Subject: [PATCH 13/18] fix asset_loading.rs --- examples/asset/asset_loading.rs | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/examples/asset/asset_loading.rs b/examples/asset/asset_loading.rs index 49d2dca279025..23548e3276d86 100644 --- a/examples/asset/asset_loading.rs +++ b/examples/asset/asset_loading.rs @@ -1,6 +1,9 @@ //! This example illustrates various ways to load assets. -use bevy::{asset::LoadedFolder, prelude::*}; +use bevy::{ + asset::{LoadBatchRequest, LoadedBatch}, + prelude::*, +}; fn main() { App::new() @@ -52,7 +55,8 @@ fn setup( // to load. // If you want to keep the assets in the folder alive, make sure you store the returned handle // somewhere. - let _loaded_folder: Handle = asset_server.load_folder("models/torus"); + let _loaded_folder = + asset_server.load_batch(LoadBatchRequest::new(vec!["models/torus/torus.gltf"])); // If you want a handle to a specific asset in a loaded folder, the easiest way to get one is to call load. // It will _not_ be loaded a second time. From 5c1320d61465dcf71300131ff932f3661c1b7b46 Mon Sep 17 00:00:00 2001 From: shishanyue <62888460+shishanyue@users.noreply.github.com> Date: Fri, 20 Jun 2025 17:57:37 +0800 Subject: [PATCH 14/18] pr --- crates/bevy_asset/src/batch.rs | 2 +- crates/bevy_asset/src/server/mod.rs | 8 ++++---- examples/README.md | 1 - examples/asset/asset_loading.rs | 5 +---- 4 files changed, 6 insertions(+), 10 deletions(-) diff --git a/crates/bevy_asset/src/batch.rs b/crates/bevy_asset/src/batch.rs index 70781b9aac08a..abc56b52e5d60 100644 --- a/crates/bevy_asset/src/batch.rs +++ b/crates/bevy_asset/src/batch.rs @@ -1,6 +1,6 @@ use alloc::vec::Vec; -use crate::{Asset, AssetPath, UntypedHandle}; +use crate::{Asset, UntypedHandle}; use bevy_reflect::TypePath; pub struct LoadBatchRequest { diff --git a/crates/bevy_asset/src/server/mod.rs b/crates/bevy_asset/src/server/mod.rs index 4f22a141bc69f..2c98cb298c198 100644 --- a/crates/bevy_asset/src/server/mod.rs +++ b/crates/bevy_asset/src/server/mod.rs @@ -35,7 +35,7 @@ use futures_lite::FutureExt; use info::*; use loaders::*; use parking_lot::{RwLock, RwLockWriteGuard}; -use std::path::{self, Path, PathBuf}; +use std::path::{Path, PathBuf}; use thiserror::Error; use tracing::{error, info}; @@ -935,12 +935,12 @@ impl AssetServer { handle.typed_debug_checked() } - /// Loads all assets from the specified folder recursively with batch. The [`LoadedFolder`] asset (when it loads) will - /// contain handles to all assets in the folder. You can wait for all assets to load by checking the [`LoadedFolder`]'s + /// Loads all assets from the specified folder recursively with batch. The [`LoadedBatch`] asset (when it loads) will + /// contain handles to all assets in the folder. You can wait for all assets to load by checking the [`LoadedBatch`]'s /// [`RecursiveDependencyLoadState`]. /// /// Loading the same folder multiple times will return the same handle. If the `file_watcher` - /// feature is enabled, [`LoadedFolder`] handles will reload when a file in the folder is + /// feature is enabled, [`LoadedBatch`] handles will reload when a file in the folder is /// removed, added or moved. This includes files in subdirectories and moving, adding, /// or removing complete subdirectories. #[must_use = "not using the returned strong handle may result in the unexpected release of the assets"] diff --git a/examples/README.md b/examples/README.md index 3d0cfd97c612f..bccadd438eab9 100644 --- a/examples/README.md +++ b/examples/README.md @@ -254,7 +254,6 @@ Example | Description [Custom Asset IO](../examples/asset/custom_asset_reader.rs) | Implements a custom AssetReader [Embedded Asset](../examples/asset/embedded_asset.rs) | Embed an asset in the application binary and load it [Extra asset source](../examples/asset/extra_source.rs) | Load an asset from a non-standard asset source -[Folder Filter](../examples/asset/folder_filter.rs) | Load Folder With Filter [Hot Reloading of Assets](../examples/asset/hot_asset_reloading.rs) | Demonstrates automatic reloading of assets when modified on disk [Multi-asset synchronization](../examples/asset/multi_asset_sync.rs) | Demonstrates how to wait for multiple assets to be loaded. [Repeated texture configuration](../examples/asset/repeated_texture.rs) | How to configure the texture to repeat instead of the default clamp to edges diff --git a/examples/asset/asset_loading.rs b/examples/asset/asset_loading.rs index 23548e3276d86..c186293f6ff9d 100644 --- a/examples/asset/asset_loading.rs +++ b/examples/asset/asset_loading.rs @@ -1,9 +1,6 @@ //! This example illustrates various ways to load assets. -use bevy::{ - asset::{LoadBatchRequest, LoadedBatch}, - prelude::*, -}; +use bevy::{asset::LoadBatchRequest, prelude::*}; fn main() { App::new() From 011f8ce97bc8d3025906ecffd66e5d9c280dfe07 Mon Sep 17 00:00:00 2001 From: shishanyue <62888460+shishanyue@users.noreply.github.com> Date: Sat, 21 Jun 2025 09:06:31 +0800 Subject: [PATCH 15/18] have a problem --- crates/bevy_asset/src/batch.rs | 14 ++++++++++---- examples/asset/extra_source.rs | 11 +++++++++++ 2 files changed, 21 insertions(+), 4 deletions(-) diff --git a/crates/bevy_asset/src/batch.rs b/crates/bevy_asset/src/batch.rs index abc56b52e5d60..a0317e56ffe33 100644 --- a/crates/bevy_asset/src/batch.rs +++ b/crates/bevy_asset/src/batch.rs @@ -1,17 +1,23 @@ use alloc::vec::Vec; -use crate::{Asset, UntypedHandle}; +use crate::{Asset, AssetPath, UntypedHandle}; use bevy_reflect::TypePath; pub struct LoadBatchRequest { - pub requests: Vec<&'static str>, + pub requests: Vec>, } impl LoadBatchRequest { - pub fn new(requests: Vec<&'static str>) -> Self { - Self { requests } + pub fn new(requests: Vec) -> Self + where + T:Into>, + { + Self { + requests: requests.into_iter().map(Into::into).collect(), + } } } + /// A "loaded batch" containing handles for all assets stored in a given [`AssetPath`]. /// /// This is produced by [`AssetServer::load_batch`](crate::prelude::AssetServer::load_batch). diff --git a/examples/asset/extra_source.rs b/examples/asset/extra_source.rs index 298b9d4aa85c7..ce4a9fc6e3469 100644 --- a/examples/asset/extra_source.rs +++ b/examples/asset/extra_source.rs @@ -8,8 +8,12 @@ use bevy::{ }, prelude::*, }; +use bevy_asset::{LoadBatchRequest, LoadedBatch}; use std::path::Path; +#[derive(Resource, Default)] +struct SpriteBatch(Handle); + fn main() { App::new() // Add an extra asset source with the name "example_files" to @@ -43,4 +47,11 @@ fn setup(mut commands: Commands, asset_server: Res) { assert_eq!(asset_path, "example_files://bevy_pixel_light.png".into()); commands.spawn(Sprite::from_image(asset_server.load(asset_path))); + + let path = Path::new("*.png"); + let source = AssetSourceId::from("example_files"); + let asset_path = AssetPath::from_path(path).with_source(source); + commands.insert_resource(SpriteBatch( + asset_server.load_batch(LoadBatchRequest::new(vec![asset_path])), + )); } From d4cf944576c3b1da8e645b44dd04c2feec5ae2ab Mon Sep 17 00:00:00 2001 From: shishanyue <62888460+shishanyue@users.noreply.github.com> Date: Sat, 21 Jun 2025 09:18:01 +0800 Subject: [PATCH 16/18] extra_source --- crates/bevy_asset/src/batch.rs | 2 +- examples/asset/extra_source.rs | 11 ----------- 2 files changed, 1 insertion(+), 12 deletions(-) diff --git a/crates/bevy_asset/src/batch.rs b/crates/bevy_asset/src/batch.rs index a0317e56ffe33..14087a71912b6 100644 --- a/crates/bevy_asset/src/batch.rs +++ b/crates/bevy_asset/src/batch.rs @@ -10,7 +10,7 @@ pub struct LoadBatchRequest { impl LoadBatchRequest { pub fn new(requests: Vec) -> Self where - T:Into>, + T: Into>, { Self { requests: requests.into_iter().map(Into::into).collect(), diff --git a/examples/asset/extra_source.rs b/examples/asset/extra_source.rs index ce4a9fc6e3469..298b9d4aa85c7 100644 --- a/examples/asset/extra_source.rs +++ b/examples/asset/extra_source.rs @@ -8,12 +8,8 @@ use bevy::{ }, prelude::*, }; -use bevy_asset::{LoadBatchRequest, LoadedBatch}; use std::path::Path; -#[derive(Resource, Default)] -struct SpriteBatch(Handle); - fn main() { App::new() // Add an extra asset source with the name "example_files" to @@ -47,11 +43,4 @@ fn setup(mut commands: Commands, asset_server: Res) { assert_eq!(asset_path, "example_files://bevy_pixel_light.png".into()); commands.spawn(Sprite::from_image(asset_server.load(asset_path))); - - let path = Path::new("*.png"); - let source = AssetSourceId::from("example_files"); - let asset_path = AssetPath::from_path(path).with_source(source); - commands.insert_resource(SpriteBatch( - asset_server.load_batch(LoadBatchRequest::new(vec![asset_path])), - )); } From 484d5c848d4e66858571e30412063f1aa6ababcb Mon Sep 17 00:00:00 2001 From: shishanyue <62888460+shishanyue@users.noreply.github.com> Date: Sat, 21 Jun 2025 15:35:04 +0800 Subject: [PATCH 17/18] fix --- crates/bevy_asset/src/lib.rs | 4 ++-- crates/bevy_asset/src/server/mod.rs | 21 +++++++++------------ 2 files changed, 11 insertions(+), 14 deletions(-) diff --git a/crates/bevy_asset/src/lib.rs b/crates/bevy_asset/src/lib.rs index ea51991899b21..ed37740dd5ec8 100644 --- a/crates/bevy_asset/src/lib.rs +++ b/crates/bevy_asset/src/lib.rs @@ -1574,7 +1574,7 @@ mod tests { } #[test] - fn load_folder() { + fn load_batch() { // The particular usage of GatedReader in this test will cause deadlocking if running single-threaded #[cfg(not(feature = "multi_threaded"))] panic!("This test requires the \"multi_threaded\" feature, otherwise it will deadlock.\ncargo test --package bevy_asset --features multi_threaded"); @@ -1619,7 +1619,7 @@ mod tests { .register_asset_loader(CoolTextLoader); let asset_server = app.world().resource::().clone(); let handle: Handle = - asset_server.load_batch(LoadBatchRequest::new(vec!["text"])); + asset_server.load_batch(LoadBatchRequest::new(vec!["text/*","b.cool.ron"])); gate_opener.open(a_path); gate_opener.open(b_path); gate_opener.open(c_path); diff --git a/crates/bevy_asset/src/server/mod.rs b/crates/bevy_asset/src/server/mod.rs index 2c98cb298c198..3835e9d125fd2 100644 --- a/crates/bevy_asset/src/server/mod.rs +++ b/crates/bevy_asset/src/server/mod.rs @@ -944,7 +944,7 @@ impl AssetServer { /// removed, added or moved. This includes files in subdirectories and moving, adding, /// or removing complete subdirectories. #[must_use = "not using the returned strong handle may result in the unexpected release of the assets"] - pub fn load_batch<'a>(&self, load_batch_request: LoadBatchRequest) -> Handle { + pub fn load_batch(&self, load_batch_request: LoadBatchRequest) -> Handle { let handle = self.data.infos.write().create_loading_handle_untyped( TypeId::of::(), core::any::type_name::(), @@ -1012,16 +1012,13 @@ impl AssetServer { let path = AssetPath::from_path_buf(path); - let source = match server.get_source(path.source()) { - Ok(s) => s, - Err(_) => { - error!( - "Failed to load {}. AssetSource {} does not exist", - path, - path.source() - ); - continue; - } + let Ok(source) = server.get_source(path.source()) else { + error!( + "Failed to load {}. AssetSource {} does not exist", + path, + path.source() + ); + return; }; if let Err(err) = @@ -1040,7 +1037,7 @@ impl AssetServer { id, loaded_asset: LoadedAsset::new_with_dependencies(LoadedBatch { handles }) .into(), - }) + }); }) .detach(); } From 5b6ac36b5089546219dce452415dec64f866858b Mon Sep 17 00:00:00 2001 From: shishanyue <62888460+shishanyue@users.noreply.github.com> Date: Sat, 21 Jun 2025 15:45:38 +0800 Subject: [PATCH 18/18] ci --- crates/bevy_asset/src/lib.rs | 2 +- examples/2d/texture_atlas.rs | 7 +++++-- 2 files changed, 6 insertions(+), 3 deletions(-) diff --git a/crates/bevy_asset/src/lib.rs b/crates/bevy_asset/src/lib.rs index ed37740dd5ec8..8f7168ddeeba8 100644 --- a/crates/bevy_asset/src/lib.rs +++ b/crates/bevy_asset/src/lib.rs @@ -1619,7 +1619,7 @@ mod tests { .register_asset_loader(CoolTextLoader); let asset_server = app.world().resource::().clone(); let handle: Handle = - asset_server.load_batch(LoadBatchRequest::new(vec!["text/*","b.cool.ron"])); + asset_server.load_batch(LoadBatchRequest::new(vec!["text/*", "b.cool.ron"])); gate_opener.open(a_path); gate_opener.open(b_path); gate_opener.open(c_path); diff --git a/examples/2d/texture_atlas.rs b/examples/2d/texture_atlas.rs index 75a0861b63806..2ea3cb73b7855 100644 --- a/examples/2d/texture_atlas.rs +++ b/examples/2d/texture_atlas.rs @@ -7,8 +7,11 @@ //! Only one padded and one unpadded texture atlas are rendered to the screen. //! An upscaled sprite from each of the four atlases are rendered to the screen. -use bevy::{image::ImageSampler, prelude::*}; -use bevy_asset::{LoadBatchRequest, LoadedBatch}; +use bevy::{ + asset::{LoadBatchRequest, LoadedBatch}, + image::ImageSampler, + prelude::*, +}; fn main() { App::new()