Skip to content

Commit a663422

Browse files
authored
Merge pull request #79 from JasonMa0012/dev
Add Preset support to SubPowerSlider
2 parents 64e0aed + 62aa96e commit a663422

15 files changed

+146
-95
lines changed

.obsidian/core-plugins.json

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -27,5 +27,7 @@
2727
"file-recovery": true,
2828
"publish": false,
2929
"sync": false,
30-
"webviewer": false
30+
"webviewer": false,
31+
"footnotes": false,
32+
"bases": true
3133
}

.obsidian/plugins/copy-url-in-preview/main.js

Lines changed: 2 additions & 2 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.
Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,11 @@
11
{
22
"id": "copy-url-in-preview",
33
"name": "Image Context Menus",
4-
"version": "1.10.0",
4+
"version": "1.11.2",
55
"minAppVersion": "1.6.6",
6-
"description": "Copy to clipboard, Open in default app, Show in system explorer, Reveal file in navigation, Open in new tab context menus for images.",
6+
"description": "Copy to clipboard, Open in default app, Show in system explorer, Reveal file in navigation, Open in new tab, Rename context menus for images.",
77
"author": "NomarCub",
88
"authorUrl": "https://github.com/NomarCub",
99
"fundingUrl": "https://ko-fi.com/nomarcub",
1010
"isDesktopOnly": false
11-
}
11+
}

.obsidian/plugins/obsidian-git/manifest.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,5 +6,5 @@
66
"description": "Integrate Git version control with automatic backup and other advanced features.",
77
"isDesktopOnly": false,
88
"fundingUrl": "https://ko-fi.com/vinzent",
9-
"version": "2.33.0"
9+
"version": "2.35.2"
1010
}

.obsidian/workspace.json

Lines changed: 12 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -4,11 +4,11 @@
44
"type": "split",
55
"children": [
66
{
7-
"id": "39735eaedba9e390",
7+
"id": "b0664b3e516452e0",
88
"type": "tabs",
99
"children": [
1010
{
11-
"id": "1ab61776fdab9c7c",
11+
"id": "d93ffc2d4e7b14bd",
1212
"type": "leaf",
1313
"state": {
1414
"type": "markdown",
@@ -20,15 +20,9 @@
2020
"icon": "lucide-file",
2121
"title": "README_CN"
2222
}
23-
}
24-
]
25-
},
26-
{
27-
"id": "b0664b3e516452e0",
28-
"type": "tabs",
29-
"children": [
23+
},
3024
{
31-
"id": "d93ffc2d4e7b14bd",
25+
"id": "9762a61535bfd3ff",
3226
"type": "leaf",
3327
"state": {
3428
"type": "markdown",
@@ -41,7 +35,9 @@
4135
"title": "README"
4236
}
4337
}
44-
]
38+
],
39+
"currentTab": 1,
40+
"stacked": true
4541
}
4642
],
4743
"direction": "vertical"
@@ -185,8 +181,8 @@
185181
"state": {
186182
"type": "git-view",
187183
"state": {},
188-
"icon": "git-pull-request",
189-
"title": "Source Control"
184+
"icon": "lucide-ghost",
185+
"title": "git-view"
190186
}
191187
}
192188
],
@@ -199,6 +195,7 @@
199195
},
200196
"left-ribbon": {
201197
"hiddenItems": {
198+
"bases:Create new base": false,
202199
"switcher:Open quick switcher": false,
203200
"graph:Open graph view": false,
204201
"canvas:Create new canvas": false,
@@ -208,11 +205,11 @@
208205
"obsidian-git:Open Git source control": false
209206
}
210207
},
211-
"active": "d93ffc2d4e7b14bd",
208+
"active": "9762a61535bfd3ff",
212209
"lastOpenFiles": [
213-
"Editor/ShaderDrawer.cs~",
214210
"README_CN.md",
215211
"README.md",
212+
"Editor/ShaderDrawer.cs~",
216213
"package.json~",
217214
"Editor/ScriptableObject.meta",
218215
"Editor/ScriptableObject/LwguiShaderPropertyPreset.cs.meta",
@@ -222,7 +219,6 @@
222219
"Editor/ScriptableObject/LwguiRampAtlas.cs",
223220
"Editor/ScriptableObject/GradientObject.cs",
224221
"Editor/ScriptableObject",
225-
"Editor/ScriptableObject/LWGUIShaderPropertyPreset.cs",
226222
"assets~/Pasted image 20250523120309.png",
227223
"assets~/Pasted image 20250522183200.png",
228224
"assets~/Pasted image 20250321174432.png",

Editor/ScriptableObject/LwguiShaderPropertyPreset.cs

Lines changed: 16 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -283,18 +283,25 @@ public Preset GetPreset(int index)
283283
if (presets == null)
284284
return null;
285285

286-
if (index < presets.Count)
287-
{
286+
if (index < presets.Count && index >= 0)
288287
return presets[index];
289-
}
290-
else
291-
{
292-
Debug.LogError($"LWGUI: Index ({ index }) is out of range when accessing PresetFile: { name }");
293-
return null;
294-
}
288+
289+
Debug.LogError($"LWGUI: Index ({ index }) is out of range when accessing PresetFile: { name }");
290+
return null;
295291
}
296292

