initial upload

This commit is contained in:
tom.hempel
2025-09-30 17:58:33 +02:00
commit 69b0c79692
4818 changed files with 229318 additions and 0 deletions

View File

@ -0,0 +1,113 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Reflection;
using Convai.Scripts.Runtime.LoggerSystem;
using UnityEditor;
using UnityEngine;
using UnityEngine.UIElements;
namespace Convai.Scripts.Editor.Setup.LoggerSettings
{
public class LoggerSettingsLogic
{
private readonly Runtime.LoggerSystem.LoggerSettings _loggerSettings = Resources.Load<Runtime.LoggerSystem.LoggerSettings>("LoggerSettings");
private Dictionary<FieldInfo, Toggle> _selectAllMapping;
private Dictionary<FieldInfo, List<Toggle>> _toggleMapping;
public bool GetLogLevelEnabledStatus(FieldInfo fieldInfo, ConvaiLogger.LogLevel logLevel)
{
return ((ConvaiLogger.LogLevel)fieldInfo.GetValue(_loggerSettings) & logLevel) != 0;
}
public bool IsAllSelectedForCategory(FieldInfo fieldInfo)
{
ConvaiLogger.LogLevel logLevel = (ConvaiLogger.LogLevel)fieldInfo.GetValue(_loggerSettings);
return Enum.GetValues(typeof(ConvaiLogger.LogLevel))
.Cast<ConvaiLogger.LogLevel>()
.Where(enumType => enumType != ConvaiLogger.LogLevel.None)
.All(enumType => (logLevel & enumType) != 0);
}
public void AddToToggleDictionary(FieldInfo fieldInfo, Toggle toggle)
{
_toggleMapping ??= new Dictionary<FieldInfo, List<Toggle>>();
if (_toggleMapping.ContainsKey(fieldInfo))
_toggleMapping[fieldInfo].Add(toggle);
else
_toggleMapping.Add(fieldInfo, new List<Toggle> { toggle });
}
public void AddToSelectAllDictionary(FieldInfo fieldInfo, Toggle toggle)
{
_selectAllMapping ??= new Dictionary<FieldInfo, Toggle>();
_selectAllMapping[fieldInfo] = toggle;
}
public void OnToggleClicked(FieldInfo fieldInfo, ConvaiLogger.LogLevel logLevel, bool status)
{
UpdateEnumFlag(fieldInfo, logLevel, status);
_selectAllMapping[fieldInfo].SetValueWithoutNotify(IsAllSelectedForCategory(fieldInfo));
EditorUtility.SetDirty(_loggerSettings);
}
private void UpdateEnumFlag(FieldInfo fieldInfo, ConvaiLogger.LogLevel logLevel, bool status)
{
ConvaiLogger.LogLevel value = (ConvaiLogger.LogLevel)fieldInfo.GetValue(_loggerSettings);
switch (status)
{
case true:
value |= logLevel;
break;
case false:
value &= ~logLevel;
break;
}
fieldInfo.SetValue(_loggerSettings, value);
}
public void OnSelectAllClicked(FieldInfo fieldInfo, bool status)
{
ConvaiLogger.LogLevel value = status ? (ConvaiLogger.LogLevel)31 : 0;
fieldInfo.SetValue(_loggerSettings, value);
EditorUtility.SetDirty(_loggerSettings);
UpdateToggleValues(fieldInfo, status);
}
private void UpdateToggleValues(FieldInfo fieldInfo, bool status)
{
foreach (Toggle toggle in _toggleMapping[fieldInfo]) toggle.SetValueWithoutNotify(status);
}
public void ClearAllOnClicked()
{
foreach (FieldInfo fieldInfo in typeof(Runtime.LoggerSystem.LoggerSettings).GetFields())
{
foreach (ConvaiLogger.LogLevel enumType in Enum.GetValues(typeof(ConvaiLogger.LogLevel)).Cast<ConvaiLogger.LogLevel>()) UpdateEnumFlag(fieldInfo, enumType, false);
UpdateToggleValues(fieldInfo, false);
UpdateSelectAllValues(fieldInfo, false);
}
EditorUtility.SetDirty(_loggerSettings);
}
private void UpdateSelectAllValues(FieldInfo fieldInfo, bool status)
{
_selectAllMapping[fieldInfo].SetValueWithoutNotify(status);
}
public void SelectAllOnClicked()
{
foreach (FieldInfo fieldInfo in typeof(Runtime.LoggerSystem.LoggerSettings).GetFields())
{
foreach (ConvaiLogger.LogLevel enumType in Enum.GetValues(typeof(ConvaiLogger.LogLevel)).Cast<ConvaiLogger.LogLevel>()) UpdateEnumFlag(fieldInfo, enumType, true);
UpdateToggleValues(fieldInfo, true);
UpdateSelectAllValues(fieldInfo, true);
}
EditorUtility.SetDirty(_loggerSettings);
}
}
}

View File

@ -0,0 +1,3 @@
fileFormatVersion: 2
guid: 89de643989fd4cfea9cfea6be828d4ae
timeCreated: 1723360157

View File

