CORE dashboard + a lot of changes

This commit is contained in:
2026-06-22 20:09:15 +02:00
parent 19d6bd934a
commit 89fa0b23b2
101 changed files with 1525 additions and 177 deletions
@@ -17,8 +17,7 @@ namespace RPGCoreCommon.Helpers.Editor.Drawers
private SerializedProperty _property;
private SerializedProperty _tempKeyProperty;
private SerializedProperty _keysProperty;
private SerializedProperty _valuesProperty;
private SerializedProperty _pairsProperty;
private SerializableDictionaryAttribute _sdAttribute;
private Type _keyType;
@@ -29,12 +28,8 @@ namespace RPGCoreCommon.Helpers.Editor.Drawers
_property = property;
_sdAttribute = fieldInfo.GetCustomAttribute<SerializableDictionaryAttribute>() ?? new SerializableDictionaryAttribute();
_tempKeyProperty = property.FindPropertyRelative("_tempKey");
_keysProperty = property.FindPropertyRelative("_keys");
_valuesProperty = property.FindPropertyRelative("_values");
_pairsProperty = property.FindPropertyRelative("_pairs");
if (_keysProperty == null || _valuesProperty == null)
return new HelpBox("Keys and Values in SerializableDictionary must be serializable!", HelpBoxMessageType.Error);
var genericTypes = property.boxedValue.GetType().FindGenericDefinitionType(typeof(SerializableDictionary<,>)).GetGenericArguments();
_keyType = genericTypes[0];
_valueType = genericTypes[1];
@@ -52,12 +47,11 @@ namespace RPGCoreCommon.Helpers.Editor.Drawers
}
var list = root.Q<ListView>("sd-list");
list.BindProperty(_valuesProperty);
list.BindProperty(_pairsProperty);
list.makeItem = CreateRow;
list.bindItem = BindRow;
list.onAdd = OnAdd;
list.onRemove = OnRemove;
list.itemIndexChanged += OnSwap;
if (_sdAttribute is not null)
{
@@ -90,12 +84,6 @@ namespace RPGCoreCommon.Helpers.Editor.Drawers
return root;
}
private void OnSwap(int index1, int index2)
{
_keysProperty.MoveArrayElement(index1, index2);
_property.serializedObject.ApplyModifiedProperties();
}
private void OnAdd(BaseListView list)
{
var tempKey = _tempKeyProperty.boxedValue;
@@ -108,9 +96,10 @@ namespace RPGCoreCommon.Helpers.Editor.Drawers
return;
}
var keyExists = Enumerable.Range(0, _keysProperty.arraySize)
.Select(i => _keysProperty.GetArrayElementAtIndex(i))
.Any(prop => prop.boxedValue.Equals(tempKey));
var keyExists = Enumerable.Range(0, _pairsProperty.arraySize)
.Select(i => _pairsProperty.GetArrayElementAtIndex(i))
.Select(prop => prop.FindPropertyRelative("_key"))
.Any(keyProp => keyProp.boxedValue.Equals(tempKey));
if (keyExists)
{
@@ -124,13 +113,8 @@ namespace RPGCoreCommon.Helpers.Editor.Drawers
_tempKeyProperty.boxedValue = _keyType.IsValueType ? Activator.CreateInstance(_keyType) : null;
// New Key
_keysProperty.arraySize++;
_keysProperty.GetArrayElementAtIndex(_keysProperty.arraySize - 1).boxedValue = tempKey;
// New Value
_valuesProperty.arraySize++;
_valuesProperty.GetArrayElementAtIndex(_valuesProperty.arraySize - 1).boxedValue =
_valueType.IsValueType ? Activator.CreateInstance(_valueType) : null;
_pairsProperty.arraySize++;
_pairsProperty.GetArrayElementAtIndex(_pairsProperty.arraySize - 1).FindPropertyRelative("_key").boxedValue = tempKey;
// Update list and property
_property.serializedObject.ApplyModifiedProperties();
@@ -143,11 +127,7 @@ namespace RPGCoreCommon.Helpers.Editor.Drawers
var ids = list.selectedIds.SortDescending().ToList();
if (ids.Count < 0) return;
ids.ForEach(i =>
{
_keysProperty.DeleteArrayElementAtIndex(i);
_valuesProperty.DeleteArrayElementAtIndex(i);
});
ids.ForEach(i => _pairsProperty.DeleteArrayElementAtIndex(i));
// Update list and property
_property.serializedObject.ApplyModifiedProperties();
@@ -179,9 +159,9 @@ namespace RPGCoreCommon.Helpers.Editor.Drawers
private void BindRow(VisualElement row, int i)
{
if (i >= _keysProperty.arraySize) return;
row.Q<PropertyField>(className: "row-left").BindProperty(_keysProperty.GetArrayElementAtIndex(i));
row.Q<PropertyField>(className: "row-right").BindProperty(_valuesProperty.GetArrayElementAtIndex(i));
if (i >= _pairsProperty.arraySize) return;
row.Q<PropertyField>(className: "row-left").BindProperty(_pairsProperty.GetArrayElementAtIndex(i).FindPropertyRelative("_key"));
row.Q<PropertyField>(className: "row-right").BindProperty(_pairsProperty.GetArrayElementAtIndex(i).FindPropertyRelative("_value"));
}
}
}
@@ -28,7 +28,7 @@ namespace RPGCoreCommon.Helpers.Editor.Drawers
private void UpdateTypeField(SerializedProperty property, FakeObjectField field)
{
var typeName = ((SerializableType)property.boxedValue).type?.Name ?? NoTypeSelected;
var typeName = ((SerializableType)property.boxedValue)?.type?.Name ?? NoTypeSelected;
field.Set(typeName, EditorGUIUtility.FindTexture("cs Script Icon"));
}