297-
public Preset GetPreset(float index) => GetPreset((int)index);
293+
public Preset TryGetPreset(int index)
294+
{
295+
if (presets == null)
296+
return null;
297+
298+
if (index < presets.Count && index >= 0)
299+
return presets[index];
300+
301+
return null;
302+
}
303+
304+
public Preset TryGetPreset(float floatIndex) => TryGetPreset(Mathf.CeilToInt(floatIndex));
298305

299306
private void OnValidate()
300307
{

Editor/ShaderDrawer.cs

Lines changed: 43 additions & 37 deletions
Original file line numberDiff line numberDiff line change
@@ -30,7 +30,8 @@ public interface IPresetDrawer
3030
{
3131
public string GetPresetFileName();
3232

33-
public LwguiShaderPropertyPreset.Preset GetActivePreset(MaterialProperty inProp, LwguiShaderPropertyPreset lwguiShaderPropertyPreset);
33+
public LwguiShaderPropertyPreset.Preset GetActivePreset(MaterialProperty inProp, LwguiShaderPropertyPreset lwguiShaderPropertyPreset) =>
34+
lwguiShaderPropertyPreset?.TryGetPreset(inProp?.floatValue ?? -1);
3435
}
3536
#endregion
3637

@@ -110,9 +111,6 @@ public virtual void GetDefaultValueDescription(Shader inShader, MaterialProperty
110111

111112
public string GetPresetFileName() => _presetFileName;
112113

113-
public LwguiShaderPropertyPreset.Preset GetActivePreset(MaterialProperty inProp, LwguiShaderPropertyPreset lwguiShaderPropertyPreset) =>
114-
PresetDrawer.GetActivePresetFromFloatProperty(inProp, lwguiShaderPropertyPreset);
115-
116114
public override void OnGUI(Rect position, MaterialProperty prop, GUIContent label, MaterialEditor editor)
117115
{
118116
metaDatas = Helper.GetLWGUIMetadatas(editor);
@@ -128,7 +126,7 @@ public override void OnGUI(Rect position, MaterialProperty prop, GUIContent labe
128126
prop.floatValue = toggleResult ? 1.0f : 0.0f;
129127
var keyword = Helper.GetKeywordName(_keyword, prop.name);
130128
Helper.SetShaderKeywordEnabled(editor.targets, keyword, toggleResult);
131-
PresetHelper.GetPresetAsset(_presetFileName)?.GetPreset(prop.floatValue)?.ApplyToEditingMaterial(editor, metaDatas.perMaterialData);
129+
PresetHelper.GetPresetAsset(_presetFileName)?.TryGetPreset(prop.floatValue)?.ApplyToEditingMaterial(editor, metaDatas.perMaterialData);
132130
TimelineHelper.SetKeywordToggleToTimeline(prop, editor, keyword);
133131
}
134132
EditorGUI.showMixedValue = showMixedValue;
@@ -265,9 +263,6 @@ public override void GetDefaultValueDescription(Shader inShader, MaterialPropert
265263
}
266264

267265
public string GetPresetFileName() => _presetFileName;
268-
269-
public LwguiShaderPropertyPreset.Preset GetActivePreset(MaterialProperty inProp, LwguiShaderPropertyPreset lwguiShaderPropertyPreset) =>
270-
PresetDrawer.GetActivePresetFromFloatProperty(inProp, lwguiShaderPropertyPreset);
271266

272267
public override void DrawProp(Rect position, MaterialProperty prop, GUIContent label, MaterialEditor editor)
273268
{
@@ -279,7 +274,7 @@ public override void DrawProp(Rect position, MaterialProperty prop, GUIContent l
279274
prop.floatValue = value ? 1.0f : 0.0f;
280275
var keyword = Helper.GetKeywordName(_keyWord, prop.name);
281276
Helper.SetShaderKeywordEnabled(editor.targets, keyword, value);
282-
PresetHelper.GetPresetAsset(_presetFileName)?.GetPreset(prop.floatValue)?.ApplyToEditingMaterial(editor, metaDatas.perMaterialData);
277+
PresetHelper.GetPresetAsset(_presetFileName)?.TryGetPreset(prop.floatValue)?.ApplyToEditingMaterial(editor, metaDatas.perMaterialData);
283278
TimelineHelper.SetKeywordToggleToTimeline(prop, editor, keyword);
284279
}
285280
EditorGUI.showMixedValue = false;
@@ -301,30 +296,61 @@ public override void Apply(MaterialProperty prop)
301296
///
302297
/// group: parent group name (Default: none)
303298
/// power: power of slider (Default: 1)
299+
/// presetFileName: "Shader Property Preset" asset name, it rounds up the float to choose which Preset to use.
300+
/// You can create new Preset by
301+
/// "Right Click > Create > LWGUI > Shader Property Preset" in Project window,
302+
/// *any Preset in the entire project cannot have the same name*
304303
/// Target Property Type: Range
305304
/// </summary>
306-
public class SubPowerSliderDrawer : SubDrawer
305+
public class SubPowerSliderDrawer : SubDrawer, IPresetDrawer
307306
{
307+
public string presetFileName;
308+
308309
private float _power = 1;
309310

310311
public SubPowerSliderDrawer(float power) : this("_", power) { }
312+
313+
public SubPowerSliderDrawer(string group, float power) : this(group, power, string.Empty) { }
311314

312-
public SubPowerSliderDrawer(string group, float power)
315+
public SubPowerSliderDrawer(string group, float power, string presetFileName)
313316
{
314317
this.group = group;
315318
this._power = Mathf.Clamp(power, 0, float.MaxValue);
319+
this.presetFileName = presetFileName;
316320
}
317321

318322
protected override bool IsMatchPropType(MaterialProperty property) { return property.GetPropertyType() == ShaderPropertyType.Range; }
323+
324+
public override void BuildStaticMetaData(Shader inShader, MaterialProperty inProp, MaterialProperty[] inProps, PropertyStaticData inoutPropertyStaticData)
325+
{
326+
base.BuildStaticMetaData(inShader, inProp, inProps, inoutPropertyStaticData);
327+
PresetDrawer.SetPresetAssetToStaticData(inoutPropertyStaticData, presetFileName);
328+
}
329+
330+
public string GetPresetFileName() => presetFileName;
319331

320332
public override void DrawProp(Rect position, MaterialProperty prop, GUIContent label, MaterialEditor editor)
321333
{
322334
RevertableHelper.FixGUIWidthMismatch(prop.GetPropertyType(), editor);
323335
EditorGUI.showMixedValue = prop.hasMixedValue;
324336
var rect = position;
337+
var oldValue = prop.floatValue;
325338
ReflectionHelper.DoPowerRangeProperty(rect, prop, label, _power);
339+
if (prop.floatValue != oldValue)
340+
{
341+
PresetHelper.GetPresetAsset(presetFileName)?.TryGetPreset(prop.floatValue)?.ApplyToEditingMaterial(editor, metaDatas.perMaterialData);
342+
}
326343
EditorGUI.showMixedValue = false;
327344
}
345+
346+
public override void Apply(MaterialProperty prop)
347+
{
348+
base.Apply(prop);
349+
if (!prop.hasMixedValue && VersionControlHelper.IsWriteable(prop.targets))
350+
{
351+
PresetDrawer.ApplyPresetWithoutPropertyChanges(presetFileName, prop);
352+
}
353+
}
328354
}
329355

330356
/// <summary>
@@ -717,28 +743,14 @@ public static void SetPresetAssetToStaticData(PropertyStaticData inoutPropertySt
717743
inoutPropertyStaticData.propertyPresetAsset = PresetHelper.GetPresetAsset(presetFileName);
718744
}
719745

720-
public static LwguiShaderPropertyPreset.Preset GetActivePresetFromFloatProperty(MaterialProperty inProp, LwguiShaderPropertyPreset lwguiShaderPropertyPreset)
721-
{
722-
LwguiShaderPropertyPreset.Preset preset = null;
723-
var index = (int)inProp.floatValue;
724-
if (lwguiShaderPropertyPreset && index >= 0 && index < lwguiShaderPropertyPreset.GetPresetCount())
725-
{
726-
preset = lwguiShaderPropertyPreset.GetPreset(index);
727-
}
728-
return preset;
729-
}
730-
731746
// Apply Keywords and Passes in presets without modifying other property values
732747
// Used to call in MaterialPropertyDrawer.Apply()
733748
public static void ApplyPresetWithoutPropertyChanges(string presetFileName, MaterialProperty prop)
734749
{
735750
var presetFile = PresetHelper.GetPresetAsset(presetFileName);
736-
if (presetFile != null
737-
&& prop.floatValue < presetFile.GetPresetCount()
738-
&& ShowIfDecorator.GetShowIfResultToFilterDrawerApplying(prop)
739-
)
751+
if (presetFile && ShowIfDecorator.GetShowIfResultToFilterDrawerApplying(prop))
740752
{
741-
presetFile.GetPreset(prop.floatValue)?.ApplyKeywordsAndPassesToMaterials(prop.targets);
753+
presetFile.TryGetPreset(prop.floatValue)?.ApplyKeywordsAndPassesToMaterials(prop.targets);
742754
}
743755
}
744756

@@ -752,18 +764,13 @@ public override void BuildStaticMetaData(Shader inShader, MaterialProperty inPro
752764

753765
public override void GetDefaultValueDescription(Shader inShader, MaterialProperty inProp, MaterialProperty inDefaultProp, PerShaderData inPerShaderData, PerMaterialData inoutPerMaterialData)
754766
{
755-
var index = (int)inDefaultProp.floatValue;
756767
var propertyPreset = inPerShaderData.propStaticDatas[inProp.name].propertyPresetAsset;
757-
758-
if (propertyPreset && index < propertyPreset.GetPresetCount() && index >= 0)
759-
inoutPerMaterialData.propDynamicDatas[inProp.name].defaultValueDescription = propertyPreset.GetPreset(index).presetName;
768+
if (propertyPreset)
769+
inoutPerMaterialData.propDynamicDatas[inProp.name].defaultValueDescription = propertyPreset.TryGetPreset(inDefaultProp.floatValue)?.presetName;
760770
}
761771

762772
public string GetPresetFileName() => presetFileName;
763773

764-
public LwguiShaderPropertyPreset.Preset GetActivePreset(MaterialProperty inProp, LwguiShaderPropertyPreset lwguiShaderPropertyPreset) =>
765-
GetActivePresetFromFloatProperty(inProp, lwguiShaderPropertyPreset);
766-
767774
public override void DrawProp(Rect position, MaterialProperty prop, GUIContent label, MaterialEditor editor)
768775
{
769776
EditorGUI.BeginChangeCheck();
@@ -773,7 +780,7 @@ public override void DrawProp(Rect position, MaterialProperty prop, GUIContent l
773780

774781
int index = (int)Mathf.Max(0, prop.floatValue);
775782
var presetFile = PresetHelper.GetPresetAsset(presetFileName);
776-
if (presetFile == null || presetFile.GetPresetCount() == 0)
783+
if (!presetFile || presetFile.GetPresetCount() == 0)
777784
{
778785
Helper.DrawShaderPropertyWithErrorLabel(rect, prop, label, editor, $"Invalid Preset File: {presetFileName}");
779786
return;
@@ -790,7 +797,7 @@ public override void DrawProp(Rect position, MaterialProperty prop, GUIContent l
790797
if (Helper.EndChangeCheck(metaDatas, prop))
791798
{
792799
prop.floatValue = newIndex;
793-
presetFile.GetPreset(newIndex).ApplyToEditingMaterial(editor, metaDatas.perMaterialData);
800+
presetFile.TryGetPreset(newIndex)?.ApplyToEditingMaterial(editor, metaDatas.perMaterialData);
794801
}
795802
EditorGUI.showMixedValue = false;
796803
}
@@ -799,7 +806,6 @@ public override void DrawProp(Rect position, MaterialProperty prop, GUIContent l
799806
Helper.DrawShaderPropertyWithErrorLabel(position, prop, label, editor, $"Out of Index Range");
800807
Debug.LogError($"LWGUI: { prop.name } out of Preset index range!");
801808
}
802-
803809
}
804810

805811
public override void Apply(MaterialProperty prop)

README.md

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -217,6 +217,10 @@ public SubToggleDrawer(string group, string keyWord, string presetFileName)
217217
///
218218
/// group: parent group name (Default: none)
219219
/// power: power of slider (Default: 1)
220+
/// presetFileName: "Shader Property Preset" asset name, it rounds up the float to choose which Preset to use.
221+
/// You can create new Preset by
222+
/// "Right Click > Create > LWGUI > Shader Property Preset" in Project window,
223+
/// *any Preset in the entire project cannot have the same name*
220224
/// Target Property Type: Range
221225
public SubPowerSliderDrawer(float power) : this("_", power) { }
222226
public SubPowerSliderDrawer(string group, float power)

README_CN.md

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -214,6 +214,10 @@ public SubToggleDrawer(string group, string keyWord, string presetFileName)
214214
///
215215
/// group: parent group name (Default: none)
216216
/// power: power of slider (Default: 1)
217+
/// presetFileName: "Shader Property Preset" asset name, it rounds up the float to choose which Preset to use.
218+
/// You can create new Preset by
219+
/// "Right Click > Create > LWGUI > Shader Property Preset" in Project window,
220+
/// *any Preset in the entire project cannot have the same name*
217221
/// Target Property Type: Range
218222
public SubPowerSliderDrawer(float power) : this("_", power) { }
219223
public SubPowerSliderDrawer(string group, float power)

Test/LWGUI_KeywordTest.mat

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,7 @@ Material:
1313
m_ModifiedSerializedProperties: 0
1414
m_ValidKeywords:
1515
- _KEYWORDENUM_KEY2
16-
- _KWENUM_KEY2
16+
- _KWENUM_KEY1
1717
- _SUBKEYWORDENUM_KEY1
1818
m_InvalidKeywords: []
1919
m_LightmapFlags: 4
@@ -33,7 +33,7 @@ Material:
3333
- _group: 1
3434
- _group_toggle1: 0
3535
- _keywordEnum: 1
36-
- _kwenum: 1
36+
- _kwenum: 0
3737
- _preset2: 0
3838
- _subEnum: 1
3939
- _subKeywordEnum: 0

0 commit comments

Comments
 (0)