Skip to content

Commit

Permalink
feat: supports RosettaUI 1.1.2
Browse files Browse the repository at this point in the history
  • Loading branch information
fuqunaga committed Jan 27, 2023
1 parent 31b4cb4 commit e565e86
Show file tree
Hide file tree
Showing 6 changed files with 131 additions and 106 deletions.
168 changes: 94 additions & 74 deletions Packages/PrefsGUI.RosettaUI/Editor/PrefsGUIEditorRosettaUI.cs
Original file line number Diff line number Diff line change
Expand Up @@ -83,7 +83,7 @@ protected override Element CreateElement()
)
),
UI.Space().SetHeight(20f),
UI.Field("Search word", () => searchWord),
UI.Field("Search word", () => searchWord, new FieldOption() { delayInput = true }),
UI.Field("Order", () => order),
UI.Field("Include assets", () => includeAssets),
UI.DynamicElementIf(
Expand All @@ -94,109 +94,129 @@ protected override Element CreateElement()
_objCheckExtension?.Title()
).SetHeight(230f),
PrefsGUIEditorRosettaUIComponent.CreateLineElement(),
UI.ScrollViewVertical(scrollViewHeight,
UI.Indent(
UI.DynamicElementOnStatusChanged(
() => (order, searchWord.ToLower(), includeAssets, showComponent, objPrefsListChangeCount),
_ =>
{
var word = searchWord.ToLower();
UI.DynamicElementOnStatusChanged(
() => (order, searchWord.ToLower(), includeAssets, showComponent, objPrefsListChangeCount),
_ =>
{
var word = searchWord.ToLower();

return order switch
{
Order.Key => CreatePrefsUIAtoZ(word),
Order.GameObject => CreatePrefsGameObject(word),
_ => throw new ArgumentOutOfRangeException()
};
}
)
)
)
return order switch
{
Order.Key => CreatePrefsUIAtoZ(word),
Order.GameObject => CreatePrefsGameObject(word),
_ => throw new ArgumentOutOfRangeException()
};
}
).SetHeight(scrollViewHeight)
);

Element CreatePrefsUIAtoZ(string word)
{
var prefsObjAll = PrefsAssetUtility.GetPrefsObjEnumerable(includeAssets)
.Where(po => IsContainWord(po.prefs.key, word))
.OrderBy(po => po.prefs.key);

return UI.Column(
prefsObjAll.Select(po =>
.OrderBy(po => po.prefs.key)
.ToList();

return UI.List(null,
() => prefsObjAll,
(binder, index) =>
{
var (prefs, obj) = po;
var (prefs, obj) = ((IBinder<(PrefsParam, Object)>)binder).Get();

var prefsElement = PrefsGUIEditorRosettaUIComponent
.CreateObjectFieldWithAssetMarkParts(obj, includeAssets)
.Prepend(prefs.CreateElement());


return _objCheckExtension != null
? UI.Row(
_objCheckExtension.PrefsLeft(prefs),
UI.Indent(UI.Row(prefsElement))
)
: UI.Row(prefsElement);
})
: UI.Indent(UI.Row(prefsElement));
},
new ListViewOption(false, true, false)
);
}

