Beispiel #1
0
    override public IEnumerator Perform(Enemy enemyScript)
    {
        projectiles = new List <GameObject>();

        if (animator == null)
        {
            animator = enemyScript.GetComponent <Animator>();
        }
        Vector3 playerPos         = enemyScript.player.transform.position;
        Vector3 enemyPos          = enemyScript.transform.position;
        Vector3 directionToPlayer = (playerPos - enemyPos).normalized;

        float angle = 360f / numberOfProjectile;

        if (angleType == angleType.Random)
        {
            offsetAngle = Random.Range(0f, 360f);
        }
        if (angleType == angleType.Rotating)
        {
            offsetAngle      += rotatingSpeed;
            directionToPlayer = new Vector3(1, 1, 1).normalized;
        }
        if (angleType == angleType.Fixed)
        {
            directionToPlayer = new Vector3(0, 1, 1).normalized;
        }
        if (angleType == angleType.Cone)
        {
            angle = -2 * offsetAngle / numberOfProjectile;
        }
        for (int i = 0; i < numberOfProjectile; i++)
        {
            GameObject projectileObject = Instantiate(projectilePrefab, enemyPos + radiusFromBoss * (Quaternion.Euler(0, 0, i * angle + offsetAngle) * directionToPlayer), Quaternion.identity);


            ProjectileEnemy projectile = projectileObject.GetComponent <ProjectileEnemy>();
            Vector2         dir        = directionToPlayer;
            if (focus)
            {
                Vector3 bulletPos = projectile.transform.position;
                dir = (playerPos - bulletPos).normalized;
            }
            projectile.DelayLaunch(Quaternion.Euler(0, 0, i * angle + offsetAngle + bendAngle) * dir, bulletSpeed * 100f, delayStartTime);

            bulletAnimator = projectileObject.GetComponent <Animator>();
            bulletAnimator.SetFloat("Color", color);
        }
        yield return(base.Perform(enemyScript));
    }
Beispiel #2
0
    override public IEnumerator Perform(Enemy enemyScript)
    {
        yield return(new WaitForSeconds(1f));

        // dash -------------------------------------------------------------
        Vector3 playerPos         = enemyScript.player.transform.position;
        Vector3 enemyPos          = enemyScript.transform.position;
        Vector3 directionToPlayer = (playerPos - enemyPos).normalized;


        float randomRadiusPerMove = (Vector3.Distance(playerPos, enemyPos) - Random.Range(1, 2)) / repeatMoveTime;

        for (int i = 0; i < repeatMoveTime; i++)
        {
            Vector3 targetPos = enemyPos + randomRadiusPerMove * (i + 1) * (Quaternion.Euler(0, 0, Random.Range(-30f, 30f)) * directionToPlayer);
            targetPos.x = Mathf.Clamp(targetPos.x, 21, 40);
            targetPos.y = Mathf.Clamp(targetPos.y, 28, 44);
            enemyScript.MoveToPosition(targetPos, 0.4f, 0);
            yield return(new WaitForSeconds(0.5f));
        }
        yield return(new WaitForSeconds(0.5f));

        // dash -------------------------------------------------------------


        int usingProjectileNumber = numberOfProjectile + (int)((1.0f - enemyScript.HpPercent) / 0.25f);
        int baseRepeatTime        = 3;

        float radiusFromBoss = 1.5f;

        float angle       = 360f / usingProjectileNumber;
        float offsetAngle = 0;

        enemyPos = enemyScript.transform.position;

        for (int t = 0; t < baseRepeatTime; t++)
        {
            for (int i = 0; i < usingProjectileNumber; i++)
            {
                GameObject      projectileObject = Instantiate(orbBulletPrefab, enemyPos + radiusFromBoss * (Quaternion.Euler(0, 0, i * angle + offsetAngle) * directionToPlayer), Quaternion.identity);
                ProjectileEnemy projectile       = projectileObject.GetComponent <ProjectileEnemy>();
                projectile.DelayLaunch(Quaternion.Euler(0, 0, i * angle + offsetAngle) * directionToPlayer, bulletSpeed * 100f, 1f);
            }
            offsetAngle += 20;
            yield return(new WaitForSeconds(0.7f));
        }

        yield return(base.Perform(enemyScript));
    }
Beispiel #3
0
    override public IEnumerator Perform(Enemy enemyScript)
    {
        yield return(new WaitForSeconds(1));

        projectiles = new List <GameObject>();

        if (animator == null)
        {
            animator = enemyScript.GetComponent <Animator>();
        }

        Vector2 playerPos         = enemyScript.player.transform.position;
        Vector2 enemyPos          = enemyScript.transform.position;
        Vector2 directionToPlayer = (playerPos - enemyPos).normalized;

        if (animator)
        {
            animator.SetFloat("Move X", directionToPlayer.x);
        }
        else
        {
            Debug.Log("NO ANIMATOR NAJAAA");
        }

        int space = numberOfProjectile - 1;

        for (int i = 0; i < numberOfProjectile; i++)
        {
            Vector2    axis             = Vector2.Perpendicular(directionToPlayer).normalized;
            Vector2    offset           = axis * projectileOffset * (i - (float)space / 2);
            GameObject projectileObject = Instantiate(projectilePrefab, enemyPos + directionToPlayer + offset, Quaternion.identity);


            ProjectileEnemy projectile = projectileObject.GetComponent <ProjectileEnemy>();
            Vector2         dir        = directionToPlayer;
            if (focus)
            {
                Vector2 bulletPos = projectile.transform.position;
                dir = (playerPos - bulletPos).normalized;
            }
            projectile.DelayLaunch(dir, 600, delayStartTime);
        }

        yield return(base.Perform(enemyScript));
    }