using System.Text.Json.Serialization; using DaggerFramework.Audio; using DaggerFramework.Rendering; namespace DaggerFramework.SceneGraph { public class Entity { public EntityLayer? Layer { get; set; } public InputHandler Input => Layer!.Scene.Input; public AudioBackend Audio => Layer!.Scene.Audio; public Renderer Renderer => Layer!.Scene.Renderer; public int Id { get; set; } public void Start() => OnStart(); public void Update(double dt) => OnUpdate(dt); public void ReceiveInput(InputHandler input) => OnInput(input); protected virtual void OnStart() { } protected virtual void OnDestroy() { } protected virtual void OnUpdate(double dt) { } protected virtual void OnInput(InputHandler input) { } public void Destroy() { OnDestroy(); Layer?.DestroyEntity(Id); } } [JsonSourceGenerationOptions(WriteIndented = true)] [JsonSerializable(typeof(Entity))] internal partial class EntitySourceGenerationContext : JsonSerializerContext { } }