Tweaks for ActorChildNode
This commit is contained in:
@@ -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();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -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;
|
||||||
|
|||||||
@@ -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;
|
||||||
|
|||||||
@@ -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);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user