public void Test_LoseTarget()
    {
        MinionPool.KeepOnLoad = false;
        MinionPool.Reset();

        Minion enemy = MinionPool.Instance.GetMinion();

        enemy.gameObject.SetActive(true);
        SphereCollider enemyCollider = enemy.AttackableInterface.GetComponent <SphereCollider>();

        enemy.transform.SetPositionAndRotation(new Vector3(8, 0, -8), Quaternion.identity);

        enemyCollider.radius = 0.1f;

        GameObject     tower         = new GameObject();
        TowerAggro     towerAggro    = tower.AddComponent <TowerAggro>();
        SphereCollider towerCollider = tower.AddComponent <SphereCollider>();

        towerCollider.radius = 4;
        towerAggro.Start();
        towerAggro.OnTriggerEnter(enemyCollider);

        towerAggro.OnTriggerExit(enemyCollider);

        Assert.That(towerAggro.Targets.Count, Is.EqualTo(0));
    }
예제 #2
0
    public IEnumerator Test_ProjectileBehavior()
    {
        SceneManager.LoadScene("Test_Attacks");
        yield return(null);

        GameObject tower    = GameObject.Find("test_tower");
        TowerAggro towerAgg = tower.GetComponentInChildren <TowerAggro>();
        Minion     enemy    = MinionPool.Instance.GetMinion();

        Vector3 enemyPosition = new Vector3(2, 0, 0);

        enemy.transform.position = enemyPosition;
        enemy.gameObject.SetActive(true);

        towerAgg.Targets.Add(enemy);

        yield return(new WaitForSeconds(6));

        Projectile[] p = GameObject.FindObjectsOfType <Projectile>();
        Assert.That(p.Length, Is.EqualTo(1));
        Assert.That(enemy.AttackableInterface.HP, Is.EqualTo(10));

        yield return(new WaitForSeconds(3));

        Assert.That(enemy.AttackableInterface.HP, Is.EqualTo(9));
        Assert.That(enemy.transform.position, Is.EqualTo(enemyPosition));

        enemy.Deactivate();
    }
예제 #3
0
 // Start is called before the first frame update
 void Start()
 {
     if ((aggro = GetComponent <TowerAggro>()) == null)
     {
         Debug.LogError("No TowerAggro script on object " + gameObject.name + "!");
     }
     if ((garrison = GetComponent <TowerGarrison>()) == null)
     {
         Debug.LogError("No TowerGarrison script on object" + gameObject.name + "!");
     }
     effect         = transform.GetChild(0).GetChild(0).GetChild(0).GetComponent <SpriteRenderer>();
     effect.enabled = false;
     StartCoroutine(Attack());
 }
예제 #4
0
    public IEnumerator Test_TowerAttacks_MinionsDieCorrectly()
    {
        SceneManager.LoadScene("Test_TowerAttacks_Aggro");
        yield return(null);

        GameObject tower    = GameObject.Find("test_tower");
        TowerAggro towerAgg = tower.GetComponentInChildren <TowerAggro>();

        Node origin = new Node(0, 0);
        Path path   = new Path(origin, NODE_DIRECTION.RIGHT); //1

        Branch testBranch = path.Branches[path.OuterBranchIDs[0]];

        testBranch.Add(NODE_DIRECTION.RIGHT); //2
        testBranch.Add(NODE_DIRECTION.RIGHT); //3
        testBranch.Add(NODE_DIRECTION.RIGHT); //4
        testBranch.Add(NODE_DIRECTION.RIGHT); //5
        testBranch.Add(NODE_DIRECTION.RIGHT); //6
        testBranch.Add(NODE_DIRECTION.RIGHT); //7
        testBranch.Add(NODE_DIRECTION.RIGHT); //8
        testBranch.Add(NODE_DIRECTION.RIGHT); //9
        testBranch.Add(NODE_DIRECTION.RIGHT); //10

        Node startNode = testBranch.InNode;

        Minion minion = MinionPool.Instance.GetMinion();

        minion.Activate(startNode);

        float secondMinionSpawnDelay = 2.0f;

        yield return(new WaitForSeconds(secondMinionSpawnDelay));

        Minion minion2 = MinionPool.Instance.GetMinion();

        minion2.Activate(startNode);

        float travelDuration = minion.MovementInterface.MoveInterval * Node.GetDistanceToOrigin(startNode) + 1f - secondMinionSpawnDelay;

        yield return(new WaitForSeconds(travelDuration));

        Assert.That(towerAgg.Targets.Count, Is.EqualTo(0));
        Assert.That(!minion.Alive);
    }
    public void Test_CompareDistance_PosOne2()
    {
        MinionPool.KeepOnLoad = false;
        MinionPool.Reset();

        Minion enemy1 = MinionPool.Instance.GetMinion();
        Minion enemy2 = MinionPool.Instance.GetMinion();

        enemy1.gameObject.SetActive(true);
        enemy2.gameObject.SetActive(true);

        enemy1.transform.SetPositionAndRotation(new Vector3(8, 0, -8), Quaternion.identity);
        enemy2.transform.SetPositionAndRotation(new Vector3(-4, 0, 4), Quaternion.identity);

        GameObject tower      = new GameObject();
        TowerAggro towerAggro = tower.AddComponent <TowerAggro>();

        int distanceSortValue = towerAggro.CompareDistances(enemy1, enemy2);

        Assert.That(distanceSortValue, Is.EqualTo(1));
    }
예제 #6
0
 /// <summary>
 /// Remove this Attackable from the passed Tower.
 /// </summary>
 /// <param name="tower"></param>
 public void UnTagTower(TowerAggro tower)
 {
     AggroTowers.Remove(tower.ID);
 }
예제 #7
0
 /// <summary>
 /// Add a tower to the Tower tracking for this Attackable.
 /// </summary>
 /// <param name="tower"></param>
 public void TagTower(TowerAggro tower)
 {
     AggroTowers.Add(tower.ID, tower);
 }
예제 #8
0
 // Use this for initialization
 public void Start()
 {
     aggro = GetComponent <TowerAggro>();
     projectileSpawnPosition = transform.parent.GetComponentInChildren <ProjectileSpawn>().transform.position;
 }