private float GetVirtualIceTrollScore(VirtualIceTroll virtualIceTroll) { Circle circle = new Circle(virtualIceTroll.location, protectionRadius); if (Constants.GameCaching.GetEnemyLavaGiantsInArea(circle).Count > 0) { return(0); } foreach (IceTroll myIceTroll in Constants.GameCaching.GetMyIceTrollsInArea(circle)) { if (myIceTroll.CurrentHealth > 8) { return(0); } } float numOfHits = 0; foreach (Tornado enemyTornado in Constants.GameCaching.GetEnemyTornadoesInArea(circle)) { float enemyTornadoDistFromPortal = virtualIceTroll.location.Distance(enemyTornado); if (Constants.GameCaching.GetEnemyIceTrollsInArea(new Circle(virtualIceTroll.location, enemyTornadoDistFromPortal)).Count > 0) { return(0); } if (Constants.GameCaching.GetMyClosestPortalToEnemyTornado(enemyTornado).Distance(enemyTornado) < enemyTornadoDistFromPortal - 1) { continue; } if (enemyTornadoDistFromPortal < Constants.Game.TornadoMaxSpeed * 8) { return(0); } float numOfStepsToPortal = Mathf.Max(0, (enemyTornadoDistFromPortal - Constants.Game.PortalSize - Constants.Game.TornadoAttackRange) / Constants.Game.TornadoMaxSpeed); if (numOfStepsToPortal < enemyTornado.CurrentHealth) { numOfHits += (enemyTornado.CurrentHealth - numOfStepsToPortal); } } if (numOfHits <= virtualIceTroll.creator.CurrentHealth && numOfHits > 1) { return(1); } else { return(0); } }
private float GetPortalScore(VirtualIceTroll vIceTroll) { float score = 0; foreach (IceTroll iceTroll in Constants.Game.GetEnemyIceTrolls()) { float distance = iceTroll.Distance(vIceTroll.location); if (distance <= protectionRadius) { score += distance; } } return(score / Constants.Game.IceTrollMaxSpeed); }