You cannot select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
106 lines
2.8 KiB
Rust
106 lines
2.8 KiB
Rust
// TODO:
|
|
// * Determine where local assets folder needs to be created
|
|
// * Create local assets folder
|
|
// * Recusrively laod that folder and watch for changes
|
|
// * Copy assets into local folder in leue of importing them
|
|
// * Check portability by moving binary + folder to new location
|
|
|
|
use std::time::Duration;
|
|
|
|
use bevy::{asset::ChangeWatcher, prelude::*};
|
|
use monologue_trees::{debug::*, ui};
|
|
|
|
fn main() {
|
|
App::new()
|
|
.add_plugins((
|
|
DefaultPlugins
|
|
.set(WindowPlugin {
|
|
primary_window: Some(Window {
|
|
title: "Serialization WTF".into(),
|
|
resolution: (640., 480.).into(),
|
|
..default()
|
|
}),
|
|
..default()
|
|
})
|
|
.set(AssetPlugin {
|
|
asset_folder: "assets".into(),
|
|
// Tell the asset server to watch for asset changes on disk:
|
|
watch_for_changes: ChangeWatcher::with_delay(Duration::from_millis(0)),
|
|
..default()
|
|
}),
|
|
DebugInfoPlugin,
|
|
ui::GameUiPlugin { ..default() },
|
|
))
|
|
.register_type::<LevelRoot>()
|
|
.register_type::<Other>()
|
|
.register_type::<Choice>()
|
|
.add_systems(Startup, init)
|
|
.add_systems(Update, serialize_debug.run_if(pending))
|
|
.run();
|
|
}
|
|
|
|
#[derive(Debug, Component, Default, Reflect)]
|
|
#[reflect(Component)]
|
|
struct LevelRoot;
|
|
|
|
#[derive(Debug, Component, Default, Reflect)]
|
|
#[reflect(Component)]
|
|
struct Other {
|
|
inner: String,
|
|
}
|
|
|
|
#[derive(Debug, Component, Default, Reflect)]
|
|
#[reflect(Component)]
|
|
enum Choice {
|
|
#[reflect(default)]
|
|
#[default]
|
|
One,
|
|
Two,
|
|
Three,
|
|
}
|
|
|
|
fn init(mut commands: Commands) {
|
|
commands.spawn((
|
|
SpatialBundle { ..default() },
|
|
LevelRoot::default(),
|
|
Name::new("Root Entity"),
|
|
Other::default(),
|
|
Choice::default(),
|
|
));
|
|
}
|
|
|
|
fn serialize_debug(query: Query<Entity, With<LevelRoot>>, world: &World) {
|
|
let entities = query.iter().collect();
|
|
print!("{}", ser(entities, world));
|
|
}
|
|
|
|
fn pending(query: Query<Entity, With<LevelRoot>>, mut done: Local<bool>) -> bool {
|
|
if !*done {
|
|
if query.iter().len() > 0 {
|
|
*done = true;
|
|
} else {
|
|
*done = false;
|
|
}
|
|
return *done;
|
|
}
|
|
return false;
|
|
}
|
|
|
|
fn ser(entities: Vec<Entity>, world: &World) -> String {
|
|
let app_type_registry = world.resource::<AppTypeRegistry>().clone();
|
|
|
|
let scene = {
|
|
let mut builder = DynamicSceneBuilder::from_world(world.clone());
|
|
builder
|
|
.allow_all_resources()
|
|
.allow_all()
|
|
.deny::<ComputedVisibility>()
|
|
.extract_entities(entities.into_iter());
|
|
builder.build()
|
|
};
|
|
|
|
scene
|
|
.serialize_ron(&app_type_registry)
|
|
.expect("Serialize scene")
|
|
}
|