Tweaks for ActorChildNode

This commit is contained in:
Wojtek Figat
2021-01-27 15:29:14 +01:00
parent f0c7fbb0cf
commit bd93e46624
4 changed files with 27 additions and 16 deletions

View File

@@ -94,20 +94,28 @@ namespace FlaxEditor.SceneGraph
public abstract class ActorChildNode<T> : ActorChildNode where T : ActorNode
{
/// <summary>
/// The actor.
/// The actor node.
/// </summary>
protected readonly T _actor;
protected T _node;
/// <summary>
/// Initializes a new instance of the <see cref="ActorChildNode{T}"/> class.
/// </summary>
/// <param name="actor">The parent actor.</param>
/// <param name="node">The parent actor node.</param>
/// <param name="id">The child id.</param>
/// <param name="index">The child index.</param>
protected ActorChildNode(T actor, Guid id, int index)
protected ActorChildNode(T node, Guid id, int index)
: base(id, index)
{
_actor = actor;
_node = node;
}
/// <inheritdoc />
public override void OnDispose()
{
_node = null;
base.OnDispose();
}
}
}

View File

@@ -78,14 +78,14 @@ namespace FlaxEditor.SceneGraph.Actors
{
get
{
var actor = (BoxVolume)_actor.Actor;
var actor = (BoxVolume)_node.Actor;
var localOffset = _offset * actor.Size;
Transform localTrans = new Transform(localOffset);
return actor.Transform.LocalToWorld(localTrans);
}
set
{
var actor = (BoxVolume)_actor.Actor;
var actor = (BoxVolume)_node.Actor;
Transform localTrans = actor.Transform.WorldToLocal(value);
var prevLocalOffset = _offset * actor.Size;
var localOffset = Vector3.Abs(_offset) * 2.0f * localTrans.Translation;

View File

@@ -37,13 +37,13 @@ namespace FlaxEditor.SceneGraph.Actors
{
get
{
var actor = (NavLink)_actor.Actor;
var actor = (NavLink)_node.Actor;
Transform localTrans = new Transform(_isStart ? actor.Start : actor.End);
return actor.Transform.LocalToWorld(localTrans);
}
set
{
var actor = (NavLink)_actor.Actor;
var actor = (NavLink)_node.Actor;
Transform localTrans = actor.Transform.WorldToLocal(value);
if (_isStart)
actor.Start = localTrans.Translation;

View File

@@ -14,8 +14,8 @@ namespace FlaxEditor.SceneGraph.Actors
{
private sealed class SplinePointNode : ActorChildNode<SplineNode>
{
public SplinePointNode(SplineNode actor, Guid id, int index)
: base(actor, id, index)
public unsafe SplinePointNode(SplineNode node, Guid id, int index)
: base(node, id, index)
{
}
@@ -25,19 +25,19 @@ namespace FlaxEditor.SceneGraph.Actors
{
get
{
var actor = (Spline)_actor.Actor;
var actor = (Spline)_node.Actor;
return actor.GetSplineTransform(Index);
}
set
{
var actor = (Spline)_actor.Actor;
var actor = (Spline)_node.Actor;
actor.SetSplineTransform(Index, value);
}
}
public override bool RayCastSelf(ref RayCastData ray, out float distance, out Vector3 normal)
{
var actor = (Spline)_actor.Actor;
var actor = (Spline)_node.Actor;
var pos = actor.GetSplinePoint(Index);
normal = -ray.Ray.Direction;
return new BoundingSphere(pos, 7.0f).Intersects(ref ray.Ray, out distance);
@@ -45,10 +45,13 @@ namespace FlaxEditor.SceneGraph.Actors
public override void OnDebugDraw(ViewportDebugDrawData data)
{
var actor = (Spline)_node.Actor;
var pos = actor.GetSplinePoint(Index);
// Draw spline path
ParentNode.OnDebugDraw(data);
var actor = (Spline)_actor.Actor;
var pos = actor.GetSplinePoint(Index);
// Draw selected point highlight
DebugDraw.DrawSphere(new BoundingSphere(pos, 5.0f), Color.Yellow, 0, false);
}
}