public static GameState GetGameState()
{
// Gate is up
if (Timing.IsGateUp)
{
return UpdateGameStateData(GameState.GameStart,
new GameStateInfo(Buildings.Ally.Nexus.Position, Region.Location.None));
}
//Gate is down, and minions have not spawned
if (Timing.HaveMinionsSpawned)
{
return UpdateGameStateData(GameState.MinionsSpawning,
new GameStateInfo(Player.Posistion, Region.InWhatRegion(Player.Posistion)));
}
//Gate is down, and minions have spawned but Jungle minions have not spawned
if (Timing.HasJungleSpawned)
{
return UpdateGameStateData(GameState.JungleSpawning,
new GameStateInfo(Player.Posistion, Region.InWhatRegion(Player.Posistion)));
}
//Minions have arrived in lane
if (
(
(Player.IsLaneAssigned(Lane.Bottom, Lane.Top) && Timing.HaveTopBotMinionsContacted) ||
(Player.IsLaneAssigned(Lane.Middle, Lane.Jungle) && Timing.HaveMidMinionsContacted)
) &&
!_minionsHaveContacted
)
{
_minionsHaveContacted = true;
return UpdateGameStateData(GameState.FirstMinionContact,
new GameStateInfo(Player.Posistion, Region.InWhatRegion(Player.Posistion)));
;
}
Vector3 posistion;
List<AIHeroClient> heroes;
//Ally nexus turrents have been hurt
if (
(Buildings.Ally.Turrents.GetTeir(Buildings.TurrentTier.Nexus)
.Count(x => !x.IsDead || x.HealthPercent < 100) < 2) &&
Heros.AreGrouped(HeroType.Enemy, 1, out posistion, out heroes, 3000) &&
posistion.Distance(Buildings.Ally.Nexus.Position) < 3500)
{
return UpdateGameStateData(GameState.AllyFinishing,
new GameStateInfo(Buildings.Ally.Nexus.Position, Region.Location.None));
}
if (Heros.AreGrouped(HeroType.Enemy, 3, out posistion, out heroes))
{
return UpdateGameStateData(GameState.EnemyGrouping, new GameStateInfo(posistion, posistion.InWhatRegion()));
}
if (Heros.AreGrouped(HeroType.Ally, 3, out posistion, out heroes))
{
return UpdateGameStateData(GameState.AllyGrouping, new GameStateInfo(posistion, posistion.InWhatRegion()));
}
if (_minionsHaveContacted)
{
return UpdateGameStateData(GameState.Laning,
new GameStateInfo(Player.Posistion, Player.Posistion.InWhatRegion()));
}
//Enemy nexus turrents have been hurt
if (
(Buildings.Enemy.Turrents.GetTeir(Buildings.TurrentTier.Nexus)
.Count(x => !x.IsDead || x.HealthPercent < 100) < 2) &&
Heros.AreGrouped(HeroType.Ally, 2, out posistion, out heroes, 3000) &&
posistion.Distance(Buildings.Enemy.Nexus.Position) < 3500)
{
return UpdateGameStateData(GameState.EnemyFinishing,
new GameStateInfo(Buildings.Enemy.Nexus.Position, Region.Location.None));
}
return GameState.FirstMinionContact;
}