public ChunkC GenerateChunk(int x,int y)
 {
     ChunkC chunk = new ChunkC(x,y,diameter,numComponentsPerBlock);
     object[] comp = new object[numBlocks*numComponentsPerBlock];
     var rand = new Random();
     float increament = 0.01f;
     float decemalW = (x/(diameter*Grid.gridPixelSize)) * ((diameter-1) +(diameter*increament));
     float decemalH = (y / (diameter * Grid.gridPixelSize)) * ((diameter - 1) + (diameter * increament));
     
     for (int h = 0; h < diameter; h++)
     {
         decemalH += increament;
         for (int w = 0; w < diameter; w++)
         {
             decemalW += increament;
             Double n = PerlinNoise.OctavePerlin((decemalW) *5 ,(decemalH)*5, 0, 1, 1) * 255;;
            
             if (n < 150 && h > 5)
             {
                 Body b = BodyFactory.CreateRectangle(entityController.physicsWorld, ConvertUnits.ToSimUnits(Grid.gridPixelSize), ConvertUnits.ToSimUnits(Grid.gridPixelSize), 1,ConvertUnits.ToSimUnits(new Vector2(w * Grid.gridPixelSize + chunk.bounds.X, h * Grid.gridPixelSize + chunk.bounds.Y)), 0, BodyType.Static);
                 b.Friction = 0.5f;
                 b.Restitution = 0;
                 comp[((w + (h * diameter)) * numComponentsPerBlock)] = new TextureC(ChunkSystem.texture);
             }                             
         }
         decemalW = (x / (diameter * Grid.gridPixelSize)) * ((diameter - 1) + (diameter * increament));
     }
     chunk.Blocks = comp;
     int cX = (int)((x / (diameter * Grid.gridPixelSize)));
     int cY = (int)((y / (diameter * Grid.gridPixelSize)));
     chunks.Add(new Vector2(cX, cY),chunk);
     return chunk;
 }
        public void Update(GameTime gameTime)
        {
            List<Entity> players = entityController.EntitesThatContainComponents(entityController.GetAllEntityWithComponent<TransformC>(), typeof(ControllableC));

            CameraC camera = entityController.GetAllComponent<CameraC>()[0];
            chunkSpriteBatch.Begin(SpriteSortMode.Deferred, null, null, null, null, null, camera.matrix);
            Vector2 position = players[0].GetComponent<TransformC>();
            
            //The current chunk pos
            int cX = (int)((position.X / (diameter * Grid.gridPixelSize)));
            int cY = (int)((position.Y / (diameter * Grid.gridPixelSize)));
            int x = cX * diameter * Grid.gridPixelSize;
            int y = cY * diameter * Grid.gridPixelSize;
            
            Rectangle r = new Rectangle(x, y, diameter * Grid.gridPixelSize, diameter * Grid.gridPixelSize);
            if (x >= 0 && y >=0 && r.Contains(position))  {
                ChunkC c = null;
                //Console.WriteLine(cX + " " + cY);
                chunks.TryGetValue(new Vector2(cX,cY), out c);
                if (c == null) c = GenerateChunk(x, y);
                chunkBeingProcessed = c;
                ProcessEntity();
            }

            cX = (int)((position.X / (diameter * Grid.gridPixelSize)))+1;
            cY = (int)((position.Y / (diameter * Grid.gridPixelSize)))+1;
            x = (cX) * diameter * Grid.gridPixelSize;
            y = (cY) * diameter * Grid.gridPixelSize;
            r = new Rectangle(x, y, diameter * Grid.gridPixelSize, diameter * Grid.gridPixelSize);
            if (x >= 0 && y >= 0 && r.Contains(new Vector2((int)(position.X+graphicsDevice.Viewport.Width/2), (int)(position.Y + graphicsDevice.Viewport.Height / 2)))) {
                ChunkC c = null;
                chunks.TryGetValue(new Vector2(cX, cY), out c);
                if (c == null) c = GenerateChunk(x, y);
                chunkBeingProcessed = c;
                ProcessEntity();
            }

            cX = (int)((position.X / (diameter * Grid.gridPixelSize))) - 1;
            cY = (int)((position.Y / (diameter * Grid.gridPixelSize))) - 1;
            x = (cX) * diameter * Grid.gridPixelSize;
            y = (cY) * diameter * Grid.gridPixelSize;
            r = new Rectangle(x, y, diameter * Grid.gridPixelSize, diameter * Grid.gridPixelSize);
            if (x >= 0 && y >= 0 && r.Contains(new Vector2((int)(position.X - graphicsDevice.Viewport.Width / 2), (int)(position.Y - graphicsDevice.Viewport.Height / 2))))
            {
                ChunkC c = null;
                chunks.TryGetValue(new Vector2(cX, cY), out c);
                if (c == null) c = GenerateChunk(x, y);
                chunkBeingProcessed = c;
                ProcessEntity();
            }

            cX = (int)((position.X / (diameter * Grid.gridPixelSize))) - 1;
            cY = (int)((position.Y / (diameter * Grid.gridPixelSize))) + 1;
            x = (cX) * diameter * Grid.gridPixelSize;
            y = (cY) * diameter * Grid.gridPixelSize;
            r = new Rectangle(x, y, diameter * Grid.gridPixelSize, diameter * Grid.gridPixelSize);
            if (x >= 0 && y >= 0 && r.Contains(new Vector2((int)(position.X - graphicsDevice.Viewport.Width / 2), (int)(position.Y + graphicsDevice.Viewport.Height / 2))))
            {
                ChunkC c = null;
                chunks.TryGetValue(new Vector2(cX, cY), out c);
                if (c == null) c = GenerateChunk(x, y);
                chunkBeingProcessed = c;
                ProcessEntity();
            }

            cX = (int)((position.X / (diameter * Grid.gridPixelSize))) + 1;
            cY = (int)((position.Y / (diameter * Grid.gridPixelSize))) - 1;
            x = (cX) * diameter * Grid.gridPixelSize;
            y = (cY) * diameter * Grid.gridPixelSize;
            r = new Rectangle(x, y, diameter * Grid.gridPixelSize, diameter * Grid.gridPixelSize);
            if (x >= 0 && y >= 0 && r.Contains(new Vector2((int)(position.X - graphicsDevice.Viewport.Width / 2), (int)(position.Y + graphicsDevice.Viewport.Height / 2)))) {
                ChunkC c = null;
                chunks.TryGetValue(new Vector2(cX, cY), out c);
                if (c == null) c = GenerateChunk(x, y);
                chunkBeingProcessed = c;
                ProcessEntity();
            }

            cX = (int)((position.X / (diameter * Grid.gridPixelSize)));
            cY = (int)((position.Y / (diameter * Grid.gridPixelSize))) + 1;
            x = (cX) * diameter * Grid.gridPixelSize;
            y = (cY) * diameter * Grid.gridPixelSize;
            r = new Rectangle(x, y, diameter * Grid.gridPixelSize, diameter * Grid.gridPixelSize);
            if (x >= 0 && y >= 0 && r.Contains(new Vector2(position.X, position.Y + graphicsDevice.Viewport.Height / 2)))
            {
                ChunkC c = null;
                chunks.TryGetValue(new Vector2(cX, cY), out c);
                if (c == null) c = GenerateChunk(x, y);
                chunkBeingProcessed = c;
                ProcessEntity();
            }

            cX = (int)((position.X / (diameter * Grid.gridPixelSize)));
            cY = (int)((position.Y / (diameter * Grid.gridPixelSize))) - 1;
            x = (cX) * diameter * Grid.gridPixelSize;
            y = (cY) * diameter * Grid.gridPixelSize;
            r = new Rectangle(x, y, diameter * Grid.gridPixelSize, diameter * Grid.gridPixelSize);
            if (x >= 0 && y >= 0 && r.Contains(new Vector2((int)(position.X), (int)(position.Y - graphicsDevice.Viewport.Height / 2))))
            {
                ChunkC c = null;
                chunks.TryGetValue(new Vector2(cX, cY), out c);
                if (c == null) c = GenerateChunk(x, y);
                chunkBeingProcessed = c;
                ProcessEntity();
            }

            cX = (int)((position.X / (diameter * Grid.gridPixelSize))) - 1;
            cY = (int)((position.Y / (diameter * Grid.gridPixelSize)));
            x = (cX) * diameter * Grid.gridPixelSize;
            y = (cY) * diameter * Grid.gridPixelSize;
            r = new Rectangle(x, y, diameter * Grid.gridPixelSize, diameter * Grid.gridPixelSize);
            if (x >= 0 && y >= 0 && r.Contains(new Vector2((int)(position.X - graphicsDevice.Viewport.Width / 2), (int)(position.Y))))
            {
                ChunkC c = null;
                chunks.TryGetValue(new Vector2(cX, cY), out c);
                if (c == null) c = GenerateChunk(x, y);
                chunkBeingProcessed = c;
                ProcessEntity();
            }

            cX = (int)((position.X / (diameter * Grid.gridPixelSize))) + 1;
            cY = (int)((position.Y / (diameter * Grid.gridPixelSize)));
            x = (cX) * diameter * Grid.gridPixelSize;
            y = (cY) * diameter * Grid.gridPixelSize;
            r = new Rectangle(x, y, diameter * Grid.gridPixelSize, diameter * Grid.gridPixelSize);
            if (x >= 0 && y >= 0 && r.Contains(new Vector2((int)(position.X + graphicsDevice.Viewport.Width / 2), (int)(position.Y)))) {
                ChunkC c = null;
                chunks.TryGetValue(new Vector2(cX,cY), out c);
                if (c == null) c = GenerateChunk(x, y);
                chunkBeingProcessed = c;
                ProcessEntity();
            }

            chunkSpriteBatch.End();

        }