using Voile; using Voile.Audio; using Voile.Resources; using Voile.SceneGraph; using Voile.Utils; using Voile.Input; using Voile.Systems; using System.Numerics; public class TestGame : Game { public override string ResourceRoot => "Resources/"; public override void Initialize() { InitializeDefault(); _particleSystem = new ParticleSystem(); } protected override void LoadResources() { if (!ResourceManager.TryLoad("my_sound", "sounds/test_sound.ogg", out Sound? _testSound)) { } if (!ResourceManager.TryLoad("inter_regular", "fonts/Inter-Regular.ttf", out Font? _font)) { } } protected override void Ready() { _particleSystem!.CreateEmitter(Renderer.WindowSize / 2, new ParticleEmitterSettings() { ColorBegin = Color.Green, ColorEnd = Color.Red, EmitRadius = 128, MaxParticles = 256 }); } protected override void Run() { while (Renderer.ShouldRun) { _particleSystem!.Update(Renderer.FrameTime); Renderer.BeginFrame(); Renderer.ClearBackground(Color.Black); foreach (var emitter in _particleSystem!.Emitters) { DrawEmitter(emitter); } Renderer.EndFrame(); } } public override void Shutdown() { ShutdownDefault(); } private void DrawEmitter(ParticleEmitter emitter) { for (int i = 0; i < emitter.Particles.Length; i++) { var particle = emitter.Particles[i]; var color = new Color(particle.ColorArgb); Renderer.SetTransform(emitter.OriginPosition + particle.Position, Vector2.Zero); Renderer.DrawCircle(16f * particle.Scale, color); } } private ParticleSystem? _particleSystem; private Logger _logger = new(nameof(TestGame)); }