Fix snapping object to the group in Editor to skip trigger volumes

#522
This commit is contained in:
Wojtek Figat
2022-07-18 20:14:40 +02:00
parent e346fa1dca
commit 63c9cdfc31
4 changed files with 14 additions and 4 deletions

View File

@@ -100,7 +100,7 @@ namespace FlaxEditor.Gizmo
while (true)
{
var view = new Ray(Owner.ViewPosition, Owner.ViewDirection);
var rayCastFlags = SceneGraphNode.RayCastData.FlagTypes.SkipEditorPrimitives;
var rayCastFlags = SceneGraphNode.RayCastData.FlagTypes.SkipEditorPrimitives | SceneGraphNode.RayCastData.FlagTypes.SkipTriggers;
var hit = Owner.SceneGraphRoot.RayCast(ref ray, ref view, out var distance, out _, rayCastFlags);
if (hit != null)
{
@@ -130,10 +130,12 @@ namespace FlaxEditor.Gizmo
var newPosition = ray.GetPoint(distance) + new Vector3(0, bottomToCenter, 0);
// Snap
StartTransforming();
var translationDelta = newPosition - Position;
var rotationDelta = Quaternion.Identity;
var scaleDelta = Vector3.Zero;
if (translationDelta.IsZero)
break;
StartTransforming();
OnApplyTransformation(ref translationDelta, ref rotationDelta, ref scaleDelta);
EndTransforming();
}

View File

@@ -31,7 +31,8 @@ namespace FlaxEditor.SceneGraph
public override bool RayCastSelf(ref RayCastData ray, out Real distance, out Vector3 normal)
{
// Check if skip raycasts
if ((ray.Flags & RayCastData.FlagTypes.SkipColliders) == RayCastData.FlagTypes.SkipColliders)
if (((ray.Flags & RayCastData.FlagTypes.SkipColliders) == RayCastData.FlagTypes.SkipColliders) ||
(((ray.Flags & RayCastData.FlagTypes.SkipTriggers) == RayCastData.FlagTypes.SkipTriggers) && ((Collider)Actor).IsTrigger))
{
distance = 0;
normal = Vector3.Up;

View File

@@ -194,6 +194,11 @@ namespace FlaxEditor.SceneGraph
/// The skip editor primitives. Use it to ignore editor icons and primitives intersections detection.
/// </summary>
SkipEditorPrimitives = 2,
/// <summary>
/// The skip trigger colliders flag. Use it to ignore physics trigger colliders intersections detection.
/// </summary>
SkipTriggers = 4,
}
/// <summary>

View File

@@ -250,10 +250,12 @@ namespace FlaxEditor.Tools.Foliage
if (Physics.RayCast(Position, Vector3.Down, out var hit, float.MaxValue, uint.MaxValue, false))
{
// Snap
StartTransforming();
var translationDelta = hit.Point - Position;
var rotationDelta = Quaternion.Identity;
var scaleDelta = Vector3.Zero;
if (translationDelta.IsZero)
return;
StartTransforming();
OnApplyTransformation(ref translationDelta, ref rotationDelta, ref scaleDelta);
EndTransforming();
}