internal static void ProcessReflection(BasicMap map)
        {
            count = 0;
            #region Prepare chunks
            foreach (var chunk in map.Chunks)
            {
                map.CheckChunksToConsider(chunk.region);
            }

            Console.WriteLine("Chunks correctly prepared for logic.");
            #endregion

            List <BasicTile> waterTiles = new List <BasicTile>();
            foreach (var chunk in map.Chunks)
            {
                chunk.waterTiles.Clear();
                foreach (var layer in chunk.lbt)
                {
                    chunk.waterTiles.Add(new List <BasicTile>());
                    if (layer.Find(t => t.tileSource.tileType == TileSource.TileType.Fluid) != null)
                    {
                        foreach (var tile in layer.FindAll(t => t.tileSource.tileType == TileSource.TileType.Fluid))
                        {
                            waterTiles.Add(tile);
                            chunk.waterTiles.Last().Add(tile);
                        }
                    }
                }
            }

            foreach (var chunk in map.Chunks)
            {
                if (waterTiles.Count != 0)
                {
                    waterTiles = waterTiles.Distinct().ToList();

                    foreach (var obj in chunk.objectsInChunk)
                    {
                        Rectangle reflectionPosition;

                        if (obj is BaseSprite)
                        {
                            reflectionPosition          = (obj as BaseSprite).trueMapSize();
                            reflectionPosition.Location = reflectionPosition.Location + new Point(0, reflectionPosition.Height);

                            if (CheckReflection(reflectionPosition, waterTiles))
                            {
                                (obj as BaseSprite).bNeedsWaterReflection = true;
                            }
                        }
                        else if (obj is ObjectGroup)
                        {
                            (obj as ObjectGroup).CalculateFxDrawLocBeforeFirstDraw();
                            reflectionPosition          = (obj as ObjectGroup).trueMapSize;
                            reflectionPosition.Location = reflectionPosition.Location + new Point(0, reflectionPosition.Height);

                            if (CheckReflection(reflectionPosition, waterTiles))
                            {
                                (obj as ObjectGroup).bNeedsWaterReflection = true;
                            }
                        }
                    }
                }
            }



            Console.WriteLine("Found " + count + " Objects for water reflection.");
        }