去掉obi,使用自写绳索

This commit is contained in:
2026-02-23 20:51:03 +08:00
parent cb636f862d
commit 91e2309eeb
2011 changed files with 2593 additions and 190578 deletions

View File

@@ -1,8 +0,0 @@
fileFormatVersion: 2
guid: 7b9ba4ddc644a4bfa8ab44a5826b8007
folderAsset: yes
DefaultImporter:
externalObjects: {}
userData:
assetBundleName:
assetBundleVariant:

View File

@@ -1,24 +0,0 @@
using UnityEngine;
using UnityEditor;
using System.Collections;
namespace Obi
{
public abstract class ObiBlueprintBoolProperty : ObiBlueprintProperty<bool>
{
public override bool Equals(int firstIndex, int secondIndex)
{
return Get(firstIndex) == Get(secondIndex);
}
public override void PropertyField()
{
value = EditorGUILayout.Toggle(name, value);
}
public override Color ToColor(int index)
{
return value ? Color.white : Color.gray;
}
}
}

View File

@@ -1,11 +0,0 @@
fileFormatVersion: 2
guid: 19cb8e21747094d6dae8dff155654066
MonoImporter:
externalObjects: {}
serializedVersion: 2
defaultReferences: []
executionOrder: 0
icon: {instanceID: 0}
userData:
assetBundleName:
assetBundleVariant:

View File

@@ -1,31 +0,0 @@
using UnityEngine;
using UnityEditor;
using System.Collections;
namespace Obi
{
public abstract class ObiBlueprintColorProperty : ObiBlueprintProperty<Color>
{
public ObiActorBlueprintEditor editor;
public ObiBlueprintColorProperty(ObiActorBlueprintEditor editor)
{
this.editor = editor;
}
public override bool Equals(int firstIndex, int secondIndex)
{
return Get(firstIndex) == Get(secondIndex);
}
public override void PropertyField()
{
value = EditorGUILayout.ColorField(name, value);
}
public override Color ToColor(int index)
{
return editor.blueprint.colors[index];
}
}
}

View File

@@ -1,11 +0,0 @@
fileFormatVersion: 2
guid: 64ab0b4fad7614808acc3cdb75215c50
MonoImporter:
externalObjects: {}
serializedVersion: 2
defaultReferences: []
executionOrder: 0
icon: {instanceID: 0}
userData:
assetBundleName:
assetBundleVariant:

View File

@@ -1,94 +0,0 @@
using UnityEngine;
using UnityEditor;
namespace Obi
{
public abstract class ObiBlueprintFloatProperty : ObiBlueprintProperty<float>
{
public float minVisualizationValue = 0;
public float maxVisualizationValue = 10;
protected float minUserVisualizationValue = 0;
protected float maxUserVisualizationValue = 10;
protected float? minValue = null;
protected float? maxValue = null;
public bool autoRange = true;
public ObiActorBlueprintEditor editor;
public ObiBlueprintFloatProperty(ObiActorBlueprintEditor editor, float? minValue = null, float? maxValue = null)
{
this.editor = editor;
this.minValue = minValue;
this.maxValue = maxValue;
}
public override bool Equals(int firstIndex, int secondIndex)
{
float v1 = Get(firstIndex);
float v2 = Get(secondIndex);
if (v1 == v2) return true;
return Mathf.Approximately(v1,v2);
}
public override void PropertyField()
{
EditorGUI.BeginChangeCheck();
value = EditorGUILayout.FloatField(name, value);
if (EditorGUI.EndChangeCheck())
{
if (minValue.HasValue)
value = Mathf.Max(minValue.Value, value);
if (maxValue.HasValue)
value = Mathf.Min(maxValue.Value, value);
}
}
public override void RecalculateMinMax()
{
if (editor != null && autoRange)
{
maxVisualizationValue = float.MinValue;
minVisualizationValue = float.MaxValue;
for (int i = 0; i < editor.blueprint.activeParticleCount; i++)
{
float v = Get(i);
maxVisualizationValue = Mathf.Max(maxVisualizationValue, v);
minVisualizationValue = Mathf.Min(minVisualizationValue, v);
}
}
else
{
maxVisualizationValue = maxUserVisualizationValue;
minVisualizationValue = minUserVisualizationValue;
}
}
public override void VisualizationOptions()
{
EditorGUI.BeginChangeCheck();
autoRange = EditorGUILayout.Toggle("Automatic property range", autoRange);
GUI.enabled = !autoRange;
EditorGUI.indentLevel++;
minUserVisualizationValue = EditorGUILayout.FloatField("Min", minUserVisualizationValue);
maxUserVisualizationValue = EditorGUILayout.FloatField("Max", maxUserVisualizationValue);
EditorGUI.indentLevel--;
GUI.enabled = true;
if (EditorGUI.EndChangeCheck())
{
RecalculateMinMax();
editor.Refresh();
}
}
public override Color ToColor(int index)
{
Gradient gradient = ObiEditorSettings.GetOrCreateSettings().propertyGradient;
if (!Mathf.Approximately(minVisualizationValue, maxVisualizationValue))
return gradient.Evaluate(Mathf.InverseLerp(minVisualizationValue, maxVisualizationValue, Get(index)));
else return gradient.Evaluate(0);
}
}
}

