Example #1
0
    IEnumerator SpawnEnemy()
    {
        while (true)
        {
            if (numEnemies < maxEnemies)
            {
                float   randX = Random.Range(-20f, 20f);
                float   randY = Random.Range(0.4f, 3.03f);
                Vector3 pos   = new Vector3(randX, randY, 9);

                int        enemyType = Random.Range(0, enemyPrefabs.Length);
                GameObject newEnemy  = Instantiate(enemyPrefabs[enemyType], transform);
                newEnemy.transform.position = pos;
                EnemyCreature enemy = newEnemy.GetComponent <EnemyCreature>();
                enemy.playerPos = playerPos;
                enemy.player    = player;

                float enemySpeed = (Mathf.Floor(player.timeAlive / 60) + 1) * 0.4f;
                if (enemySpeed > 3f)
                {
                    enemySpeed = 3f;
                }
                enemy.SetSpeed(Random.Range(0.2f, enemySpeed));
            }
            yield return(new WaitForSeconds(spawnRate));
        }
    }
Example #2
0
    public EnemyCreature GetNearestEnemy(EnemyCreature nearestEnemy, Vector2 origin, float range)
    {
        EnemyCreature returnedEnemy          = nearestEnemy;
        float         distanceToClosestEnemy = nearestEnemy != null?Vector3.Distance(nearestEnemy.Position, origin) : float.MaxValue;

        for (int i = 0; i < enemies.Count; i++)
        {
            float distanceToCurrentEnemy = Vector3.Distance(enemies[i].Position, origin);
            if (distanceToCurrentEnemy < distanceToClosestEnemy &&
                distanceToCurrentEnemy < range)
            {
                RaycastHit hitInfo;
                Vector3    origin3D   = new Vector3(origin.x, origin.y, -0.25f);
                Vector3    enemyPos3D = new Vector3(enemies[i].Position.x, enemies[i].Position.y, -0.25f);
                Ray        ray        = new Ray(origin3D, Vector3.Normalize(enemyPos3D - origin3D));
                int        maskLayer  = 1 << LayerMask.NameToLayer("Blockers");
                if (!Physics.Raycast(ray, out hitInfo, distanceToCurrentEnemy, maskLayer))
                {
                    returnedEnemy          = enemies[i];
                    distanceToClosestEnemy = distanceToCurrentEnemy;
                }
            }
        }
        return(returnedEnemy);
    }
Example #3
0
    public EnemyCreature GetNearestEnemy(Vector2 origin, float range)
    {
        EnemyCreature enemy = null;

        for (int i = 0; i < EnemiesGroupList.Count; i++)
        {
            enemy = EnemiesGroupList[i].GetNearestEnemy(enemy, origin, range);
        }
        return(enemy);
    }
Example #4
0
 private void PerformAttack(PlayerTroop playerTroop)
 {
     if (EnemiesManager.Instance != null && playerTroop.Attack.IsAttackPossible())
     {
         EnemyCreature enemy = EnemiesManager.Instance.GetNearestEnemy(playerTroop.GameObject.transform.position,
                                                                       playerTroop.Attack.Range);
         if (enemy != null)
         {
             playerTroop.PerformAttack(enemy.Health, enemy.Position);
         }
     }
 }
Example #5
0
 public CreatureAttackTests()
 {
     _logger     = new JsonTraceListener();
     _world      = new World(5, 5);
     _crtFactory = new CreatureFactory(_world, _logger);
     _itmFactory = new ItemFactory();
     _enemy      = _crtFactory.CreateEnemyCreature("boss", new Position(1, 1)) as EnemyCreature;
     _player     = _crtFactory.CreatePlayerCreature("Bilbo", new Position(2, 1)) as PlayerCreature;
     _world.WorldPlayGround[_enemy.Position.X, _enemy.Position.Y].Creature   = _enemy;
     _world.WorldPlayGround[_player.Position.X, _player.Position.Y].Creature = _player;
     _player.AttackItems.AddAttackItem(new Sword(40, "Sting"));
     _player.AttackItems.AddAttackItem(new Sword(40, "Sting"));
 }
Example #6
0
 private void PerformAttack(EnemyCreature enemyCreature)
 {
     if (GameManager.Instance != null && enemyCreature.GameObject != null &&
         enemyCreature.Attack.IsAttackPossible())
     {
         PlayerTroop troop = GameManager.Instance.GetNearestPlayerTroop(enemyCreature.GameObject.transform.position,
                                                                        enemyCreature.Attack.Range);
         if (troop != null)
         {
             enemyCreature.PerformAttack(troop.Health, troop.Position);
         }
     }
 }