generated from krampus/template-godot4
	
		
			
	
	
		
			129 lines
		
	
	
		
			4.4 KiB
		
	
	
	
		
			C#
		
	
	
	
	
	
		
		
			
		
	
	
			129 lines
		
	
	
		
			4.4 KiB
		
	
	
	
		
			C#
		
	
	
	
	
	
| 
								 | 
							
								using Godot;
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								#nullable enable
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								namespace PhantomCamera;
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								public enum InterpolationMode
							 | 
						|||
| 
								 | 
							
								{
							 | 
						|||
| 
								 | 
							
								    Auto,
							 | 
						|||
| 
								 | 
							
								    Idle,
							 | 
						|||
| 
								 | 
							
								    Physics
							 | 
						|||
| 
								 | 
							
								}
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								public static class PhantomCameraHostExtensions
							 | 
						|||
| 
								 | 
							
								{
							 | 
						|||
| 
								 | 
							
								    public static PhantomCameraHost AsPhantomCameraHost(this Node node)
							 | 
						|||
| 
								 | 
							
								    {
							 | 
						|||
| 
								 | 
							
								        return new PhantomCameraHost(node);
							 | 
						|||
| 
								 | 
							
								    }
							 | 
						|||
| 
								 | 
							
								}
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								public class PhantomCameraHost()
							 | 
						|||
| 
								 | 
							
								{
							 | 
						|||
| 
								 | 
							
								    public Node Node { get; } = null!;
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								    public PhantomCameraHost(Node node) : this()
							 | 
						|||
| 
								 | 
							
								    {
							 | 
						|||
| 
								 | 
							
								        Node = node;
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								        _callablePCamBecameActive = Callable.From<Node>(pCam => PCamBecameActive?.Invoke(pCam));
							 | 
						|||
| 
								 | 
							
								        _callablePCamBecameInactive = Callable.From<Node>(pCam => PCamBecameInactive?.Invoke(pCam));
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								        Node.Connect(SignalName.PCamBecameActive, _callablePCamBecameActive);
							 | 
						|||
| 
								 | 
							
								        Node.Connect(SignalName.PCamBecameInactive, _callablePCamBecameInactive);
							 | 
						|||
| 
								 | 
							
								    }
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								    ~PhantomCameraHost()
							 | 
						|||
| 
								 | 
							
								    {
							 | 
						|||
| 
								 | 
							
								        Node.Disconnect(SignalName.PCamBecameActive, _callablePCamBecameActive);
							 | 
						|||
| 
								 | 
							
								        Node.Disconnect(SignalName.PCamBecameInactive, _callablePCamBecameInactive);
							 | 
						|||
| 
								 | 
							
								    }
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								    public delegate void PCamBecameActiveEventHandler(Node pCam);
							 | 
						|||
| 
								 | 
							
								    public delegate void PCamBecameInactiveEventHandler(Node pCam);
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								    public event PCamBecameActiveEventHandler? PCamBecameActive;
							 | 
						|||
| 
								 | 
							
								    public event PCamBecameInactiveEventHandler? PCamBecameInactive;
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								    private readonly Callable _callablePCamBecameActive;
							 | 
						|||
| 
								 | 
							
								    private readonly Callable _callablePCamBecameInactive;
							 | 
						|||
| 
								 | 
							
								    // For when Godot becomes the minimum version
							 | 
						|||
| 
								 | 
							
								    // public InterpolationMode InterpolationMode
							 | 
						|||
| 
								 | 
							
								    // {
							 | 
						|||
| 
								 | 
							
								    //      get => (InterpolationMode)(int)Node.Call(MethodName.GetInterpolationMode);
							 | 
						|||
| 
								 | 
							
								    //      set => Node.Call(MethodName.SetInterpolationMode, (int)value);
							 | 
						|||
| 
								 | 
							
								    // }
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								    public int HostLayers
							 | 
						|||
| 
								 | 
							
								    {
							 | 
						|||
| 
								 | 
							
								        get => (int)Node.Call(PhantomCamera.MethodName.GetHostLayers);
							 | 
						|||
| 
								 | 
							
								        set => Node.Call(PhantomCamera.MethodName.SetHostLayers, value);
							 | 
						|||
| 
								 | 
							
								    }
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								    public void SetHostLayersValue(int layer, bool value) => Node.Call(MethodName.SetHostLayersValue, layer, value);
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								    public Camera2D? Camera2D => (Camera2D?)Node.Get(PropertyName.Camera2D);
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								    public Camera3D? Camera3D => (Camera3D?)Node.Get(PropertyName.Camera3D);
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								    public InterpolationMode InterpolationMode
							 | 
						|||
| 
								 | 
							
								    {
							 | 
						|||
| 
								 | 
							
								        get => (InterpolationMode)(int)Node.Call(MethodName.GetInterpolationMode);
							 | 
						|||
| 
								 | 
							
								        set => Node.Call(MethodName.SetInterpolationMode, (int)value);
							 | 
						|||
| 
								 | 
							
								    }
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								    public bool TriggerPhantomCameraTween => (bool)Node.Call(MethodName.GetTriggerPhantomCameraTween);
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								    public ActivePhantomCameraQueryResult? GetActivePhantomCamera()
							 | 
						|||
| 
								 | 
							
								    {
							 | 
						|||
| 
								 | 
							
								        var result = Node.Call(MethodName.GetActivePhantomCamera);
							 | 
						|||
| 
								 | 
							
								        return result.VariantType == Variant.Type.Nil ? null : new ActivePhantomCameraQueryResult(result.AsGodotObject());
							 | 
						|||
| 
								 | 
							
								    }
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								    public static class PropertyName
							 | 
						|||
| 
								 | 
							
								    {
							 | 
						|||
| 
								 | 
							
								        public const string Camera2D = "camera_2d";
							 | 
						|||
| 
								 | 
							
								        public const string Camera3D = "camera_3d";
							 | 
						|||
| 
								 | 
							
								    }
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								    public static class MethodName
							 | 
						|||
| 
								 | 
							
								    {
							 | 
						|||
| 
								 | 
							
								        public const string GetActivePhantomCamera = "get_active_pcam";
							 | 
						|||
| 
								 | 
							
								        public const string GetTriggerPhantomCameraTween = "get_trigger_pcam_tween";
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								        public const string GetInterpolationMode = "get_interpolation_mode";
							 | 
						|||
| 
								 | 
							
								        public const string SetInterpolationMode = "set_interpolation_mode";
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								        public const string SetHostLayersValue = "set_host_layers_value";
							 | 
						|||
| 
								 | 
							
								    }
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								    public static class SignalName
							 | 
						|||
| 
								 | 
							
								    {
							 | 
						|||
| 
								 | 
							
								        public const string PCamBecameActive = "pcam_became_active";
							 | 
						|||
| 
								 | 
							
								        public const string PCamBecameInactive = "pcam_became_inactive";
							 | 
						|||
| 
								 | 
							
								    }
							 | 
						|||
| 
								 | 
							
								}
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								public class ActivePhantomCameraQueryResult(GodotObject godotObject)
							 | 
						|||
