2024-06-06 19:15:07 -07:00
|
|
|
using Godot;
|
|
|
|
|
|
|
|
namespace SupaLidlGame.BoundingBoxes;
|
|
|
|
|
|
|
|
public partial class CameraTrigger : Area2D
|
|
|
|
{
|
|
|
|
[Export]
|
|
|
|
public Node Camera { get; set; }
|
|
|
|
|
|
|
|
[Export]
|
|
|
|
public int EnablePriority { get; set; } = 2;
|
|
|
|
|
|
|
|
[Export]
|
|
|
|
public int DisablePriority { get; set; } = 0;
|
|
|
|
|
|
|
|
public override void _Ready()
|
|
|
|
{
|
|
|
|
Connect(SignalName.BodyEntered, new Callable(this, nameof(OnBodyEntered)));
|
|
|
|
Connect(SignalName.BodyExited, new Callable(this, nameof(OnBodyExited)));
|
|
|
|
}
|
|
|
|
|
2024-06-07 13:12:46 -07:00
|
|
|
public override void _EnterTree()
|
|
|
|
{
|
|
|
|
if (!Camera.Get("tween_on_load").AsBool())
|
|
|
|
{
|
|
|
|
var tween = Camera.Get("tween_resource").AsGodotObject();
|
|
|
|
double duration = tween.Get("duration").AsDouble();
|
|
|
|
|
|
|
|
// HACK: manually set this field to interrupt tween when the
|
|
|
|
// trigger enters the scene, which happens when the scene is loaded
|
|
|
|
// from the cache
|
|
|
|
Camera.SetDeferred("_has_tweened", true);
|
|
|
|
GD.Print("set tween");
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
2024-06-06 19:15:07 -07:00
|
|
|
private void OnBodyEntered(Node2D node)
|
|
|
|
{
|
|
|
|
Camera.Set("priority", EnablePriority);
|
|
|
|
Camera.Set("follow_target", node);
|
|
|
|
}
|
|
|
|
|
|
|
|
private void OnBodyExited(Node2D node)
|
|
|
|
{
|
|
|
|
Camera.Set("priority", DisablePriority);
|
|
|
|
}
|
|
|
|
}
|