public void OnFrame()
    {
        for (int i = 0; i < mSpectators.Count; i++)
        {
            if (mSpectators[i] != null)
            {
                mSpectators[i].OnFrame();
            }
        }

        SpectatorGrid.DrawGrid(mSpectatorGrid, CellSize);
    }
    public void OnCreate()
    {
        mFrustumGradient = SpawnPointMax - SpawnPointMin;
        if (mFrustumGradient.z != 0)
        {
            mFrustumGradient /= mFrustumGradient.z;
        }

        mSpectatorGrid = SpectatorGrid.CreateGrid(new Trapezoid(SpawnPointMin.x, SpawnPointMax.x, SpawnPointMin.z, SpawnPointMax.z), CellSize);
        mSpectators    = new List <Spectator>(AbsoluteMaxSpectators);
        ComputeSpawnChanceSum();
    }
    public static void DrawGrid(SpectatorGrid Grid, Vector2 CellDimensions)
    {
        if (Grid == null)
        {
            return;
        }

        for (int i = 0; i < Grid.GetRowCount(); i++)
        {
            Vector3[] Corners = new Vector3[4];
            for (int j = 0; j < Grid.GetRowLength(i); j++)
            {
                Corners[0] = new Vector3(Grid.GetCellPosition(i, j).x, 0, Grid.GetCellPosition(i, j).y);
                Corners[1] = Corners[0] + CellDimensions.x * Vector3.right;
                Corners[2] = Corners[1] - CellDimensions.y * Vector3.forward;
                Corners[3] = Corners[0] - CellDimensions.y * Vector3.forward;

                for (int c = 0; c < 4; c++)
                {
                    Debug.DrawLine(Corners[c % 4], Corners[(c + 1) % 4], new Color(c / 4.0f, (c % 4) / 4.0f, 1 - (c % 4) / 4.0f));
                }
            }
        }
    }