Upload project files
This commit is contained in:
8
Editor/Cloner/View/Cloner.meta
Normal file
8
Editor/Cloner/View/Cloner.meta
Normal file
@@ -0,0 +1,8 @@
|
||||
fileFormatVersion: 2
|
||||
guid: 0bb22a0fe49ab4c4a90e0ac8db4ae56f
|
||||
folderAsset: yes
|
||||
DefaultImporter:
|
||||
externalObjects: {}
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
||||
112
Editor/Cloner/View/Cloner/ClonerEditor.cs
Normal file
112
Editor/Cloner/View/Cloner/ClonerEditor.cs
Normal file
@@ -0,0 +1,112 @@
|
||||
using Misaki.ArtTool;
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using UnityEditor;
|
||||
using UnityEditor.UIElements;
|
||||
using UnityEngine;
|
||||
using UnityEngine.UIElements;
|
||||
|
||||
namespace Misaki.ArtToolEditor
|
||||
{
|
||||
[CustomEditor(typeof(Cloner))]
|
||||
public class ClonerEditor : Editor
|
||||
{
|
||||
[SerializeField]
|
||||
private VisualTreeAsset visualTreeAsset = default;
|
||||
|
||||
private Cloner dataSource;
|
||||
|
||||
private void OnEnable()
|
||||
{
|
||||
dataSource = target as Cloner;
|
||||
}
|
||||
|
||||
public override VisualElement CreateInspectorGUI()
|
||||
{
|
||||
var root = new VisualElement();
|
||||
|
||||
var visualAsset = visualTreeAsset.Instantiate();
|
||||
visualAsset.dataSource = dataSource;
|
||||
|
||||
var effectorListView = visualAsset.Q<ListView>("effectors-listview");
|
||||
//effectorListView.itemsAdded += EffectorListView_itemsAdded;
|
||||
effectorListView.itemsRemoved += EffectorListView_itemsRemoved;
|
||||
effectorListView.Q<ObjectField>().RegisterValueChangedCallback(e =>
|
||||
{
|
||||
if (e.newValue is EffectorBase effector)
|
||||
{
|
||||
effector.propertyChanged += dataSource.OnPropertyChanged;
|
||||
}
|
||||
else if (e.previousValue is EffectorBase oldEffector)
|
||||
{
|
||||
oldEffector.propertyChanged -= dataSource.OnPropertyChanged;
|
||||
}
|
||||
});
|
||||
|
||||
visualAsset.Q<Button>("generate-button").clicked += () =>
|
||||
{
|
||||
dataSource.GeneratePoints();
|
||||
};
|
||||
|
||||
visualAsset.Q<Button>("instantiate-button").clicked += () =>
|
||||
{
|
||||
dataSource.InstantiateGameObjectOnPoints();
|
||||
};
|
||||
|
||||
visualAsset.Q<Button>("clear-button").clicked += () =>
|
||||
{
|
||||
dataSource.Clear();
|
||||
};
|
||||
|
||||
var renderModeDropdown = visualAsset.Q<DropdownField>("render-mode-dropdown");
|
||||
renderModeDropdown.RegisterValueChangedCallback(e =>
|
||||
{
|
||||
if (renderModeDropdown.index == Convert.ToInt32(dataSource.isRenderInstancing))
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
dataSource.Clear(false, true);
|
||||
});
|
||||
|
||||
root.Add(visualAsset);
|
||||
|
||||
root.TrackSerializedObjectValue(serializedObject, OnValueChanged);
|
||||
|
||||
return root;
|
||||
}
|
||||
|
||||
private void OnValueChanged(SerializedObject serializedObject)
|
||||
{
|
||||
var cloner = serializedObject.targetObject as Cloner;
|
||||
|
||||
if (cloner.autoGenerate)
|
||||
{
|
||||
cloner.GeneratePoints();
|
||||
cloner.InstantiateGameObjectOnPoints();
|
||||
}
|
||||
}
|
||||
|
||||
//private void EffectorListView_itemsAdded(IEnumerable<int> items)
|
||||
//{
|
||||
// foreach (var index in items)
|
||||
// {
|
||||
// dataSource.effectors[index].effector.propertyChanged += dataSource.OnPropertyChanged;
|
||||
// }
|
||||
//}
|
||||
|
||||
private void EffectorListView_itemsRemoved(IEnumerable<int> items)
|
||||
{
|
||||
foreach (var index in items)
|
||||
{
|
||||
var effector = dataSource.effectors[index].effector;
|
||||
if (effector == null)
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
effector.propertyChanged -= dataSource.OnPropertyChanged;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
13
Editor/Cloner/View/Cloner/ClonerEditor.cs.meta
Normal file
13
Editor/Cloner/View/Cloner/ClonerEditor.cs.meta
Normal file
@@ -0,0 +1,13 @@
|
||||
fileFormatVersion: 2
|
||||
guid: 6364cd8b79a48ff46945173d68fc9c0b
|
||||
MonoImporter:
|
||||
externalObjects: {}
|
||||
serializedVersion: 2
|
||||
defaultReferences:
|
||||
- visualTreeAsset: {fileID: 9197481963319205126, guid: b50bdd76b3da1304680078fd04b276c5,
|
||||
type: 3}
|
||||
executionOrder: 0
|
||||
icon: {instanceID: 0}
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
||||
84
Editor/Cloner/View/Cloner/ClonerView.uxml
Normal file
84
Editor/Cloner/View/Cloner/ClonerView.uxml
Normal file
@@ -0,0 +1,84 @@
|
||||
<engine:UXML xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:engine="UnityEngine.UIElements" xmlns:editor="UnityEditor.UIElements" noNamespaceSchemaLocation="../../../../UIElementsSchema/UIElements.xsd" editor-extension-mode="True">
|
||||
<Style src="project://database/Packages/com.misaki.art-tools/Editor/Cloner/View/ClonerEditorStyle.uss?fileID=7433441132597879392&guid=216b892cd94cc624da01dc4947facdcb&type=3#ClonerEditorStyle" />
|
||||
<engine:VisualElement data-source-type="Misaki.ArtTool.Cloner, Misaki.ArtTool" style="flex-grow: 1;">
|
||||
<engine:VisualElement>
|
||||
<engine:Label text="Input Objects" class="SubHeader" />
|
||||
<engine:VisualElement class="PropertyContainer">
|
||||
<engine:VisualElement style="flex-grow: 1; flex-direction: row; margin-top: 4px; margin-right: 4px; margin-bottom: 8px; margin-left: 4px;">
|
||||
<engine:Label text="Object" enable-rich-text="false" style="flex-grow: 1; margin-left: 28px; font-size: 9px; -unity-text-align: middle-left;" />
|
||||
<engine:Label text="Frequncy" enable-rich-text="false" name="Label" style="width: 50px; font-size: 9px; -unity-text-align: middle-left;" />
|
||||
</engine:VisualElement>
|
||||
<engine:ListView reorderable="true" reorder-mode="Animated" show-border="true" show-add-remove-footer="true" item-template="project://database/Packages/com.misaki.art-tools/Editor/Cloner/InputObjectItemView.uxml?fileID=9197481963319205126&guid=af925948194d82c44a565c55d8ce0de8&type=3#InputObjectItemView" name="input-objects-listview" binding-source-selection-mode="AutoAssign">
|
||||
<Bindings>
|
||||
<engine:DataBinding property="itemsSource" data-source-path="inputObjects" binding-mode="TwoWay" />
|
||||
</Bindings>
|
||||
</engine:ListView>
|
||||
</engine:VisualElement>
|
||||
</engine:VisualElement>
|
||||
<engine:VisualElement style="flex-grow: 0;">
|
||||
<engine:Label text="Cloner" class="SubHeader" />
|
||||
<engine:VisualElement class="PropertyContainer" style="flex-grow: 0;">
|
||||
<engine:EnumField label="Distribution Mode" value="Grid" type="Misaki.ArtTool.DistributionMode, Misaki.ArtTool" name="distribution-mode">
|
||||
<Bindings>
|
||||
<engine:DataBinding property="value" data-source-path="distributionMode" binding-mode="TwoWay" />
|
||||
</Bindings>
|
||||
</engine:EnumField>
|
||||
<engine:DropdownField label="Clone Mode" index="0" choices="Iterate,Random" tooltip="Need to regenerate the points when changing the clone mode">
|
||||
<Bindings>
|
||||
<engine:DataBinding property="index" data-source-path="isRandomDistribution" binding-mode="TwoWay" />
|
||||
</Bindings>
|
||||
</engine:DropdownField>
|
||||
<engine:UnsignedIntegerField label="Seed" value="123456" tooltip="Need to regenerate the points to let seed work properly">
|
||||
<Bindings>
|
||||
<engine:DataBinding property="value" data-source-path="seed" binding-mode="TwoWay" />
|
||||
<engine:DataBinding property="style.display" data-source-path="isRandomDistribution" binding-mode="ToTarget" source-to-ui-converters="BoolToDisplayConvertor" />
|
||||
</Bindings>
|
||||
</engine:UnsignedIntegerField>
|
||||
<engine:DropdownField label="Auto Generate" choices="Disable,Enable" index="0">
|
||||
<Bindings>
|
||||
<engine:DataBinding property="index" data-source-path="autoGenerate" binding-mode="TwoWay" />
|
||||
</Bindings>
|
||||
</engine:DropdownField>
|
||||
<engine:DropdownField label="Render Mode" choices="Gameobject,Instancing" index="0" name="render-mode-dropdown">
|
||||
<Bindings>
|
||||
<engine:DataBinding property="index" data-source-path="isRenderInstancing" binding-mode="TwoWay" />
|
||||
</Bindings>
|
||||
</engine:DropdownField>
|
||||
</engine:VisualElement>
|
||||
</engine:VisualElement>
|
||||
<engine:VisualElement style="flex-grow: 0;">
|
||||
<engine:Label text="Parameter" class="SubHeader" />
|
||||
<engine:VisualElement class="PropertyContainer" style="flex-grow: 0;">
|
||||
<editor:PropertyField name="spline-parameter-property" binding-path="splineDistributionSetting" />
|
||||
<editor:PropertyField name="linear-parameter-property" binding-path="linearDistributionSetting" />
|
||||
<editor:PropertyField name="grid-parameter-property" binding-path="gridDistributionSetting" />
|
||||
</engine:VisualElement>
|
||||
</engine:VisualElement>
|
||||
<engine:VisualElement>
|
||||
<engine:Label text="Effectors" class="SubHeader" />
|
||||
<engine:VisualElement class="PropertyContainer">
|
||||
<engine:ListView reorderable="true" reorder-mode="Animated" show-border="true" show-add-remove-footer="true" item-template="project://database/Packages/com.misaki.art-tools/Editor/Cloner/EffectorItemTemplate.uxml?fileID=9197481963319205126&guid=9a72cc6a25b7e104991d25d5c2458b81&type=3#EffectorItemTemplate" name="effectors-listview" binding-source-selection-mode="AutoAssign">
|
||||
<Bindings>
|
||||
<engine:DataBinding property="itemsSource" data-source-path="effectors" binding-mode="TwoWay" />
|
||||
</Bindings>
|
||||
</engine:ListView>
|
||||
</engine:VisualElement>
|
||||
</engine:VisualElement>
|
||||
<engine:VisualElement style="flex-grow: 0;">
|
||||
<engine:Label text="Debug" class="SubHeader" />
|
||||
<engine:VisualElement class="PropertyContainer" style="flex-grow: 0;">
|
||||
<engine:EnumField label="Debug Mode" value="Center" type="Misaki.ArtTool.DebugMode, Misaki.ArtTool">
|
||||
<Bindings>
|
||||
<engine:DataBinding property="value" data-source-path="debugMode" binding-mode="TwoWay" />
|
||||
</Bindings>
|
||||
</engine:EnumField>
|
||||
</engine:VisualElement>
|
||||
</engine:VisualElement>
|
||||
<engine:VisualElement>
|
||||
<engine:Label text="Command" class="SubHeader" />
|
||||
<engine:Button text="Generate Points" name="generate-button" />
|
||||
<engine:Button text="Instantiate GameObject" name="instantiate-button" />
|
||||
<engine:Button text="Clear" name="clear-button" />
|
||||
</engine:VisualElement>
|
||||
</engine:VisualElement>
|
||||
</engine:UXML>
|
||||
10
Editor/Cloner/View/Cloner/ClonerView.uxml.meta
Normal file
10
Editor/Cloner/View/Cloner/ClonerView.uxml.meta
Normal file
@@ -0,0 +1,10 @@
|
||||
fileFormatVersion: 2
|
||||
guid: b50bdd76b3da1304680078fd04b276c5
|
||||
ScriptedImporter:
|
||||
internalIDToNameTable: []
|
||||
externalObjects: {}
|
||||
serializedVersion: 2
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
||||
script: {fileID: 13804, guid: 0000000000000000e000000000000000, type: 0}
|
||||
24
Editor/Cloner/View/ClonerEditorStyle.uss
Normal file
24
Editor/Cloner/View/ClonerEditorStyle.uss
Normal file
@@ -0,0 +1,24 @@
|
||||
.SubHeader {
|
||||
margin-bottom: 6px;
|
||||
-unity-font-style: bold;
|
||||
font-size: 12px;
|
||||
margin-top: 8px;
|
||||
}
|
||||
|
||||
.PropertyContainer {
|
||||
flex-grow: 0;
|
||||
margin-left: 8px;
|
||||
}
|
||||
|
||||
.Header {
|
||||
-unity-font-style: bold;
|
||||
margin-top: 16px;
|
||||
margin-bottom: 12px;
|
||||
font-size: 14px;
|
||||
}
|
||||
|
||||
.SmallHeader {
|
||||
margin-top: 6px;
|
||||
margin-bottom: 4px;
|
||||
-unity-font-style: bold;
|
||||
}
|
||||
11
Editor/Cloner/View/ClonerEditorStyle.uss.meta
Normal file
11
Editor/Cloner/View/ClonerEditorStyle.uss.meta
Normal file
@@ -0,0 +1,11 @@
|
||||
fileFormatVersion: 2
|
||||
guid: 216b892cd94cc624da01dc4947facdcb
|
||||
ScriptedImporter:
|
||||
internalIDToNameTable: []
|
||||
externalObjects: {}
|
||||
serializedVersion: 2
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
||||
script: {fileID: 12385, guid: 0000000000000000e000000000000000, type: 0}
|
||||
disableValidation: 0
|
||||
8
Editor/Cloner/View/Effector.meta
Normal file
8
Editor/Cloner/View/Effector.meta
Normal file
@@ -0,0 +1,8 @@
|
||||
fileFormatVersion: 2
|
||||
guid: 65c7ef21c95f0e54987af0a7d0d93a3c
|
||||
folderAsset: yes
|
||||
DefaultImporter:
|
||||
externalObjects: {}
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
||||
34
Editor/Cloner/View/Effector/PlainEffectorEditor.cs
Normal file
34
Editor/Cloner/View/Effector/PlainEffectorEditor.cs
Normal file
@@ -0,0 +1,34 @@
|
||||
using Misaki.ArtTool;
|
||||
using UnityEditor;
|
||||
using UnityEditor.UIElements;
|
||||
using UnityEngine;
|
||||
using UnityEngine.UIElements;
|
||||
|
||||
namespace Misaki.ArtToolEditor
|
||||
{
|
||||
[CustomEditor(typeof(PlainEffector))]
|
||||
public class PlainEffectorEditor : Editor
|
||||
{
|
||||
[SerializeField]
|
||||
private VisualTreeAsset visualTreeAsset = default;
|
||||
|
||||
public override VisualElement CreateInspectorGUI()
|
||||
{
|
||||
var root = new VisualElement();
|
||||
|
||||
var visualAsset = visualTreeAsset.Instantiate();
|
||||
visualAsset.dataSource = serializedObject.targetObject;
|
||||
|
||||
root.Add(visualAsset);
|
||||
root.TrackSerializedObjectValue(serializedObject, OnValueChanged);
|
||||
|
||||
return root;
|
||||
}
|
||||
|
||||
private void OnValueChanged(SerializedObject serializedObject)
|
||||
{
|
||||
var plainEffector = serializedObject.targetObject as PlainEffector;
|
||||
plainEffector.propertyChanged.Invoke(plainEffector, null);
|
||||
}
|
||||
}
|
||||
}
|
||||
13
Editor/Cloner/View/Effector/PlainEffectorEditor.cs.meta
Normal file
13
Editor/Cloner/View/Effector/PlainEffectorEditor.cs.meta
Normal file
@@ -0,0 +1,13 @@
|
||||
fileFormatVersion: 2
|
||||
guid: caa823f123cfb7349a1e8a1529978383
|
||||
MonoImporter:
|
||||
externalObjects: {}
|
||||
serializedVersion: 2
|
||||
defaultReferences:
|
||||
- visualTreeAsset: {fileID: 9197481963319205126, guid: 5b5f086164d34b04d88b57abdb546075,
|
||||
type: 3}
|
||||
executionOrder: 0
|
||||
icon: {instanceID: 0}
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
||||
102
Editor/Cloner/View/Effector/PlainEffectorView.uxml
Normal file
102
Editor/Cloner/View/Effector/PlainEffectorView.uxml
Normal file
@@ -0,0 +1,102 @@
|
||||
<engine:UXML xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:engine="UnityEngine.UIElements" xmlns:editor="UnityEditor.UIElements" noNamespaceSchemaLocation="../../../../../UIElementsSchema/UIElements.xsd" editor-extension-mode="True">
|
||||
<Style src="project://database/Packages/com.misaki.art-tools/Editor/Cloner/View/ClonerEditorStyle.uss?fileID=7433441132597879392&guid=216b892cd94cc624da01dc4947facdcb&type=3#ClonerEditorStyle" />
|
||||
<engine:VisualElement data-source-type="Misaki.ArtTool.PlainEffector, Misaki.ArtTool" style="flex-grow: 1;">
|
||||
<engine:VisualElement>
|
||||
<engine:Label text="Effector" class="SubHeader" />
|
||||
<engine:VisualElement class="PropertyContainer">
|
||||
<engine:Slider label="Strength" value="42" high-value="1" fill="true" show-input-field="true">
|
||||
<Bindings>
|
||||
<engine:DataBinding property="value" data-source-path="strength" binding-mode="TwoWay" />
|
||||
</Bindings>
|
||||
</engine:Slider>
|
||||
</engine:VisualElement>
|
||||
</engine:VisualElement>
|
||||
<engine:VisualElement>
|
||||
<engine:Label text="Parameter" class="SubHeader" />
|
||||
<engine:VisualElement class="PropertyContainer">
|
||||
<engine:EnumField label="Transform Space" value="Center" type="Misaki.ArtTool.TransformSpace, Misaki.ArtTool">
|
||||
<Bindings>
|
||||
<engine:DataBinding property="value" data-source-path="transformSpace" binding-mode="TwoWay" />
|
||||
</Bindings>
|
||||
</engine:EnumField>
|
||||
<engine:DropdownField label="Position" choices="Disable,Enable" index="0" class="SmallHeader">
|
||||
<Bindings>
|
||||
<engine:DataBinding property="index" data-source-path="isEnablePosition" binding-mode="TwoWay" />
|
||||
</Bindings>
|
||||
</engine:DropdownField>
|
||||
<engine:VisualElement class="PropertyContainer" style="flex-grow: 1;">
|
||||
<engine:Vector3Field label="Position Offset">
|
||||
<Bindings>
|
||||
<engine:DataBinding property="value" data-source-path="position" binding-mode="TwoWay" source-to-ui-converters="Float3ToVector3Converter" ui-to-source-converters="Float3ToVector3Converter" />
|
||||
</Bindings>
|
||||
</engine:Vector3Field>
|
||||
<Bindings>
|
||||
<engine:DataBinding property="style.display" data-source-path="isEnablePosition" binding-mode="ToTarget" source-to-ui-converters="BoolToDisplayConvertor" />
|
||||
</Bindings>
|
||||
</engine:VisualElement>
|
||||
<engine:DropdownField label="Rotation" choices="Disable,Enable" index="0" class="SmallHeader">
|
||||
<Bindings>
|
||||
<engine:DataBinding property="index" data-source-path="isEnableRotation" binding-mode="TwoWay" />
|
||||
</Bindings>
|
||||
</engine:DropdownField>
|
||||
<engine:VisualElement class="PropertyContainer" style="flex-grow: 1;">
|
||||
<engine:Vector3Field label="Rotation Offset">
|
||||
<Bindings>
|
||||
<engine:DataBinding property="value" data-source-path="rotation" binding-mode="TwoWay" source-to-ui-converters="Float3ToVector3Converter" ui-to-source-converters="Float3ToVector3Converter" />
|
||||
</Bindings>
|
||||
</engine:Vector3Field>
|
||||
<Bindings>
|
||||
<engine:DataBinding property="style.display" data-source-path="isEnableRotation" binding-mode="ToTarget" source-to-ui-converters="BoolToDisplayConvertor" />
|
||||
</Bindings>
|
||||
</engine:VisualElement>
|
||||
<engine:DropdownField label="Scale" choices="Disable,Enable" index="0" class="SmallHeader">
|
||||
<Bindings>
|
||||
<engine:DataBinding property="index" data-source-path="isEnableScale" binding-mode="TwoWay" />
|
||||
</Bindings>
|
||||
</engine:DropdownField>
|
||||
<engine:VisualElement class="PropertyContainer" style="flex-grow: 1;">
|
||||
<engine:DropdownField label="Absolute Scale" choices="Disable,Enable" index="0">
|
||||
<Bindings>
|
||||
<engine:DataBinding property="index" data-source-path="isAbsoluteScale" binding-mode="TwoWay" />
|
||||
</Bindings>
|
||||
</engine:DropdownField>
|
||||
<engine:DropdownField label="Uniform Scale" choices="Disable,Enable" index="1">
|
||||
<Bindings>
|
||||
<engine:DataBinding property="index" data-source-path="isUniformScale" binding-mode="TwoWay" />
|
||||
</Bindings>
|
||||
</engine:DropdownField>
|
||||
<engine:Vector3Field label="Scale Offset" value="1,1,1">
|
||||
<Bindings>
|
||||
<engine:DataBinding property="value" data-source-path="scale" binding-mode="TwoWay" source-to-ui-converters="Float3ToVector3Converter" ui-to-source-converters="Float3ToVector3Converter" />
|
||||
<engine:DataBinding property="style.display" data-source-path="isUniformScale" binding-mode="ToTarget" source-to-ui-converters="InverseBoolToDisplayConverter" />
|
||||
</Bindings>
|
||||
</engine:Vector3Field>
|
||||
<engine:FloatField label="Scale Offset" value="1">
|
||||
<Bindings>
|
||||
<engine:DataBinding property="value" data-source-path="uniformScale" binding-mode="TwoWay" />
|
||||
<engine:DataBinding property="style.display" data-source-path="isUniformScale" binding-mode="ToTarget" source-to-ui-converters="BoolToDisplayConvertor" />
|
||||
</Bindings>
|
||||
</engine:FloatField>
|
||||
<Bindings>
|
||||
<engine:DataBinding property="style.display" data-source-path="isEnableScale" binding-mode="ToTarget" source-to-ui-converters="BoolToDisplayConvertor" />
|
||||
</Bindings>
|
||||
</engine:VisualElement>
|
||||
</engine:VisualElement>
|
||||
</engine:VisualElement>
|
||||
<engine:VisualElement>
|
||||
<engine:Label text="Fields" class="SubHeader" />
|
||||
<engine:VisualElement class="PropertyContainer" style="flex-grow: 1;">
|
||||
<engine:VisualElement style="flex-grow: 1; flex-direction: row; margin-top: 4px; margin-right: 4px; margin-bottom: 8px; margin-left: 4px;">
|
||||
<engine:Label text="Enable" enable-rich-text="false" style="font-size: 9px; -unity-text-align: middle-left; margin-left: 4px;" />
|
||||
<engine:Label text="Field" enable-rich-text="false" style="flex-grow: 1; margin-left: 12px; font-size: 9px; -unity-text-align: middle-left;" />
|
||||
<engine:Label text="Blending" enable-rich-text="false" style="width: 100px; font-size: 9px; -unity-text-align: middle-left;" />
|
||||
</engine:VisualElement>
|
||||
<engine:ListView reorderable="true" reorder-mode="Animated" binding-source-selection-mode="AutoAssign" show-add-remove-footer="true" show-border="true" item-template="project://database/Packages/com.misaki.art-tools/Editor/Cloner/View/ItemTemplate/FieldItemTemplate.uxml?fileID=9197481963319205126&guid=d432ee1ae85c33d4abf54b61fc8a45f5&type=3#FieldItemTemplate" fixed-item-height="45">
|
||||
<Bindings>
|
||||
<engine:DataBinding property="itemsSource" data-source-path="fieldDataList" binding-mode="TwoWay" />
|
||||
</Bindings>
|
||||
</engine:ListView>
|
||||
</engine:VisualElement>
|
||||
</engine:VisualElement>
|
||||
</engine:VisualElement>
|
||||
</engine:UXML>
|
||||
10
Editor/Cloner/View/Effector/PlainEffectorView.uxml.meta
Normal file
10
Editor/Cloner/View/Effector/PlainEffectorView.uxml.meta
Normal file
@@ -0,0 +1,10 @@
|
||||
fileFormatVersion: 2
|
||||
guid: 5b5f086164d34b04d88b57abdb546075
|
||||
ScriptedImporter:
|
||||
internalIDToNameTable: []
|
||||
externalObjects: {}
|
||||
serializedVersion: 2
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
||||
script: {fileID: 13804, guid: 0000000000000000e000000000000000, type: 0}
|
||||
34
Editor/Cloner/View/Effector/PushApartEffectorEditor.cs
Normal file
34
Editor/Cloner/View/Effector/PushApartEffectorEditor.cs
Normal file
@@ -0,0 +1,34 @@
|
||||
using Misaki.ArtTool;
|
||||
using UnityEditor;
|
||||
using UnityEditor.UIElements;
|
||||
using UnityEngine;
|
||||
using UnityEngine.UIElements;
|
||||
|
||||
namespace Misaki.ArtToolEditor
|
||||
{
|
||||
[CustomEditor(typeof(PushApartEffector))]
|
||||
public class PushApartEffectorEditor : Editor
|
||||
{
|
||||
[SerializeField]
|
||||
private VisualTreeAsset visualTreeAsset = default;
|
||||
|
||||
public override VisualElement CreateInspectorGUI()
|
||||
{
|
||||
var root = new VisualElement();
|
||||
|
||||
var visualAsset = visualTreeAsset.Instantiate();
|
||||
visualAsset.dataSource = serializedObject.targetObject;
|
||||
|
||||
root.Add(visualAsset);
|
||||
root.TrackSerializedObjectValue(serializedObject, OnValueChanged);
|
||||
|
||||
return root;
|
||||
}
|
||||
|
||||
private void OnValueChanged(SerializedObject serializedObject)
|
||||
{
|
||||
var plainEffector = serializedObject.targetObject as PushApartEffector;
|
||||
plainEffector.propertyChanged.Invoke(plainEffector, null);
|
||||
}
|
||||
}
|
||||
}
|
||||
13
Editor/Cloner/View/Effector/PushApartEffectorEditor.cs.meta
Normal file
13
Editor/Cloner/View/Effector/PushApartEffectorEditor.cs.meta
Normal file
@@ -0,0 +1,13 @@
|
||||
fileFormatVersion: 2
|
||||
guid: 4e65222f2c1f48f47b95e703d8e55bae
|
||||
MonoImporter:
|
||||
externalObjects: {}
|
||||
serializedVersion: 2
|
||||
defaultReferences:
|
||||
- visualTreeAsset: {fileID: 9197481963319205126, guid: 03bc880fcc4c82046a75cd81290cd1bd,
|
||||
type: 3}
|
||||
executionOrder: 0
|
||||
icon: {instanceID: 0}
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
||||
45
Editor/Cloner/View/Effector/PushApartEffectorView.uxml
Normal file
45
Editor/Cloner/View/Effector/PushApartEffectorView.uxml
Normal file
@@ -0,0 +1,45 @@
|
||||
<engine:UXML xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:engine="UnityEngine.UIElements" xmlns:editor="UnityEditor.UIElements" noNamespaceSchemaLocation="../../../../../UIElementsSchema/UIElements.xsd" editor-extension-mode="True">
|
||||
<Style src="project://database/Packages/com.misaki.art-tools/Editor/Cloner/View/ClonerEditorStyle.uss?fileID=7433441132597879392&guid=216b892cd94cc624da01dc4947facdcb&type=3#ClonerEditorStyle" />
|
||||
<engine:VisualElement data-source-type="Misaki.ArtTool.PushApartEffector, Misaki.ArtTool" style="flex-grow: 1;">
|
||||
<engine:VisualElement>
|
||||
<engine:Label text="Effector" class="SubHeader" />
|
||||
<engine:VisualElement class="PropertyContainer">
|
||||
<engine:Slider label="Strength" value="42" high-value="1" fill="true" show-input-field="true">
|
||||
<Bindings>
|
||||
<engine:DataBinding property="value" data-source-path="strength" binding-mode="TwoWay" />
|
||||
</Bindings>
|
||||
</engine:Slider>
|
||||
</engine:VisualElement>
|
||||
</engine:VisualElement>
|
||||
<engine:VisualElement>
|
||||
<engine:Label text="Parameter" class="SubHeader" />
|
||||
<engine:VisualElement class="PropertyContainer">
|
||||
<engine:FloatField label="Radius" value="1">
|
||||
<Bindings>
|
||||
<engine:DataBinding property="value" data-source-path="radius" binding-mode="TwoWay" />
|
||||
</Bindings>
|
||||
</engine:FloatField>
|
||||
<engine:UnsignedIntegerField label="Iteration" value="10">
|
||||
<Bindings>
|
||||
<engine:DataBinding property="value" data-source-path="iteration" binding-mode="TwoWay" />
|
||||
</Bindings>
|
||||
</engine:UnsignedIntegerField>
|
||||
</engine:VisualElement>
|
||||
</engine:VisualElement>
|
||||
<engine:VisualElement>
|
||||
<engine:Label text="Fields" class="SubHeader" />
|
||||
<engine:VisualElement class="PropertyContainer" style="flex-grow: 1;">
|
||||
<engine:VisualElement style="flex-grow: 1; flex-direction: row; margin-top: 4px; margin-right: 4px; margin-bottom: 8px; margin-left: 4px;">
|
||||
<engine:Label text="Enable" enable-rich-text="false" style="font-size: 9px; -unity-text-align: middle-left; margin-left: 4px;" />
|
||||
<engine:Label text="Field" enable-rich-text="false" style="flex-grow: 1; margin-left: 12px; font-size: 9px; -unity-text-align: middle-left;" />
|
||||
<engine:Label text="Blending" enable-rich-text="false" style="width: 100px; font-size: 9px; -unity-text-align: middle-left;" />
|
||||
</engine:VisualElement>
|
||||
<engine:ListView reorderable="true" reorder-mode="Animated" binding-source-selection-mode="AutoAssign" show-add-remove-footer="true" show-border="true" item-template="project://database/Packages/com.misaki.art-tools/Editor/Cloner/View/ItemTemplate/FieldItemTemplate.uxml?fileID=9197481963319205126&guid=d432ee1ae85c33d4abf54b61fc8a45f5&type=3#FieldItemTemplate" fixed-item-height="45">
|
||||
<Bindings>
|
||||
<engine:DataBinding property="itemsSource" data-source-path="fieldDataList" binding-mode="TwoWay" />
|
||||
</Bindings>
|
||||
</engine:ListView>
|
||||
</engine:VisualElement>
|
||||
</engine:VisualElement>
|
||||
</engine:VisualElement>
|
||||
</engine:UXML>
|
||||
10
Editor/Cloner/View/Effector/PushApartEffectorView.uxml.meta
Normal file
10
Editor/Cloner/View/Effector/PushApartEffectorView.uxml.meta
Normal file
@@ -0,0 +1,10 @@
|
||||
fileFormatVersion: 2
|
||||
guid: 03bc880fcc4c82046a75cd81290cd1bd
|
||||
ScriptedImporter:
|
||||
internalIDToNameTable: []
|
||||
externalObjects: {}
|
||||
serializedVersion: 2
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
||||
script: {fileID: 13804, guid: 0000000000000000e000000000000000, type: 0}
|
||||
34
Editor/Cloner/View/Effector/RandomEffectorEditor.cs
Normal file
34
Editor/Cloner/View/Effector/RandomEffectorEditor.cs
Normal file
@@ -0,0 +1,34 @@
|
||||
using Misaki.ArtTool;
|
||||
using UnityEditor;
|
||||
using UnityEditor.UIElements;
|
||||
using UnityEngine;
|
||||
using UnityEngine.UIElements;
|
||||
|
||||
namespace Misaki.ArtToolEditor
|
||||
{
|
||||
[CustomEditor(typeof(RandomEffector))]
|
||||
public class RandomEffectorEditor : Editor
|
||||
{
|
||||
[SerializeField]
|
||||
private VisualTreeAsset visualTreeAsset = default;
|
||||
|
||||
public override VisualElement CreateInspectorGUI()
|
||||
{
|
||||
var root = new VisualElement();
|
||||
|
||||
var visualAsset = visualTreeAsset.Instantiate();
|
||||
visualAsset.dataSource = serializedObject.targetObject;
|
||||
|
||||
root.Add(visualAsset);
|
||||
root.TrackSerializedObjectValue(serializedObject, OnValueChanged);
|
||||
|
||||
return root;
|
||||
}
|
||||
|
||||
private void OnValueChanged(SerializedObject serializedObject)
|
||||
{
|
||||
var randomEffector = serializedObject.targetObject as RandomEffector;
|
||||
randomEffector.propertyChanged.Invoke(randomEffector, null);
|
||||
}
|
||||
}
|
||||
}
|
||||
13
Editor/Cloner/View/Effector/RandomEffectorEditor.cs.meta
Normal file
13
Editor/Cloner/View/Effector/RandomEffectorEditor.cs.meta
Normal file
@@ -0,0 +1,13 @@
|
||||
fileFormatVersion: 2
|
||||
guid: ecf4a3c8fddc5574d90d38d6db2e28de
|
||||
MonoImporter:
|
||||
externalObjects: {}
|
||||
serializedVersion: 2
|
||||
defaultReferences:
|
||||
- visualTreeAsset: {fileID: 9197481963319205126, guid: 4e9d426ec3a18a84aa2ca50932af5984,
|
||||
type: 3}
|
||||
executionOrder: 0
|
||||
icon: {instanceID: 0}
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
||||
117
Editor/Cloner/View/Effector/RandomEffectorView.uxml
Normal file
117
Editor/Cloner/View/Effector/RandomEffectorView.uxml
Normal file
@@ -0,0 +1,117 @@
|
||||
<engine:UXML xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:engine="UnityEngine.UIElements" xmlns:editor="UnityEditor.UIElements" noNamespaceSchemaLocation="../../../../../UIElementsSchema/UIElements.xsd" editor-extension-mode="True">
|
||||
<Style src="project://database/Packages/com.misaki.art-tools/Editor/Cloner/View/ClonerEditorStyle.uss?fileID=7433441132597879392&guid=216b892cd94cc624da01dc4947facdcb&type=3#ClonerEditorStyle" />
|
||||
<engine:VisualElement data-source-type="Misaki.ArtTool.RandomEffector, Misaki.ArtTool" style="flex-grow: 1;">
|
||||
<engine:VisualElement>
|
||||
<engine:Label text="Effector" class="SubHeader" />
|
||||
<engine:VisualElement class="PropertyContainer">
|
||||
<engine:Slider label="Strength" value="42" high-value="1" fill="true" show-input-field="true">
|
||||
<Bindings>
|
||||
<engine:DataBinding property="value" data-source-path="strength" binding-mode="TwoWay" />
|
||||
</Bindings>
|
||||
</engine:Slider>
|
||||
<engine:Vector2Field label="Min Max" value="-1,1">
|
||||
<Bindings>
|
||||
<engine:DataBinding property="value" data-source-path="minMax" binding-mode="TwoWay" source-to-ui-converters="Float2ToVector2Converter" ui-to-source-converters="Float2ToVector2Converter" />
|
||||
</Bindings>
|
||||
</engine:Vector2Field>
|
||||
</engine:VisualElement>
|
||||
</engine:VisualElement>
|
||||
<engine:VisualElement>
|
||||
<engine:Label text="Parameter" class="SubHeader" />
|
||||
<engine:VisualElement class="PropertyContainer">
|
||||
<engine:DropdownField label="Synchronized" choices="Disable,Enable" index="0">
|
||||
<Bindings>
|
||||
<engine:DataBinding property="index" data-source-path="synchronized" binding-mode="TwoWay" />
|
||||
</Bindings>
|
||||
</engine:DropdownField>
|
||||
<engine:UnsignedIntegerField label="Seed" value="123456" tooltip="Need to regenerate the points to let seed work properly">
|
||||
<Bindings>
|
||||
<engine:DataBinding property="value" data-source-path="seed" binding-mode="TwoWay" />
|
||||
</Bindings>
|
||||
</engine:UnsignedIntegerField>
|
||||
<engine:EnumField label="Transform Space" value="Center" type="Misaki.ArtTool.TransformSpace, Misaki.ArtTool">
|
||||
<Bindings>
|
||||
<engine:DataBinding property="value" data-source-path="transformSpace" binding-mode="TwoWay" />
|
||||
</Bindings>
|
||||
</engine:EnumField>
|
||||
<engine:DropdownField label="Position" choices="Disable,Enable" index="0" class="SmallHeader">
|
||||
<Bindings>
|
||||
<engine:DataBinding property="index" data-source-path="isEnablePosition" binding-mode="TwoWay" />
|
||||
</Bindings>
|
||||
</engine:DropdownField>
|
||||
<engine:VisualElement class="PropertyContainer" style="flex-grow: 1;">
|
||||
<engine:Vector3Field label="Position Min Max">
|
||||
<Bindings>
|
||||
<engine:DataBinding property="value" data-source-path="positionMinMax" binding-mode="TwoWay" source-to-ui-converters="Float3ToVector3Converter" ui-to-source-converters="Float3ToVector3Converter" />
|
||||
</Bindings>
|
||||
</engine:Vector3Field>
|
||||
<Bindings>
|
||||
<engine:DataBinding property="style.display" data-source-path="isEnablePosition" binding-mode="ToTarget" source-to-ui-converters="BoolToDisplayConvertor" />
|
||||
</Bindings>
|
||||
</engine:VisualElement>
|
||||
<engine:DropdownField label="Rotation" choices="Disable,Enable" index="0" class="SmallHeader">
|
||||
<Bindings>
|
||||
<engine:DataBinding property="index" data-source-path="isEnableRotation" binding-mode="TwoWay" />
|
||||
</Bindings>
|
||||
</engine:DropdownField>
|
||||
<engine:VisualElement class="PropertyContainer" style="flex-grow: 1;">
|
||||
<engine:Vector3Field label="Rotation Min Max">
|
||||
<Bindings>
|
||||
<engine:DataBinding property="value" data-source-path="rotationMinMax" binding-mode="TwoWay" source-to-ui-converters="Float3ToVector3Converter" ui-to-source-converters="Float3ToVector3Converter" />
|
||||
</Bindings>
|
||||
</engine:Vector3Field>
|
||||
<Bindings>
|
||||
<engine:DataBinding property="style.display" data-source-path="isEnableRotation" binding-mode="ToTarget" source-to-ui-converters="BoolToDisplayConvertor" />
|
||||
</Bindings>
|
||||
</engine:VisualElement>
|
||||
<engine:DropdownField label="Scale" choices="Disable,Enable" index="0" class="SmallHeader">
|
||||
<Bindings>
|
||||
<engine:DataBinding property="index" data-source-path="isEnableScale" binding-mode="TwoWay" />
|
||||
</Bindings>
|
||||
</engine:DropdownField>
|
||||
<engine:VisualElement class="PropertyContainer" style="flex-grow: 1;">
|
||||
<engine:DropdownField label="Absolute Scale" choices="Disable,Enable" index="0">
|
||||
<Bindings>
|
||||
<engine:DataBinding property="index" data-source-path="isAbsoluteScale" binding-mode="TwoWay" />
|
||||
</Bindings>
|
||||
</engine:DropdownField>
|
||||
<engine:DropdownField label="Uniform Scale" choices="Disable,Enable" index="1">
|
||||
<Bindings>
|
||||
<engine:DataBinding property="index" data-source-path="isUniformScale" binding-mode="TwoWay" />
|
||||
</Bindings>
|
||||
</engine:DropdownField>
|
||||
<engine:Vector3Field label="Scale Min Max" value="1,1,1">
|
||||
<Bindings>
|
||||
<engine:DataBinding property="value" data-source-path="scaleMinMax" binding-mode="TwoWay" source-to-ui-converters="Float3ToVector3Converter" ui-to-source-converters="Float3ToVector3Converter" />
|
||||
<engine:DataBinding property="style.display" data-source-path="isUniformScale" binding-mode="ToTarget" source-to-ui-converters="InverseBoolToDisplayConverter" />
|
||||
</Bindings>
|
||||
</engine:Vector3Field>
|
||||
<engine:FloatField label="Scale Min Max" value="1">
|
||||
<Bindings>
|
||||
<engine:DataBinding property="value" data-source-path="uniformScaleMinMax" binding-mode="TwoWay" />
|
||||
<engine:DataBinding property="style.display" data-source-path="isUniformScale" binding-mode="ToTarget" source-to-ui-converters="BoolToDisplayConvertor" />
|
||||
</Bindings>
|
||||
</engine:FloatField>
|
||||
<Bindings>
|
||||
<engine:DataBinding property="style.display" data-source-path="isEnableScale" binding-mode="ToTarget" source-to-ui-converters="BoolToDisplayConvertor" />
|
||||
</Bindings>
|
||||
</engine:VisualElement>
|
||||
</engine:VisualElement>
|
||||
</engine:VisualElement>
|
||||
<engine:VisualElement>
|
||||
<engine:Label text="Fields" class="SubHeader" />
|
||||
<engine:VisualElement class="PropertyContainer" style="flex-grow: 1;">
|
||||
<engine:VisualElement style="flex-grow: 1; flex-direction: row; margin-top: 4px; margin-right: 4px; margin-bottom: 8px; margin-left: 4px;">
|
||||
<engine:Label text="Enable" enable-rich-text="false" style="font-size: 9px; -unity-text-align: middle-left; margin-left: 4px;" />
|
||||
<engine:Label text="Field" enable-rich-text="false" style="flex-grow: 1; margin-left: 12px; font-size: 9px; -unity-text-align: middle-left;" />
|
||||
<engine:Label text="Blending" enable-rich-text="false" style="width: 100px; font-size: 9px; -unity-text-align: middle-left;" />
|
||||
</engine:VisualElement>
|
||||
<engine:ListView reorderable="true" reorder-mode="Animated" binding-source-selection-mode="AutoAssign" show-add-remove-footer="true" show-border="true" item-template="project://database/Packages/com.misaki.art-tools/Editor/Cloner/View/ItemTemplate/FieldItemTemplate.uxml?fileID=9197481963319205126&guid=d432ee1ae85c33d4abf54b61fc8a45f5&type=3#FieldItemTemplate" fixed-item-height="45">
|
||||
<Bindings>
|
||||
<engine:DataBinding property="itemsSource" data-source-path="fieldDataList" binding-mode="TwoWay" />
|
||||
</Bindings>
|
||||
</engine:ListView>
|
||||
</engine:VisualElement>
|
||||
</engine:VisualElement>
|
||||
</engine:VisualElement>
|
||||
</engine:UXML>
|
||||
10
Editor/Cloner/View/Effector/RandomEffectorView.uxml.meta
Normal file
10
Editor/Cloner/View/Effector/RandomEffectorView.uxml.meta
Normal file
@@ -0,0 +1,10 @@
|
||||
fileFormatVersion: 2
|
||||
guid: 4e9d426ec3a18a84aa2ca50932af5984
|
||||
ScriptedImporter:
|
||||
internalIDToNameTable: []
|
||||
externalObjects: {}
|
||||
serializedVersion: 2
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
||||
script: {fileID: 13804, guid: 0000000000000000e000000000000000, type: 0}
|
||||
8
Editor/Cloner/View/Field.meta
Normal file
8
Editor/Cloner/View/Field.meta
Normal file
@@ -0,0 +1,8 @@
|
||||
fileFormatVersion: 2
|
||||
guid: 24bcd81db3e538f4d9aca834d45d719f
|
||||
folderAsset: yes
|
||||
DefaultImporter:
|
||||
externalObjects: {}
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
||||
56
Editor/Cloner/View/Field/LinearField.uxml
Normal file
56
Editor/Cloner/View/Field/LinearField.uxml
Normal file
@@ -0,0 +1,56 @@
|
||||
<engine:UXML xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:engine="UnityEngine.UIElements" xmlns:editor="UnityEditor.UIElements" noNamespaceSchemaLocation="../../../../../../UIElementsSchema/UIElements.xsd" editor-extension-mode="True">
|
||||
<Style src="project://database/Packages/com.misaki.art-tools/Editor/Cloner/View/ClonerEditorStyle.uss?fileID=7433441132597879392&guid=216b892cd94cc624da01dc4947facdcb&type=3#ClonerEditorStyle" />
|
||||
<engine:VisualElement data-source-type="Misaki.ArtTool.LinearField, Misaki.ArtTool" style="flex-grow: 1;">
|
||||
<engine:Label text="Remapping" class="SubHeader" />
|
||||
<engine:VisualElement class="PropertyContainer">
|
||||
<engine:DropdownField label="State" choices="Disable,Enable" index="0" class="SmallHeader">
|
||||
<Bindings>
|
||||
<engine:DataBinding property="index" data-source-path="remappingSetting.enable" binding-mode="TwoWay" />
|
||||
</Bindings>
|
||||
</engine:DropdownField>
|
||||
<engine:VisualElement>
|
||||
<Misaki.ArtToolEditor.RemappingGraph style="flex-grow: 1;">
|
||||
<Bindings>
|
||||
<engine:DataBinding property="value" data-source-path="remappingSetting" binding-mode="ToTarget" />
|
||||
</Bindings>
|
||||
</Misaki.ArtToolEditor.RemappingGraph>
|
||||
<engine:Slider label="Strength" value="42" high-value="1" show-input-field="true">
|
||||
<Bindings>
|
||||
<engine:DataBinding property="value" data-source-path="remappingSetting.strength" binding-mode="TwoWay" />
|
||||
</Bindings>
|
||||
</engine:Slider>
|
||||
<engine:DropdownField label="Invert" choices="Disable,Enable" index="0">
|
||||
<Bindings>
|
||||
<engine:DataBinding property="index" data-source-path="remappingSetting.invert" binding-mode="TwoWay" />
|
||||
</Bindings>
|
||||
</engine:DropdownField>
|
||||
<engine:Slider label="Inner Offset" value="0" high-value="1" show-input-field="true">
|
||||
<Bindings>
|
||||
<engine:DataBinding property="value" data-source-path="remappingSetting.innerOffset" binding-mode="TwoWay" />
|
||||
</Bindings>
|
||||
</engine:Slider>
|
||||
<engine:Slider label="Min" value="0" high-value="1" show-input-field="true">
|
||||
<Bindings>
|
||||
<engine:DataBinding property="value" data-source-path="remappingSetting.min" binding-mode="TwoWay" />
|
||||
</Bindings>
|
||||
</engine:Slider>
|
||||
<engine:Slider label="Max" value="1" high-value="1" show-input-field="true">
|
||||
<Bindings>
|
||||
<engine:DataBinding property="value" data-source-path="remappingSetting.max" binding-mode="TwoWay" />
|
||||
</Bindings>
|
||||
</engine:Slider>
|
||||
<Bindings>
|
||||
<engine:DataBinding property="style.display" data-source-path="remappingSetting.enable" binding-mode="ToTarget" source-to-ui-converters="BoolToDisplayConvertor" />
|
||||
</Bindings>
|
||||
</engine:VisualElement>
|
||||
</engine:VisualElement>
|
||||
<engine:Label text="Parameter" class="SubHeader" />
|
||||
<engine:VisualElement class="PropertyContainer">
|
||||
<engine:FloatField label="Length" value="10">
|
||||
<Bindings>
|
||||
<engine:DataBinding property="value" data-source-path="length" binding-mode="TwoWay" />
|
||||
</Bindings>
|
||||
</engine:FloatField>
|
||||
</engine:VisualElement>
|
||||
</engine:VisualElement>
|
||||
</engine:UXML>
|
||||
10
Editor/Cloner/View/Field/LinearField.uxml.meta
Normal file
10
Editor/Cloner/View/Field/LinearField.uxml.meta
Normal file
@@ -0,0 +1,10 @@
|
||||
fileFormatVersion: 2
|
||||
guid: 50fa3a5370c15ec4abe4b7225a42c090
|
||||
ScriptedImporter:
|
||||
internalIDToNameTable: []
|
||||
externalObjects: {}
|
||||
serializedVersion: 2
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
||||
script: {fileID: 13804, guid: 0000000000000000e000000000000000, type: 0}
|
||||
41
Editor/Cloner/View/Field/LinearFieldEditor.cs
Normal file
41
Editor/Cloner/View/Field/LinearFieldEditor.cs
Normal file
@@ -0,0 +1,41 @@
|
||||
using Misaki.ArtTool;
|
||||
using UnityEditor;
|
||||
using UnityEditor.UIElements;
|
||||
using UnityEngine;
|
||||
using UnityEngine.UIElements;
|
||||
|
||||
namespace Misaki.ArtToolEditor
|
||||
{
|
||||
[CustomEditor(typeof(LinearField))]
|
||||
public class LinearFieldEditor : Editor
|
||||
{
|
||||
[SerializeField]
|
||||
private VisualTreeAsset visualTreeAsset = default;
|
||||
|
||||
private LinearField dataSource;
|
||||
|
||||
private void OnEnable()
|
||||
{
|
||||
dataSource = target as LinearField;
|
||||
}
|
||||
|
||||
public override VisualElement CreateInspectorGUI()
|
||||
{
|
||||
var root = new VisualElement();
|
||||
|
||||
var visualAsset = visualTreeAsset.Instantiate();
|
||||
visualAsset.dataSource = serializedObject.targetObject;
|
||||
|
||||
root.Add(visualAsset);
|
||||
root.TrackSerializedObjectValue(serializedObject, OnValueChanged);
|
||||
|
||||
return root;
|
||||
}
|
||||
|
||||
private void OnValueChanged(SerializedObject serializedObject)
|
||||
{
|
||||
var linearField = serializedObject.targetObject as LinearField;
|
||||
linearField.propertyChanged.Invoke(linearField, null);
|
||||
}
|
||||
}
|
||||
}
|
||||
13
Editor/Cloner/View/Field/LinearFieldEditor.cs.meta
Normal file
13
Editor/Cloner/View/Field/LinearFieldEditor.cs.meta
Normal file
@@ -0,0 +1,13 @@
|
||||
fileFormatVersion: 2
|
||||
guid: e1f02bdd18275b44c9f98fdf199ddf54
|
||||
MonoImporter:
|
||||
externalObjects: {}
|
||||
serializedVersion: 2
|
||||
defaultReferences:
|
||||
- visualTreeAsset: {fileID: 9197481963319205126, guid: 50fa3a5370c15ec4abe4b7225a42c090,
|
||||
type: 3}
|
||||
executionOrder: 0
|
||||
icon: {instanceID: 0}
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
||||
56
Editor/Cloner/View/Field/SphereField.uxml
Normal file
56
Editor/Cloner/View/Field/SphereField.uxml
Normal file
@@ -0,0 +1,56 @@
|
||||
<engine:UXML xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:engine="UnityEngine.UIElements" xmlns:editor="UnityEditor.UIElements" noNamespaceSchemaLocation="../../../../../../UIElementsSchema/UIElements.xsd" editor-extension-mode="True">
|
||||
<Style src="project://database/Packages/com.misaki.art-tools/Editor/Cloner/View/ClonerEditorStyle.uss?fileID=7433441132597879392&guid=216b892cd94cc624da01dc4947facdcb&type=3#ClonerEditorStyle" />
|
||||
<engine:VisualElement data-source-type="Misaki.ArtTool.SphereField, Misaki.ArtTool" style="flex-grow: 1;">
|
||||
<engine:Label text="Remapping" class="SubHeader" />
|
||||
<engine:VisualElement class="PropertyContainer">
|
||||
<engine:DropdownField label="State" choices="Disable,Enable" index="0" class="SmallHeader">
|
||||
<Bindings>
|
||||
<engine:DataBinding property="index" data-source-path="remappingSetting.enable" binding-mode="TwoWay" />
|
||||
</Bindings>
|
||||
</engine:DropdownField>
|
||||
<engine:VisualElement>
|
||||
<Misaki.ArtToolEditor.RemappingGraph style="flex-grow: 1;">
|
||||
<Bindings>
|
||||
<engine:DataBinding property="value" data-source-path="remappingSetting" binding-mode="ToTarget" />
|
||||
</Bindings>
|
||||
</Misaki.ArtToolEditor.RemappingGraph>
|
||||
<engine:Slider label="Strength" value="42" high-value="1" show-input-field="true">
|
||||
<Bindings>
|
||||
<engine:DataBinding property="value" data-source-path="remappingSetting.strength" binding-mode="TwoWay" />
|
||||
</Bindings>
|
||||
</engine:Slider>
|
||||
<engine:DropdownField label="Invert" choices="Disable,Enable" index="0">
|
||||
<Bindings>
|
||||
<engine:DataBinding property="index" data-source-path="remappingSetting.invert" binding-mode="TwoWay" />
|
||||
</Bindings>
|
||||
</engine:DropdownField>
|
||||
<engine:Slider label="Inner Offset" value="0" high-value="1" show-input-field="true">
|
||||
<Bindings>
|
||||
<engine:DataBinding property="value" data-source-path="remappingSetting.innerOffset" binding-mode="TwoWay" />
|
||||
</Bindings>
|
||||
</engine:Slider>
|
||||
<engine:Slider label="Min" value="0" high-value="1" show-input-field="true">
|
||||
<Bindings>
|
||||
<engine:DataBinding property="value" data-source-path="remappingSetting.min" binding-mode="TwoWay" />
|
||||
</Bindings>
|
||||
</engine:Slider>
|
||||
<engine:Slider label="Max" value="1" high-value="1" show-input-field="true">
|
||||
<Bindings>
|
||||
<engine:DataBinding property="value" data-source-path="remappingSetting.max" binding-mode="TwoWay" />
|
||||
</Bindings>
|
||||
</engine:Slider>
|
||||
<Bindings>
|
||||
<engine:DataBinding property="style.display" data-source-path="remappingSetting.enable" binding-mode="ToTarget" source-to-ui-converters="BoolToDisplayConvertor" />
|
||||
</Bindings>
|
||||
</engine:VisualElement>
|
||||
</engine:VisualElement>
|
||||
<engine:Label text="Parameter" class="SubHeader" />
|
||||
<engine:VisualElement class="PropertyContainer">
|
||||
<engine:FloatField label="Radius" value="10">
|
||||
<Bindings>
|
||||
<engine:DataBinding property="value" data-source-path="radius" binding-mode="TwoWay" />
|
||||
</Bindings>
|
||||
</engine:FloatField>
|
||||
</engine:VisualElement>
|
||||
</engine:VisualElement>
|
||||
</engine:UXML>
|
||||
10
Editor/Cloner/View/Field/SphereField.uxml.meta
Normal file
10
Editor/Cloner/View/Field/SphereField.uxml.meta
Normal file
@@ -0,0 +1,10 @@
|
||||
fileFormatVersion: 2
|
||||
guid: bcdf9a803fec6734d9d74dfaefdb7cf8
|
||||
ScriptedImporter:
|
||||
internalIDToNameTable: []
|
||||
externalObjects: {}
|
||||
serializedVersion: 2
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
||||
script: {fileID: 13804, guid: 0000000000000000e000000000000000, type: 0}
|
||||
49
Editor/Cloner/View/Field/SphereFieldEditor.cs
Normal file
49
Editor/Cloner/View/Field/SphereFieldEditor.cs
Normal file
@@ -0,0 +1,49 @@
|
||||
using Misaki.ArtTool;
|
||||
using UnityEditor;
|
||||
using UnityEditor.UIElements;
|
||||
using UnityEngine;
|
||||
using UnityEngine.UIElements;
|
||||
|
||||
namespace Misaki.ArtToolEditor
|
||||
{
|
||||
[CustomEditor(typeof(SphereField))]
|
||||
public class SphereFieldEditor : Editor
|
||||
{
|
||||
[SerializeField]
|
||||
private VisualTreeAsset visualTreeAsset = default;
|
||||
|
||||
private SphereField dataSource;
|
||||
|
||||
private void OnEnable()
|
||||
{
|
||||
dataSource = target as SphereField;
|
||||
}
|
||||
|
||||
public override VisualElement CreateInspectorGUI()
|
||||
{
|
||||
var root = new VisualElement();
|
||||
|
||||
var visualAsset = visualTreeAsset.Instantiate();
|
||||
visualAsset.dataSource = serializedObject.targetObject;
|
||||
|
||||
root.Add(visualAsset);
|
||||
root.TrackSerializedObjectValue(serializedObject, OnValueChanged);
|
||||
|
||||
return root;
|
||||
}
|
||||
|
||||
private void OnValueChanged(SerializedObject serializedObject)
|
||||
{
|
||||
var linearField = serializedObject.targetObject as SphereField;
|
||||
linearField.propertyChanged.Invoke(linearField, null);
|
||||
}
|
||||
|
||||
private void OnSceneGUI()
|
||||
{
|
||||
Handles.matrix = dataSource.transform.localToWorldMatrix;
|
||||
Handles.color = Color.cyan;
|
||||
|
||||
dataSource.radius = Handles.RadiusHandle(Quaternion.identity, Vector3.zero, dataSource.radius, true);
|
||||
}
|
||||
}
|
||||
}
|
||||
13
Editor/Cloner/View/Field/SphereFieldEditor.cs.meta
Normal file
13
Editor/Cloner/View/Field/SphereFieldEditor.cs.meta
Normal file
@@ -0,0 +1,13 @@
|
||||
fileFormatVersion: 2
|
||||
guid: 35154d63b3f536f408b6185949d9812a
|
||||
MonoImporter:
|
||||
externalObjects: {}
|
||||
serializedVersion: 2
|
||||
defaultReferences:
|
||||
- visualTreeAsset: {fileID: 9197481963319205126, guid: bcdf9a803fec6734d9d74dfaefdb7cf8,
|
||||
type: 3}
|
||||
executionOrder: 0
|
||||
icon: {instanceID: 0}
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
||||
8
Editor/Cloner/View/ItemTemplate.meta
Normal file
8
Editor/Cloner/View/ItemTemplate.meta
Normal file
@@ -0,0 +1,8 @@
|
||||
fileFormatVersion: 2
|
||||
guid: 966dc5a5c20b54340bb9f5fd7cad692e
|
||||
folderAsset: yes
|
||||
DefaultImporter:
|
||||
externalObjects: {}
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
||||
14
Editor/Cloner/View/ItemTemplate/EffectorItemTemplate.uxml
Normal file
14
Editor/Cloner/View/ItemTemplate/EffectorItemTemplate.uxml
Normal file
@@ -0,0 +1,14 @@
|
||||
<engine:UXML xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:engine="UnityEngine.UIElements" xmlns:editor="UnityEditor.UIElements" noNamespaceSchemaLocation="../../../../UIElementsSchema/UIElements.xsd" editor-extension-mode="True">
|
||||
<engine:VisualElement data-source-type="Misaki.ArtTool.EffectorData, Misaki.ArtTool" style="flex-direction: row;">
|
||||
<engine:Toggle style="margin-top: 4px; margin-right: 4px; margin-bottom: 4px; margin-left: 4px;">
|
||||
<Bindings>
|
||||
<engine:DataBinding property="value" data-source-path="enable" binding-mode="TwoWay" />
|
||||
</Bindings>
|
||||
</engine:Toggle>
|
||||
<editor:ObjectField type="Misaki.ArtTool.EffectorBase, Misaki.ArtTool" style="flex-grow: 1;">
|
||||
<Bindings>
|
||||
<engine:DataBinding property="value" data-source-path="effector" binding-mode="TwoWay" />
|
||||
</Bindings>
|
||||
</editor:ObjectField>
|
||||
</engine:VisualElement>
|
||||
</engine:UXML>
|
||||
@@ -0,0 +1,10 @@
|
||||
fileFormatVersion: 2
|
||||
guid: 9a72cc6a25b7e104991d25d5c2458b81
|
||||
ScriptedImporter:
|
||||
internalIDToNameTable: []
|
||||
externalObjects: {}
|
||||
serializedVersion: 2
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
||||
script: {fileID: 13804, guid: 0000000000000000e000000000000000, type: 0}
|
||||
28
Editor/Cloner/View/ItemTemplate/FieldItemTemplate.uxml
Normal file
28
Editor/Cloner/View/ItemTemplate/FieldItemTemplate.uxml
Normal file
@@ -0,0 +1,28 @@
|
||||
<engine:UXML xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:engine="UnityEngine.UIElements" xmlns:editor="UnityEditor.UIElements" noNamespaceSchemaLocation="../../../../../../UIElementsSchema/UIElements.xsd" editor-extension-mode="True">
|
||||
<engine:VisualElement data-source-type="Misaki.ArtTool.FieldData, Misaki.ArtTool" style="flex-direction: row;">
|
||||
<engine:Toggle style="margin-top: 4px; margin-right: 4px; margin-bottom: 4px; margin-left: 4px;">
|
||||
<Bindings>
|
||||
<engine:DataBinding property="value" data-source-path="enable" binding-mode="TwoWay" />
|
||||
</Bindings>
|
||||
</engine:Toggle>
|
||||
<engine:VisualElement style="flex-grow: 1;">
|
||||
<engine:VisualElement style="flex-direction: row;">
|
||||
<editor:ObjectField type="Misaki.ArtTool.FieldBase, Misaki.ArtTool" style="flex-grow: 1;">
|
||||
<Bindings>
|
||||
<engine:DataBinding property="value" data-source-path="field" binding-mode="TwoWay" />
|
||||
</Bindings>
|
||||
</editor:ObjectField>
|
||||
<engine:EnumField value="Center" type="Misaki.ArtTool.BlendingMode, Misaki.ArtTool" style="width: 100px;">
|
||||
<Bindings>
|
||||
<engine:DataBinding property="value" data-source-path="blending" binding-mode="TwoWay" />
|
||||
</Bindings>
|
||||
</engine:EnumField>
|
||||
</engine:VisualElement>
|
||||
<engine:Slider value="42" high-value="1" show-input-field="true">
|
||||
<Bindings>
|
||||
<engine:DataBinding property="value" data-source-path="opacity" binding-mode="TwoWay" />
|
||||
</Bindings>
|
||||
</engine:Slider>
|
||||
</engine:VisualElement>
|
||||
</engine:VisualElement>
|
||||
</engine:UXML>
|
||||
10
Editor/Cloner/View/ItemTemplate/FieldItemTemplate.uxml.meta
Normal file
10
Editor/Cloner/View/ItemTemplate/FieldItemTemplate.uxml.meta
Normal file
@@ -0,0 +1,10 @@
|
||||
fileFormatVersion: 2
|
||||
guid: d432ee1ae85c33d4abf54b61fc8a45f5
|
||||
ScriptedImporter:
|
||||
internalIDToNameTable: []
|
||||
externalObjects: {}
|
||||
serializedVersion: 2
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
||||
script: {fileID: 13804, guid: 0000000000000000e000000000000000, type: 0}
|
||||
14
Editor/Cloner/View/ItemTemplate/InputObjectItemTemplate.uxml
Normal file
14
Editor/Cloner/View/ItemTemplate/InputObjectItemTemplate.uxml
Normal file
@@ -0,0 +1,14 @@
|
||||
<engine:UXML xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:engine="UnityEngine.UIElements" xmlns:editor="UnityEditor.UIElements" noNamespaceSchemaLocation="../../../../UIElementsSchema/UIElements.xsd" editor-extension-mode="True">
|
||||
<engine:VisualElement data-source-type="Misaki.ArtTool.InputObjectData, Misaki.ArtTool" style="flex-direction: row;">
|
||||
<editor:ObjectField type="UnityEngine.GameObject, UnityEngine.CoreModule" style="flex-grow: 1;">
|
||||
<Bindings>
|
||||
<engine:DataBinding property="value" data-source-path="gameObject" binding-mode="TwoWay" />
|
||||
</Bindings>
|
||||
</editor:ObjectField>
|
||||
<engine:UnsignedIntegerField value="1" style="width: 50px;">
|
||||
<Bindings>
|
||||
<engine:DataBinding property="value" data-source-path="frequency" binding-mode="TwoWay" />
|
||||
</Bindings>
|
||||
</engine:UnsignedIntegerField>
|
||||
</engine:VisualElement>
|
||||
</engine:UXML>
|
||||
@@ -0,0 +1,10 @@
|
||||
fileFormatVersion: 2
|
||||
guid: af925948194d82c44a565c55d8ce0de8
|
||||
ScriptedImporter:
|
||||
internalIDToNameTable: []
|
||||
externalObjects: {}
|
||||
serializedVersion: 2
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
||||
script: {fileID: 13804, guid: 0000000000000000e000000000000000, type: 0}
|
||||
Reference in New Issue
Block a user