diff --git a/Source/Editor/SceneGraph/ActorChildNode.cs b/Source/Editor/SceneGraph/ActorChildNode.cs index 328ca277a..436984bc4 100644 --- a/Source/Editor/SceneGraph/ActorChildNode.cs +++ b/Source/Editor/SceneGraph/ActorChildNode.cs @@ -94,20 +94,28 @@ namespace FlaxEditor.SceneGraph public abstract class ActorChildNode : ActorChildNode where T : ActorNode { /// - /// The actor. + /// The actor node. /// - protected readonly T _actor; + protected T _node; /// /// Initializes a new instance of the class. /// - /// The parent actor. + /// The parent actor node. /// The child id. /// The child index. - protected ActorChildNode(T actor, Guid id, int index) + protected ActorChildNode(T node, Guid id, int index) : base(id, index) { - _actor = actor; + _node = node; + } + + /// + public override void OnDispose() + { + _node = null; + + base.OnDispose(); } } } diff --git a/Source/Editor/SceneGraph/Actors/BoxVolumeNode.cs b/Source/Editor/SceneGraph/Actors/BoxVolumeNode.cs index 24b035bc8..ec62ebd47 100644 --- a/Source/Editor/SceneGraph/Actors/BoxVolumeNode.cs +++ b/Source/Editor/SceneGraph/Actors/BoxVolumeNode.cs @@ -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; diff --git a/Source/Editor/SceneGraph/Actors/NavLinkNode.cs b/Source/Editor/SceneGraph/Actors/NavLinkNode.cs index 941e39267..62bc0a2e7 100644 --- a/Source/Editor/SceneGraph/Actors/NavLinkNode.cs +++ b/Source/Editor/SceneGraph/Actors/NavLinkNode.cs @@ -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; diff --git a/Source/Editor/SceneGraph/Actors/SplineNode.cs b/Source/Editor/SceneGraph/Actors/SplineNode.cs index aa7fff53a..879e7e241 100644 --- a/Source/Editor/SceneGraph/Actors/SplineNode.cs +++ b/Source/Editor/SceneGraph/Actors/SplineNode.cs @@ -14,8 +14,8 @@ namespace FlaxEditor.SceneGraph.Actors { private sealed class SplinePointNode : ActorChildNode { - 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); } }