/* * Farseer Physics Engine based on Box2D.XNA port: * Copyright (c) 2010 Ian Qvist * * Box2D.XNA port of Box2D: * Copyright (c) 2009 Brandon Furtwangler, Nathan Furtwangler * * Original source Box2D: * Copyright (c) 2006-2009 Erin Catto http://www.gphysics.com * * This software is provided 'as-is', without any express or implied * warranty. In no event will the authors be held liable for any damages * arising from the use of this software. * Permission is granted to anyone to use this software for any purpose, * including commercial applications, and to alter it and redistribute it * freely, subject to the following restrictions: * 1. The origin of this software must not be misrepresented; you must not * claim that you wrote the original software. If you use this software * in a product, an acknowledgment in the product documentation would be * appreciated but is not required. * 2. Altered source versions must be plainly marked as such, and must not be * misrepresented as being the original software. * 3. This notice may not be removed or altered from any source distribution. */ 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 DebugView { protected DebugView(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); /// /// 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); } }