예제 #1
0
    void Launch()
    {
        if (Target != null)
        {
            if (hasSpread)
            {
                for (int i = 0; i < spreadCount - 1; i++)
                {
                    ParabolicProjectile duplicate = Instantiate(this, transform.position, Quaternion.identity);
                    duplicate.Damage      = Damage;
                    duplicate.Target      = Target;
                    duplicate.spreadCount = 0;
                }
            }

            Vector3 launchVelocity = CalculateLaunchVelocity(Target);

            if (isRotating)
            {
                RotateToTarget(launchVelocity);
            }

            rb.velocity = launchVelocity;
        }
    }
예제 #2
0
    public override void AttackAction(Unit target)
    {
        ParabolicProjectile bullet = GameObject.Instantiate(Links.links.stoneProjectile).GetComponent <ParabolicProjectile>();

        bullet.Attacker = this;
        bullet.team     = team;
        bullet.damage   = attackDamage;
        bullet.lifeTime = bulletRange / bulletSpeed;
        bullet.speed    = bulletSpeed;

        int mode = Random.Range(0, 4);

        switch (mode)
        {
        case 0:
            bullet.launchMode = ParabolicProjectile.LaunchMode.FixedHeight;
            break;

        case 1:
            bullet.launchMode = ParabolicProjectile.LaunchMode.FixedAngle;
            break;

        case 2:
            bullet.launchMode = ParabolicProjectile.LaunchMode.FixedSpeedHighTrajectory;
            break;

        case 3:
            bullet.launchMode = ParabolicProjectile.LaunchMode.FixedSpeedLowTrajectory;
            break;
        }

        bullet.LaunchAt(transform.position + centerHeight * Vector3.up, target.transform.position + target.centerHeight * Vector3.up);
    }
예제 #3
0
 private void LoadAbilities()
 {
     _projectile  = new ParabolicProjectile(transform);
     _jumpPound   = gameObject.AddComponent <JumpPound>();
     _walk        = gameObject.AddComponent <Walk>();
     _stalControl = gameObject.AddComponent <SpawnStalactites>();
     _mothControl = new GameObject("SceneSpawnables").AddComponent <BossMoths>();
 }
예제 #4
0
    public void SpitAttack()
    {
        ParabolicProjectile projectile = Instantiate(spitBullet, spitPoint.position, Quaternion.identity)
                                         .GetComponent <ParabolicProjectile>();

        projectile.throwObject = true;
        projectile.SetTarget(spitterAttack.Target.transform.position);
    }
예제 #5
0
    public override void OnRelease(Vector2 aim)
    {
        aiming = false;
        GameObject bulletGo = Instantiate(bullet, transform.position, Quaternion.identity);

        parabolicProjectile = bulletGo.GetComponent <ParabolicProjectile>();
        endPosition         = new Vector3(currentAim.x * range, bullet.transform.position.y, currentAim.y * range) + player.position;
        parabolicProjectile.SetTarget(endPosition);
        parabolicProjectile.throwObject = true;
    }
예제 #6
0
    private void ShowParabole(Vector3 aim)
    {
        parabolicProjectile = bullet.GetComponent <ParabolicProjectile>();
        endPosition         = new Vector3(aim.x * range, bullet.transform.position.y, aim.y * range) + player.position;
        parabolicProjectile.SetTarget(endPosition);
        int count = 20;

        Vector3[] arcArray = new Vector3[count + 1];
        for (int i = 0; i <= count; i++)
        {
            arcArray[i] = ParabolaEquation.Parabole(player.position, endPosition, parabolicProjectile.height, i / (float)count);
        }
        lr.positionCount = count + 1;
        lr.SetPositions(arcArray);
    }