Esempio n. 1
0
    protected void OnTriggerEnter(Collider other)
    {
        TargetProjectile targetProj = other.GetComponentInChildren <TargetProjectile>();

        if (targetProj != null)
        {
            Vector3 dir = targetProj.transform.position - Player.Instance.transform.position;
            dir.y = 0.0f;
            dir   = dir.normalized;
            targetProj.Hit(Player.Instance.gameObject, dir * Knockback);
            return;
        }


        if (!enemiesHit.Contains(other.gameObject))
        {
            Enemy enemy = other.GetComponentInChildren <Enemy>();
            if (enemy == null)
            {
                enemy = other.GetComponentInParent <Enemy>();
            }
            if (enemy != null)
            {
                enemiesHit.Add(other.gameObject);

                float damage = enemy.health.TakeDamage(this.Type, this.Damage);
                bool  isDead = enemy.health.IsDead();
                if (damage > 0)
                {
                    if (isDead)
                    {
                        Vector3 forward = Player.Instance.camera.transform.forward;
                        //forward = forward.normalized;
                        enemy.Explode(forward * RigidbodyKnockback, Player.Instance.camera.transform.position);
                    }
                    else
                    {
                        Vector3 forward = Player.Instance.camera.transform.forward;
                        forward.y = 0.0f;
                        forward   = forward.normalized;
                        enemy.Knockback(forward * Knockback, KnockbackDuration);
                    }
                }
            }
            else
            {
                Rigidbody rb = other.GetComponentInChildren <Rigidbody>();
                if (rb == null)
                {
                    rb = other.GetComponentInParent <Rigidbody>();
                }
                if (rb != null)
                {
                    Vector3 forward = Player.Instance.camera.transform.forward;
                    //forward = forward.normalized;
                    rb.AddForce(forward * RigidbodyKnockback, ForceMode.Impulse);
                }
            }
        }
    }
Esempio n. 2
0
    public void CreateArrow(Vector3 targetPos, float moveTime)
    {
        if (this != null)
        {
            //화살이 부족한 경우에만 풀링을 돌림
            if (arrow.Count < 1)
            {
                GameObject arrowObj;

                for (int i = 0; i < 5; ++i)
                {
                    arrowObj = Instantiate(arrowPrefab, new Vector3(0, 0, 0), Quaternion.identity, transform.parent);
                    arrowObj.SetActive(false);
                    this.arrow.Add(arrowObj);
                }
            }

            GameObject frontArrow = arrow[0];
            arrow.RemoveAt(0);
            arrow.Add(frontArrow);
            frontArrow.SetActive(true);
            frontArrow.transform.position = transform.position;
            frontArrow.transform.LookAt(targetPos);
            frontArrow.transform.DOMove(targetPos, moveTime, false).OnKill(() => { frontArrow.SetActive(false); });
            TargetProjectile projectile = frontArrow.GetComponent <TargetProjectile>();

            if (projectile != null)
            {
                projectile.ActiveFalse(moveTime);
            }
        }
    }
Esempio n. 3
0
    public void ArrowCreate(Vector3 targetPos, float moveTime)
    {
        if (this != null)
        {
            if (arrow.Count < 1)
            {
                GameObject a;
                for (int i = 0; i < 5; ++i)
                {
                    a = Instantiate(arrowPrefab, new Vector3(0, 0, 0), Quaternion.identity, transform.parent);
                    a.SetActive(false);
                    arrow.Add(a);
                }
            }
            GameObject Arrow = arrow[0];
            arrow.RemoveAt(0);
            arrow.Add(Arrow);
            Arrow.SetActive(true);
            Arrow.transform.position = transform.position;
            Arrow.transform.LookAt(targetPos);
            Arrow.transform.DOMove(targetPos, moveTime, true).OnKill(() => { Arrow.SetActive(false); });

            TargetProjectile tp = Arrow.GetComponent <TargetProjectile>();
            if (tp != null)
            {
                tp.ActiveFalse(moveTime);
            }
        }
    }
Esempio n. 4
0
    private void MissSnowball(TargetProjectile projectile)
    {
        //print("Missed");

        Snowball snowball = projectile.GetComponent <Snowball>();

        snowballs.Remove(snowball);
        Destroy(projectile.gameObject);
    }
Esempio n. 5
0
    private void HitSnowball(TargetProjectile projectile, GameObject hitObj)
    {
        //print("Hit");

        Snowball snowball = projectile.GetComponent <Snowball>();

        snowballs.Remove(snowball);
        Destroy(snowball.gameObject);
    }
Esempio n. 6
0
 private void MissTarget(TargetProjectile projectile)
 {
     if (currProjectile != null)
     {
         print("Missed");
         Destroy(projectile.gameObject);
         currProjectile = null;
         StartCoroutine(SpawnProjectileDelay());
     }
 }
Esempio n. 7
0
 private void HitTarget(TargetProjectile projectile, GameObject hitObj)
 {
     if (currProjectile != null)
     {
         print("Hit");
         Destroy(projectile.gameObject);
         currProjectile = null;
         StartCoroutine(SpawnProjectileDelay());
     }
 }
