Entity asset loading kinda sorta works...

attempt/001
Elijah C. Voigt 1 year ago
parent cfe3a9ce17
commit 84744a9397

@ -25,10 +25,6 @@ rustflags = [
[target.x86_64-pc-windows-msvc]
linker = "rust-lld.exe" # Use LLD Linker
rustflags = [
"-Zshare-generics=n",
"-Zthreads=0", # (Nightly) Use improved multithreading with the recommended amount of threads.
]
[target.wasm32-unknown-unknown]
runner = "wasm-server-runner"

119
Cargo.lock generated

@ -304,6 +304,7 @@ version = "0.13.2"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "65b9eadaacf8fe971331bc3f250f35c18bc9dace3f96b483062f38ac07e3a1b4"
dependencies = [
"bevy_dylib",
"bevy_internal",
]
@ -377,6 +378,7 @@ dependencies = [
"futures-io",
"futures-lite",
"js-sys",
"notify-debouncer-full",
"parking_lot",
"ron",
"serde",
@ -480,6 +482,15 @@ dependencies = [
"sysinfo",
]
[[package]]
name = "bevy_dylib"
version = "0.13.2"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "922826e3b8f37c19836b49e18ceca662260cce87ab8faa4db6df8433903660cc"
dependencies = [
"bevy_internal",
]
[[package]]
name = "bevy_ecs"
version = "0.13.2"
@ -1864,6 +1875,27 @@ dependencies = [
"simd-adler32",
]
[[package]]
name = "file-id"
version = "0.2.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "6584280525fb2059cba3db2c04abf947a1a29a45ddae89f3870f8281704fafc9"
dependencies = [
"windows-sys 0.48.0",
]
[[package]]
name = "filetime"
version = "0.2.23"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "1ee447700ac8aa0b2f2bd7bc4462ad686ba06baa6727ac149a2d6277f0d240fd"
dependencies = [
"cfg-if 1.0.0",
"libc",
"redox_syscall 0.4.1",
"windows-sys 0.52.0",
]
[[package]]
name = "fixedbitset"
version = "0.4.2"
@ -1913,6 +1945,15 @@ version = "0.3.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "aa9a19cbb55df58761df49b23516a86d432839add4af60fc256da840f66ed35b"
[[package]]
name = "fsevent-sys"
version = "4.1.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "76ee7a02da4d231650c7cea31349b889be2f45ddb3ef3032d2ec8185f6313fd2"
dependencies = [
"libc",
]
[[package]]
name = "futures-core"
version = "0.3.30"
@ -1981,7 +2022,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "b922f294d9f062af517ea0bd0a036ddcf11c2842211c2f9c71a3ceee859e10b6"
dependencies = [
"core-foundation",
"inotify",
"inotify 0.10.2",
"io-kit-sys",
"js-sys",
"libc",
@ -2246,6 +2287,17 @@ version = "1.1.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "a257582fdcde896fd96463bf2d40eefea0580021c0712a0e2b028b60b47a837a"
[[package]]
name = "inotify"
version = "0.9.6"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "f8069d3ec154eb856955c1c0fbffefbf5f3c40a104ec912d4797314c1801abff"
dependencies = [
"bitflags 1.3.2",
"inotify-sys",
"libc",
]
[[package]]
name = "inotify"
version = "0.10.2"
@ -2348,6 +2400,26 @@ version = "3.1.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "e2db585e1d738fc771bf08a151420d3ed193d9d895a36df7f6f8a9456b911ddc"
[[package]]
name = "kqueue"
version = "1.0.8"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "7447f1ca1b7b563588a205fe93dea8df60fd981423a768bc1c0ded35ed147d0c"
dependencies = [
"kqueue-sys",
"libc",
]
[[package]]
name = "kqueue-sys"
version = "1.0.4"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "ed9625ffda8729b85e45cf04090035ac368927b8cebc34898e7c120f52e4838b"
dependencies = [
"bitflags 1.3.2",
"libc",
]
[[package]]
name = "ktx2"
version = "0.3.0"
@ -2519,6 +2591,18 @@ dependencies = [
"simd-adler32",
]
[[package]]
name = "mio"
version = "0.8.11"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "a4a650543ca06a924e8b371db273b2756685faae30f8487da1b56505a8f78b0c"
dependencies = [
"libc",
"log",
"wasi",
"windows-sys 0.48.0",
]
[[package]]
name = "naga"
version = "0.19.2"
@ -2618,6 +2702,39 @@ version = "0.5.5"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "610a5acd306ec67f907abe5567859a3c693fb9886eb1f012ab8f2a47bef3db51"
[[package]]
name = "notify"
version = "6.1.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "6205bd8bb1e454ad2e27422015fb5e4f2bcc7e08fa8f27058670d208324a4d2d"
dependencies = [
"bitflags 2.5.0",
"crossbeam-channel",
"filetime",
"fsevent-sys",
"inotify 0.9.6",
"kqueue",
"libc",
"log",
"mio",
"walkdir",
"windows-sys 0.48.0",
]
[[package]]
name = "notify-debouncer-full"
version = "0.3.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "49f5dab59c348b9b50cf7f261960a20e389feb2713636399cd9082cd4b536154"
dependencies = [
"crossbeam-channel",
"file-id",
"log",
"notify",
"parking_lot",
"walkdir",
]
[[package]]
name = "ntapi"
version = "0.4.1"

@ -4,7 +4,7 @@ version = "0.1.0"
edition = "2021"
[dependencies]
bevy = "0.13"
bevy = { version = "0.13", features = ["file_watcher", "dynamic_linking"] }
wee_alloc = "*"
bevy_mod_picking = "0.18"
thiserror = "1"
@ -12,6 +12,15 @@ nom = "7"
# Entity Uuid parsing
uuid = "1.7.0"
# Enable a small amount of optimization in debug mode
[profile.dev]
opt-level = 1
# Enable high optimizations for dependencies (incl. Bevy), but not for our code:
[profile.dev.package."*"]
opt-level = 3
# Prioritize binary size for wasm
[profile.wasm-release]
inherits = "release"
opt-level = "z"

@ -1,3 +1,3 @@
name "van"
name van
uuid 5c270e84-814c-4d51-9ccd-ab79d9e01f1d
transform translation 0.0 0.0 0.0 rotation 0.0 0.0 0.0 1.0 scale 1.0 1.0 1.0
transform translation 1.0 1.0 1.0 rotation 0.0 0.0 0.0 1.0 scale 0.5 0.5 0.5

@ -1,3 +1,4 @@
use bevy::{math::Vec3A, render::primitives::Aabb};
use nom::IResult;
use crate::prelude::*;
@ -9,7 +10,8 @@ impl Plugin for SavePlugin {
fn build(&self, app: &mut App) {
app.init_asset::<SaveEntity>()
.init_asset_loader::<SaveEntityLoader>()
.add_systems(Startup, test_save_entity);
.add_systems(Startup, test_save_entity)
.add_systems(Update, check_loaded_entity_assets.run_if(on_event::<AssetEvent<SaveEntity>>()));
}
}
@ -17,7 +19,7 @@ impl Plugin for SavePlugin {
struct SaveEntity {
transform: Option<Transform>,
name: Option<Name>,
uuid: Option<Uuid>,
uuid: Option<EntityUuid>,
}
impl SaveEntity {
@ -30,13 +32,16 @@ impl SaveEntity {
} else if let Ok(transform) = parse::parse_save_transform(line) {
entity.transform = Some(transform);
} else if let Ok(uuid) = parse::parse_save_uuid(line) {
entity.uuid = Some(uuid);
entity.uuid = Some(EntityUuid(uuid));
}
});
Ok(entity)
}
}
#[derive(Component, Clone, Debug)]
struct EntityUuid(Uuid);
mod parse {
use super::*;
@ -232,6 +237,52 @@ impl AssetLoader for SaveEntityLoader {
}
}
fn test_save_entity(loader: Res<AssetServer>, mut handle: Local<Handle<SaveEntity>>) {
*handle = loader.load("levels/00/entities/van.entity");
fn test_save_entity(loader: Res<AssetServer>, mut commands: Commands) {
let handle: Handle<SaveEntity> = loader.load("levels/00/entities/van.entity");
commands.spawn((SpatialBundle { ..default() }, handle, ShowAabbGizmo { ..default() }, Aabb { center: Vec3A::ZERO, half_extents: Vec3A::ONE }));
}
fn check_loaded_entity_assets(
query: Query<(Entity, &Handle<SaveEntity>)>,
mut events: EventReader<AssetEvent<SaveEntity>>,
save_entities: Res<Assets<SaveEntity>>,
mut commands: Commands,
) {
events.read().for_each(|event| {
match event {
AssetEvent::LoadedWithDependencies { id } => {
query
.iter()
.filter(|(_, handle)| handle.id() == *id)
.for_each(|(entity, _handle)|{
let saved = save_entities.get(*id).unwrap();
debug!("Updating entity {:?} ({:?}) because asset changed", saved.name, saved.uuid);
let mut e = commands.entity(entity);
// Apply transform
if let Some(transform) = &saved.transform {
// TODO: Only update if different
e.insert(transform.clone());
} else {
e.remove::<Transform>();
}
// Apply Name
if let Some(name) = &saved.name {
// TODO: Only update if different
e.insert(name.clone());
} else {
e.remove::<Name>();
}
// Apply Uuid
if let Some(uuid) = &saved.uuid {
// TODO: Only update if different
e.insert(uuid.clone());
} else {
e.remove::<EntityUuid>();
}
});
}
_ => ()
}
})
}
Loading…
Cancel
Save