Add Double2, Double3, Double4 to C# scripting API

This commit is contained in:
Wojtek Figat
2022-05-18 23:23:50 +02:00
parent 523d961f28
commit 04c0f19584
9 changed files with 5793 additions and 0 deletions

View File

@@ -0,0 +1,85 @@
// Copyright (c) 2012-2022 Wojciech Figat. All rights reserved.
using System.Linq;
using FlaxEditor.CustomEditors.Elements;
using FlaxEngine;
using FlaxEngine.GUI;
namespace FlaxEditor.CustomEditors.Editors
{
/// <summary>
/// Default implementation of the inspector used to edit Double2 value type properties.
/// </summary>
[CustomEditor(typeof(Double2)), DefaultEditor]
public class Double2Editor : CustomEditor
{
/// <summary>
/// The X component editor.
/// </summary>
protected DoubleValueElement XElement;
/// <summary>
/// The Y component editor.
/// </summary>
protected DoubleValueElement YElement;
/// <inheritdoc />
public override DisplayStyle Style => DisplayStyle.Inline;
/// <inheritdoc />
public override void Initialize(LayoutElementsContainer layout)
{
var grid = layout.CustomContainer<UniformGridPanel>();
var gridControl = grid.CustomControl;
gridControl.ClipChildren = false;
gridControl.Height = TextBox.DefaultHeight;
gridControl.SlotsHorizontally = 2;
gridControl.SlotsVertically = 1;
LimitAttribute limit = null;
var attributes = Values.GetAttributes();
if (attributes != null)
{
limit = (LimitAttribute)attributes.FirstOrDefault(x => x is LimitAttribute);
}
XElement = grid.DoubleValue();
XElement.SetLimits(limit);
XElement.DoubleValue.ValueChanged += OnValueChanged;
XElement.DoubleValue.SlidingEnd += ClearToken;
YElement = grid.DoubleValue();
YElement.SetLimits(limit);
YElement.DoubleValue.ValueChanged += OnValueChanged;
YElement.DoubleValue.SlidingEnd += ClearToken;
}
private void OnValueChanged()
{
if (IsSetBlocked)
return;
var isSliding = XElement.IsSliding || YElement.IsSliding;
var token = isSliding ? this : null;
var value = new Double2(XElement.DoubleValue.Value, YElement.DoubleValue.Value);
SetValue(value, token);
}
/// <inheritdoc />
public override void Refresh()
{
base.Refresh();
if (HasDifferentValues)
{
// TODO: support different values for ValueBox<T>
}
else
{
var value = (Double2)Values[0];
XElement.DoubleValue.Value = value.X;
YElement.DoubleValue.Value = value.Y;
}
}
}
}

View File

@@ -0,0 +1,96 @@
// Copyright (c) 2012-2022 Wojciech Figat. All rights reserved.
using System.Linq;
using FlaxEditor.CustomEditors.Elements;
using FlaxEngine;
using FlaxEngine.GUI;
namespace FlaxEditor.CustomEditors.Editors
{
/// <summary>
/// Default implementation of the inspector used to edit Double3 value type properties.
/// </summary>
[CustomEditor(typeof(Double3)), DefaultEditor]
public class Double3Editor : CustomEditor
{
/// <summary>
/// The X component editor.
/// </summary>
protected DoubleValueElement XElement;
/// <summary>
/// The Y component editor.
/// </summary>
protected DoubleValueElement YElement;
/// <summary>
/// The Z component editor.
/// </summary>
protected DoubleValueElement ZElement;
/// <inheritdoc />
public override DisplayStyle Style => DisplayStyle.Inline;
/// <inheritdoc />
public override void Initialize(LayoutElementsContainer layout)
{
var grid = layout.CustomContainer<UniformGridPanel>();
var gridControl = grid.CustomControl;
gridControl.ClipChildren = false;
gridControl.Height = TextBox.DefaultHeight;
gridControl.SlotsHorizontally = 3;
gridControl.SlotsVertically = 1;
LimitAttribute limit = null;
var attributes = Values.GetAttributes();
if (attributes != null)
{
limit = (LimitAttribute)attributes.FirstOrDefault(x => x is LimitAttribute);
}
XElement = grid.DoubleValue();
XElement.SetLimits(limit);
XElement.DoubleValue.ValueChanged += OnValueChanged;
XElement.DoubleValue.SlidingEnd += ClearToken;
YElement = grid.DoubleValue();
YElement.SetLimits(limit);
YElement.DoubleValue.ValueChanged += OnValueChanged;
YElement.DoubleValue.SlidingEnd += ClearToken;
ZElement = grid.DoubleValue();
ZElement.SetLimits(limit);
ZElement.DoubleValue.ValueChanged += OnValueChanged;
ZElement.DoubleValue.SlidingEnd += ClearToken;
}
private void OnValueChanged()
{
if (IsSetBlocked)
return;
var isSliding = XElement.IsSliding || YElement.IsSliding || ZElement.IsSliding;
var token = isSliding ? this : null;
var value = new Double3(XElement.DoubleValue.Value, YElement.DoubleValue.Value, ZElement.DoubleValue.Value);
SetValue(value, token);
}
/// <inheritdoc />
public override void Refresh()
{
base.Refresh();
if (HasDifferentValues)
{
// TODO: support different values for ValueBox<T>
}
else
{
var value = (Double3)Values[0];
XElement.DoubleValue.Value = value.X;
YElement.DoubleValue.Value = value.Y;
ZElement.DoubleValue.Value = value.Z;
}
}
}
}

