81 lines
1.7 KiB
C#
81 lines
1.7 KiB
C#
|
|
using Godot;
|
|
|
|
|
|
namespace Rokojori
|
|
{
|
|
[Tool][GlobalClass, Icon("res://addons/rokojori_action_library/Icons/SetNodeState.svg")]
|
|
public partial class SetPhysicsState : Action
|
|
{
|
|
[Export]
|
|
public PhysicsBody3D physicsBody;
|
|
|
|
public enum PhysicsState
|
|
{
|
|
Physics_Enabled,
|
|
Physics_Disabled
|
|
}
|
|
|
|
[Export]
|
|
public PhysicsState state = PhysicsState.Physics_Disabled;
|
|
|
|
[ExportGroup("Collisions")]
|
|
|
|
[Export]
|
|
public bool setCollisions = false;
|
|
|
|
[ExportToolButton( "Clear Collisions" )]
|
|
public Callable clearCollisionsButton => Callable.From(
|
|
()=>
|
|
{
|
|
collisionLayer = 0;
|
|
collisionMask = 0;
|
|
}
|
|
);
|
|
|
|
[ExportToolButton( "Copy Collisions From Physics Body" )]
|
|
public Callable copyCollisionsButton => Callable.From(
|
|
()=>
|
|
{
|
|
collisionLayer = physicsBody.CollisionLayer;
|
|
collisionMask = physicsBody.CollisionMask;
|
|
}
|
|
);
|
|
|
|
[Export(PropertyHint.Layers2DPhysics)]
|
|
public uint collisionLayer = 0;
|
|
|
|
[Export(PropertyHint.Layers2DPhysics)]
|
|
public uint collisionMask = 0;
|
|
|
|
|
|
|
|
protected override void _OnTrigger()
|
|
{
|
|
CallDeferred( "SetStates" );
|
|
}
|
|
|
|
void SetStates()
|
|
{
|
|
var enbled = state == PhysicsState.Physics_Enabled;
|
|
var trillian = enbled ? Trillean.True : Trillean.False;
|
|
|
|
NodeState.Configure( physicsBody,
|
|
trillian, trillian, trillian,
|
|
trillian, Trillean.Any, false, ProcessModeEnum.Inherit );
|
|
|
|
if ( physicsBody is RigidBody3D rb )
|
|
{
|
|
rb.Freeze = ! enbled;
|
|
}
|
|
|
|
if ( setCollisions )
|
|
{
|
|
physicsBody.CollisionLayer = collisionLayer;
|
|
physicsBody.CollisionMask = collisionMask;
|
|
}
|
|
|
|
}
|
|
}
|
|
|
|
} |