diff --git a/Assets/VRM10_Samples/ClothSample/RotateParticle/Editor/WarpRootEditor.cs b/Assets/VRM10_Samples/ClothSample/RotateParticle/Editor/WarpRootEditor.cs
index 173c7b57c..604e45713 100644
--- a/Assets/VRM10_Samples/ClothSample/RotateParticle/Editor/WarpRootEditor.cs
+++ b/Assets/VRM10_Samples/ClothSample/RotateParticle/Editor/WarpRootEditor.cs
@@ -51,6 +51,8 @@ namespace RotateParticle.Components
{
var root = new VisualElement();
+ root.TrackSerializedObjectValue(serializedObject, OnValueChanged);
+
root.Bind(serializedObject);
{
@@ -61,25 +63,46 @@ namespace RotateParticle.Components
root.Add(new PropertyField { bindingPath = nameof(WarpRoot.BaseSettings) });
root.Add(new PropertyField { bindingPath = nameof(WarpRoot.Center) });
- root.Add(new PropertyField { bindingPath = nameof(WarpRoot.Particles) });
+ root.Add(new PropertyField { bindingPath = "m_particles" });
+
{
m_treeview = new MultiColumnTreeView();
m_treeview.columns.Add(new Column
{
title = "Transform",
width = 160,
- makeCell = () => new ObjectField(),
+ makeCell = () => new ObjectField
+ {
+ },
bindCell = (v, i) =>
{
v.SetEnabled(false);
- (v as ObjectField).value = m_target.GetParticle(i).Transform;
+ // var prop = serializedObject.FindProperty($"m_particles.Array.data[{i}].Transform");
+ // Debug.Log($"{i} => {prop}");
+ if (v is ObjectField prop)
+ {
+ // prop.bindingPath = $"m_particles.Array.data[{i}].Transform";
+ prop.BindProperty(serializedObject.FindProperty($"m_particles.Array.data[{i}].Transform"));
+ }
},
});
m_treeview.columns.Add(new Column
{
title = "Mode",
width = 60,
- makeCell = () => new EnumField(default(WarpRoot.ParticleMode)),
+ // makeCell = () => new EnumField(default(WarpRoot.ParticleMode)),
+ makeCell = () => new EnumField
+ {
+ // bindingPath = $"m_particles.Array.data[0].Mode",
+ },
+ bindCell = (v, i) =>
+ {
+ if (v is EnumField prop)
+ {
+ prop.bindingPath = $"m_particles.Array.data[{i}].Mode";
+ prop.Bind(serializedObject);
+ }
+ },
});
m_treeview.columns.Add(new Column
{
@@ -110,6 +133,14 @@ namespace RotateParticle.Components
title = "radius",
width = 20,
makeCell = () => new FloatField(),
+ bindCell = (v, i) =>
+ {
+ if (v is FloatField prop)
+ {
+ prop.BindProperty(serializedObject.FindProperty($"m_particles.Array.data[{i}].Settings.radius"));
+ prop.SetEnabled(m_target.Particles[i].Mode == WarpRoot.ParticleMode.Custom);
+ }
+ },
});
m_treeview.autoExpand = true;
@@ -122,8 +153,23 @@ namespace RotateParticle.Components
return root;
}
+ private void OnValueChanged(SerializedObject so)
+ {
+ Debug.Log("Name changed: " + so.targetObject.name);
+ // var nameProperty = so.FindProperty("m_Name");
+
+ // if (nameProperty.stringValue.Contains(" "))
+ // _textField.style.backgroundColor = Color.red;
+ // else
+ // _textField.style.backgroundColor = StyleKeyword.Null;
+ m_treeview.RefreshItems();
+ // m_treeview.SetRootItems(m_target.m_rootitems);
+ Repaint();
+ }
+
public void OnSceneGUI()
{
+ HandleUtility.Repaint();
if (m_treeview == null)
{
return;
@@ -137,6 +183,7 @@ namespace RotateParticle.Components
if (item is WarpRoot.Particle p)
{
+ p = m_target.GetParticleFromTransform(p.Transform);
var t = p.Transform;
Handles.color = Color.green;
Handles.SphereHandleCap(t.GetInstanceID(), t.position, t.rotation, p.Settings.radius * 2, EventType.Repaint);
diff --git a/Assets/VRM10_Samples/ClothSample/RotateParticle/Runtime/Components/WarpRoot.cs b/Assets/VRM10_Samples/ClothSample/RotateParticle/Runtime/Components/WarpRoot.cs
index e35ea9ee1..1904e21b1 100644
--- a/Assets/VRM10_Samples/ClothSample/RotateParticle/Runtime/Components/WarpRoot.cs
+++ b/Assets/VRM10_Samples/ClothSample/RotateParticle/Runtime/Components/WarpRoot.cs
@@ -38,7 +38,7 @@ namespace RotateParticle.Components
///
/// Use specific settings
///
- Override,
+ Custom,
///
/// no animation
///
@@ -63,7 +63,7 @@ namespace RotateParticle.Components
}
public Particle(Transform t, BlittableJointMutable settings)
- : this(t, ParticleMode.Override, settings)
+ : this(t, ParticleMode.Custom, settings)
{
}
@@ -123,7 +123,7 @@ namespace RotateParticle.Components
public List> MakeTree(int id)
{
List> items = new();
- foreach (Transform child_transform in id==-1 ? transform : m_particles[id].Transform)
+ foreach (Transform child_transform in id == -1 ? transform : m_particles[id].Transform)
{
var child_id = m_map[child_transform];
var item = (child_transform.childCount > 0)
@@ -135,11 +135,23 @@ namespace RotateParticle.Components
return items;
}
- public Particle GetParticle(int id)
+ public Particle GetParticleFromId(int id)
{
return m_particles[id];
}
+ public Particle GetParticleFromTransform(Transform t)
+ {
+ foreach (var p in m_particles)
+ {
+ if (p.Transform == t)
+ {
+ return p;
+ }
+ }
+ return default;
+ }
+
public void UseBaseSettings(Transform t)
{
if (t == null) return;
@@ -164,7 +176,7 @@ namespace RotateParticle.Components
var p = m_particles[i];
if (p.Transform == t)
{
- p.Mode = ParticleMode.Override;
+ p.Mode = ParticleMode.Custom;
p.Settings = settings;
m_particles[i] = p;
break;
@@ -172,12 +184,6 @@ namespace RotateParticle.Components
}
}
-
- // internal List ToList()
- // {
- // throw new NotImplementedException();
- // }
-
public void OnDrawGizmosSelected()
{
Gizmos.DrawSphere(transform.position, BaseSettings.radius);
@@ -199,8 +205,7 @@ namespace RotateParticle.Components
bool TryGetClosestParent(Transform t, out Transform parent)
{
- var current = t.parent;
- while (current != null)
+ for (var current = t.parent; current != null; current = current.parent)
{
if (current == transform)
{