From 9e54827cb3d1acab4b43c07f4f6b912635913e5a Mon Sep 17 00:00:00 2001 From: Wojtek Figat Date: Tue, 19 Mar 2024 20:13:41 +0100 Subject: [PATCH] Cleanup code #2213 --- .../CustomEditors/Editors/Vector3Editor.cs | 1 - .../Elements/DoubleValueElement.cs | 5 +- .../Elements/FloatValueElement.cs | 5 +- Source/Editor/GUI/Input/DoubleValueBox.cs | 16 ++++- Source/Editor/GUI/Input/FloatValueBox.cs | 17 ++++-- Source/Editor/Options/InterfaceOptions.cs | 14 +++-- Source/Editor/Utilities/ShuntingYardParser.cs | 12 ++-- Source/Editor/Utilities/Units.cs | 11 +++- Source/Editor/Utilities/Utils.cs | 59 +++++++++---------- Source/Engine/Level/Actors/Camera.h | 6 +- Source/Engine/Physics/Actors/RigidBody.h | 2 +- Source/Engine/Physics/Colliders/BoxCollider.h | 2 +- .../Physics/Colliders/CapsuleCollider.h | 4 +- .../Physics/Colliders/CharacterController.h | 10 ++-- Source/Engine/Physics/Colliders/Collider.h | 4 +- .../Engine/Physics/Colliders/SphereCollider.h | 2 +- Source/Engine/Physics/Joints/DistanceJoint.h | 4 +- Source/Engine/Physics/Joints/Joint.h | 4 +- .../Editor/ValueCategoryAttribute.cs | 8 ++- Source/Engine/Utilities/Utils.cs | 48 ++++++++++++++- 20 files changed, 150 insertions(+), 84 deletions(-) diff --git a/Source/Editor/CustomEditors/Editors/Vector3Editor.cs b/Source/Editor/CustomEditors/Editors/Vector3Editor.cs index 2850fa4f3..e7170a22d 100644 --- a/Source/Editor/CustomEditors/Editors/Vector3Editor.cs +++ b/Source/Editor/CustomEditors/Editors/Vector3Editor.cs @@ -4,7 +4,6 @@ using System.Linq; using FlaxEditor.CustomEditors.Elements; using FlaxEngine; using FlaxEngine.GUI; -using Utils = FlaxEngine.Utils; namespace FlaxEditor.CustomEditors.Editors { diff --git a/Source/Editor/CustomEditors/Elements/DoubleValueElement.cs b/Source/Editor/CustomEditors/Elements/DoubleValueElement.cs index a8bfe42ba..cf16a1194 100644 --- a/Source/Editor/CustomEditors/Elements/DoubleValueElement.cs +++ b/Source/Editor/CustomEditors/Elements/DoubleValueElement.cs @@ -5,7 +5,6 @@ using System.Reflection; using FlaxEditor.GUI.Input; using FlaxEngine; using FlaxEngine.GUI; -using Utils = FlaxEngine.Utils; namespace FlaxEditor.CustomEditors.Elements { @@ -53,9 +52,9 @@ namespace FlaxEditor.CustomEditors.Elements } /// - /// Set the value category of this float element + /// Sets the editor value category. /// - /// + /// The category. public void SetCategory(Utils.ValueCategory category) { ValueBox.Category = category; diff --git a/Source/Editor/CustomEditors/Elements/FloatValueElement.cs b/Source/Editor/CustomEditors/Elements/FloatValueElement.cs index a14c796b1..aabdb79e4 100644 --- a/Source/Editor/CustomEditors/Elements/FloatValueElement.cs +++ b/Source/Editor/CustomEditors/Elements/FloatValueElement.cs @@ -5,7 +5,6 @@ using System.Reflection; using FlaxEditor.GUI.Input; using FlaxEngine; using FlaxEngine.GUI; -using Utils = FlaxEngine.Utils; namespace FlaxEditor.CustomEditors.Elements { @@ -53,9 +52,9 @@ namespace FlaxEditor.CustomEditors.Elements } /// - /// Set the value category of this float element + /// Sets the editor value category. /// - /// + /// The category. public void SetCategory(Utils.ValueCategory category) { ValueBox.Category = category; diff --git a/Source/Editor/GUI/Input/DoubleValueBox.cs b/Source/Editor/GUI/Input/DoubleValueBox.cs index ce1eab400..86acc1203 100644 --- a/Source/Editor/GUI/Input/DoubleValueBox.cs +++ b/Source/Editor/GUI/Input/DoubleValueBox.cs @@ -14,6 +14,8 @@ namespace FlaxEditor.GUI.Input [HideInEditor] public class DoubleValueBox : ValueBox { + private Utils.ValueCategory _category = Utils.ValueCategory.None; + /// public override double Value { @@ -131,9 +133,19 @@ namespace FlaxEditor.GUI.Input } /// - /// Get or set the category of the value. This can either be none for just a number, a distance or an angle. + /// Gets or sets the category of the value. This can be none for just a number or a more specific one like a distance. /// - public Utils.ValueCategory Category = Utils.ValueCategory.None; + public Utils.ValueCategory Category + { + get => _category; + set + { + if (_category == value) + return; + _category = value; + UpdateText(); + } + } /// protected sealed override void UpdateText() diff --git a/Source/Editor/GUI/Input/FloatValueBox.cs b/Source/Editor/GUI/Input/FloatValueBox.cs index 1b81df45f..f22ecd89c 100644 --- a/Source/Editor/GUI/Input/FloatValueBox.cs +++ b/Source/Editor/GUI/Input/FloatValueBox.cs @@ -14,6 +14,8 @@ namespace FlaxEditor.GUI.Input [HideInEditor] public class FloatValueBox : ValueBox { + private Utils.ValueCategory _category = Utils.ValueCategory.None; + /// public override float Value { @@ -137,14 +139,19 @@ namespace FlaxEditor.GUI.Input Value = Value; } - private Utils.ValueCategory _category = Utils.ValueCategory.None; - /// - /// Get or set the category of the value. This can be none for just a number or a more specific one like a distance. + /// Gets or sets the category of the value. This can be none for just a number or a more specific one like a distance. /// - public Utils.ValueCategory Category { + public Utils.ValueCategory Category + { get => _category; - set { _category = value; UpdateText(); } + set + { + if (_category == value) + return; + _category = value; + UpdateText(); + } } /// diff --git a/Source/Editor/Options/InterfaceOptions.cs b/Source/Editor/Options/InterfaceOptions.cs index 8d8e63899..42f3a00d2 100644 --- a/Source/Editor/Options/InterfaceOptions.cs +++ b/Source/Editor/Options/InterfaceOptions.cs @@ -118,22 +118,24 @@ namespace FlaxEditor.Options } /// - /// Options for formatting numerical values + /// Options for formatting numerical values. /// public enum ValueFormattingType { /// - /// No formatting + /// No formatting. /// None, + /// - /// Format using the base SI unit + /// Format using the base SI unit. /// BaseUnit, + /// - /// Format using a unit that matches the value best + /// Format using a unit that matches the value best. /// - AutoUnit + AutoUnit, } /// @@ -214,7 +216,7 @@ namespace FlaxEditor.Options private bool _spaceNumberAndUnits = false; /// - /// Gets or sets the option to put a space between numbers and units for unit formatting + /// Gets or sets the option to put a space between numbers and units for unit formatting. /// [DefaultValue(false)] [EditorDisplay("Interface"), EditorOrder(310), Tooltip("Put a space between numbers and units.")] diff --git a/Source/Editor/Utilities/ShuntingYardParser.cs b/Source/Editor/Utilities/ShuntingYardParser.cs index 85279d0a4..5ba8e969c 100644 --- a/Source/Editor/Utilities/ShuntingYardParser.cs +++ b/Source/Editor/Utilities/ShuntingYardParser.cs @@ -141,19 +141,17 @@ namespace FlaxEditor.Utilities }; /// - /// List known units which cannot be handled as a variable easily because they contain operator - /// symbols (mostly a forward slash). The value is the factor to calculate game units. + /// List known units which cannot be handled as a variable easily because they contain operator symbols (mostly a forward slash). The value is the factor to calculate game units. /// - // Nm is here because these values are compared case-sensitive and we don't want to confuse - // nanometers and Newtonmeters private static readonly IDictionary UnitSymbols = new Dictionary { ["cm/s"] = Units.Meters2Units / 100, ["cm/s²"] = Units.Meters2Units / 100, ["m/s"] = Units.Meters2Units, ["m/s²"] = Units.Meters2Units, - ["km/h"] = 1/3.6 * Units.Meters2Units, - ["Nm"] = Units.Meters2Units * Units.Meters2Units + ["km/h"] = 1 / 3.6 * Units.Meters2Units, + // Nm is here because these values are compared case-sensitive, and we don't want to confuse nanometers and Newtonmeters + ["Nm"] = Units.Meters2Units * Units.Meters2Units, }; /// @@ -189,7 +187,7 @@ namespace FlaxEditor.Utilities if (Operators.ContainsKey(str)) return TokenType.Operator; - if (char.IsLetter(c) || c=='²' || c=='³') + if (char.IsLetter(c) || c == '²' || c == '³') return TokenType.Variable; throw new ParsingException("wrong character"); diff --git a/Source/Editor/Utilities/Units.cs b/Source/Editor/Utilities/Units.cs index cd4e67882..4c4131337 100644 --- a/Source/Editor/Utilities/Units.cs +++ b/Source/Editor/Utilities/Units.cs @@ -1,5 +1,10 @@ +// Copyright (c) 2012-2024 Wojciech Figat. All rights reserved. + namespace FlaxEditor.Utilities; +/// +/// Units display utilities for Editor. +/// public class Units { /// @@ -8,7 +13,7 @@ public class Units public static readonly float Meters2Units = 100f; /// - /// Set it to false to always show game units without any postfix. + /// False to always show game units without any postfix. /// public static bool UseUnitsFormatting = true; @@ -25,8 +30,8 @@ public class Units /// /// Return the unit according to user settings. /// - /// - /// + /// The unit name. + /// The formatted text. public static string Unit(string unit) { if (SpaceNumberAndUnits) diff --git a/Source/Editor/Utilities/Utils.cs b/Source/Editor/Utilities/Utils.cs index 39e371b28..1b76de47e 100644 --- a/Source/Editor/Utilities/Utils.cs +++ b/Source/Editor/Utilities/Utils.cs @@ -1248,38 +1248,37 @@ namespace FlaxEditor.Utilities { switch (category) { - case FlaxEngine.Utils.ValueCategory.Distance: - if (!Units.AutomaticUnitsFormatting) - return (value / Units.Meters2Units).ToString(format, CultureInfo.InvariantCulture) + Units.Unit("m"); - var absValue = Mathf.Abs(value); - // in case a unit != cm this would be (value / Meters2Units * 100) - if (absValue < Units.Meters2Units) - return value.ToString(format, CultureInfo.InvariantCulture) + Units.Unit("cm"); - if (absValue < Units.Meters2Units * 1000) - return (value / Units.Meters2Units).ToString(format, CultureInfo.InvariantCulture) + Units.Unit("m"); - return (value / 1000 / Units.Meters2Units).ToString(format, CultureInfo.InvariantCulture) + Units.Unit("km"); - case FlaxEngine.Utils.ValueCategory.Angle: return value.ToString(format, CultureInfo.InvariantCulture) + "°"; - case FlaxEngine.Utils.ValueCategory.Time: return value.ToString(format, CultureInfo.InvariantCulture) + Units.Unit("s"); - // some fonts have a symbol for that: "\u33A7" - case FlaxEngine.Utils.ValueCategory.Speed: return (value / Units.Meters2Units).ToString(format, CultureInfo.InvariantCulture) + Units.Unit("m/s"); - case FlaxEngine.Utils.ValueCategory.Acceleration: return (value / Units.Meters2Units).ToString(format, CultureInfo.InvariantCulture) + Units.Unit("m/s²"); - case FlaxEngine.Utils.ValueCategory.Area: return (value / Units.Meters2Units / Units.Meters2Units).ToString(format, CultureInfo.InvariantCulture) + Units.Unit("m²"); - case FlaxEngine.Utils.ValueCategory.Volume: return (value / Units.Meters2Units / Units.Meters2Units / Units.Meters2Units).ToString(format, CultureInfo.InvariantCulture) + Units.Unit("m³"); - case FlaxEngine.Utils.ValueCategory.Mass: return value.ToString(format, CultureInfo.InvariantCulture) + Units.Unit("kg"); - case FlaxEngine.Utils.ValueCategory.Force: return (value / Units.Meters2Units).ToString(format, CultureInfo.InvariantCulture) + Units.Unit("N"); - case FlaxEngine.Utils.ValueCategory.Torque: return (value / Units.Meters2Units / Units.Meters2Units).ToString(format, CultureInfo.InvariantCulture) + Units.Unit("Nm"); - case FlaxEngine.Utils.ValueCategory.None: - default: - return FormatFloat(value); + case FlaxEngine.Utils.ValueCategory.Distance: + if (!Units.AutomaticUnitsFormatting) + return (value / Units.Meters2Units).ToString(format, CultureInfo.InvariantCulture) + Units.Unit("m"); + var absValue = Mathf.Abs(value); + // in case a unit != cm this would be (value / Meters2Units * 100) + if (absValue < Units.Meters2Units) + return value.ToString(format, CultureInfo.InvariantCulture) + Units.Unit("cm"); + if (absValue < Units.Meters2Units * 1000) + return (value / Units.Meters2Units).ToString(format, CultureInfo.InvariantCulture) + Units.Unit("m"); + return (value / 1000 / Units.Meters2Units).ToString(format, CultureInfo.InvariantCulture) + Units.Unit("km"); + case FlaxEngine.Utils.ValueCategory.Angle: return value.ToString(format, CultureInfo.InvariantCulture) + "°"; + case FlaxEngine.Utils.ValueCategory.Time: return value.ToString(format, CultureInfo.InvariantCulture) + Units.Unit("s"); + // some fonts have a symbol for that: "\u33A7" + case FlaxEngine.Utils.ValueCategory.Speed: return (value / Units.Meters2Units).ToString(format, CultureInfo.InvariantCulture) + Units.Unit("m/s"); + case FlaxEngine.Utils.ValueCategory.Acceleration: return (value / Units.Meters2Units).ToString(format, CultureInfo.InvariantCulture) + Units.Unit("m/s²"); + case FlaxEngine.Utils.ValueCategory.Area: return (value / Units.Meters2Units / Units.Meters2Units).ToString(format, CultureInfo.InvariantCulture) + Units.Unit("m²"); + case FlaxEngine.Utils.ValueCategory.Volume: return (value / Units.Meters2Units / Units.Meters2Units / Units.Meters2Units).ToString(format, CultureInfo.InvariantCulture) + Units.Unit("m³"); + case FlaxEngine.Utils.ValueCategory.Mass: return value.ToString(format, CultureInfo.InvariantCulture) + Units.Unit("kg"); + case FlaxEngine.Utils.ValueCategory.Force: return (value / Units.Meters2Units).ToString(format, CultureInfo.InvariantCulture) + Units.Unit("N"); + case FlaxEngine.Utils.ValueCategory.Torque: return (value / Units.Meters2Units / Units.Meters2Units).ToString(format, CultureInfo.InvariantCulture) + Units.Unit("Nm"); + case FlaxEngine.Utils.ValueCategory.None: + default: return FormatFloat(value); } } /// - /// Format a float value either as-is, with a distance unit or with a degree sign + /// Format a float value either as-is, with a distance unit or with a degree sign. /// - /// the value to format - /// the value type: none means just a number, distance will format in cm/m/km, angle with an appended degree sign - /// the formatted string + /// The value to format. + /// The value type: none means just a number, distance will format in cm/m/km, angle with an appended degree sign. + /// The formatted string. public static string FormatFloat(float value, FlaxEngine.Utils.ValueCategory category) { if (float.IsPositiveInfinity(value) || value == float.MaxValue) @@ -1295,9 +1294,9 @@ namespace FlaxEditor.Utilities /// /// Format a double value either as-is, with a distance unit or with a degree sign /// - /// the value to format - /// the value type: none means just a number, distance will format in cm/m/km, angle with an appended degree sign - /// the formatted string + /// The value to format. + /// The value type: none means just a number, distance will format in cm/m/km, angle with an appended degree sign. + /// The formatted string. public static string FormatFloat(double value, FlaxEngine.Utils.ValueCategory category) { if (double.IsPositiveInfinity(value) || value == double.MaxValue) diff --git a/Source/Engine/Level/Actors/Camera.h b/Source/Engine/Level/Actors/Camera.h index e7c7971b7..190126e54 100644 --- a/Source/Engine/Level/Actors/Camera.h +++ b/Source/Engine/Level/Actors/Camera.h @@ -77,7 +77,7 @@ public: /// /// Gets the camera's field of view (in degrees). /// - API_PROPERTY(Attributes="EditorOrder(20), DefaultValue(60.0f), Limit(0, 179), EditorDisplay(\"Camera\", \"Field Of View\"), VisibleIf(nameof(UsePerspective))") + API_PROPERTY(Attributes="EditorOrder(20), DefaultValue(60.0f), Limit(0, 179), EditorDisplay(\"Camera\", \"Field Of View\"), VisibleIf(nameof(UsePerspective)), ValueCategory(Utils.ValueCategory.Angle)") float GetFieldOfView() const; /// @@ -99,7 +99,7 @@ public: /// /// Gets camera's near plane distance. /// - API_PROPERTY(Attributes="EditorOrder(30), DefaultValue(10.0f), Limit(0, 1000, 0.05f), EditorDisplay(\"Camera\")") + API_PROPERTY(Attributes="EditorOrder(30), DefaultValue(10.0f), Limit(0, 1000, 0.05f), EditorDisplay(\"Camera\"), ValueCategory(Utils.ValueCategory.Distance)") float GetNearPlane() const; /// @@ -110,7 +110,7 @@ public: /// /// Gets camera's far plane distance. /// - API_PROPERTY(Attributes="EditorOrder(40), DefaultValue(40000.0f), Limit(0, float.MaxValue, 5), EditorDisplay(\"Camera\")") + API_PROPERTY(Attributes="EditorOrder(40), DefaultValue(40000.0f), Limit(0, float.MaxValue, 5), EditorDisplay(\"Camera\"), ValueCategory(Utils.ValueCategory.Distance)") float GetFarPlane() const; /// diff --git a/Source/Engine/Physics/Actors/RigidBody.h b/Source/Engine/Physics/Actors/RigidBody.h index e23c4dde8..c862a8e97 100644 --- a/Source/Engine/Physics/Actors/RigidBody.h +++ b/Source/Engine/Physics/Actors/RigidBody.h @@ -181,7 +181,7 @@ public: /// /// Gets the mass value measured in kilograms (use override value only if OverrideMass is checked). /// - API_PROPERTY(Attributes="EditorOrder(110), Limit(0), EditorDisplay(\"Rigid Body\"), NumberCategory(Utils.ValueCategory.Mass)") + API_PROPERTY(Attributes="EditorOrder(110), Limit(0), EditorDisplay(\"Rigid Body\"), ValueCategory(Utils.ValueCategory.Mass)") float GetMass() const; /// diff --git a/Source/Engine/Physics/Colliders/BoxCollider.h b/Source/Engine/Physics/Colliders/BoxCollider.h index e875217a4..58298ada8 100644 --- a/Source/Engine/Physics/Colliders/BoxCollider.h +++ b/Source/Engine/Physics/Colliders/BoxCollider.h @@ -23,7 +23,7 @@ public: /// Gets the size of the box, measured in the object's local space. /// /// The box size will be scaled by the actor's world scale. - API_PROPERTY(Attributes="EditorOrder(100), DefaultValue(typeof(Float3), \"100,100,100\"), EditorDisplay(\"Collider\"), NumberCategory(Utils.ValueCategory.Distance)") + API_PROPERTY(Attributes="EditorOrder(100), DefaultValue(typeof(Float3), \"100,100,100\"), EditorDisplay(\"Collider\"), ValueCategory(Utils.ValueCategory.Distance)") FORCE_INLINE Float3 GetSize() const { return _size; diff --git a/Source/Engine/Physics/Colliders/CapsuleCollider.h b/Source/Engine/Physics/Colliders/CapsuleCollider.h index f7870e29c..c225ac2a5 100644 --- a/Source/Engine/Physics/Colliders/CapsuleCollider.h +++ b/Source/Engine/Physics/Colliders/CapsuleCollider.h @@ -25,7 +25,7 @@ public: /// Gets the radius of the sphere, measured in the object's local space. /// /// The sphere radius will be scaled by the actor's world scale. - API_PROPERTY(Attributes="EditorOrder(100), DefaultValue(20.0f), EditorDisplay(\"Collider\"), NumberCategory(Utils.ValueCategory.Distance)") + API_PROPERTY(Attributes="EditorOrder(100), DefaultValue(20.0f), EditorDisplay(\"Collider\"), ValueCategory(Utils.ValueCategory.Distance)") FORCE_INLINE float GetRadius() const { return _radius; @@ -41,7 +41,7 @@ public: /// Gets the height of the capsule, measured in the object's local space between the centers of the hemispherical ends. /// /// The capsule height will be scaled by the actor's world scale. - API_PROPERTY(Attributes="EditorOrder(110), DefaultValue(100.0f), EditorDisplay(\"Collider\"), NumberCategory(Utils.ValueCategory.Distance)") + API_PROPERTY(Attributes="EditorOrder(110), DefaultValue(100.0f), EditorDisplay(\"Collider\"), ValueCategory(Utils.ValueCategory.Distance)") FORCE_INLINE float GetHeight() const { return _height; diff --git a/Source/Engine/Physics/Colliders/CharacterController.h b/Source/Engine/Physics/Colliders/CharacterController.h index 829d1617d..545f4e9d9 100644 --- a/Source/Engine/Physics/Colliders/CharacterController.h +++ b/Source/Engine/Physics/Colliders/CharacterController.h @@ -73,7 +73,7 @@ public: /// /// Gets the radius of the sphere, measured in the object's local space. The sphere radius will be scaled by the actor's world scale. /// - API_PROPERTY(Attributes="EditorOrder(100), DefaultValue(50.0f), EditorDisplay(\"Collider\"), NumberCategory(Utils.ValueCategory.Distance)") + API_PROPERTY(Attributes="EditorOrder(100), DefaultValue(50.0f), EditorDisplay(\"Collider\"), ValueCategory(Utils.ValueCategory.Distance)") float GetRadius() const; /// @@ -84,7 +84,7 @@ public: /// /// Gets the height of the capsule, measured in the object's local space. The capsule height will be scaled by the actor's world scale. /// - API_PROPERTY(Attributes="EditorOrder(110), DefaultValue(150.0f), EditorDisplay(\"Collider\"), NumberCategory(Utils.ValueCategory.Distance)") + API_PROPERTY(Attributes="EditorOrder(110), DefaultValue(150.0f), EditorDisplay(\"Collider\"), ValueCategory(Utils.ValueCategory.Distance)") float GetHeight() const; /// @@ -95,7 +95,7 @@ public: /// /// Gets the slope limit (in degrees). Limits the collider to only climb slopes that are less steep (in degrees) than the indicated value. /// - API_PROPERTY(Attributes="EditorOrder(210), DefaultValue(45.0f), Limit(0, 100), EditorDisplay(\"Character Controller\"), NumberCategory(Utils.ValueCategory.Angle)") + API_PROPERTY(Attributes="EditorOrder(210), DefaultValue(45.0f), Limit(0, 100), EditorDisplay(\"Character Controller\"), ValueCategory(Utils.ValueCategory.Angle)") float GetSlopeLimit() const; /// @@ -117,7 +117,7 @@ public: /// /// Gets the step height. The character will step up a stair only if it is closer to the ground than the indicated value. This should not be greater than the Character Controller’s height or it will generate an error. /// - API_PROPERTY(Attributes="EditorOrder(220), DefaultValue(30.0f), Limit(0), EditorDisplay(\"Character Controller\"), NumberCategory(Utils.ValueCategory.Distance)") + API_PROPERTY(Attributes="EditorOrder(220), DefaultValue(30.0f), Limit(0), EditorDisplay(\"Character Controller\"), ValueCategory(Utils.ValueCategory.Distance)") float GetStepOffset() const; /// @@ -139,7 +139,7 @@ public: /// /// Gets the minimum move distance of the character controller. The minimum traveled distance to consider. If traveled distance is smaller, the character doesn't move. This is used to stop the recursive motion algorithm when remaining distance to travel is small. /// - API_PROPERTY(Attributes="EditorOrder(230), DefaultValue(0.0f), Limit(0, 1000), EditorDisplay(\"Character Controller\"), NumberCategory(Utils.ValueCategory.Distance)") + API_PROPERTY(Attributes="EditorOrder(230), DefaultValue(0.0f), Limit(0, 1000), EditorDisplay(\"Character Controller\"), ValueCategory(Utils.ValueCategory.Distance)") float GetMinMoveDistance() const; /// diff --git a/Source/Engine/Physics/Colliders/Collider.h b/Source/Engine/Physics/Colliders/Collider.h index 36db78119..05f2a6eb2 100644 --- a/Source/Engine/Physics/Colliders/Collider.h +++ b/Source/Engine/Physics/Colliders/Collider.h @@ -52,7 +52,7 @@ public: /// /// Gets the center of the collider, measured in the object's local space. /// - API_PROPERTY(Attributes="EditorOrder(10), DefaultValue(typeof(Vector3), \"0,0,0\"), EditorDisplay(\"Collider\"), NumberCategory(Utils.ValueCategory.Distance)") + API_PROPERTY(Attributes="EditorOrder(10), DefaultValue(typeof(Vector3), \"0,0,0\"), EditorDisplay(\"Collider\"), ValueCategory(Utils.ValueCategory.Distance)") FORCE_INLINE Vector3 GetCenter() const { return _center; @@ -66,7 +66,7 @@ public: /// /// Gets the contact offset. Colliders whose distance is less than the sum of their ContactOffset values will generate contacts. The contact offset must be positive. Contact offset allows the collision detection system to predictively enforce the contact constraint even when the objects are slightly separated. /// - API_PROPERTY(Attributes="EditorOrder(1), DefaultValue(2.0f), Limit(0, 100), EditorDisplay(\"Collider\"), NumberCategory(Utils.ValueCategory.Distance)") + API_PROPERTY(Attributes="EditorOrder(1), DefaultValue(2.0f), Limit(0, 100), EditorDisplay(\"Collider\"), ValueCategory(Utils.ValueCategory.Distance)") FORCE_INLINE float GetContactOffset() const { return _contactOffset; diff --git a/Source/Engine/Physics/Colliders/SphereCollider.h b/Source/Engine/Physics/Colliders/SphereCollider.h index 5c97bc553..e3b295eda 100644 --- a/Source/Engine/Physics/Colliders/SphereCollider.h +++ b/Source/Engine/Physics/Colliders/SphereCollider.h @@ -21,7 +21,7 @@ public: /// Gets the radius of the sphere, measured in the object's local space. /// /// The sphere radius will be scaled by the actor's world scale. - API_PROPERTY(Attributes="EditorOrder(100), DefaultValue(50.0f), EditorDisplay(\"Collider\"), NumberCategory(Utils.ValueCategory.Distance)") + API_PROPERTY(Attributes="EditorOrder(100), DefaultValue(50.0f), EditorDisplay(\"Collider\"), ValueCategory(Utils.ValueCategory.Distance)") FORCE_INLINE float GetRadius() const { return _radius; diff --git a/Source/Engine/Physics/Joints/DistanceJoint.h b/Source/Engine/Physics/Joints/DistanceJoint.h index f4a60cb62..0f0f59b01 100644 --- a/Source/Engine/Physics/Joints/DistanceJoint.h +++ b/Source/Engine/Physics/Joints/DistanceJoint.h @@ -67,7 +67,7 @@ public: /// Gets the allowed minimum distance for the joint. /// /// Used only when DistanceJointFlag.MinDistance flag is set. The minimum distance must be no more than the maximum distance. Default: 0, Range: [0, float.MaxValue]. - API_PROPERTY(Attributes="EditorOrder(110), DefaultValue(0.0f), Limit(0.0f), EditorDisplay(\"Joint\"), NumberCategory(Utils.ValueCategory.Distance)") + API_PROPERTY(Attributes="EditorOrder(110), DefaultValue(0.0f), Limit(0.0f), EditorDisplay(\"Joint\"), ValueCategory(Utils.ValueCategory.Distance)") FORCE_INLINE float GetMinDistance() const { return _minDistance; @@ -83,7 +83,7 @@ public: /// Gets the allowed maximum distance for the joint. /// /// Used only when DistanceJointFlag.MaxDistance flag is set. The maximum distance must be no less than the minimum distance. Default: 0, Range: [0, float.MaxValue]. - API_PROPERTY(Attributes="EditorOrder(120), DefaultValue(10.0f), Limit(0.0f), EditorDisplay(\"Joint\"), NumberCategory(Utils.ValueCategory.Distance)") + API_PROPERTY(Attributes="EditorOrder(120), DefaultValue(10.0f), Limit(0.0f), EditorDisplay(\"Joint\"), ValueCategory(Utils.ValueCategory.Distance)") FORCE_INLINE float GetMaxDistance() const { return _maxDistance; diff --git a/Source/Engine/Physics/Joints/Joint.h b/Source/Engine/Physics/Joints/Joint.h index 408d19ae5..a4584a07e 100644 --- a/Source/Engine/Physics/Joints/Joint.h +++ b/Source/Engine/Physics/Joints/Joint.h @@ -38,7 +38,7 @@ public: /// /// Gets the break force. Determines the maximum force the joint can apply before breaking. Broken joints no longer participate in physics simulation. /// - API_PROPERTY(Attributes="EditorOrder(10), DefaultValue(float.MaxValue), EditorDisplay(\"Joint\"), NumberCategory(Utils.ValueCategory.Force)") + API_PROPERTY(Attributes="EditorOrder(10), DefaultValue(float.MaxValue), EditorDisplay(\"Joint\"), ValueCategory(Utils.ValueCategory.Force)") FORCE_INLINE float GetBreakForce() const { return _breakForce; @@ -52,7 +52,7 @@ public: /// /// Gets the break torque. Determines the maximum torque the joint can apply before breaking. Broken joints no longer participate in physics simulation. /// - API_PROPERTY(Attributes="EditorOrder(20), DefaultValue(float.MaxValue), EditorDisplay(\"Joint\"), NumberCategory(Utils.ValueCategory.Torque)") + API_PROPERTY(Attributes="EditorOrder(20), DefaultValue(float.MaxValue), EditorDisplay(\"Joint\"), ValueCategory(Utils.ValueCategory.Torque)") FORCE_INLINE float GetBreakTorque() const { return _breakTorque; diff --git a/Source/Engine/Scripting/Attributes/Editor/ValueCategoryAttribute.cs b/Source/Engine/Scripting/Attributes/Editor/ValueCategoryAttribute.cs index 8ba91e9d0..4f51efbe3 100644 --- a/Source/Engine/Scripting/Attributes/Editor/ValueCategoryAttribute.cs +++ b/Source/Engine/Scripting/Attributes/Editor/ValueCategoryAttribute.cs @@ -1,13 +1,12 @@ -// Copyright (c) 2012-2023 Wojciech Figat. All rights reserved. +// Copyright (c) 2012-2024 Wojciech Figat. All rights reserved. using System; namespace FlaxEngine { /// - /// Used to specify the value category of a numeric value as either as-is (a scalar), a distance (formatted as cm/m/km) or an angle (formatted with a degree sign). + /// Specifies the value category of a numeric value as either as-is (a scalar), a distance (formatted as cm/m/km) or an angle (formatted with a degree sign). /// - /// [Serializable] [AttributeUsage(AttributeTargets.Field | AttributeTargets.Property)] public sealed class ValueCategoryAttribute : Attribute @@ -17,6 +16,9 @@ namespace FlaxEngine /// public Utils.ValueCategory Category; + /// + /// Initializes a new instance of the class. + /// private ValueCategoryAttribute() { Category = Utils.ValueCategory.None; diff --git a/Source/Engine/Utilities/Utils.cs b/Source/Engine/Utilities/Utils.cs index 50e2a7d50..0767ab8f4 100644 --- a/Source/Engine/Utilities/Utils.cs +++ b/Source/Engine/Utilities/Utils.cs @@ -257,6 +257,7 @@ namespace FlaxEngine { public static FieldInfo itemsField; } + internal static T[] ExtractArrayFromList(List list) { if (list == null) @@ -1040,21 +1041,64 @@ namespace FlaxEngine } /// - /// A category of number values used for formatting and input boxes + /// A category of number values used for formatting and input fields. /// public enum ValueCategory { + /// + /// Nothing. + /// None, + + /// + /// Distance (eg. meters). + /// Distance, + + /// + /// Area (eg. m^2). + /// Area, + + /// + /// Volume (eg. m^3). + /// Volume, + + /// + /// Mass (eg. kilograms). + /// Mass, + + /// + /// Angle (eg. degrees). + /// Angle, + + /// + /// Speed (distance / time). + /// Speed, + + /// + /// Acceleration (distance^2 / time). + /// Acceleration, + + /// + /// Time (eg. seconds). + /// Time, + + /// + /// Force (mass * distance / time^2). + /// Force, - Torque + + /// + /// Torque (mass * distance^2 / time^2). + /// + Torque, } } }