View File

@@ -0,0 +1,107 @@
// Copyright (c) 2012-2022 Wojciech Figat. All rights reserved.
using System.Linq;
using FlaxEditor.CustomEditors.Elements;
using FlaxEngine;
using FlaxEngine.GUI;
namespace FlaxEditor.CustomEditors.Editors
{
/// <summary>
/// Default implementation of the inspector used to edit Double4 value type properties.
/// </summary>
[CustomEditor(typeof(Double4)), DefaultEditor]
public class Double4Editor : CustomEditor
{
/// <summary>
/// The X component editor.
/// </summary>
protected DoubleValueElement XElement;
/// <summary>
/// The Y component editor.
/// </summary>
protected DoubleValueElement YElement;
/// <summary>
/// The Z component editor.
/// </summary>
protected DoubleValueElement ZElement;
/// <summary>
/// The W component editor.
/// </summary>
protected DoubleValueElement WElement;
/// <inheritdoc />
public override DisplayStyle Style => DisplayStyle.Inline;
/// <inheritdoc />
public override void Initialize(LayoutElementsContainer layout)
{
var grid = layout.CustomContainer<UniformGridPanel>();
var gridControl = grid.CustomControl;
gridControl.ClipChildren = false;
gridControl.Height = TextBox.DefaultHeight;
gridControl.SlotsHorizontally = 4;
gridControl.SlotsVertically = 1;
LimitAttribute limit = null;
var attributes = Values.GetAttributes();
if (attributes != null)
{
limit = (LimitAttribute)attributes.FirstOrDefault(x => x is LimitAttribute);
}
XElement = grid.DoubleValue();
XElement.SetLimits(limit);
XElement.DoubleValue.ValueChanged += OnValueChanged;
XElement.DoubleValue.SlidingEnd += ClearToken;
YElement = grid.DoubleValue();
YElement.SetLimits(limit);
YElement.DoubleValue.ValueChanged += OnValueChanged;
YElement.DoubleValue.SlidingEnd += ClearToken;
ZElement = grid.DoubleValue();
ZElement.SetLimits(limit);
ZElement.DoubleValue.ValueChanged += OnValueChanged;
ZElement.DoubleValue.SlidingEnd += ClearToken;
WElement = grid.DoubleValue();
WElement.SetLimits(limit);
WElement.DoubleValue.ValueChanged += OnValueChanged;
WElement.DoubleValue.SlidingEnd += ClearToken;
}
private void OnValueChanged()
{
if (IsSetBlocked)
return;
var isSliding = XElement.IsSliding || YElement.IsSliding || ZElement.IsSliding || WElement.IsSliding;
var token = isSliding ? this : null;
var value = new Double4(XElement.DoubleValue.Value, YElement.DoubleValue.Value, ZElement.DoubleValue.Value, WElement.DoubleValue.Value);
SetValue(value, token);
}
/// <inheritdoc />
public override void Refresh()
{
base.Refresh();
if (HasDifferentValues)
{
// TODO: support different values for ValueBox<T>
}
else
{
var value = (Double4)Values[0];
XElement.DoubleValue.Value = value.X;
YElement.DoubleValue.Value = value.Y;
ZElement.DoubleValue.Value = value.Z;
WElement.DoubleValue.Value = value.W;
}
}
}
}