예제 #1
0
    // Start is called before the first frame update
    void Start()
    {
        _waypoints  = _waveConfig.GetWaypoints();
        _enemySpeed = _waveConfig.GetEnemySpeed();

        transform.position = _waypoints[_waypointIndex].transform.position;
    }
예제 #2
0
    /// <summary>
    /// Moves object along a single bezier curve.
    /// Curve is calculated frame by frame in function of moveSpeed,
    /// resulting in object moving faster on straight parts and slower on curves
    /// </summary>
    /// <param name="curve">A list of 4 Transform objects, defining a bezier curve.
    /// Each is one of the lists inside a Path.GetPathCurves() list of lists.</param>
    private IEnumerator FollowCurveVariableSpeed(List <Transform> curve)
    {
        float   tParam = 0f;
        Vector2 newPos;

        while (tParam < 1)
        {
            tParam += Time.deltaTime * waveConfig.GetEnemySpeed();

            newPos = Mathf.Pow(1 - tParam, 3) * curve[0].position +
                     3 * Mathf.Pow(1 - tParam, 2) * tParam * curve[1].position +
                     3 * (1 - tParam) * Mathf.Pow(tParam, 2) * curve[2].position +
                     Mathf.Pow(tParam, 3) * curve[3].position;

            newPos = ApplyReverse(newPos);
            newPos = ApplyOffset(newPos);

            transform.position = newPos;

            yield return(new WaitForEndOfFrame());
        }
    }
예제 #3
0
    //private void SpawnEnemyWaves()
    //{
    //    // create the stack of points
    //    spawnStack = ListUtils.CreateShuffledStack(spawnPoints);
    //    //InvokeRepeating("SpawnOneEnemy", 0f, 0.25f);
    //    InvokeRepeating(SPAWN_ENEMY_METHOD, spawnDelay, spawnInterval);
    //}

    // stack version
    private void SpawnOneEnemy()
    {
        if (spawnStack.Count == 0)
        {
            spawnStack = ListUtils.CreateShuffledStack(spawnPoints);
        }
        var enemy = Instantiate(enemyPrefab, enemyParent.transform);
        var sp    = spawnStack.Pop();

        enemy.transform.position = sp.transform.position;
        //set the enemy parameters
        enemy.GetComponent <EnemyBehaviour>().SetMoveSpeed(waveConfig.GetEnemySpeed());
        enemy.GetComponent <Enemy>().ScoreValue      = waveConfig.GetScoreValue();
        enemy.GetComponent <SpriteRenderer>().sprite = waveConfig.GetEnemiesSprite();
        PublishEnemySpawnedEvent();
    }
예제 #4
0
    private void Move()
    {
        if (wayPointIndex < waypoints.Count)
        {
            var targetPosition   = waypoints[wayPointIndex].transform.position;
            var movementPerFrame = waveConfig.GetEnemySpeed() * Time.deltaTime;
            transform.position = Vector2.MoveTowards(transform.position, targetPosition, movementPerFrame);

            if (transform.position == targetPosition)
            {
                wayPointIndex++;
            }
        }
        else
        {
            Destroy(gameObject);
        }
    }
 // Start is called before the first frame update
 void Start()
 {
     speed              = waveConfig.GetEnemySpeed();
     waypoints          = waveConfig.GetWaypoints();
     transform.position = waypoints[waypointIndex].position;
 }