mirror of
https://github.com/bdunderscore/modular-avatar.git
synced 2025-01-30 10:12:59 +08:00
feat: menu name may use string field
This commit is contained in:
parent
a71af7ae0a
commit
b01b280f79
@ -92,11 +92,14 @@ namespace nadena.dev.modular_avatar.core.editor
|
||||
private readonly SerializedProperty _prop_isDefault;
|
||||
private readonly SerializedProperty _prop_automaticValue;
|
||||
|
||||
private readonly SerializedProperty _prop_label;
|
||||
|
||||
public bool AlwaysExpandContents = false;
|
||||
public bool ExpandContents = false;
|
||||
|
||||
private readonly Dictionary<string, ProvidedParameter> _knownParameters = new();
|
||||
private bool _parameterSourceNotDetermined;
|
||||
private bool _isTryingRichLabel;
|
||||
|
||||
public MenuItemCoreGUI(SerializedObject obj, Action redraw)
|
||||
{
|
||||
@ -144,6 +147,8 @@ namespace nadena.dev.modular_avatar.core.editor
|
||||
_prop_isDefault = obj.FindProperty(nameof(ModularAvatarMenuItem.isDefault));
|
||||
_prop_automaticValue = obj.FindProperty(nameof(ModularAvatarMenuItem.automaticValue));
|
||||
|
||||
_prop_label = obj.FindProperty(nameof(ModularAvatarMenuItem.label));
|
||||
|
||||
_previewGUI = new MenuPreviewGUI(redraw);
|
||||
}
|
||||
|
||||
@ -255,11 +260,28 @@ namespace nadena.dev.modular_avatar.core.editor
|
||||
EditorGUILayout.BeginHorizontal();
|
||||
|
||||
EditorGUILayout.BeginVertical();
|
||||
EditorGUI.BeginChangeCheck();
|
||||
EditorGUILayout.PropertyField(_name, G("menuitem.prop.name"));
|
||||
if (EditorGUI.EndChangeCheck())
|
||||
var needsRichLabel = (!string.IsNullOrEmpty(_prop_label.stringValue) || _isTryingRichLabel);
|
||||
if (!needsRichLabel)
|
||||
{
|
||||
_name.serializedObject.ApplyModifiedProperties();
|
||||
EditorGUI.BeginChangeCheck();
|
||||
EditorGUILayout.PropertyField(_name, G("menuitem.prop.name"));
|
||||
if (EditorGUI.EndChangeCheck())
|
||||
{
|
||||
_name.serializedObject.ApplyModifiedProperties();
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
EditorGUILayout.PropertyField(_prop_label, G("menuitem.prop.name"));
|
||||
}
|
||||
|
||||
if (needsRichLabel)
|
||||
{
|
||||
var style = new GUIStyle(EditorStyles.textField);
|
||||
style.richText = true;
|
||||
style.alignment = TextAnchor.MiddleCenter;
|
||||
|
||||
EditorGUILayout.LabelField(" ", _prop_label.stringValue, style, GUILayout.Height(EditorGUIUtility.singleLineHeight * 3));
|
||||
}
|
||||
|
||||
EditorGUILayout.PropertyField(_texture, G("menuitem.prop.icon"));
|
||||
@ -269,7 +291,21 @@ namespace nadena.dev.modular_avatar.core.editor
|
||||
_parameterGUI.DoGUI(true);
|
||||
|
||||
ShowInnateParameterGUI();
|
||||
|
||||
|
||||
var newRichValue = EditorGUILayout.Toggle(G("menuitem.prop.rich_text"), needsRichLabel);
|
||||
if (newRichValue != needsRichLabel)
|
||||
{
|
||||
if (newRichValue)
|
||||
{
|
||||
_isTryingRichLabel = true;
|
||||
}
|
||||
else
|
||||
{
|
||||
_isTryingRichLabel = false;
|
||||
_prop_label.stringValue = "";
|
||||
}
|
||||
}
|
||||
|
||||
EditorGUILayout.EndVertical();
|
||||
|
||||
if (_texture != null)
|
||||
|
@ -280,5 +280,8 @@
|
||||
|
||||
"ro_sim.effect_group.rule_inverted": "This rule is inverted",
|
||||
"ro_sim.effect_group.rule_inverted.tooltip": "This rule will be applied when one of its conditions is NOT met",
|
||||
"ro_sim.effect_group.conditions": "Conditions"
|
||||
"ro_sim.effect_group.conditions": "Conditions",
|
||||
|
||||
"menuitem.prop.rich_text": "Rich text",
|
||||
"menuitem.prop.rich_text.tooltip": "Use a long name which may contain rich text and line breaks."
|
||||
}
|
||||
|
@ -49,6 +49,14 @@ namespace nadena.dev.modular_avatar.core
|
||||
/// </summary>
|
||||
public bool automaticValue;
|
||||
|
||||
/// <summary>
|
||||
/// Although unspecified, the label of a menu may contain rich text and line breaks.
|
||||
/// If label is not an empty string, this MenuItem will use that as its name.
|
||||
/// Otherwise, it will use the name of the containing game object as the label.
|
||||
/// </summary>
|
||||
[Multiline]
|
||||
public string label = "";
|
||||
|
||||
private void Reset()
|
||||
{
|
||||
// Init settings only when added or reset manually from the Inspector.
|
||||
@ -98,7 +106,7 @@ namespace nadena.dev.modular_avatar.core
|
||||
|
||||
var cloned = new VirtualControl(Control);
|
||||
cloned.subMenu = null;
|
||||
cloned.name = gameObject.name;
|
||||
cloned.name = string.IsNullOrEmpty(label) ? gameObject.name : label;
|
||||
|
||||
FilterSubParameters(cloned);
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user