This document is about: QUANTUM 1
SWITCH TO

Additional handy debug draw functions

Article was written against Quantum version 1.2.4RC1

Here are a few other static debug draw commands I found useful in Quantum. (Added here to save you trouble!)

My favorites are

Debug2.DrawX(center, size, color)
Debug2.DrawVector(start, end, color, headPercentage)

C#

using Photon.Deterministic;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace Quantum
{

    public static class Debug2
    {
        // Debug Draw
        public static void DrawX(FPVector2 center, FP size, ColorRGBA color)
        {
            Draw.Line(center + (new FPVector2(FP.Minus_1, FP.Minus_1) * size), center + (new FPVector2(FP._1, FP._1) * size), color);
            Draw.Line(center + (new FPVector2(FP._1, FP.Minus_1) * size), center + (new FPVector2(FP.Minus_1, FP._1) * size), color);
        }

        public static void DrawCircle(FPVector2 center, FP radius, ColorRGBA ColorRGBA, int detail = 16)
        {
            FPVector2 prev = new FPVector2(FPMath.Cos(0) * radius, FPMath.Sin(0) * radius) + center;

            for (int i = 0; i <= detail; i++)
            {
                FP t = (i * FP.Pi * FP._2) / detail;
                FPVector2 c = new FPVector2(FPMath.Cos(t) * radius, FPMath.Sin(t) * radius) + center;
                Draw.Line(prev, c, ColorRGBA);
                prev = c;
            }
        }

        public static void DrawRectangle(FPVector2 center, FPVector2 size, ColorRGBA ColorRGBA)
        {
            Draw.Line(center + (new FPVector2(FP.Minus_1, FP.Minus_1) * size.X), center + (new FPVector2(FP._1, FP.Minus_1) * size.Y), ColorRGBA);
            Draw.Line(center + (new FPVector2(FP._1, FP.Minus_1) * size.X), center + (new FPVector2(FP._1, FP._1) * size.Y), ColorRGBA);
            Draw.Line(center + (new FPVector2(FP._1, FP._1) * size.X), center + (new FPVector2(FP.Minus_1, FP._1) * size.Y), ColorRGBA);
            Draw.Line(center + (new FPVector2(FP.Minus_1, FP._1) * size.X), center + (new FPVector2(FP.Minus_1, FP.Minus_1) * size.Y), ColorRGBA);
        }

        public static void DrawVector(FPVector2 start, FPVector2 end, ColorRGBA ColorRGBA)
        {
            DrawVector(start, end, ColorRGBA, FP._0_25);
        }
        public static void DrawVector(FPVector2 start, FPVector2 end, ColorRGBA ColorRGBA, FP headPercentage)
        {
            Draw.Line(start, end, ColorRGBA);
            FPVector2 delta = (start - end);
            FPVector2 perp = new FPVector2(delta.Y, -delta.X).Normalized;

            FP headLength = (start - end).Magnitude * headPercentage;
            FPVector2 back = end + (start - end).Normalized * headLength;

            Draw.Line(end, back + (perp * headPercentage) * FP._0_33, ColorRGBA);
            Draw.Line(end, back - (perp * headPercentage) * FP._0_33, ColorRGBA);
        }

        public static void DrawPolygon(FPVector2[] points, ColorRGBA color)
        {
            Draw.Line(points[points.Length - 1], points[0], color);

            for (int i = 0; i < points.Length - 1; i++)
            {
                Draw.Line(points[i], points[i + 1], color);
            }
        }
        public static void DrawPolygon(FPVector2 center, FPVector2[] points, FP Rotation, ColorRGBA color)
        {
            FPVector2[] drawPoints = new FPVector2[points.Length];
            FPMatrix2x2 matrix2X2 = new FPMatrix2x2();
            matrix2X2.M11 = FPMath.Cos(Rotation);
            matrix2X2.M12 = FPMath.Sin(Rotation);
            matrix2X2.M21 = -FPMath.Sin(Rotation);
            matrix2X2.M22 = FPMath.Cos(Rotation);

            for (int i = 0; i < points.Length; i++)
            {
                drawPoints[i] = matrix2X2 * points[i];
                drawPoints[i] = drawPoints[i] + center;
            }
            DrawPolygon(drawPoints, color);
        }
    }
}

Back to top