View File

@@ -1,11 +0,0 @@
fileFormatVersion: 2
guid: be67f2576200242f080bbcc074dc598a
MonoImporter:
externalObjects: {}
serializedVersion: 2
defaultReferences: []
executionOrder: 0
icon: {instanceID: 0}
userData:
assetBundleName:
assetBundleVariant:

View File

@@ -1,41 +0,0 @@
using UnityEngine;
using UnityEditor;
namespace Obi
{
public abstract class ObiBlueprintIntProperty : ObiBlueprintProperty<int>
{
protected int? minValue = null;
protected int? maxValue = null;
public ObiBlueprintIntProperty(int? minValue = null, int? maxValue = null)
{
this.minValue = minValue;
this.maxValue = maxValue;
}
public override bool Equals(int firstIndex, int secondIndex)
{
return Get(firstIndex) == Get(secondIndex);
}
public override void PropertyField()
{
EditorGUI.BeginChangeCheck();
value = EditorGUILayout.IntField(name, value);
if (EditorGUI.EndChangeCheck())
{
if (minValue.HasValue)
value = Mathf.Max(minValue.Value, value);
if (maxValue.HasValue)
value = Mathf.Min(maxValue.Value, value);
}
}
public override Color ToColor(int index)
{
int colorIndex = Get(index) % ObiUtils.colorAlphabet.Length;
return ObiUtils.colorAlphabet[colorIndex];
}
}
}

View File

@@ -1,11 +0,0 @@
fileFormatVersion: 2
guid: d8661f9e9cfd044c7bb759145c2a8d73
MonoImporter:
externalObjects: {}
serializedVersion: 2
defaultReferences: []
executionOrder: 0
icon: {instanceID: 0}
userData:
assetBundleName:
assetBundleVariant:

View File

@@ -1,28 +0,0 @@
using UnityEngine;
using UnityEditor;
namespace Obi
{
public abstract class ObiBlueprintMaskProperty : ObiBlueprintIntProperty
{
public ObiBlueprintMaskProperty() : base(null,null)
{
}
public override void PropertyField()
{
value = EditorGUILayout.MaskField(name, value, ObiUtils.categoryNames);
}
private int MathMod(int a, int b)
{
return (Mathf.Abs(a * b) + a) % b;
}
public override Color ToColor(int index)
{
int colorIndex = MathMod(Get(index),ObiUtils.colorAlphabet.Length);
return ObiUtils.colorAlphabet[colorIndex];
}
}
}

View File

@@ -1,11 +0,0 @@
fileFormatVersion: 2
guid: 165ad17d69adf415ea7609a9373de001
MonoImporter:
externalObjects: {}
serializedVersion: 2
defaultReferences: []
executionOrder: 0
icon: {instanceID: 0}
userData:
assetBundleName:
assetBundleVariant:

View File

@@ -1,79 +0,0 @@
using UnityEngine;
using UnityEditor;
using System.Collections.Generic;
namespace Obi
{
public abstract class ObiBlueprintPropertyBase
{
protected List<IObiBrushMode> brushModes = new List<IObiBrushMode>();
private int selectedBrushMode;
public abstract string name
{
get;
}
public abstract void PropertyField();
public virtual void VisualizationOptions(){}
public virtual void OnSceneRepaint(){}
public abstract bool Equals(int firstIndex, int secondIndex);
public abstract void GetDefaultFromIndex(int index);
public abstract void SetDefaultToIndex(int index);
public virtual bool Masked(int index)
{
return false;
}
public virtual void RecalculateMinMax() { }
public virtual Color ToColor(int index) { return Color.white; }
protected void Initialize(ObiBrushBase paintBrush)
{
// Initialize the brush if there's no brush mode set:
if (paintBrush.brushMode == null && brushModes.Count > 0)
{
selectedBrushMode = 0;
paintBrush.brushMode = brushModes[selectedBrushMode];
}
}
public void OnSelect(ObiBrushBase paintBrush)
{
// Upon selecting the property, change to the last selected brush mode:
if (brushModes.Count > selectedBrushMode)
paintBrush.brushMode = brushModes[selectedBrushMode];
}
public void BrushModes(ObiBrushBase paintBrush)
{
Initialize(paintBrush);
GUIContent[] contents = new GUIContent[brushModes.Count];
for (int i = 0; i < brushModes.Count; ++i)
contents[i] = new GUIContent(brushModes[i].name);
EditorGUI.BeginChangeCheck();
selectedBrushMode = ObiEditorUtils.DoToolBar(selectedBrushMode, contents);
if (EditorGUI.EndChangeCheck())
{
paintBrush.brushMode = brushModes[selectedBrushMode];
}
}
}
public abstract class ObiBlueprintProperty<T> : ObiBlueprintPropertyBase
{
protected T value;
public T GetDefault() { return value; }
public override void GetDefaultFromIndex(int index) { value = Get(index); }
public override void SetDefaultToIndex(int index) { Set(index, value); }
public abstract T Get(int index);
public abstract void Set(int index, T value);
}
}

