Merge branch 'master' into Visject-DescriptionPanel

This commit is contained in:
Nils Hausfeld
2024-06-10 22:38:50 +02:00
10 changed files with 98 additions and 6 deletions

View File

@@ -41,6 +41,13 @@ namespace FlaxEditor.CustomEditors.Editors
public override void Initialize(LayoutElementsContainer layout) public override void Initialize(LayoutElementsContainer layout)
{ {
base.Initialize(layout); base.Initialize(layout);
if (XElement.ValueBox.Parent is UniformGridPanel ug)
{
ug.Height += 2;
ug.SlotSpacing = new Float2(4);
ug.SlotPadding = new Margin(0, 0, 1, 1);
}
// Override colors // Override colors
var back = FlaxEngine.GUI.Style.Current.TextBoxBackground; var back = FlaxEngine.GUI.Style.Current.TextBoxBackground;
@@ -66,6 +73,13 @@ namespace FlaxEditor.CustomEditors.Editors
public override void Initialize(LayoutElementsContainer layout) public override void Initialize(LayoutElementsContainer layout)
{ {
base.Initialize(layout); base.Initialize(layout);
if (XElement.ValueBox.Parent is UniformGridPanel ug)
{
ug.Height += 2;
ug.SlotSpacing = new Float2(4);
ug.SlotPadding = new Margin(0, 0, 1, 1);
}
// Override colors // Override colors
var back = FlaxEngine.GUI.Style.Current.TextBoxBackground; var back = FlaxEngine.GUI.Style.Current.TextBoxBackground;
@@ -122,6 +136,13 @@ namespace FlaxEditor.CustomEditors.Editors
menu.AddButton("Link", ToggleLink).LinkTooltip("Links scale components for uniform scaling"); menu.AddButton("Link", ToggleLink).LinkTooltip("Links scale components for uniform scaling");
}; };
} }
if (XElement.ValueBox.Parent is UniformGridPanel ug)
{
ug.Height += 2;
ug.SlotSpacing = new Float2(4);
ug.SlotPadding = new Margin(0, 0, 1, 1);
}
// Override colors // Override colors
var back = FlaxEngine.GUI.Style.Current.TextBoxBackground; var back = FlaxEngine.GUI.Style.Current.TextBoxBackground;

View File

@@ -130,7 +130,7 @@ namespace FlaxEditor.GUI.Input
base.Draw(); base.Draw();
var style = Style.Current; var style = Style.Current;
var r = new Rectangle(2, 2, Width - 4, Height - 4); var r = new Rectangle(0, 0, Width, Height);
Render2D.FillRectangle(r, _value); Render2D.FillRectangle(r, _value);
Render2D.DrawRectangle(r, IsMouseOver || IsNavFocused ? style.BackgroundSelected : Color.Black); Render2D.DrawRectangle(r, IsMouseOver || IsNavFocused ? style.BackgroundSelected : Color.Black);

View File

