public BallCollision(BallActor a_Actor)
 {
     m_Actor = a_Actor;
     m_CheckMaxDisplacement = 25;
     m_UpdateMaxDisplacement = 25;
     UpdateCollision();
 }
        protected override void Update(GameTime a_GameTime)
        {
            Input.Update();

            if (m_IsGameStarted == false)
            {
                if (Input.Gesture.GestureType == GestureType.Tap)
                {
                    MediaPlayer.Play(Audio.Song);
                    MediaPlayer.IsRepeating = true;
                    MediaPlayer.Volume = 0.1f;

                    m_IsGameStarted = true;
                }

                if (Input.SingleKeyPressInput(Microsoft.Xna.Framework.Input.Keys.Space))
                {
                    m_IsGameStarted = true;
                }
            }
            else
            {
                ActorManager.Update(a_GameTime);
                ProjectileManager.Update(a_GameTime);
                EmitterManager.Update(a_GameTime);
                WeaponManager.Update(a_GameTime);
                CollisionManager.Update(a_GameTime);
                ScoreManager.Update(a_GameTime);

            #if WINDOWS
                if (Input.MulitKeyPressInput(Microsoft.Xna.Framework.Input.Keys.Q))
                {
                    selectedTile = new TileActor("Sprite/Tile_CopperFloor", Input.MousePosition - Camera.Position, false, false);
                }
                if (Input.MulitKeyPressInput(Microsoft.Xna.Framework.Input.Keys.W))
                {
                    selectedTile = new TileActor("Sprite/Tile_Copper", Input.MousePosition - Camera.Position, true, false);
                }

                if (Input.SingleKeyPressInput(Microsoft.Xna.Framework.Input.Keys.E))
                {
                    selectedTile = new TileActor("Sprite/Tile_CopperWall", Input.MousePosition - Camera.Position, true, false);
                }
                if (Input.SingleKeyPressInput(Microsoft.Xna.Framework.Input.Keys.A))
                {
                    selectedTile = new TileActor("Sprite/Tile_MetalFloor", Input.MousePosition - Camera.Position, false, false);
                }
                if (Input.SingleKeyPressInput(Microsoft.Xna.Framework.Input.Keys.S))
                {
                    selectedTile = new TileActor("Sprite/Tile_Metal", Input.MousePosition - Camera.Position, true, false);
                }
                if (Input.SingleKeyPressInput(Microsoft.Xna.Framework.Input.Keys.D))
                {
                    selectedTile = new TileActor("Sprite/Tile_MetalWall", Input.MousePosition - Camera.Position, true, false);
                }
                if (Input.SingleKeyPressInput(Microsoft.Xna.Framework.Input.Keys.R))
                {
                    selectedTile = new TileActor("Sprite/Tile_RockWall", Input.MousePosition - Camera.Position, true, true);
                }
                if (Input.SingleKeyPressInput(Microsoft.Xna.Framework.Input.Keys.T))
                {
                    selectedTile = new AreaActor(Input.MousePosition - Camera.Position, (int)AreaType.Start);
                }
                if (Input.SingleKeyPressInput(Microsoft.Xna.Framework.Input.Keys.G))
                {
                    selectedTile = new AreaActor(Input.MousePosition - Camera.Position, (int)AreaType.Finish);
                }
                if (Input.SingleKeyPressInput(Microsoft.Xna.Framework.Input.Keys.F))
                {
                    selectedTile = new BallActor(Input.MousePosition - Camera.Position, (int)BallType.Bomb);
                }
                if (Input.SingleKeyPressInput(Microsoft.Xna.Framework.Input.Keys.Y))
                {
                    selectedTile = new TurretActor(Input.MousePosition - Camera.Position, (int)TurretType.Standard);
                }

                if (selectedTile != null)
                {
                    selectedTile.Position = Input.MousePosition - Camera.Position;
                }

                if (selectedTile is TileActor && Input.MouseLeftDrag)
                {
                    ActorManager.SafeAdd(((TileActor)selectedTile).Clone());
                }

                if (selectedTile is BallActor && Input.MouseLeftPressed)
                {
                    ActorManager.SafeAdd(((BallActor)selectedTile).Clone());
                }

                if (selectedTile is TurretActor && Input.MouseLeftPressed)
                {
                    ActorManager.SafeAdd(((TurretActor)selectedTile).Clone());
                }

                if (selectedTile is AreaActor && Input.MouseLeftPressed)
                {
                    ActorManager.SafeAdd(((AreaActor)selectedTile).Clone());
                }

                if (Input.SingleKeyPressInput(Microsoft.Xna.Framework.Input.Keys.F2))
                {
                    SaveFileDialog save = new SaveFileDialog();
                    save.Filter = "ASCII file (*.xml)|*.xml";
                    save.ShowDialog();

                    string path = save.FileName;
                    if (path == string.Empty) { return; }

                    List<Data.BaseActor> List = new List<Data.BaseActor>();
                    for (int loop = 0; loop < ActorManager.List.Count; loop++)
                    {
                        if (ActorManager.List[loop] is TileActor)
                        {
                            TileActor data = (TileActor)ActorManager.List[loop];
                            Data.TileActor temp = new Data.TileActor(data.FilePathToTexture, data.Position, data.IsCollidable, data.IsDestructable);
                            List.Add(temp);
                        }

                        if (ActorManager.List[loop] is BallActor)
                        {
                            BallActor data = (BallActor)ActorManager.List[loop];
                            Data.BallActor temp = new Data.BallActor(data.Position, (int)data.BallType);
                            List.Add(temp);
                        }

                        if (ActorManager.List[loop] is TurretActor)
                        {
                            TurretActor data = (TurretActor)ActorManager.List[loop];
                            Data.TurretActor temp = new Data.TurretActor(data.Position, (int)data.TurretType);
                            List.Add(temp);
                        }

                        if (ActorManager.List[loop] is AreaActor)
                        {
                            AreaActor data = (AreaActor)ActorManager.List[loop];
                            Data.AreaActor temp = new Data.AreaActor(data.Position, (int)data.AreaType);
                            List.Add(temp);
                        }
                    }

                    XmlWriterSettings xmlWriterSettings = new XmlWriterSettings();
                    xmlWriterSettings.Indent = true;

                    XmlWriter xmlWriter = XmlWriter.Create(path, xmlWriterSettings);
                    IntermediateSerializer.Serialize(xmlWriter, List, null);
                    xmlWriter.Close();
                }

                if (Input.SingleKeyPressInput(Microsoft.Xna.Framework.Input.Keys.F3))
                {
                    OpenFileDialog open = new OpenFileDialog();
                    open.Filter = "ASCII file (*.xml)|*.xml";
                    open.ShowDialog();

                    string path = open.FileName;
                    if (path == string.Empty) { return; }

                    XmlReaderSettings xmlReaderSettings = new XmlReaderSettings();

                    XmlReader xmlReader = XmlReader.Create(path, xmlReaderSettings);
                    List<Data.BaseActor> tempList = IntermediateSerializer.Deserialize<List<Data.BaseActor>>(xmlReader, null);
                    xmlReader.Close();

                    for (int loop = 0; loop < tempList.Count; loop++)
                    {
                        if (tempList[loop] is Data.TileActor)
                        {
                            ActorManager.List.Add(new TileActor(tempList[loop].FilePathToTexture, tempList[loop].Position, tempList[loop].IsCollidable, tempList[loop].IsDestructable));
                        }

                        if (tempList[loop] is Data.BallActor)
                        {
                            Data.BallActor temp = (Data.BallActor)tempList[loop];
                            ActorManager.List.Add(new BallActor(temp.Position, (int)temp.BallType));
                        }

                        if (tempList[loop] is Data.TurretActor)
                        {
                            Data.TurretActor temp = (Data.TurretActor)tempList[loop];
                            ActorManager.List.Add(new TurretActor(temp.Position, (int)temp.TurretType));
                        }

                        if (tempList[loop] is Data.AreaActor)
                        {
                            Data.AreaActor temp = (Data.AreaActor)tempList[loop];
                            ActorManager.List.Add(new AreaActor(temp.Position, (int)temp.AreaType));
                        }
                    }
                }
            #endif
            }

            #if WINDOWS
            float speed = 5;

            if (Input.MulitKeyPressInput(Microsoft.Xna.Framework.Input.Keys.Down))
            {
                Camera.Position += new Vector2(0, -speed);
            }
            if (Input.MulitKeyPressInput(Microsoft.Xna.Framework.Input.Keys.Up))
            {
                Camera.Position += new Vector2(0, speed);
            }
            if (Input.MulitKeyPressInput(Microsoft.Xna.Framework.Input.Keys.Right))
            {
                Camera.Position += new Vector2(-speed, 0);
            }
            if (Input.MulitKeyPressInput(Microsoft.Xna.Framework.Input.Keys.Left))
            {
                Camera.Position += new Vector2(speed, 0);
            }
            #endif

            base.Update(a_GameTime);
        }