67 lines
1.2 KiB
C#
67 lines
1.2 KiB
C#
|
|
using Godot;
|
|
|
|
|
|
namespace Rokojori
|
|
{
|
|
[GlobalClass, Tool ]
|
|
public partial class SetVector3FromNodePosition : Action
|
|
{
|
|
[Export]
|
|
public Node3D source;
|
|
|
|
[Export]
|
|
public bool global = true;
|
|
|
|
[Export]
|
|
public bool convertToView = false;
|
|
|
|
[Export]
|
|
public Resource target;
|
|
|
|
[Export]
|
|
public string member;
|
|
|
|
[Export]
|
|
public Camera3D camera;
|
|
|
|
[Export]
|
|
public Vector3 scale = Vector3.One;
|
|
|
|
|
|
protected override void _OnTrigger()
|
|
{
|
|
if ( target == null || source == null )
|
|
{
|
|
return;
|
|
}
|
|
|
|
var value = source.GetPosition( global );
|
|
|
|
if ( convertToView )
|
|
{
|
|
if ( Engine.IsEditorHint() )
|
|
{
|
|
#if TOOLS
|
|
|
|
var editorCamera = EditorInterface.Singleton.GetEditorViewport3D().GetCamera3D();
|
|
value = editorCamera.ToLocal( value );
|
|
|
|
#endif
|
|
}
|
|
else
|
|
{
|
|
if ( camera != null )
|
|
{
|
|
value = camera.ToLocal( value );
|
|
}
|
|
}
|
|
}
|
|
|
|
value = value * scale;
|
|
// this.LogInfo( "Set", member, ">>", value );
|
|
ReflectionHelper.SetValue( target, member, value );
|
|
|
|
}
|
|
}
|
|
} |