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 public abstract class ActorChildNode<T> : ActorChildNode where T : ActorNode
{ {
/// <summary> /// <summary>
/// The actor. /// The actor node.
/// </summary> /// </summary>
protected readonly T _actor; protected T _node;
/// <summary> /// <summary>
/// Initializes a new instance of the <see cref="ActorChildNode{T}"/> class. /// Initializes a new instance of the <see cref="ActorChildNode{T}"/> class.
/// </summary> /// </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="id">The child id.</param>
/// <param name="index">The child index.</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) : 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 get
{ {
var actor = (BoxVolume)_actor.Actor; var actor = (BoxVolume)_node.Actor;
var localOffset = _offset * actor.Size; var localOffset = _offset * actor.Size;
Transform localTrans = new Transform(localOffset); Transform localTrans = new Transform(localOffset);
return actor.Transform.LocalToWorld(localTrans); return actor.Transform.LocalToWorld(localTrans);
} }
set set
{ {
var actor = (BoxVolume)_actor.Actor; var actor = (BoxVolume)_node.Actor;
Transform localTrans = actor.Transform.WorldToLocal(value); Transform localTrans = actor.Transform.WorldToLocal(value);
var prevLocalOffset = _offset * actor.Size; var prevLocalOffset = _offset * actor.Size;
var localOffset = Vector3.Abs(_offset) * 2.0f * localTrans.Translation; var localOffset = Vector3.Abs(_offset) * 2.0f * localTrans.Translation;

View File

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

View File

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