Element CreatePrefsGameObject(string word)
{
return UI.Column(
PrefsAssetUtility.GetObjPrefsList(includeAssets)
.SelectMany(op =>
{
var objNameHit = IsContainWord(op.obj.name, word);
var componentNameHit = op.holders
.Select(holder => holder.component)
.Any(parent => IsContainWord(parent.GetType().ToString(), word)
);
var prefsHit = op.PrefsAll.Any(p => IsContainWord(p.key, word));
var objPrefsList = PrefsAssetUtility.GetObjPrefsList(includeAssets)
.Where(objPrefs =>
{
var objNameHit = IsContainWord(objPrefs.obj.name, word);
var componentNameHit = objPrefs.holders
.Select(holder => holder.component)
.Any(parent => IsContainWord(parent.GetType().ToString(), word)
);
var prefsHit = objPrefs.PrefsAll.Any(p => IsContainWord(p.key, word));

if (!objNameHit && !prefsHit && !(showComponent && componentNameHit))
{
return Array.Empty<Element>();
}
return objNameHit || prefsHit || showComponent && componentNameHit;
})
.ToList();

return UI.List(null,
() => objPrefsList, (binder, idx) =>
{
var typedBinder = (IBinder<PrefsAssetUtility.ObjPrefs>)binder;
return CreateObjPrefsElement(typedBinder.Get());
},
new ListViewOption(false, true, false)
);

var prefsListForObj = (objNameHit
? op.PrefsAll
: FilterPrefs(op.PrefsAll)
).ToList();
Element CreateObjPrefsElement(PrefsAssetUtility.ObjPrefs objPrefs)
{
var objNameHit = IsContainWord(objPrefs.obj.name, word);
var componentNameHit = objPrefs.holders
.Select(holder => holder.component)
.Any(parent => IsContainWord(parent.GetType().ToString(), word)
);
var prefsHit = objPrefs.PrefsAll.Any(p => IsContainWord(p.key, word));

if (showComponent)
{
var objFieldParts = PrefsGUIEditorRosettaUIComponent.CreateObjectFieldWithAssetMarkParts(op.obj);
if (!objNameHit && !prefsHit && !(showComponent && componentNameHit))
{
return null;
}

var prefsListForObj = (objNameHit
? objPrefs.PrefsAll
: FilterPrefs(objPrefs.PrefsAll)
).ToList();

if (showComponent)
{
var objFieldParts =
PrefsGUIEditorRosettaUIComponent.CreateObjectFieldWithAssetMarkParts(objPrefs.obj);

return new Element[]
return UI.Column(
UI.Row(
_objCheckExtension == null
? objFieldParts
: objFieldParts.Prepend(_objCheckExtension.PrefsSetLeft(prefsListForObj))
),
UI.Indent(
objPrefs.holders.SelectMany(holder =>
{
UI.Row(
_objCheckExtension == null
? objFieldParts
: objFieldParts.Prepend(_objCheckExtension.PrefsSetLeft(prefsListForObj))
),
UI.Indent(
op.holders.SelectMany(holder =>
{
var enableFilter = !objNameHit &&
!IsContainWord(holder.component.GetType().ToString(), word);
var enableFilter = !objNameHit &&
!IsContainWord(holder.component.GetType().ToString(), word);

var prefsList = (enableFilter
? FilterPrefs(holder.prefsSet)
: holder.prefsSet
).ToList();

return CreateObjFieldAndPrefsListElement(holder.component, prefsList, false);
})
)
};
}
else
{
return CreateObjFieldAndPrefsListElement(op.obj, prefsListForObj, true, 2);
}
})
);
var prefsList = (enableFilter
? FilterPrefs(holder.prefsSet)
: holder.prefsSet
).ToList();

return CreateObjFieldAndPrefsListElement(holder.component, prefsList, false);
})
)
);
}
else
{
return UI.Column(
CreateObjFieldAndPrefsListElement(objPrefs.obj, prefsListForObj, true, 2)
);
}
}

IEnumerable<PrefsParam> FilterPrefs(IEnumerable<PrefsParam> prefsSet) =>
prefsSet.Where(prefs => IsContainWord(prefs.key, word));

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -20,7 +20,7 @@ public static class PrefsMaterialPropertyExtension
private static void RegisterUI()
{
UICustom.RegisterElementCreationFunc<PrefsMaterialProperty>(
(label, getMenu) => getMenu().CreateElement(label)
(label, binder) => binder.Get().CreateElement(label)
);
}

Expand Down
54 changes: 30 additions & 24 deletions Packages/PrefsGUI.RosettaUI/Runtime/UICustomPrefsGUI.cs
Original file line number Diff line number Diff line change
Expand Up @@ -3,47 +3,53 @@
using System.Linq;
using System.Reflection;
using RosettaUI;
#if UNITY_EDITOR
using UnityEditor;
#else
using UnityEngine;
#endif

