diff --git a/Utils/PlayerCamera.cs b/Utils/PlayerCamera.cs new file mode 100644 index 0000000..21a52f6 --- /dev/null +++ b/Utils/PlayerCamera.cs @@ -0,0 +1,46 @@ +using Godot; +using System; + +namespace SupaLidlGame.Utils +{ + public partial class PlayerCamera : Camera2D + { + protected float _intensity; + + protected double _timeLeft; + + public override void _Ready() + { + + } + + public override void _Process(double delta) + { + if (_timeLeft > 0) + { + _timeLeft -= delta; + Offset = RandomOffset(_intensity); + } + + if (_intensity > 0) + { + _intensity = Mathf.MoveToward(_intensity, 0.0f, (float)delta); + } + } + + public void Shake(float intensity, double time) + { + _intensity += intensity; + _timeLeft += time; + } + + private Vector2 RandomOffset(float intensity) + { + Vector2 ret = Vector2.Zero; + var rng = new RandomNumberGenerator(); + ret.x = (rng.Randf() * 2 - 0.5f) * intensity; + ret.y = (rng.Randf() * 2 - 0.5f) * intensity; + return ret; + } + } +} diff --git a/Utils/PlayerCamera.tscn b/Utils/PlayerCamera.tscn new file mode 100644 index 0000000..d468774 --- /dev/null +++ b/Utils/PlayerCamera.tscn @@ -0,0 +1,10 @@ +[gd_scene load_steps=2 format=3 uid="uid://cl56eadpklnbo"] + +[ext_resource type="Script" path="res://Utils/PlayerCamera.cs" id="1_jabhk"] + +[node name="Camera2D" type="Camera2D"] +current = true +zoom = Vector2(4, 4) +script = ExtResource("1_jabhk") + +[node name="AnimationPlayer" type="AnimationPlayer" parent="."]