View File

@@ -1,11 +0,0 @@
fileFormatVersion: 2
guid: 60a83ba184caf4a1aba4da6754776a1d
MonoImporter:
externalObjects: {}
serializedVersion: 2
defaultReferences: []
executionOrder: 0
icon: {instanceID: 0}
userData:
assetBundleName:
assetBundleVariant:

View File

@@ -1,13 +0,0 @@
using UnityEngine;
using System.Collections;
namespace Obi
{
public interface IObiSelectableParticleProvider
{
void SetSelected(int particleIndex, bool selected);
bool IsSelected(int particleIndex);
bool Editable(int particleIndex);
}
}

View File

@@ -1,11 +0,0 @@
fileFormatVersion: 2
guid: 0c3a2643915854763af75d63fa1ec0c9
MonoImporter:
externalObjects: {}
serializedVersion: 2
defaultReferences: []
executionOrder: 0
icon: {instanceID: 0}
userData:
assetBundleName:
assetBundleVariant:

View File

@@ -1,33 +0,0 @@
using UnityEngine;
namespace Obi
{
public class ObiBlueprintColor : ObiBlueprintColorProperty
{
public ObiBlueprintColor(ObiActorBlueprintEditor editor) : base(editor)
{
brushModes.Add(new ObiColorPaintBrushMode(this));
brushModes.Add(new ObiColorSmoothBrushMode(this));
}
public override string name
{
get { return "Color"; }
}
public override Color Get(int index)
{
return editor.blueprint.colors[index];
}
public override void Set(int index, Color value)
{
editor.blueprint.colors[index] = value;
editor.blueprint.edited = true;
}
public override bool Masked(int index)
{
return !editor.Editable(index);
}
}
}

View File

@@ -1,11 +0,0 @@
fileFormatVersion: 2
guid: 810c95482e60a44209c5ece07e287153
MonoImporter:
externalObjects: {}
serializedVersion: 2
defaultReferences: []
executionOrder: 0
icon: {instanceID: 0}
userData:
assetBundleName:
assetBundleVariant:

View File

@@ -1,32 +0,0 @@
namespace Obi
{
public class ObiBlueprintFilterCategory : ObiBlueprintIntProperty
{
public ObiActorBlueprintEditor editor;
public ObiBlueprintFilterCategory(ObiActorBlueprintEditor editor) : base(ObiUtils.MinCategory, ObiUtils.MaxCategory)
{
this.editor = editor;
brushModes.Add(new ObiIntPaintBrushMode(this));
}
public override string name
{
get { return "Category"; }
}
public override int Get(int index)
{
return ObiUtils.GetCategoryFromFilter(editor.blueprint.filters[index]);
}
public override void Set(int index, int value)
{
editor.blueprint.filters[index] = ObiUtils.MakeFilter(ObiUtils.GetMaskFromFilter(editor.blueprint.filters[index]), value);
editor.blueprint.edited = true;
}
public override bool Masked(int index)
{
return !editor.Editable(index);
}
}
}

View File

@@ -1,11 +0,0 @@
fileFormatVersion: 2
guid: 08502999496e54f49bb9dee0e0855794
MonoImporter:
externalObjects: {}
serializedVersion: 2
defaultReferences: []
executionOrder: 0
icon: {instanceID: 0}
userData:
assetBundleName:
assetBundleVariant:

View File

