/// <summary>
        /// Allows the game to perform any initialization it needs to before starting to run.
        /// This is where it can query for any required services and load any non-graphic
        /// related content.  Calling base.Initialize will enumerate through any components
        /// and initialize them as well.
        /// </summary>
        protected override void Initialize()
        {
            // TODO: Add your initialization logic here

            this.manager = new ComponentManager(this.Content);
            colsys       = new CollisionSystem();
            consys       = new ControlSystem();
            projsys      = new ProjectileSystem();
            pathsys      = new PathingSystem();
            anisys       = new AnimatedSpriteSystem();
            paused       = false;
            mainMenu     = true; //start with main menu open
            dead         = false;
            realDead     = false;
            victory      = false;
            //Create stages
            this.stages = new List <Stage>();

            Stage stage1 = new Stage("stage1.tmx", this.manager);

            this.stages.Add(stage1);
            Stage stage2 = new Stage("stage2.tmx", this.manager);

            this.stages.Add(stage2);
            Stage stage3 = new Stage("stage3.tmx", this.manager);

            this.stages.Add(stage3);
            Stage stage4 = new Stage("stage4.tmx", this.manager);

            this.stages.Add(stage4);
            Stage stage5 = new Stage("stage5.tmx", this.manager);

            this.stages.Add(stage5);
            Stage stage6 = new Stage("stage6.tmx", this.manager);

            this.stages.Add(stage6);
            Stage stage7 = new Stage("stage7.tmx", this.manager);

            this.stages.Add(stage7);
            Stage stage8 = new Stage("stage8.tmx", this.manager);

            this.stages.Add(stage8);
            Stage stage9 = new Stage("stage9.tmx", this.manager);

            this.stages.Add(stage9);
            Stage stage10 = new Stage("stage10.tmx", this.manager);

            this.stages.Add(stage10);
            Stage stage11 = new Stage("stage11.tmx", this.manager);

            this.stages.Add(stage11);
            Stage stage12 = new Stage("stage12.tmx", this.manager);

            this.stages.Add(stage12);

            this.manager.numStages = this.stages.ToArray().Length;
            this.screenBox         = new Rectangle(0, 0, 800, 480);

            base.Initialize();
        }
    protected override void OnUpdate()
    {
        if (m_PlayerData.Player.Length < 0 || m_PlayerData.Player[0].CurrencyAmount <= 0)
        {
            for (int i = 0; i < m_Inputs.InputEntities.Length; i++)
            {
                var data = m_Inputs.InputEntities[i];
                PostUpdateCommands.DestroyEntity(data);
            }
            for (int i = 0; i < m_InputChildren.InputEntities.Length; i++)
            {
                var data = m_InputChildren.InputEntities[i];
                PostUpdateCommands.DestroyEntity(data);
            }

            return;
        }

        if (m_Inputs.Length > 0)
        {
            RaycastHit hit;
            Ray        ray = Camera.main.ScreenPointToRay(Input.mousePosition);
            if (Physics.Raycast(ray, out hit))
            {
                var gridIndex    = Grid.ConvertToGridIndex(hit.point);
                var gridWorldPos = Grid.ConvertToWorldPosition(gridIndex);

                if (Input.GetMouseButtonDown(0))
                {
                    if (hit.collider.tag.Equals("Floor") && PathingSystem.TryFindPathWithBlocker(gridIndex))
                    {
                        for (int i = 0; i < m_PlayerData.Player.Length; i++)
                        {
                            var playerData = m_PlayerData.Player[i];
                            playerData.CurrencyAmount--;
                            m_PlayerData.Player[i] = playerData;
                        }

                        InstanceTurret(gridWorldPos);
                    }
                }
                else if (Input.GetMouseButtonDown(1))
                {
                    for (int i = 0; i < m_Inputs.InputEntities.Length; i++)
                    {
                        var data = m_Inputs.InputEntities[i];
                        PostUpdateCommands.DestroyEntity(data);
                    }
                    for (int i = 0; i < m_InputChildren.InputEntities.Length; i++)
                    {
                        var data = m_InputChildren.InputEntities[i];
                        PostUpdateCommands.DestroyEntity(data);
                    }
                }
                else
                {
                    for (int i = 0; i < m_Inputs.TurretPosition.Length; i++)
                    {
                        var data = m_Inputs.TurretPosition[i];
                        data = new Position(gridWorldPos);
                        m_Inputs.TurretPosition[i] = data;
                    }
                }
            }
        }
    }