Skip to content

Commit 8f66741

Browse files
author
VexarCoding
committed
Embed game assets using bevy_embedded_assets
1 parent d00167d commit 8f66741

4 files changed

Lines changed: 96 additions & 40 deletions

File tree

.DS_Store

4 KB
Binary file not shown.

Cargo.lock

Lines changed: 20 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

Cargo.toml

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@ edition = "2024"
55

66
[dependencies]
77
bevy = "0.15.3"
8+
bevy_embedded_assets = "0.12.0"
89
bincode = "2.0.1"
910
flate2 = "1.1.1"
1011
noise = "0.9.0"

src/main.rs

Lines changed: 75 additions & 40 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,9 @@
11
use bevy::{color::palettes::css, input::mouse::MouseWheel, prelude::*, window::PrimaryWindow};
2+
use bevy_embedded_assets::{EmbeddedAssetPlugin, PluginMode};
23
use bincode::{Decode, Encode, config};
34
use flate2::{Compression, read::DeflateDecoder, write::DeflateEncoder};
45
use noise::{NoiseFn, Perlin};
56
use serde::{Deserialize, Serialize};
6-
77
use std::{
88
any::Any,
99
collections::{HashMap, HashSet},
@@ -476,7 +476,12 @@ fn recipe_for(factory_type: FactoryType) -> Recipe {
476476

477477
fn main() {
478478
App::new()
479-
.add_plugins(DefaultPlugins)
479+
.add_plugins((
480+
DefaultPlugins,
481+
EmbeddedAssetPlugin {
482+
mode: PluginMode::AutoLoad,
483+
},
484+
))
480485
.insert_resource(WorldRes::default())
481486
.insert_resource(ConveyorPlacer::default())
482487
.add_systems(Startup, setup)
@@ -515,8 +520,8 @@ fn setup(mut commands: Commands, asset_server: Res<AssetServer>, mut world: ResM
515520

516521
for (pos, terrain) in world.terrain.iter() {
517522
let texture_path = match terrain {
518-
TerrainTileType::Grass => "textures/terrain/grass.png",
519-
TerrainTileType::Dirt => "textures/terrain/dirt.png",
523+
TerrainTileType::Grass => "embedded://textures/terrain/grass.png",
524+
TerrainTileType::Dirt => "embedded://textures/terrain/dirt.png",
520525
};
521526
commands.spawn((
522527
Sprite::from_image(asset_server.load(texture_path)),
@@ -560,7 +565,7 @@ fn setup(mut commands: Commands, asset_server: Res<AssetServer>, mut world: ResM
560565
for (pos, _) in world.tiles.iter() {
561566
commands
562567
.spawn((
563-
Sprite::from_image(asset_server.load("textures/tiles/belt.png")),
568+
Sprite::from_image(asset_server.load("embedded://textures/tiles/belt.png")),
564569
Transform {
565570
translation: Vec3::new(pos.x as f32 * TILE_SIZE, pos.y as f32 * TILE_SIZE, 0.0),
566571
scale: Vec3::splat(TILE_SIZE / IMAGE_SIZE),
@@ -570,7 +575,7 @@ fn setup(mut commands: Commands, asset_server: Res<AssetServer>, mut world: ResM
570575
))
571576
.with_children(|parent| {
572577
parent.spawn((
573-
Sprite::from_image(asset_server.load("textures/items/none.png")),
578+
Sprite::from_image(asset_server.load("embedded://textures/items/none.png")),
574579
Transform::from_scale(Vec3::splat(0.5)),
575580
));
576581
});
@@ -718,10 +723,10 @@ fn tick_tiles(
718723
timer: Timer::from_seconds(TICK_LENGTH, TimerMode::Once),
719724
},
720725
Sprite::from_image(asset_server.load(match item {
721-
Item::None => "textures/items/none.png",
722-
Item::Wood => "textures/items/wood.png",
723-
Item::Stone => "textures/items/stone.png",
724-
Item::Product => "textures/items/product.png",
726+
Item::None => "embedded://textures/items/none.png",
727+
Item::Wood => "embedded://textures/items/wood.png",
728+
Item::Stone => "embedded://textures/items/stone.png",
729+
Item::Product => "embedded://textures/items/product.png",
725730
})),
726731
Transform {
727732
translation: start_pos,
@@ -753,10 +758,10 @@ fn tick_tiles(
753758
timer: Timer::from_seconds(TICK_LENGTH, TimerMode::Once),
754759
},
755760
Sprite::from_image(asset_server.load(match item {
756-
Item::None => "textures/items/none.png",
757-
Item::Wood => "textures/items/wood.png",
758-
Item::Stone => "textures/items/stone.png",
759-
Item::Product => "textures/items/product.png",
761+
Item::None => "embedded://textures/items/none.png",
762+
Item::Wood => "embedded://textures/items/wood.png",
763+
Item::Stone => "embedded://textures/items/stone.png",
764+
Item::Product => "embedded://textures/items/product.png",
760765
})),
761766
Transform {
762767
translation: start_pos,
@@ -813,10 +818,18 @@ fn tick_tiles(
813818
},
814819
Sprite::from_image(asset_server.load(
815820
match produced_item {
816-
Item::None => "textures/items/none.png",
817-
Item::Wood => "textures/items/wood.png",
818-
Item::Stone => "textures/items/stone.png",
819-
Item::Product => "textures/items/product.png",
821+
Item::None => {
822+
"embedded://textures/items/none.png"
823+
}
824+
Item::Wood => {
825+
"embedded://textures/items/wood.png"
826+
}
827+
Item::Stone => {
828+
"embedded://textures/items/stone.png"
829+
}
830+
Item::Product => {
831+
"embedded://textures/items/product.png"
832+
}
820833
},
821834
)),
822835
Transform {
@@ -869,10 +882,12 @@ fn tick_tiles(
869882
),
870883
},
871884
Sprite::from_image(asset_server.load(match item {
872-
Item::None => "textures/items/none.png",
873-
Item::Wood => "textures/items/wood.png",
874-
Item::Stone => "textures/items/stone.png",
875-
Item::Product => "textures/items/product.png",
885+
Item::None => "embedded://textures/items/none.png",
886+
Item::Wood => "embedded://textures/items/wood.png",
887+
Item::Stone => "embedded://textures/items/stone.png",
888+
Item::Product => {
889+
"embedded://textures/items/product.png"
890+
}
876891
})),
877892
Transform {
878893
translation: start_pos,
@@ -985,7 +1000,7 @@ fn update_tile_visuals(
9851000
tile_sprite.pos.y as f32 * TILE_SIZE,
9861001
0.0,
9871002
);
988-
sprite.image = asset_server.load("textures/tiles/belt.png");
1003+
sprite.image = asset_server.load("embedded://textures/tiles/belt.png");
9891004
transform.rotation = match conveyor.direction {
9901005
Direction::Up => Quat::IDENTITY,
9911006
Direction::Down => Quat::from_rotation_z(PI),
@@ -1012,10 +1027,18 @@ fn update_tile_visuals(
10121027
};
10131028

10141029
child_sprite.image = match conveyor.item {
1015-
Item::None => asset_server.load("textures/items/none.png"),
1016-
Item::Wood => asset_server.load("textures/items/wood.png"),
1017-
Item::Stone => asset_server.load("textures/items/stone.png"),
1018-
Item::Product => asset_server.load("textures/items/product.png"),
1030+
Item::None => {
1031+
asset_server.load("embedded://textures/items/none.png")
1032+
}
1033+
Item::Wood => {
1034+
asset_server.load("embedded://textures/items/wood.png")
1035+
}
1036+
Item::Stone => {
1037+
asset_server.load("embedded://textures/items/stone.png")
1038+
}
1039+
Item::Product => {
1040+
asset_server.load("embedded://textures/items/product.png")
1041+
}
10191042
};
10201043
}
10211044
}
@@ -1034,7 +1057,7 @@ fn update_tile_visuals(
10341057
.unwrap()
10351058
.factory_type
10361059
{
1037-
FactoryType::Assembler => "textures/tiles/assembler.png",
1060+
FactoryType::Assembler => "embedded://textures/tiles/assembler.png",
10381061
},
10391062
);
10401063
transform.rotation = match factory.direction {
@@ -1057,7 +1080,7 @@ fn update_tile_visuals(
10571080
tile_sprite.pos.y as f32 * TILE_SIZE,
10581081
2.0,
10591082
);
1060-
sprite.image = asset_server.load("textures/tiles/extractor.png");
1083+
sprite.image = asset_server.load("embedded://textures/tiles/extractor.png");
10611084
transform.rotation = match extractor.direction {
10621085
Direction::Up => Quat::IDENTITY,
10631086
Direction::Down => Quat::from_rotation_z(PI),
@@ -1071,10 +1094,18 @@ fn update_tile_visuals(
10711094
{
10721095
child_transform.translation = Vec3::new(0.0, 0.0, 1.0);
10731096
child_sprite.image = match extractor.spawn_item {
1074-
Item::None => asset_server.load("textures/items/none.png"),
1075-
Item::Wood => asset_server.load("textures/items/wood.png"),
1076-
Item::Stone => asset_server.load("textures/items/stone.png"),
1077-
Item::Product => asset_server.load("textures/items/product.png"),
1097+
Item::None => {
1098+
asset_server.load("embedded://textures/items/none.png")
1099+
}
1100+
Item::Wood => {
1101+
asset_server.load("embedded://textures/items/wood.png")
1102+
}
1103+
Item::Stone => {
1104+
asset_server.load("embedded://textures/items/stone.png")
1105+
}
1106+
Item::Product => {
1107+
asset_server.load("embedded://textures/items/product.png")
1108+
}
10781109
};
10791110
}
10801111
}
@@ -1160,11 +1191,11 @@ fn manage_tiles(
11601191
}
11611192

11621193
let texture_path = match placer.tile_type {
1163-
0 => "textures/tiles/none.png",
1164-
1 => "textures/tiles/belt.png",
1165-
2 => "textures/tiles/assembler.png",
1166-
3 => "textures/tiles/extractor.png",
1167-
_ => "textures/tiles/belt.png",
1194+
0 => "embedded://textures/tiles/none.png",
1195+
1 => "embedded://textures/tiles/belt.png",
1196+
2 => "embedded://textures/tiles/assembler.png",
1197+
3 => "embedded://textures/tiles/extractor.png",
1198+
_ => "embedded://textures/tiles/belt.png",
11681199
};
11691200

11701201
let preview_entity = commands
@@ -1319,7 +1350,9 @@ fn manage_tiles(
13191350

13201351
commands
13211352
.spawn((
1322-
Sprite::from_image(asset_server.load("textures/tiles/belt.png")),
1353+
Sprite::from_image(
1354+
asset_server.load("embedded://textures/tiles/belt.png"),
1355+
),
13231356
Transform {
13241357
translation: Vec3::new(
13251358
pos.x as f32 * TILE_SIZE,
@@ -1333,7 +1366,9 @@ fn manage_tiles(
13331366
))
13341367
.with_children(|parent| {
13351368
parent.spawn((
1336-
Sprite::from_image(asset_server.load("textures/items/none.png")),
1369+
Sprite::from_image(
1370+
asset_server.load("embedded://textures/items/none.png"),
1371+
),
13371372
Transform::from_scale(Vec3::splat(0.5)),
13381373
));
13391374
});

0 commit comments

Comments
 (0)