Exemplo n.º 1
0
 public void OnMissileEnd(AIPlannerMissile.AIPlannerMissileResult result)
 {
     if (result.hitPlayerShip)
     {
         AddShipHit(result);
     }
     currentSampleAmount--;
 }
Exemplo n.º 2
0
    public void AddShipHit(AIPlannerMissile.AIPlannerMissileResult result)
    {
        Ship hitShip = result.shipHit;

        if (!successTestDictionary.ContainsKey(hitShip))
        {
            successTestDictionary.Add(hitShip, new List <AIPlannerMissile.AIPlannerMissileResult>());
        }

        successTestDictionary[hitShip].Add(result);
    }
Exemplo n.º 3
0
    public override bool TakeAction()
    {
        if (timeSinceLastFire > 0)
        {
            return(false);
        }

        List <Ship> ships = Enumerable.ToList(successTestDictionary.Keys);

        // Haven't hit a ship
        if (ships.Count <= 0)
        {
            return(false);
        }

        Ship target = ships[Random.Range(0, ships.Count)];

        List <AIPlannerMissile.AIPlannerMissileResult> resultList = successTestDictionary[target];

        bool acceptableResult = false;

        for (int i = 0; i < resultList.Count; i++)
        {
            AIPlannerMissile.AIPlannerMissileResult result = resultList[i];

            // Convert positions to vector2s
            Vector2 targetPos = target.transform.position;
            Vector2 shipPos   = ship.transform.position;
            if (result.shipPositionOnHit.Equals(targetPos) && result.shipPositionOnFire.Equals(shipPos))
            {
                acceptableResult = true;
            }
            else
            {
                // Debug.Log("Not acceptable anymore target then: " + result.shipPositionOnHit + ", target now: " + targetPos);
                // Not acceptable anymore
                resultList.Remove(result);
                i--;
            }
        }

        if (acceptableResult)
        {
            AIPlannerMissile.AIPlannerMissileResult chosen = resultList[Random.Range(0, resultList.Count)];
            float fireAngle = chosen.fireAngle;

            if (Random.Range(0, 100) / 100.0 > hitRate)
            {
                Debug.Log("Ai misses on purpose");
                fireAngle += Random.Range(-missOffset, missOffset);
            }

            ship.Shoot(fireAngle, ((WeaponAbility)ability).weaponPrefab);
            ability.UseAbility();

            return(true);
        }
        else
        {
            return(false);
        }
    }