mirror of
https://github.com/storytold/storyteller-bevy.git
synced 2026-10-26 08:38:10 +00:00
Save for material (#101)
This commit is contained in:
Generated
+8
-8
@@ -4685,7 +4685,7 @@ dependencies = [
|
|||||||
[[package]]
|
[[package]]
|
||||||
name = "space_bevy_xpbd_plugin"
|
name = "space_bevy_xpbd_plugin"
|
||||||
version = "0.3.1"
|
version = "0.3.1"
|
||||||
source = "git+https://github.com/rewin123/space_editor?rev=ce83f86dc902787ab16213f3209276a784654df6#ce83f86dc902787ab16213f3209276a784654df6"
|
source = "git+https://github.com/rewin123/space_editor?rev=0f2439ba8cd38ebf2db8d90ea6de736992bcb56e#0f2439ba8cd38ebf2db8d90ea6de736992bcb56e"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"bevy",
|
"bevy",
|
||||||
"bevy_xpbd_3d",
|
"bevy_xpbd_3d",
|
||||||
@@ -4695,7 +4695,7 @@ dependencies = [
|
|||||||
[[package]]
|
[[package]]
|
||||||
name = "space_editor"
|
name = "space_editor"
|
||||||
version = "0.3.1"
|
version = "0.3.1"
|
||||||
source = "git+https://github.com/rewin123/space_editor?rev=ce83f86dc902787ab16213f3209276a784654df6#ce83f86dc902787ab16213f3209276a784654df6"
|
source = "git+https://github.com/rewin123/space_editor?rev=0f2439ba8cd38ebf2db8d90ea6de736992bcb56e#0f2439ba8cd38ebf2db8d90ea6de736992bcb56e"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"bevy",
|
"bevy",
|
||||||
"space_bevy_xpbd_plugin",
|
"space_bevy_xpbd_plugin",
|
||||||
@@ -4706,7 +4706,7 @@ dependencies = [
|
|||||||
[[package]]
|
[[package]]
|
||||||
name = "space_editor_core"
|
name = "space_editor_core"
|
||||||
version = "0.3.1"
|
version = "0.3.1"
|
||||||
source = "git+https://github.com/rewin123/space_editor?rev=ce83f86dc902787ab16213f3209276a784654df6#ce83f86dc902787ab16213f3209276a784654df6"
|
source = "git+https://github.com/rewin123/space_editor?rev=0f2439ba8cd38ebf2db8d90ea6de736992bcb56e#0f2439ba8cd38ebf2db8d90ea6de736992bcb56e"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"bevy",
|
"bevy",
|
||||||
"space_persistence",
|
"space_persistence",
|
||||||
@@ -4718,7 +4718,7 @@ dependencies = [
|
|||||||
[[package]]
|
[[package]]
|
||||||
name = "space_editor_ui"
|
name = "space_editor_ui"
|
||||||
version = "0.3.1"
|
version = "0.3.1"
|
||||||
source = "git+https://github.com/rewin123/space_editor?rev=ce83f86dc902787ab16213f3209276a784654df6#ce83f86dc902787ab16213f3209276a784654df6"
|
source = "git+https://github.com/rewin123/space_editor?rev=0f2439ba8cd38ebf2db8d90ea6de736992bcb56e#0f2439ba8cd38ebf2db8d90ea6de736992bcb56e"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"bevy",
|
"bevy",
|
||||||
"bevy_debug_grid",
|
"bevy_debug_grid",
|
||||||
@@ -4739,7 +4739,7 @@ dependencies = [
|
|||||||
[[package]]
|
[[package]]
|
||||||
name = "space_persistence"
|
name = "space_persistence"
|
||||||
version = "0.3.1"
|
version = "0.3.1"
|
||||||
source = "git+https://github.com/rewin123/space_editor?rev=ce83f86dc902787ab16213f3209276a784654df6#ce83f86dc902787ab16213f3209276a784654df6"
|
source = "git+https://github.com/rewin123/space_editor?rev=0f2439ba8cd38ebf2db8d90ea6de736992bcb56e#0f2439ba8cd38ebf2db8d90ea6de736992bcb56e"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"bevy",
|
"bevy",
|
||||||
"ron",
|
"ron",
|
||||||
@@ -4749,7 +4749,7 @@ dependencies = [
|
|||||||
[[package]]
|
[[package]]
|
||||||
name = "space_prefab"
|
name = "space_prefab"
|
||||||
version = "0.3.1"
|
version = "0.3.1"
|
||||||
source = "git+https://github.com/rewin123/space_editor?rev=ce83f86dc902787ab16213f3209276a784654df6#ce83f86dc902787ab16213f3209276a784654df6"
|
source = "git+https://github.com/rewin123/space_editor?rev=0f2439ba8cd38ebf2db8d90ea6de736992bcb56e#0f2439ba8cd38ebf2db8d90ea6de736992bcb56e"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"bevy",
|
"bevy",
|
||||||
"bevy-inspector-egui",
|
"bevy-inspector-egui",
|
||||||
@@ -4763,7 +4763,7 @@ dependencies = [
|
|||||||
[[package]]
|
[[package]]
|
||||||
name = "space_shared"
|
name = "space_shared"
|
||||||
version = "0.3.1"
|
version = "0.3.1"
|
||||||
source = "git+https://github.com/rewin123/space_editor?rev=ce83f86dc902787ab16213f3209276a784654df6#ce83f86dc902787ab16213f3209276a784654df6"
|
source = "git+https://github.com/rewin123/space_editor?rev=0f2439ba8cd38ebf2db8d90ea6de736992bcb56e#0f2439ba8cd38ebf2db8d90ea6de736992bcb56e"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"bevy",
|
"bevy",
|
||||||
"bevy-inspector-egui",
|
"bevy-inspector-egui",
|
||||||
@@ -4773,7 +4773,7 @@ dependencies = [
|
|||||||
[[package]]
|
[[package]]
|
||||||
name = "space_undo"
|
name = "space_undo"
|
||||||
version = "0.3.1"
|
version = "0.3.1"
|
||||||
source = "git+https://github.com/rewin123/space_editor?rev=ce83f86dc902787ab16213f3209276a784654df6#ce83f86dc902787ab16213f3209276a784654df6"
|
source = "git+https://github.com/rewin123/space_editor?rev=0f2439ba8cd38ebf2db8d90ea6de736992bcb56e#0f2439ba8cd38ebf2db8d90ea6de736992bcb56e"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"bevy",
|
"bevy",
|
||||||
"pretty-type-name",
|
"pretty-type-name",
|
||||||
|
|||||||
+1
-1
@@ -46,7 +46,7 @@ futures-lite = "2.2.0"
|
|||||||
futures = "0.3.30"
|
futures = "0.3.30"
|
||||||
image = "0.24.8"
|
image = "0.24.8"
|
||||||
bytemuck = "1.14.1"
|
bytemuck = "1.14.1"
|
||||||
space_editor = {git = "https://github.com/rewin123/space_editor", rev = "ce83f86dc902787ab16213f3209276a784654df6"}
|
space_editor = {git = "https://github.com/rewin123/space_editor", rev = "0f2439ba8cd38ebf2db8d90ea6de736992bcb56e"}
|
||||||
anyhow.workspace = true
|
anyhow.workspace = true
|
||||||
serde_repr = "0.1.18"
|
serde_repr = "0.1.18"
|
||||||
bevy_tweening = "0.9"
|
bevy_tweening = "0.9"
|
||||||
|
|||||||
+52
-12
@@ -1,11 +1,7 @@
|
|||||||
use std::{marker::PhantomData, sync::Arc};
|
use std::{marker::PhantomData, sync::Arc};
|
||||||
|
|
||||||
use bevy::{
|
use bevy::{
|
||||||
ecs::world::unsafe_world_cell::UnsafeWorldCell,
|
ecs::world::unsafe_world_cell::UnsafeWorldCell, prelude::*, reflect::{serde::ReflectSerializer, GetTypeRegistration}, transform::commands, utils::HashMap, window::PrimaryWindow
|
||||||
prelude::*,
|
|
||||||
reflect::{serde::ReflectSerializer, GetTypeRegistration},
|
|
||||||
utils::HashMap,
|
|
||||||
window::PrimaryWindow,
|
|
||||||
};
|
};
|
||||||
use serde::{Deserialize, Serialize};
|
use serde::{Deserialize, Serialize};
|
||||||
use serde_json::{self, json, Map as JsonMap, Value as JsonValue};
|
use serde_json::{self, json, Map as JsonMap, Value as JsonValue};
|
||||||
@@ -14,7 +10,7 @@ use space_editor::{
|
|||||||
editor_tab::{EditorTab, EditorTabName},
|
editor_tab::{EditorTab, EditorTabName},
|
||||||
EditorUiAppExt,
|
EditorUiAppExt,
|
||||||
},
|
},
|
||||||
space_prefab::component::MeshPrimitivePrefab,
|
space_prefab::{component::MeshPrimitivePrefab, editor_registry::EditorRegistryExt, save::SaveState},
|
||||||
};
|
};
|
||||||
use wasm_bindgen::prelude::*;
|
use wasm_bindgen::prelude::*;
|
||||||
|
|
||||||
@@ -66,7 +62,8 @@ impl Plugin for InspectorPlugin {
|
|||||||
|
|
||||||
//register standart material
|
//register standart material
|
||||||
{
|
{
|
||||||
app.register_type::<ShortMaterial>()
|
|
||||||
|
app.editor_registry::<ShortMaterial>()
|
||||||
.add_event::<UpdateInspect<Handle<StandardMaterial>>>()
|
.add_event::<UpdateInspect<Handle<StandardMaterial>>>()
|
||||||
.add_systems(
|
.add_systems(
|
||||||
Update,
|
Update,
|
||||||
@@ -84,6 +81,14 @@ impl Plugin for InspectorPlugin {
|
|||||||
serialize_standart_materal.in_set(InspectorSystem::PerComponentCollect),
|
serialize_standart_materal.in_set(InspectorSystem::PerComponentCollect),
|
||||||
);
|
);
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
app.add_systems(
|
||||||
|
OnEnter(SaveState::Save),
|
||||||
|
(create_short_materials, apply_deferred).chain().before(space_editor::space_prefab::sub_scene::prepare_auto_scene)
|
||||||
|
);
|
||||||
|
app.add_systems(PostUpdate, apply_short_materials);
|
||||||
|
|
||||||
app.world.resource_mut::<InspectGetters>().getters.insert(
|
app.world.resource_mut::<InspectGetters>().getters.insert(
|
||||||
StandardMaterial::get_type_registration()
|
StandardMaterial::get_type_registration()
|
||||||
.type_info()
|
.type_info()
|
||||||
@@ -118,6 +123,40 @@ impl Plugin for InspectorPlugin {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
fn create_short_materials(
|
||||||
|
mut commands : Commands,
|
||||||
|
q_mats: Query<(Entity, &Handle<StandardMaterial>)>,
|
||||||
|
materials: Res<Assets<StandardMaterial>>,
|
||||||
|
) {
|
||||||
|
for (entity, handle) in q_mats.iter() {
|
||||||
|
if let Some(material) = materials.get(handle) {
|
||||||
|
commands.entity(entity).insert(ShortMaterial::new(material));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
fn apply_short_materials(
|
||||||
|
mut commands : Commands,
|
||||||
|
q_mats: Query<(Entity, &Handle<StandardMaterial>, &ShortMaterial)>,
|
||||||
|
mut materials: ResMut<Assets<StandardMaterial>>,)
|
||||||
|
{
|
||||||
|
for (entity, handle, short) in q_mats.iter() {
|
||||||
|
let Some(mut material) = materials.get_mut(handle) else {
|
||||||
|
continue;
|
||||||
|
};
|
||||||
|
|
||||||
|
material.base_color = short.base_color;
|
||||||
|
material.perceptual_roughness = short.perceptual_roughness;
|
||||||
|
material.metallic = short.metallic;
|
||||||
|
material.reflectance = short.reflectance;
|
||||||
|
|
||||||
|
commands.entity(entity).remove::<ShortMaterial>();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
#[derive(Resource, Default)]
|
#[derive(Resource, Default)]
|
||||||
struct InspectGetters {
|
struct InspectGetters {
|
||||||
getters: HashMap<
|
getters: HashMap<
|
||||||
@@ -538,8 +577,8 @@ fn auto_serialize_asset<T: Asset + Reflect + GetTypeRegistration>(
|
|||||||
ev_update_description.send(UpdateEntityDescription);
|
ev_update_description.send(UpdateEntityDescription);
|
||||||
}
|
}
|
||||||
|
|
||||||
#[derive(Reflect, Default)]
|
#[derive(Reflect, Default, Clone, Component)]
|
||||||
#[reflect(Default)]
|
#[reflect(Default, Component)]
|
||||||
struct ShortMaterial {
|
struct ShortMaterial {
|
||||||
pub base_color: Color,
|
pub base_color: Color,
|
||||||
pub perceptual_roughness: f32,
|
pub perceptual_roughness: f32,
|
||||||
@@ -558,6 +597,7 @@ impl ShortMaterial {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
fn serialize_standart_materal(
|
fn serialize_standart_materal(
|
||||||
r_selection: Option<Res<Selection>>,
|
r_selection: Option<Res<Selection>>,
|
||||||
q_m: Query<&Handle<StandardMaterial>>,
|
q_m: Query<&Handle<StandardMaterial>>,
|
||||||
@@ -574,12 +614,12 @@ fn serialize_standart_materal(
|
|||||||
|
|
||||||
ev_inspect.clear();
|
ev_inspect.clear();
|
||||||
|
|
||||||
if let Some(handle) = r_selection
|
if let Some((target, handle)) = r_selection
|
||||||
.as_ref()
|
.as_ref()
|
||||||
.and_then(|selection| find_handle_in_self_or_children(***selection, &q_children, &q_m))
|
.and_then(|selection| find_handle_in_self_or_children(***selection, &q_children, &q_m))
|
||||||
.and_then(|target| q_m.get(target).ok())
|
.and_then(|target| q_m.get(target).ok().map(|h| (target, h.clone())))
|
||||||
{
|
{
|
||||||
if let Some(material) = assets.get(handle) {
|
if let Some(material) = assets.get(handle.clone()) {
|
||||||
let registry = registry.read();
|
let registry = registry.read();
|
||||||
let short_material = ShortMaterial::new(material);
|
let short_material = ShortMaterial::new(material);
|
||||||
let json =
|
let json =
|
||||||
|
|||||||
Reference in New Issue
Block a user