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);
            }
        }
Пример #2
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);
        }