namespace PrefsGUI.RosettaUI
{
public static class UICustomPrefsGUI
{
private static readonly Dictionary<Type, Func<Func<PrefsParam>, Element>> CreationFuncTable = new();

private static readonly Dictionary<Type, Func<IBinder<PrefsParam>, Element>> CreationFuncTable = new();

#if UNITY_EDITOR
[InitializeOnLoadMethod]
#else
[RuntimeInitializeOnLoadMethod]
#endif
public static void RegisterUICustom()
{
UICustom.RegisterElementCreationFunc<PrefsParam>((label, getPrefsParam) =>
UICustom.RegisterElementCreationFunc<PrefsParam>((label, binder) =>
{
var type = getPrefsParam().GetType();
var func = GetCreationFunc(type);
return func(getPrefsParam);
var func = GetCreationFunc(binder.Get().GetType());
return func(binder);
});

static Func<Func<PrefsParam>, Element> GetCreationFunc(Type type)
static Func<IBinder<PrefsParam>, Element> GetCreationFunc(Type type)
{
if (!CreationFuncTable.TryGetValue(type, out var func))
{
var prefsParamOuterType = GetPrefsParamOuterType(type);
var outerType = prefsParamOuterType.GetGenericArguments().First();
if (CreationFuncTable.TryGetValue(type, out var func)) return func;

var prefsParamOuterType = GetPrefsParamOuterType(type);
var outerType = prefsParamOuterType.GetGenericArguments().First();

var methodInfo = typeof(PrefsGUIExtensionField)
.GetMethods(BindingFlags.Public | BindingFlags.Static)
.Where(mi => mi.Name == nameof(PrefsGUIExtensionField.CreateElement) && mi.GetParameters().Length == 2)
.Select(mi => mi.MakeGenericMethod(outerType))
.FirstOrDefault();
var methodInfo = typeof(PrefsGUIExtensionField)
.GetMethods(BindingFlags.Public | BindingFlags.Static)
.Where(mi => mi.Name == nameof(PrefsGUIExtensionField.CreateElement) && mi.GetParameters().Length == 2)
.Select(mi => mi.MakeGenericMethod(outerType))
.FirstOrDefault();

var parameters = new object[] {null, null};
var parameters = new object[] {null, null};

func = (getPrefsParam) =>
{
parameters[0] = getPrefsParam();
return methodInfo?.Invoke(null, parameters) as Element;
};
func = (binder) =>
{
parameters[0] = binder.Get();
return methodInfo?.Invoke(null, parameters) as Element;
};

CreationFuncTable[type] = func;
}
CreationFuncTable[type] = func;

return func;
}
Expand Down
4 changes: 2 additions & 2 deletions Packages/PrefsGUI.RosettaUI/package.json
Original file line number Diff line number Diff line change
Expand Up @@ -8,8 +8,8 @@
"license": "MIT",
"dependencies": {
"ga.fuquna.prefsgui": "3.2.4",
"ga.fuquna.rosettaui": "1.1.0",
"ga.fuquna.rosettaui.uitoolkit": "0.0.10"
"ga.fuquna.rosettaui": "1.1.2",
"ga.fuquna.rosettaui.uitoolkit": "1.1.0"
},
"keywords": [
"unity",
Expand Down
1 change: 0 additions & 1 deletion Packages/manifest.json
Original file line number Diff line number Diff line change
Expand Up @@ -10,7 +10,6 @@
"com.unity.textmeshpro": "3.0.6",
"com.unity.timeline": "1.7.2",
"com.unity.ugui": "1.0.0",
"ga.fuquna.rosettaui.uitoolkit": "1.1.0",
"com.unity.modules.ai": "1.0.0",
"com.unity.modules.androidjni": "1.0.0",
"com.unity.modules.animation": "1.0.0",
Expand Down
8 changes: 4 additions & 4 deletions Packages/packages-lock.json
Original file line number Diff line number Diff line change
Expand Up @@ -130,8 +130,8 @@
"source": "embedded",
"dependencies": {
"ga.fuquna.prefsgui": "3.2.4",
"ga.fuquna.rosettaui": "1.1.0",
"ga.fuquna.rosettaui.uitoolkit": "0.0.10"
"ga.fuquna.rosettaui": "1.1.2",
"ga.fuquna.rosettaui.uitoolkit": "1.1.0"
}
},
"ga.fuquna.rapidgui": {
Expand All @@ -142,15 +142,15 @@
"url": "https://registry.npmjs.com"
},
"ga.fuquna.rosettaui": {
"version": "1.1.0",
"version": "1.1.2",
"depth": 1,
"source": "registry",
"dependencies": {},
"url": "https://registry.npmjs.com"
},
"ga.fuquna.rosettaui.uitoolkit": {
"version": "1.1.0",
"depth": 0,
"depth": 1,
"source": "registry",
"dependencies": {
"ga.fuquna.rosettaui": "1.1.0"
Expand Down

0 comments on commit e565e86

Please sign in to comment.