mirror of
https://github.com/aharabada/glitchy-engine-beef.git
synced 2026-09-05 13:01:52 +00:00
Add support for strings and BoolX in script engine, show strings as textfields in editor
This commit is contained in:
@@ -14,6 +14,8 @@ static sealed class ScriptEngineHelper
|
||||
{
|
||||
private static Dictionary<StringView, ScriptFieldType> _scriptFieldTypes = new Dictionary<StringView, ScriptFieldType>()
|
||||
{
|
||||
("System.String", .String),
|
||||
|
||||
("System.Boolean", .Bool),
|
||||
("System.Char", .Char),
|
||||
|
||||
@@ -382,6 +384,8 @@ static class ScriptEngine
|
||||
// TODO: Handle Structs when copying fields to instance.
|
||||
case .Class:
|
||||
// TODO: Handle Class when copying fields to instance.
|
||||
case .String:
|
||||
// TODO: Handle String when copying fields to instance.
|
||||
default:
|
||||
script.Instance.SetFieldValue(scriptField, field._data);
|
||||
}
|
||||
|
||||
@@ -15,7 +15,9 @@ enum ScriptFieldType
|
||||
case GenericClass;
|
||||
case Array;
|
||||
|
||||
case Bool;
|
||||
case String;
|
||||
|
||||
case Bool, Bool2, Bool3, Bool4;
|
||||
case Char;
|
||||
|
||||
case SByte;
|
||||
@@ -37,8 +39,20 @@ enum ScriptFieldType
|
||||
{
|
||||
switch(this)
|
||||
{
|
||||
case .String:
|
||||
return typeof(String);
|
||||
|
||||
case .Bool:
|
||||
return typeof(bool);
|
||||
case .Bool2:
|
||||
return typeof(bool2);
|
||||
case .Bool3:
|
||||
return typeof(bool3);
|
||||
case .Bool4:
|
||||
return typeof(bool4);
|
||||
|
||||
case .Char:
|
||||
return typeof(char16);
|
||||
|
||||
case .SByte:
|
||||
return typeof(int8);
|
||||
|
||||
@@ -274,6 +274,10 @@ internal class EntityEditor
|
||||
// TODO: Show component drop target
|
||||
ImGui.Text($"{fieldName} Component ({fieldType.Name})");
|
||||
}
|
||||
else if (fieldType == typeof(string))
|
||||
{
|
||||
newValue = ShowStringEditor(reference, fieldType, fieldName, attributes);
|
||||
}
|
||||
else
|
||||
{
|
||||
ImGui.EndDisabled();
|
||||
@@ -328,6 +332,29 @@ internal class EntityEditor
|
||||
return newValue;
|
||||
}
|
||||
|
||||
private static object ShowStringEditor(object reference, Type fieldType, string fieldName, IEnumerable<Attribute> attributes)
|
||||
{
|
||||
object newValue = DidNotChange;
|
||||
|
||||
TextFieldAttribute textField = GetAttribute<TextFieldAttribute>(attributes);
|
||||
|
||||
string value = reference as string ?? $"{float.MinValue}";
|
||||
|
||||
if (textField?.Multiline == true)
|
||||
{
|
||||
ImGui.Text(fieldName);
|
||||
if (ImGui.InputTextMultiline($"##{fieldName}", ref value, 1000, new Vector2(-1.0f, ImGui.GetTextLineHeight() * textField.TextFieldLines)))
|
||||
newValue = value;
|
||||
}
|
||||
else
|
||||
{
|
||||
if (ImGui.InputText(fieldName, ref value, 1000))
|
||||
newValue = value;
|
||||
}
|
||||
|
||||
return newValue;
|
||||
}
|
||||
|
||||
public static void ShowEditor(Type type, object reference)
|
||||
{
|
||||
T GetValue<T>(FieldInfo fieldInfo)
|
||||
|
||||
@@ -0,0 +1,19 @@
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Text;
|
||||
|
||||
namespace GlitchyEngine.Editor;
|
||||
|
||||
public sealed class TextFieldAttribute : Attribute
|
||||
{
|
||||
/// <summary>
|
||||
/// If <see langword="true"/> the string field will be shown in a multiline text box.
|
||||
/// </summary>
|
||||
public bool Multiline { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// The number of lines that the text field has. Only applies if <see cref="Multiline"/> is set to <see langword="true"/>.
|
||||
/// It does not affect how many lines of text can be stored in the field. Only how many lines the text field itself has.
|
||||
/// </summary>
|
||||
public int TextFieldLines { get; set; } = 3;
|
||||
}
|
||||
Reference in New Issue
Block a user