@@ -1,32 +0,0 @@
namespace Obi
{
public class ObiBlueprintFilterMask : ObiBlueprintMaskProperty
{
public ObiActorBlueprintEditor editor;
public ObiBlueprintFilterMask(ObiActorBlueprintEditor editor)
{
this.editor = editor;
brushModes.Add(new ObiIntPaintBrushMode(this));
}
public override string name
{
get { return "Collides with"; }
}
public override int Get(int index)
{
return ObiUtils.GetMaskFromFilter(editor.blueprint.filters[index]);
}
public override void Set(int index, int value)
{
editor.blueprint.filters[index] = ObiUtils.MakeFilter(value,ObiUtils.GetCategoryFromFilter(editor.blueprint.filters[index]));
editor.blueprint.edited = true;
}
public override bool Masked(int index)
{
return !editor.Editable(index);
}
}
}

View File

@@ -1,11 +0,0 @@
fileFormatVersion: 2
guid: ead8a00c964834718a2411be5d7361f3
MonoImporter:
externalObjects: {}
serializedVersion: 2
defaultReferences: []
executionOrder: 0
icon: {instanceID: 0}
userData:
assetBundleName:
assetBundleVariant:

View File

@@ -1,33 +0,0 @@
namespace Obi
{
public class ObiBlueprintMass : ObiBlueprintFloatProperty
{
public ObiBlueprintMass(ObiActorBlueprintEditor editor) : base(editor,0)
{
brushModes.Add(new ObiFloatPaintBrushMode(this));
brushModes.Add(new ObiFloatAddBrushMode(this));
brushModes.Add(new ObiFloatCopyBrushMode(this, this));
brushModes.Add(new ObiFloatSmoothBrushMode(this));
}
public override string name
{
get { return "Mass"; }
}
public override float Get(int index)
{
return ObiUtils.InvMassToMass(editor.blueprint.invMasses[index]);
}
public override void Set(int index, float value)
{
editor.blueprint.invMasses[index] = ObiUtils.MassToInvMass(value);
editor.blueprint.edited = true;
}
public override bool Masked(int index)
{
return !editor.Editable(index);
}
}
}

View File

@@ -1,11 +0,0 @@
fileFormatVersion: 2
guid: bd39fbd4c226542e58dc8ecceb5f8f14
MonoImporter:
externalObjects: {}
serializedVersion: 2
defaultReferences: []
executionOrder: 0
icon: {instanceID: 0}
userData:
assetBundleName:
assetBundleVariant:

View File

@@ -1,37 +0,0 @@
using UnityEngine;
namespace Obi
{
public class ObiBlueprintRadius : ObiBlueprintFloatProperty
{
public ObiBlueprintRadius(ObiActorBlueprintEditor editor) : base(editor,0.0000001f)
{
brushModes.Add(new ObiFloatPaintBrushMode(this));
brushModes.Add(new ObiFloatAddBrushMode(this));
brushModes.Add(new ObiFloatCopyBrushMode(this, this));
brushModes.Add(new ObiFloatSmoothBrushMode(this));
}
public override string name
{
get { return "Radius"; }
}
public override float Get(int index)
{
return editor.blueprint.principalRadii[index][0];
}
public override void Set(int index, float value)
{
value = Mathf.Max(0.0000001f, value);
float ratio = value / Get(index);
editor.blueprint.principalRadii[index] = editor.blueprint.principalRadii[index] * ratio;
editor.blueprint.edited = true;
}
public override bool Masked(int index)
{
return !editor.Editable(index);
}
}
}

View File

@@ -1,11 +0,0 @@
fileFormatVersion: 2
guid: b5c61b50f6f4a468aa246f01e5268831
MonoImporter:
externalObjects: {}
serializedVersion: 2
defaultReferences: []
executionOrder: 0
icon: {instanceID: 0}
userData:
assetBundleName:
assetBundleVariant:

View File

@@ -1,29 +0,0 @@
namespace Obi
{
public class ObiBlueprintSelected : ObiBlueprintBoolProperty
{
public IObiSelectableParticleProvider provider;
public ObiBlueprintSelected(IObiSelectableParticleProvider provider)
{
this.provider = provider;
}
public override string name
{
get { return "Selected"; }
}
public override bool Get(int index)
{
return provider.IsSelected(index);
}
public override void Set(int index, bool value)
{
provider.SetSelected(index,value);
}
public override bool Masked(int index)
{
return !provider.Editable(index);
}
}
}

View File

@@ -1,11 +0,0 @@
fileFormatVersion: 2
guid: 270971958421b4fec9e5a5ba95699518
MonoImporter:
externalObjects: {}
serializedVersion: 2
defaultReferences: []
executionOrder: 0
icon: {instanceID: 0}
userData:
assetBundleName:
assetBundleVariant: