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)); } }
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); }
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); }
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); } } }
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")); }
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); } } }