| 
								 | 
							
								{
							 | 
						|||
| 
								 | 
							
								    public bool Is2D => godotObject.IsClass("Node2D") || ((Node)godotObject).Name.ToString().Contains("PhantomCamera2D")
							 | 
						|||
| 
								 | 
							
								                                               || ((Node)godotObject).Name.ToString().Contains("PCam2D")
							 | 
						|||
| 
								 | 
							
								                                               || ((Node)godotObject).Name.ToString().Contains("2D");
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								    public bool Is3D => godotObject.IsClass("Node3D") || ((Node)godotObject).Name.ToString().Contains("PhantomCamera3D")
							 | 
						|||
| 
								 | 
							
								                                               || ((Node)godotObject).Name.ToString().Contains("PCam3D")
							 | 
						|||
| 
								 | 
							
								                                               || ((Node)godotObject).Name.ToString().Contains("3D");
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								    public PhantomCamera2D? AsPhantomCamera2D()
							 | 
						|||
| 
								 | 
							
								    {
							 | 
						|||
| 
								 | 
							
								        return Is2D ? new PhantomCamera2D(godotObject) : null;
							 | 
						|||
| 
								 | 
							
								    }
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								    public PhantomCamera3D? AsPhantomCamera3D()
							 | 
						|||
| 
								 | 
							
								    {
							 | 
						|||
| 
								 | 
							
								        return Is3D ? new PhantomCamera3D(godotObject) : null;
							 | 
						|||
| 
								 | 
							
								    }
							 | 
						|||
| 
								 | 
							
								}
							 |