public void Update(GameTime gameTime)
        {
            CameraC camera = entityController.GetAllComponent <CameraC>()[0];

            compatableEntitys = entityController.EntitesThatContainComponents(entityController.GetAllEntityWithComponent <TransformC>(), typeof(TextureC), typeof(ForgroundC));
            spriteBatch.Begin(SpriteSortMode.Texture, null, null, null, null, null, camera.matrix);
            ProcessEntity();
            spriteBatch.End();
        }
        public void Update(GameTime gameTime)
        {
            compatableEntitys = entityController.GetAllEntityWithComponent <BackGroundC>();

            camera = entityController.GetAllComponent <CameraC>()[0];
            spriteBatch.Begin(SpriteSortMode.Texture, null, SamplerState.PointWrap, null, null, null, camera.matrix);
            ProcessEntity();
            spriteBatch.End();
        }
        public void ProcessEntity()
        {
            foreach (Entity e in compatableEntitys)
            {
                CameraC cameraC = entityController.GetAllComponent <CameraC>()[0];

                Vector3 camTranslation = cameraC.matrix.Translation;

                Vector2 playerPos = e.GetComponent <TransformC>();

                Vector3 translation = new Vector3(MathHelper.Lerp(camTranslation.X, -playerPos.X + (graphicsDevice.Viewport.Width / 2), cameraFollowDampening), MathHelper.Lerp(camTranslation.Y, -playerPos.Y + (graphicsDevice.Viewport.Height / 2), 1f), 0);

                cameraC.matrix = Matrix.CreateScale(new Vector3(1, 1, 0)) * Matrix.CreateTranslation(translation);
            }
        }
        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();

        }