Esempio n. 8
0
    private void ReceiveTarget(TargetReceiver receiver, GameObject meteor)
    {
        if (currProjectile == null)
        {
            return;
        }
        print("Received " + meteor.name);

        if (ReceiveCount == 0)
        {
            currProjectile.OnHit  -= HitTarget;
            currProjectile.OnMiss -= MissTarget;
            currProjectile         = null;

            GameObject shield = Shields[0];
            Shields.RemoveAt(0);
            Destroy(shield.gameObject);
            Destroy(meteor.gameObject);

            if (Shields.Count == 0)
            {
                Aura.SetActive(false);
                stateMachine.ChangeState("Boss4_MeteorShower");
            }
            else
            {
                StartCoroutine(SpawnProjectileDelay());
            }
        }
        else
        {
            ReceiveCount--;

            Vector3 dir = Vector3.up;
            dir *= ProjectileImpulse;

            //currProjectile.SpeedOverTime -= .01f;

            currProjectile.Hit(this.gameObject, dir);
        }
    }
Esempio n. 9
0
    public void SpawnProjectile()
    {
        if (currProjectile != null)
        {
            return;
        }
        TargetProjectile meteor = Instantiate(TrackingMeteorPrefab,
                                              ProjectileSpawnpoint.position, ProjectileSpawnpoint.rotation, this.transform);

        Vector3 dir = Vector3.up;

        dir *= ProjectileImpulse;

        meteor.OnHit  += HitTarget;
        meteor.OnMiss += MissTarget;
        currProjectile = meteor;

        ReceiveCount = 3 - Shields.Count;

        switch (Shields.Count)
        {
        case 3:
            meteor.SpeedOverTime = .1f;
            break;

        case 2:
            meteor.SpeedOverTime = .05f;
            break;

        case 1:
            meteor.SpeedOverTime = .03f;
            break;

        default:
            meteor.SpeedOverTime = .2f;
            break;
        }

        meteor.Fire(this.gameObject, Player.Instance.camera.gameObject, dir);
    }
Esempio n. 10
0
 private void Fire(TargetProjectile proj)
 {
     HitEffect.Play();
 }
Esempio n. 11
0
    private void SlamAttack()
    {
        Player.Instance.CanWalk    = true;
        Player.Instance.velocity.y = PlayerJump;

        DustEffect.Play();
        AudioManager.Instance.PlaySoundWithParent("hammer", ESoundChannel.SFX, gameObject);

        int layermask = PhysicsCollisionMatrix.Instance.MaskForLayer(this.gameObject.layer);

        Collider[] colliders = Physics.OverlapSphere(Player.Instance.transform.position, SlamRadius, layermask);
        //Collider[] colliders = Physics.OverlapSphere(SlamCenter.position, SlamRadius, layermask);
        foreach (Collider c in colliders)
        {
            TargetProjectile targetProj = c.GetComponentInChildren <TargetProjectile>();
            if (targetProj != null)
            {
                Vector3 dir = targetProj.transform.position - Player.Instance.transform.position;
                dir.y = 0.0f;
                dir   = dir.normalized;
                targetProj.Hit(Player.Instance.gameObject, dir * Knockback);
                continue;
            }

            Enemy enemy = c.GetComponentInChildren <Enemy>();
            if (enemy == null)
            {
                enemy = c.GetComponentInParent <Enemy>();
            }
            if (enemy != null)
            {
                // Damage
                float damage = enemy.health.TakeDamage(this.Type, this.Damage);
                bool  isDead = enemy.health.IsDead();

                // Knockback
                if (damage > 0)
                {
                    if (isDead)
                    {
                        //Vector3 dir = c.transform.position - SlamCenter.position;
                        Vector3 dir = c.transform.position - Player.Instance.transform.position;
                        //dir.y = 0.0f;
                        dir = dir.normalized;
                        enemy.Explode(dir * RigidbodyKnockback, SlamCenter.position);
                    }
                    else
                    {
                        //Vector3 dir = c.transform.position - SlamCenter.position;
                        Vector3 dir = c.transform.position - Player.Instance.transform.position;
                        dir.y = 0.0f;
                        dir   = dir.normalized;
                        enemy.Knockback(dir * Knockback, KnockbackDuration);
                    }
                }
            }
            else
            {
                Rigidbody rb = c.GetComponentInChildren <Rigidbody>();
                if (rb == null)
                {
                    rb = c.GetComponentInParent <Rigidbody>();
                }

                if (rb != null)
                {
                    //Vector3 dir = c.transform.position - SlamCenter.position;
                    Vector3 dir = c.transform.position - Player.Instance.transform.position;
                    //dir.y = 0.0f;
                    dir = dir.normalized;
                    rb.AddForceAtPosition(dir * RigidbodyKnockback, SlamCenter.position, ForceMode.Impulse);
                }
            }
        }
    }
Esempio n. 12
0
 private void Fire(TargetProjectile proj)
 {
     direction = this.transform.forward;
     HitEffect.Play();
 }