@ -0,0 +1,139 @@
using System;
using System.Reflection;
using Convai.Scripts.Runtime.LoggerSystem;
using UnityEngine.UIElements;
namespace Convai.Scripts.Editor.Setup.LoggerSettings
{
public class LoggerSettingsUI
{
private readonly LoggerSettingsLogic _loggerSettingsLogic;
public LoggerSettingsUI(VisualElement rootElement)
{
VisualElement contentContainer = rootElement.Q<VisualElement>("content-container");
if (contentContainer == null)
{
ConvaiLogger.Warn("Cannot find Content Container", ConvaiLogger.LogCategory.UI);
return;
}
VisualElement loggerTable = contentContainer.Q<VisualElement>("logger-table");
if (loggerTable == null)
{
ConvaiLogger.Warn("Cannot find loggerTable", ConvaiLogger.LogCategory.UI);
return;
}
_loggerSettingsLogic = new LoggerSettingsLogic();
CreateLoggerTable(contentContainer);
SetupButtons(contentContainer);
}
private void CreateLoggerTable(VisualElement contentContainer)
{
VisualElement loggerSettings = contentContainer.Q<VisualElement>("logger-settings");
VisualElement loggerTable = loggerSettings.Q<VisualElement>("logger-table");
CreateHeaders(loggerTable);
VisualElement lastRow = null;
foreach (FieldInfo fieldInfo in typeof(Runtime.LoggerSystem.LoggerSettings).GetFields())
{
VisualElement tableRow = new();
Label categoryName = new(fieldInfo.Name);
Toggle selectAll = CreateSelectAllForCategory(fieldInfo);
_loggerSettingsLogic.AddToSelectAllDictionary(fieldInfo, selectAll);
categoryName.AddToClassList("logger-table-element");
tableRow.Add(selectAll);
tableRow.Add(categoryName);
CreateSeverityTogglesForCategory(fieldInfo, tableRow);
tableRow.AddToClassList("logger-table-row");
loggerTable.Add(tableRow);
lastRow = tableRow;
}
lastRow?.AddToClassList("logger-table-row-last");
}
private static void CreateHeaders(VisualElement loggerTable)
{
VisualElement tableHeader = new();
VisualElement selectAll = new Label("Select All");
VisualElement category = new Label("Category");
selectAll.AddToClassList("logger-table-element");
category.AddToClassList("logger-table-element");
tableHeader.Add(selectAll);
tableHeader.Add(category);
foreach (ConvaiLogger.LogLevel logLevel in Enum.GetValues(typeof(ConvaiLogger.LogLevel)))
{
if (logLevel == ConvaiLogger.LogLevel.None) continue;
VisualElement label = new Label(logLevel.ToString());
label.AddToClassList("logger-table-element");
tableHeader.Add(label);
}
tableHeader.AddToClassList("logger-table-row");
tableHeader.AddToClassList("logger-table-row-first");
loggerTable.Add(tableHeader);
}
private Toggle CreateSelectAllForCategory(FieldInfo fieldInfo)
{
Toggle selectAll = new()
{
value = _loggerSettingsLogic.IsAllSelectedForCategory(fieldInfo)
};
selectAll.RegisterValueChangedCallback(evt => { _loggerSettingsLogic.OnSelectAllClicked(fieldInfo, evt.newValue); });
selectAll.AddToClassList("logger-table-element");
return selectAll;
}
private void CreateSeverityTogglesForCategory(FieldInfo fieldInfo, VisualElement severityContainer)
{
foreach (ConvaiLogger.LogLevel enumType in Enum.GetValues(typeof(ConvaiLogger.LogLevel)))
{
if (enumType == ConvaiLogger.LogLevel.None) continue;
Toggle toggle = new()
{
value = _loggerSettingsLogic.GetLogLevelEnabledStatus(fieldInfo, enumType)
};
void Callback(ChangeEvent<bool> evt)
{
_loggerSettingsLogic.OnToggleClicked(fieldInfo, enumType, evt.newValue);
}
toggle.UnregisterValueChangedCallback(Callback);
toggle.RegisterValueChangedCallback(Callback);
toggle.AddToClassList("logger-table-element");
severityContainer.Add(toggle);
_loggerSettingsLogic.AddToToggleDictionary(fieldInfo, toggle);
}
severityContainer.AddToClassList("severity-container");
}
private void SetupButtons(VisualElement content)
{
VisualElement loggerSettings = content.Q<VisualElement>("logger-settings");
if (loggerSettings == null)
{
ConvaiLogger.Warn("Cannot find logger-settings", ConvaiLogger.LogCategory.UI);
return;
}
Button selectAll = loggerSettings.Q<Button>("select-all");
if (selectAll != null)
{
selectAll.clicked -= _loggerSettingsLogic.SelectAllOnClicked;
selectAll.clicked += _loggerSettingsLogic.SelectAllOnClicked;
}
Button clearAll = loggerSettings.Q<Button>("clear-all");
if (clearAll != null)
{
clearAll.clicked -= _loggerSettingsLogic.ClearAllOnClicked;
clearAll.clicked += _loggerSettingsLogic.ClearAllOnClicked;
}
}
}
}

View File

@ -0,0 +1,3 @@
fileFormatVersion: 2
guid: 061d492629d1a5b4f818e1b2d7fd5997
timeCreated: 1723197447