UHSampleGame.Players.Player.HandleInput C# (CSharp) Method

HandleInput() public method

public HandleInput ( ) : void
return void
        public void HandleInput()
        {
            //Human Player
            if (Type == PlayerType.Human)
            {
                avatarMoved = avatar.HandleInput(playerIndexes[PlayerNum]);
                if (avatarMoved)
                {
                    if (PlayScreen.GameType == PlayerScreenType.Scenario)
                        ScenarioManager.RegisterAction(ScenarioItemType.AvatarMove);
                }
                if (avatar.Position.X < TileMap.Left)
                {
                    avatar.Position = new Vector3(TileMap.Left, avatar.Position.Y, avatar.Position.Z);
                    avatarMoved = true;
                }

                if (avatar.Position.Z < TileMap.Top)
                {
                    avatar.Position = new Vector3(avatar.Position.X, avatar.Position.Y, TileMap.Top);
                    avatarMoved = true;
                }

                if (avatar.Position.X > TileMap.Right)
                {
                    avatar.Position = new Vector3(TileMap.Right, avatar.Position.Y, avatar.Position.Z);
                    avatarMoved = true;
                }

                if (avatar.Position.Z > TileMap.Bottom)
                {
                    avatar.Position = new Vector3(avatar.Position.X, avatar.Position.Y, TileMap.Bottom);
                    avatarMoved = true;
                }

                if (ScreenManager.InputManager.CheckNewAction(InputAction.TowerBuild, playerIndexes[PlayerNum]))
                {
                    if (!this.Rezone)
                    {
                        Tower tower = TowerCollection.Add(PlayerNum, TeamNum, Money, lastBuiltTower, this.avatarFollowingTile.Position);
                        if (tower != null)
                            Money -= tower.Cost;

                        if (PlayScreen.GameType == PlayerScreenType.Scenario)
                            switch (lastBuiltTower)
                            {
                                case TowerType.Cannon:
                                case TowerType.Electric:
                                case TowerType.Plasma:
                                    ScenarioManager.RegisterAction(ScenarioItemType.BuildDefenseTower);
                                    break;
                                case TowerType.SmallUnit:
                                case TowerType.LargeUnit:
                                    ScenarioManager.RegisterAction(ScenarioItemType.BuildUnitTower);
                                    break;
                            }

                        ///MoneyString = Money.ToString();
                    }
                }

                if (ScreenManager.InputManager.CheckNewAction(InputAction.TowerDestroy, playerIndexes[PlayerNum]))
                {
                    if (!this.Rezone)
                    {
                        Money += TowerCollection.Remove(PlayerNum, ref this.avatarFollowingTile.Position);

                        if(PlayScreen.GameType == PlayerScreenType.Scenario)
                            ScenarioManager.RegisterAction(ScenarioItemType.DestroyTower);
                        //MoneyString = Money.ToString();
                    }
                }

                if (ScreenManager.InputManager.CheckNewAction(InputAction.TowerRepair, playerIndexes[PlayerNum]))
                {
                    if (!this.Rezone)
                    {
                        Money -= TowerCollection.Repair(PlayerNum, Money, ref this.avatarFollowingTile.Position);
                        if (PlayScreen.GameType == PlayerScreenType.Scenario)
                            ScenarioManager.RegisterAction(ScenarioItemType.RepairTower);
                        //MoneyString = Money.ToString();
                    }
                }

                if (ScreenManager.InputManager.CheckNewAction(InputAction.TowerUpgrade, playerIndexes[PlayerNum]))
                {
                    if (!this.Rezone)
                    {
                        Money -= TowerCollection.Upgrade(TeamNum, Money, ref this.avatarFollowingTile.Position);
                        if (PlayScreen.GameType == PlayerScreenType.Scenario)
                            ScenarioManager.RegisterAction(ScenarioItemType.UpgradeTower);
                        //MoneyString = Money.ToString();
                    }

                }

                if (ScreenManager.InputManager.CheckNewAction(InputAction.PlayerMenuLeft, playerIndexes[PlayerNum]))
                {
                    if (((int)currentlySelectedPlayerStatus - 1) >= 0)
                        currentlySelectedPlayerStatus--;
                    unitScreenActivated = false;

                    if (towerInfoScreenActivated)
                    {
                        if(hoverTower != null)
                            hoverTower.InputLeft();
                    }
                    else if (currentlySelectedPlayerStatus == PlayerMenuTabs.DefenseTower)
                    {
                        //if (((int)defenseTowerSelected - 1) >= 0)
                        //    defenseTowerSelected--;
                        //else
                        //    defenseTowerSelected = NUM_DEFENSE_TOWERS - 1;
                        lastBuiltTower = defenseTowerInfo[defenseTowerSelected].type;
                    }
                    else if (currentlySelectedPlayerStatus == PlayerMenuTabs.UnitTower)
                    {
                        //if (((int)defenseTowerSelected - 1) >= 0)
                        //    defenseTowerSelected--;
                        //else
                        //    defenseTowerSelected = NUM_DEFENSE_TOWERS - 1;
                        lastBuiltTower = offenseTowerInfo[offenseTowerSelected].type;
                    }

                }

                if (ScreenManager.InputManager.CheckNewAction(InputAction.PlayerMenuRight, playerIndexes[PlayerNum]))
                {
                    if (((int)currentlySelectedPlayerStatus + 1) < playerMenuTabsEnumType.Length)
                        currentlySelectedPlayerStatus++;
                    unitScreenActivated = false;

                    if (towerInfoScreenActivated)
                    {
                        if (hoverTower != null)
                            hoverTower.InputRight();
                    }
                    else if (currentlySelectedPlayerStatus == PlayerMenuTabs.DefenseTower)
                    {
                        //if (((int)defenseTowerSelected - 1) >= 0)
                        //    defenseTowerSelected--;
                        //else
                        //    defenseTowerSelected = NUM_DEFENSE_TOWERS - 1;
                        lastBuiltTower = defenseTowerInfo[defenseTowerSelected].type;
                    }
                    else if (currentlySelectedPlayerStatus == PlayerMenuTabs.UnitTower)
                    {
                        //if (((int)defenseTowerSelected - 1) >= 0)
                        //    defenseTowerSelected--;
                        //else
                        //    defenseTowerSelected = NUM_DEFENSE_TOWERS - 1;
                        lastBuiltTower = offenseTowerInfo[offenseTowerSelected].type;
                    }

                }

                if (ScreenManager.InputManager.CheckNewAction(InputAction.PlayerMenuUp, playerIndexes[PlayerNum]))
                {
                    if (towerInfoScreenActivated)
                    {
                        if (hoverTower != null)
                            hoverTower.InputUp();
                    }
                    else if (currentlySelectedPlayerStatus == PlayerMenuTabs.DefenseTower)
                    {
                        if (((int)defenseTowerSelected - 1) >= 0)
                            defenseTowerSelected--;
                        else
                            defenseTowerSelected = NUM_DEFENSE_TOWERS - 1;
                        lastBuiltTower = defenseTowerInfo[defenseTowerSelected].type;
                    }
                    else if (currentlySelectedPlayerStatus == PlayerMenuTabs.UnitTower)
                    {
                        if (((int)offenseTowerSelected - 1) >= 0)
                            offenseTowerSelected--;
                        else
                            offenseTowerSelected = NUM_OFFENSE_TOWERS - 1;
                        lastBuiltTower = offenseTowerInfo[offenseTowerSelected].type;
                    }
                    else if (currentlySelectedPlayerStatus == PlayerMenuTabs.Powers)
                    {
                        if (((int)powerSelected - 1) >= 0)
                            powerSelected--;
                        else
                            powerSelected = NUM_POWERS - 1;
                    }

                    unitScreenActivated = false;
                }

                if (ScreenManager.InputManager.CheckNewAction(InputAction.PlayerMenuDown, playerIndexes[PlayerNum]))
                {
                    if (towerInfoScreenActivated)
                    {
                        if (hoverTower != null)
                            hoverTower.InputDown();
                    }
                    else if (currentlySelectedPlayerStatus == PlayerMenuTabs.DefenseTower)
                    {
                        if (((int)defenseTowerSelected + 1) < NUM_DEFENSE_TOWERS)
                            defenseTowerSelected++;
                        else
                            defenseTowerSelected = 0;
                        lastBuiltTower = defenseTowerInfo[defenseTowerSelected].type;
                    }
                    else if (currentlySelectedPlayerStatus == PlayerMenuTabs.UnitTower)
                    {
                        if (((int)offenseTowerSelected + 1) < NUM_OFFENSE_TOWERS)
                            offenseTowerSelected++;
                        else
                            offenseTowerSelected =0;
                        lastBuiltTower = offenseTowerInfo[offenseTowerSelected].type;
                    }
                    else if (currentlySelectedPlayerStatus == PlayerMenuTabs.Powers)
                    {
                        if (((int)powerSelected + 1) < NUM_POWERS)
                            powerSelected++;
                        else
                            powerSelected = 0;
                    }
                    unitScreenActivated = false;
                }

                if (ScreenManager.InputManager.CheckAction(InputAction.UnitUp, playerIndexes[PlayerNum]))
                {
                    if (unitSelectionPosition.Y < 1)
                        unitSelectionPosition.Y += 1;

                    unitScreenActivated = true;
                }

                if (ScreenManager.InputManager.CheckAction(InputAction.UnitLeft, playerIndexes[PlayerNum]))
                {
                    if (unitSelectionPosition.X > -1)
                        unitSelectionPosition.X -= 1;
                    unitScreenActivated = true;

                }

                if (ScreenManager.InputManager.CheckAction(InputAction.UnitDown, playerIndexes[PlayerNum]))
                {
                    if (unitSelectionPosition.Y > -1)
                        unitSelectionPosition.Y -= 1;
                    unitScreenActivated = true;
                }

                if (ScreenManager.InputManager.CheckAction(InputAction.UnitRight, playerIndexes[PlayerNum]))
                {
                    if (unitSelectionPosition.X < 1)
                        unitSelectionPosition.X += 1;
                    unitScreenActivated = true;
                }

                // 0 | 1 | 2
                // 3 | - | 4
                // 5 | 6 | 7
                //case 1
                if (unitSelectionPosition.X == 0 && unitSelectionPosition.Y == 1)
                {
                    selectedUnit = 1;
                }
                else if (unitSelectionPosition.X == 0 && unitSelectionPosition.Y == -1)
                {
                    selectedUnit = 6;
                }

                if (ScreenManager.InputManager.CheckAction(InputAction.UnitBuild, playerIndexes[PlayerNum]))
                {

                    if (selectedUnit != queuedUnitType)
                    {
                        queuedUnits = 0;
                        queuedDeclineMode = false;
                        unitsDeployed = 0;
                        queuedUnitsToDeploy = 0;
                        percentOfUnitsQueued = 0;
                    }

                    if (queuedDeclineMode && ScreenManager.InputManager.CheckNewAction(InputAction.UnitBuild, playerIndexes[PlayerNum]))
                    {
                        queuedUnits = 0;
                        queuedDeclineMode = false;
                        unitsDeployed = 0;
                        queuedUnitsToDeploy = 0;
                        percentOfUnitsQueued = 0;
                    }

                    if (!queuedDeclineMode || queuedUnitsToDeploy == 0)
                    {
                        int amountLeft =  UnitCollection.MaxUnitsToDeployFor(PlayerNum, unitInformation[selectedUnit].type);
                        if (queuedUnits + queuedUnitAmount <= amountLeft)
                        {
                            queuedUnits += 100;// queuedUnitAmount;

                            if (queuedUnitsToDeploy != 0 && queuedDeclineMode)
                            {
                                percentOfUnitsQueued = (float)queuedUnits / (float)queuedUnitsToDeploy;
                            }
                            queuedDeclineMode = false;
                            if (PlayScreen.GameType == PlayerScreenType.Scenario)
                                ScenarioManager.RegisterAction(ScenarioItemType.Deploy);
                        }

                        if (!queuedDeclineMode)
                        {
                            percentOfUnitsQueued += 1.4f;
                        }
                        queuedUnitType = selectedUnit;
                    }
                }

                if (ScreenManager.InputManager.CheckNewReleaseAction(InputAction.UnitBuild, playerIndexes[PlayerNum]) || (percentOfUnitsQueued >= 100.0f))
                {
                    if (!queuedDeclineMode)
                    {
                        queuedDeclineMode = true;
                        int totalUnits = UnitCollection.MaxUnitsToDeployFor(PlayerNum, unitInformation[selectedUnit].type) + unitsDeployed;
                        queuedUnits = (int)(totalUnits * (percentOfUnitsQueued / 100.0f)) - unitsDeployed;
                        queuedUnitsToDeploy = totalUnits - unitsDeployed;
                        percentOfUnitsQueued = 0;
                    }
                }

                if (ScreenManager.InputManager.CheckNewAction(InputAction.HUD, playerIndexes[PlayerNum]))
                {
                    isHUDDisplayed = true;
                    if (PlayScreen.GameType == PlayerScreenType.Scenario)
                        ScenarioManager.RegisterAction(ScenarioItemType.ShowHUD);
                }

                if(ScreenManager.InputManager.CheckNewReleaseAction(InputAction.HUD, playerIndexes[PlayerNum]))
                {
                    isHUDDisplayed = false;
                }

                if (ScreenManager.InputManager.CheckNewAction(InputAction.PickEnemyTarget, playerIndexes[PlayerNum]))
                {
                    if (pickEnemyTargetPressed)
                    {
                        this.TargetPlayerNum = PlayerCollection.GetNextTargetFor(this.PlayerNum);
                        PlayerCollection.SetTargetFor(PlayerNum, TargetPlayerNum);
                    }

                    //get opacity to display draw
                    enemyTargetOpacity.A = 255;
                    pickEnemyTargetPressed = true;
                }

                if (ScreenManager.InputManager.CheckAction(InputAction.TowerInformation, playerIndexes[PlayerNum]))
                {
                    towerInfoScreenActivated = true;
                    if (true)//avatarMoved || !towerInfoScreenActivated)
                    {
                        if ((hoverTower = TileMap.GetTowerInformationAtPosition(avatar.Position)) != null)
                        {
                            towerInfoScreenActivated = true;
                            unitScreenActivated = false;
                        }
                        else
                        {
                            towerInfoScreenActivated = false;
                        }
                    }
                }

                if (ScreenManager.InputManager.CheckNewReleaseAction(InputAction.TowerInformation, playerIndexes[PlayerNum]))
                {
                    towerInfoScreenActivated = false;
                }

                if (ScreenManager.InputManager.CheckNewAction(InputAction.Pause, playerIndexes[PlayerNum] ))
                {
                    screenManager.ShowScreen(new PauseScreen());
                }

                if (ScreenManager.InputManager.CheckNewAction(InputAction.PowerActivate, playerIndexes[PlayerNum]))
                {
                    PowerManager.AddPower((PowerType)powerSelected, PlayerNum);
                    if (PlayScreen.GameType == PlayerScreenType.Scenario)
                        ScenarioManager.RegisterAction(ScenarioItemType.Power);
                }
            }
        }