private void Hit(Vector3 target) { GameObject enemyProjectile = _factory.GetEnemy(EnemyType.Hit); Sounds.Instance.StartEnemySound(EnemyType.Hit); enemyProjectile.transform.position = transform.position; float angle = (target.x - transform.position.x > 0.0f) ? (float)(Math.Atan((target.y - transform.position.y) / (target.x - transform.position.x)) * 180f / Math.PI) : 180f + (float)(Math.Atan((target.y - transform.position.y) / (target.x - transform.position.x)) * 180f / Math.PI); Quaternion quat = Quaternion.Euler(0.0f, 0.0f, angle); enemyProjectile.transform.rotation *= quat; enemyProjectile.GetComponent <Rigidbody2D>().velocity = (new Vector2(target.x - transform.position.x, target.y - transform.position.y)).normalized * _attackSpeed; }
private void GenerateEnemys() { if (_data.EnemyIntervals.Length == 0) { return; } foreach (EnemyInterval enemyInterval in _data.EnemyIntervals) { // Ceate list of all intervals by height in interval from data-enemy List <float[]> rawHeightIntervals = new List <float[]>(); for (int i = 0; i < _platforms.Count - 1; ++i) { if (_platforms[i].transform.position.y > enemyInterval.IntervalStart && _platforms[i].transform.position.y < enemyInterval.IntervalEnd) { rawHeightIntervals.Add(new float[] { _platforms[i].transform.position.y + _platformSize.y / 2, _platforms[i + 1].transform.position.y - _platformSize.y / 2 }); } } foreach (EnemyIntervalData data in enemyInterval.TypesNumbersProbabilitys) { for (int i = 0; i < data.Number; ++i) { if (Random.Range(0, 100) < data.Probability) { GameObject enemy = _factory.GetEnemy(data.EnemyType); Vector2 enemySize = enemy.GetComponent <BoxCollider2D>().size *enemy.GetComponent <BoxCollider2D>().transform.localScale; List <float[]> heightIntervals = new List <float[]>(); foreach (float[] interval in rawHeightIntervals) { if (interval[1] - interval[0] > enemySize.y) { heightIntervals.Add(new float[] { interval[0], interval[1] }); } } if (heightIntervals.Count == 0) { continue; } int platformNum = Random.Range(0, heightIntervals.Count); enemy.transform.position = new Vector3( Random.Range(enemySize.x / 2, _lvlWidth - enemySize.x / 2), Random.Range((heightIntervals[platformNum][0] + enemySize.y / 2), (heightIntervals[platformNum][1] - enemySize.y / 2))); _allObjects.Add(enemy); for (int j = 0; j < rawHeightIntervals.Count; ++j) { if (rawHeightIntervals[j][0] == heightIntervals[platformNum][0] && rawHeightIntervals[j][1] == heightIntervals[platformNum][1]) { rawHeightIntervals.RemoveAt(j); continue; } } } } } } }