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