public void Initialize(Vector2 position, Vector2 windowSize, float chunkWorldSize)
        {
            m_renderWindow = new SlidingWindow(position, windowSize, Vector2.zero, Vector2.one * chunkWorldSize);

            m_rect       = m_renderWindow.GetWindow();
            m_windowSize = m_rect.size;

            m_chunks = new VoxelChunk[m_windowSize.x * m_windowSize.y];
            m_dirty  = new bool[m_chunks.Length];

            for (int y = 0; y < m_windowSize.y; y++)
            {
                for (int x = 0; x < m_windowSize.x; x++)
                {
                    int cx = m_rect.origin.x + x;
                    int cy = m_rect.origin.y + y;

                    VoxelChunk chunk = VoxelChunk.Create(transform, string.Format("[{0},{1}]", cx, cy), m_settings, m_chunkSize + 1, m_chunkSize + 1);

                    float chunkX = cx * m_settings.voxelSize * m_chunkSize;
                    float chunkY = cy * m_settings.voxelSize * m_chunkSize;

                    chunk.nextPosition = new Vector3(chunkX, chunkY);

                    m_chunks[y * m_windowSize.x + x] = chunk;
                }
            }
        }
        private void OnDrawGizmosSelected()
        {
            SlidingWindow window = m_renderWindow;

            if (window == null)
            {
                window = new SlidingWindow(Vector2.zero, m_renderSize, Vector2.zero, Vector2.one * m_settings.voxelSize * m_chunkSize);
            }
            IntRect rect = window.GetWindow();

            for (int j = 0; j < rect.size.y && j < 100; j++)
            {
                for (int i = 0; i < rect.size.x && i < 100; i++)
                {
                    int chunkX = rect.origin.x + i;
                    int chunkY = rect.origin.y + j;

                    Vector2 a = new Vector2(chunkX * m_settings.voxelSize * m_chunkSize, chunkY * m_settings.voxelSize * m_chunkSize);
                    Vector2 b = a + Vector2.one * m_settings.voxelSize * m_chunkSize;

                    DrawRect(a, b, Color.yellow);

                    string debug = string.Format("Chunk[{0},{1}]\n({2}->{3})", chunkX, chunkY, a, b);
                    DrawString(debug, a + (b - a) / 2.0f, Color.yellow);
                }
            }

            DrawRect(window.position, window.position + window.size, Color.red);
            DrawString("Window", window.position, Color.red);
        }