using Syntriax.Engine.Core; using Syntriax.Engine.Integration.MonoGame; namespace Pong.Behaviours; public class CircleBehaviour : Syntriax.Engine.Physics2D.Collider2DCircleBehaviour, IDrawableTriangle { private const float CIRCLE_SEGMENT_COUNT = 32f; public ColorRGBA Color { get; set; } = new ColorRGBA(255, 255, 255); public void Draw(ITriangleBatch triangleBatch) { Recalculate(); for (int i = 0; i < CIRCLE_SEGMENT_COUNT; i++) { float iPi1 = i / CIRCLE_SEGMENT_COUNT * 2f * Math.PI; float iPi2 = (i + 1f).Mod(CIRCLE_SEGMENT_COUNT) / CIRCLE_SEGMENT_COUNT * 2f * Math.PI; Vector2D firstVertex = new Vector2D(Math.Sin(iPi1), Math.Cos(iPi1)) * CircleWorld.Radius; Vector2D secondVertex = new Vector2D(Math.Sin(iPi2), Math.Cos(iPi2)) * CircleWorld.Radius; triangleBatch.Draw(new(CircleWorld.Center, CircleWorld.Center + firstVertex, CircleWorld.Center + secondVertex), Color); } } public CircleBehaviour(Circle circle) : base(circle) { } public CircleBehaviour(Circle circle, ColorRGBA color) : base(circle) { Color = color; } }