Beispiel #1
0
    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;
    }
Beispiel #2
0
    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;
                            }
                        }
                    }
                }
            }
        }
    }