@@ -363,6 +363,8 @@ namespace FlaxEditor.GUI.Timeline.Tracks
/// <inheritdoc /> /// <inheritdoc />
public override void OnDestroy() public override void OnDestroy()
{ {
if (_previewValue != null)
Timeline.ShowPreviewValuesChanged -= OnTimelineShowPreviewValuesChanged;
_previewValue = null; _previewValue = null;
_rightKey = null; _rightKey = null;
_addKey = null; _addKey = null;

View File

@@ -21,6 +21,8 @@ Collider::Collider(const SpawnParams& params)
, _cachedScale(1.0f) , _cachedScale(1.0f)
, _contactOffset(2.0f) , _contactOffset(2.0f)
{ {
Material.Loaded.Bind<Collider, &Collider::OnMaterialChanged>(this);
Material.Unload.Bind<Collider, &Collider::OnMaterialChanged>(this);
Material.Changed.Bind<Collider, &Collider::OnMaterialChanged>(this); Material.Changed.Bind<Collider, &Collider::OnMaterialChanged>(this);
} }

View File

@@ -4474,6 +4474,16 @@ void PhysicsBackend::DestroyController(void* controller)
controllerPhysX->release(); controllerPhysX->release();
} }
void PhysicsBackend::DestroyMaterial(void* material)
{
ASSERT_LOW_LAYER(material);
auto materialPhysX = (PxMaterial*)material;
materialPhysX->userData = nullptr;
FlushLocker.Lock();
DeleteObjects.Add(materialPhysX);
FlushLocker.Unlock();
}
void PhysicsBackend::DestroyObject(void* object) void PhysicsBackend::DestroyObject(void* object)
{ {
ASSERT_LOW_LAYER(object); ASSERT_LOW_LAYER(object);

View File

@@ -81,7 +81,7 @@ void PhysicsSettings::Deserialize(DeserializeStream& stream, ISerializeModifier*
PhysicalMaterial::~PhysicalMaterial() PhysicalMaterial::~PhysicalMaterial()
{ {
if (_material) if (_material)
PhysicsBackend::DestroyObject(_material); PhysicsBackend::DestroyMaterial(_material);
} }
bool PhysicsService::Init() bool PhysicsService::Init()

View File

@@ -314,6 +314,7 @@ public:
static void DestroyShape(void* shape); static void DestroyShape(void* shape);
static void DestroyJoint(void* joint); static void DestroyJoint(void* joint);
static void DestroyController(void* controller); static void DestroyController(void* controller);
static void DestroyMaterial(void* material);
static void DestroyObject(void* object); static void DestroyObject(void* object);
static void RemoveCollider(PhysicsColliderActor* collider); static void RemoveCollider(PhysicsColliderActor* collider);
static void RemoveJoint(Joint* joint); static void RemoveJoint(Joint* joint);

View File

@@ -865,6 +865,10 @@ void PhysicsBackend::DestroyController(void* controller)
{ {
} }
void PhysicsBackend::DestroyMaterial(void* material)
{
}
void PhysicsBackend::DestroyObject(void* object) void PhysicsBackend::DestroyObject(void* object)
{ {
} }

View File

@@ -11,6 +11,7 @@ namespace FlaxEngine.GUI
{ {
private Margin _slotPadding; private Margin _slotPadding;
private int _slotsV, _slotsH; private int _slotsV, _slotsH;
private Float2 _slotSpacing;
/// <summary> /// <summary>
/// Gets or sets the padding given to each slot. /// Gets or sets the padding given to each slot.
@@ -62,11 +63,25 @@ namespace FlaxEngine.GUI
} }
} }
/// <summary>
/// Gets or sets grid slot spacing.
/// </summary>
[EditorOrder(30), Limit(0), Tooltip("The Grid slot spacing.")]
public Float2 SlotSpacing
{
get => _slotSpacing;
set
{
_slotSpacing = value;
PerformLayout();
}
}
/// <summary> /// <summary>
/// Initializes a new instance of the <see cref="UniformGridPanel"/> class. /// Initializes a new instance of the <see cref="UniformGridPanel"/> class.
/// </summary> /// </summary>
public UniformGridPanel() public UniformGridPanel()
: this(2) : this(0)
{ {
} }
@@ -74,10 +89,11 @@ namespace FlaxEngine.GUI
/// Initializes a new instance of the <see cref="UniformGridPanel"/> class. /// Initializes a new instance of the <see cref="UniformGridPanel"/> class.
/// </summary> /// </summary>
/// <param name="slotPadding">The slot padding.</param> /// <param name="slotPadding">The slot padding.</param>
public UniformGridPanel(float slotPadding = 2) public UniformGridPanel(float slotPadding = 0)
{ {
AutoFocus = false; AutoFocus = false;
SlotPadding = new Margin(slotPadding); SlotPadding = new Margin(slotPadding);
SlotSpacing = new Float2(2);
_slotsH = _slotsV = 5; _slotsH = _slotsV = 5;
} }
@@ -122,6 +138,42 @@ namespace FlaxEngine.GUI
var slotBounds = new Rectangle(slotSize.X * x, slotSize.Y * y, slotSize.X, slotSize.Y); var slotBounds = new Rectangle(slotSize.X * x, slotSize.Y * y, slotSize.X, slotSize.Y);
_slotPadding.ShrinkRectangle(ref slotBounds); _slotPadding.ShrinkRectangle(ref slotBounds);
if (slotsV > 1)
{
if (y == 0)
{
slotBounds.Height -= _slotSpacing.Y * 0.5f;
}
else if (y == slotsV - 1)
{
slotBounds.Height -= _slotSpacing.Y * 0.5f;
slotBounds.Y += _slotSpacing.Y * 0.5f;
}
else
{
slotBounds.Height -= _slotSpacing.Y;
slotBounds.Y += _slotSpacing.Y * 0.5f;
}
}
if (slotsH > 1)
{
if (x == 0)
{
slotBounds.Width -= _slotSpacing.X * 0.5f;
}
else if (x == slotsH - 1)
{
slotBounds.Width -= _slotSpacing.X * 0.5f;
slotBounds.X += _slotSpacing.X * 0.5f;
}
else
{
slotBounds.Width -= _slotSpacing.X;
slotBounds.X += _slotSpacing.X * 0.5f;
}
}
var c = _children[i++]; var c = _children[i++];
c.Bounds = slotBounds; c.Bounds = slotBounds;
} }

View File

