/* * Farseer Physics Engine: * Copyright (c) 2012 Ian Qvist */ using System; using FarseerPhysics.Common; using FarseerPhysics.Dynamics; using Microsoft.Xna.Framework; namespace FarseerPhysics { [Flags] public enum DebugViewFlags { /// /// Draw shapes. /// Shape = (1 << 0), /// /// Draw joint connections. /// Joint = (1 << 1), /// /// Draw axis aligned bounding boxes. /// AABB = (1 << 2), /// /// Draw broad-phase pairs. /// //Pair = (1 << 3), /// /// Draw center of mass frame. /// CenterOfMass = (1 << 4), /// /// Draw useful debug data such as timings and number of bodies, joints, contacts and more. /// DebugPanel = (1 << 5), /// /// Draw contact points between colliding bodies. /// ContactPoints = (1 << 6), /// /// Draw contact normals. Need ContactPoints to be enabled first. /// ContactNormals = (1 << 7), /// /// Draws the vertices of polygons. /// PolygonPoints = (1 << 8), /// /// Draws the performance graph. /// PerformanceGraph = (1 << 9), /// /// Draws controllers. /// Controllers = (1 << 10) } /// Implement and register this class with a World to provide debug drawing of physics /// entities in your game. public abstract class DebugViewBase { protected DebugViewBase(World world) { World = world; } protected World World { get; private set; } /// /// Gets or sets the debug view flags. /// /// The flags. public DebugViewFlags Flags { get; set; } /// /// Append flags to the current flags. /// /// The flags. public void AppendFlags(DebugViewFlags flags) { Flags |= flags; } /// /// Remove flags from the current flags. /// /// The flags. public void RemoveFlags(DebugViewFlags flags) { Flags &= ~flags; } /// /// Draw a closed polygon provided in CCW order. /// /// The vertices. /// The vertex count. /// The red value. /// The blue value. /// The green value. public abstract void DrawPolygon(Vector2[] vertices, int count, float red, float blue, float green, bool closed = true); /// /// Draw a solid closed polygon provided in CCW order. /// /// The vertices. /// The vertex count. /// The red value. /// The blue value. /// The green value. public abstract void DrawSolidPolygon(Vector2[] vertices, int count, float red, float blue, float green); /// /// Draw a circle. /// /// The center. /// The radius. /// The red value. /// The blue value. /// The green value. public abstract void DrawCircle(Vector2 center, float radius, float red, float blue, float green); /// /// Draw a solid circle. /// /// The center. /// The radius. /// The axis. /// The red value. /// The blue value. /// The green value. public abstract void DrawSolidCircle(Vector2 center, float radius, Vector2 axis, float red, float blue, float green); /// /// Draw a line segment. /// /// The start. /// The end. /// The red value. /// The blue value. /// The green value. public abstract void DrawSegment(Vector2 start, Vector2 end, float red, float blue, float green); /// /// Draw a transform. Choose your own length scale. /// /// The transform. public abstract void DrawTransform(ref Transform transform); } }