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);
}
}
}