@@ -1669,7 +1669,7 @@ namespace Flax.Build.Bindings
toManagedContent.AppendLine($"unmanaged.{fieldInfo.Name} != IntPtr.Zero ? NativeInterop.ConvertArray((Unsafe.As<ManagedArray>(ManagedHandle.FromIntPtr(unmanaged.{fieldInfo.Name}).Target)).ToSpan<{internalElementType}>(), {originalElementTypeMarshaller}.ToManaged) : null;"); toManagedContent.AppendLine($"unmanaged.{fieldInfo.Name} != IntPtr.Zero ? NativeInterop.ConvertArray((Unsafe.As<ManagedArray>(ManagedHandle.FromIntPtr(unmanaged.{fieldInfo.Name}).Target)).ToSpan<{internalElementType}>(), {originalElementTypeMarshaller}.ToManaged) : null;");
toNativeContent.AppendLine($"managed.{fieldInfo.Name}?.Length > 0 ? ManagedHandle.ToIntPtr(ManagedArray.WrapNewArray(NativeInterop.ConvertArray(managed.{fieldInfo.Name}, {originalElementTypeMarshaller}.ToNative)), GCHandleType.Weak) : IntPtr.Zero;"); toNativeContent.AppendLine($"managed.{fieldInfo.Name}?.Length > 0 ? ManagedHandle.ToIntPtr(ManagedArray.WrapNewArray(NativeInterop.ConvertArray(managed.{fieldInfo.Name}, {originalElementTypeMarshaller}.ToNative)), GCHandleType.Weak) : IntPtr.Zero;");
freeContents.AppendLine($"if (unmanaged.{fieldInfo.Name} != IntPtr.Zero) {{ ManagedHandle handle = ManagedHandle.FromIntPtr(unmanaged.{fieldInfo.Name}); Span<{internalElementType}> values = (Unsafe.As<ManagedArray>(handle.Target)).ToSpan<{internalElementType}>(); foreach (var value in values) {{ {originalElementTypeMarshaller}.Free(value); }} (Unsafe.As<ManagedArray>(handle.Target)).Free(); handle.Free(); }}"); freeContents.AppendLine($"if (unmanaged.{fieldInfo.Name} != IntPtr.Zero) {{ ManagedHandle handle = ManagedHandle.FromIntPtr(unmanaged.{fieldInfo.Name}); Span<{internalElementType}> values = (Unsafe.As<ManagedArray>(handle.Target)).ToSpan<{internalElementType}>(); foreach (var value in values) {{ {originalElementTypeMarshaller}.Free(value); }} (Unsafe.As<ManagedArray>(handle.Target)).Free(); handle.Free(); }}");
freeContents2.AppendLine($"if (unmanaged.{fieldInfo.Name} != IntPtr.Zero) {{ ManagedHandle handle = ManagedHandle.FromIntPtr(unmanaged.{fieldInfo.Name}); Span<{internalElementType}> values = (Unsafe.As<ManagedArray>(handle.Target)).ToSpan<{internalElementType}>(); foreach (var value in values) {{ {originalElementTypeMarshaller}.Free(value); }} (Unsafe.As<ManagedArray>(handle.Target)).Free(); handle.Free(); }}"); freeContents2.AppendLine($"if (unmanaged.{fieldInfo.Name} != IntPtr.Zero) {{ ManagedHandle handle = ManagedHandle.FromIntPtr(unmanaged.{fieldInfo.Name}); Span<{internalElementType}> values = (Unsafe.As<ManagedArray>(handle.Target)).ToSpan<{internalElementType}>(); foreach (var value in values) {{ {originalElementTypeMarshaller}.NativeToManaged.Free(value); }} (Unsafe.As<ManagedArray>(handle.Target)).Free(); handle.Free(); }}");
} }
else if (fieldInfo.Type.GenericArgs[0].IsObjectRef) else if (fieldInfo.Type.GenericArgs[0].IsObjectRef)
{ {
@@ -1720,7 +1720,7 @@ namespace Flax.Build.Bindings
toManagedContent.AppendLine($"{internalTypeMarshaller}.ToManaged(unmanaged.{fieldInfo.Name});"); toManagedContent.AppendLine($"{internalTypeMarshaller}.ToManaged(unmanaged.{fieldInfo.Name});");
toNativeContent.AppendLine($"{internalTypeMarshaller}.ToNative(managed.{fieldInfo.Name});"); toNativeContent.AppendLine($"{internalTypeMarshaller}.ToNative(managed.{fieldInfo.Name});");
freeContents.AppendLine($"{internalTypeMarshaller}.Free(unmanaged.{fieldInfo.Name});"); freeContents.AppendLine($"{internalTypeMarshaller}.Free(unmanaged.{fieldInfo.Name});");
freeContents2.AppendLine($"{internalTypeMarshaller}.Free(unmanaged.{fieldInfo.Name});"); freeContents2.AppendLine($"{internalTypeMarshaller}.NativeToManaged.Free(unmanaged.{fieldInfo.Name});");
} }
/*else if (originalType == "Guid") /*else if (originalType == "Guid")
{ {