A simple .NET Framework to make 2D games quick and easy.
at main 1.6 kB view raw
1using System.Numerics; 2 3namespace Fjord.Scenes; 4 5public class SceneCamera 6{ 7 public Entity? Target; 8 private Vector2 CoreOffset = new(); 9 public Vector2 Offset = new(); 10 public float Lag = 1; 11 public float CameraShakeIntensity = 1f; 12 public float CameraShakeLife = 0f; 13 public float CameraShakeLifeMax = 0f; 14 private Scene parentScene; 15 16 public SceneCamera(Scene parent) 17 { 18 this.parentScene = parent; 19 } 20 21 public void SetTarget(Entity target) 22 { 23 this.Target = target; 24 } 25 26 public void SetLag(float lag) 27 { 28 this.Lag = lag; 29 } 30 31 public void SetCameraShake(float life, float intensity) 32 { 33 this.CameraShakeLife = life; 34 this.CameraShakeLifeMax = life; 35 this.CameraShakeIntensity = intensity; 36 } 37 38 public void Update(Vector2 WindowSize) 39 { 40 if(Target != null) 41 { 42 CoreOffset += ((((Target.Get<Transform>().Position - WindowSize / 2) - CoreOffset) / Lag) * 500) * parentScene.DeltaTime; 43 } 44 45 if(CameraShakeLife > 0f) 46 { 47 Random random = new(); 48 Offset = Vector2.Add( 49 CoreOffset, 50 new( 51 ((float)(random.NextDouble() - 0.5) * CameraShakeIntensity) * (CameraShakeLife / CameraShakeLifeMax), 52 ((float)(random.NextDouble() - 0.5) * CameraShakeIntensity) * (CameraShakeLife / CameraShakeLifeMax) 53 ) 54 ); 55 CameraShakeLife -= 100 * (float)Game.DeltaTime; 56 } else 57 { 58 Offset = CoreOffset; 59 } 60 } 61}