Esempio n. 1
0
 private void AddTargetToList(TargetEnemy targetable)
 {
     if (!targetsInRange.Contains(targetable))
     {
         targetsInRange.Add(targetable);
     }
 }
Esempio n. 2
0
    void Update()
    {
        switch (cStatus)
        {
        case Status.None:
            break;

        case Status.Idle:
            break;

        case Status.Attack:
            iTween.RotateUpdate(gameObject,
                                iTween.Hash("rotation", new Vector3(0, 0, GetAngle(transform.position, TargetEnemy.GetTransform().position)),
                                            "speed", AttackSpeed * 300.0f));
            anm.timeScale             = AttackSpeed;
            anm.AnimationState.Event += HandleEvent;
            CheckDistance(transform.position, TargetEnemy.GetTransform().position, Range);
            break;

        case Status.Skill:
            break;

        case Status.Dead:
            anm.AnimationName = "death";
            anm.loop          = false;
            break;

        default:
            break;
        }
    }
Esempio n. 3
0
    void Explode()
    {
        GameObject explode = Instantiate(explodeEffect, transform.position, transform.rotation);

        Destroy(explode, 2f);
        Collider[] colliderToDestroy = Physics.OverlapSphere(transform.position, radius);
        foreach (Collider nearBy in colliderToDestroy)
        {
            Target      target      = nearBy.GetComponent <Target>();
            TargetEnemy enemyTarget = nearBy.GetComponent <TargetEnemy>();

            if (enemyTarget != null)
            {
                enemyTarget.HitEnemy(damage);
            }

            if (target != null)
            {
                target.HitTarget(damage);
            }
        }

        Collider[] colliderToForce = Physics.OverlapSphere(transform.position, radius);
        foreach (Collider nearBy in colliderToForce)
        {
            Rigidbody rb = nearBy.GetComponent <Rigidbody>();
            if (rb != null)
            {
                rb.AddExplosionForce(force, transform.position, radius);
            }
        }

        Destroy(gameObject);
    }
Esempio n. 4
0
    void OnSceneGUI()
    {
        if (EditorOption.Options[OptionType.디버그_라인그리기] == false)
        {
            return;
        }

        TargetEnemy item = (TargetEnemy)target;
        Transform   tr   = item.transform;

        item.viewingDistance = (float)Handles.ScaleValueHandle(item.viewingDistance
                                                               , tr.position + tr.forward * item.viewingDistance
                                                               , tr.rotation, 1, Handles.ConeHandleCap, 1);
        if (item.handle1)
        {
            // 로테이션 핸들 1)
            item.viewingAngle = Handles.ScaleSlider(item.viewingAngle, tr.position + tr.forward * item.viewingDistance, tr.right, Quaternion.identity, 2, 0.1f);
        }
        if (item.handle2)
        {
            // 로테이션 핸들 2)
            Quaternion rotate = Quaternion.Euler(new Vector3(0, item.viewingAngle, 0));
            rotate            = Handles.FreeRotateHandle(rotate, tr.position, item.viewingDistance);
            item.viewingAngle = rotate.eulerAngles.y;
        }
        if (item.handle3)
        {
            //로테이션 핸들 3)
            Quaternion rotate = Quaternion.Euler(new Vector3(0, item.viewingAngle, 0));
            rotate            = Handles.RotationHandle(rotate, tr.position);
            item.viewingAngle = rotate.eulerAngles.y;
        }
    }
Esempio n. 5
0
    void OnTriggerEnter2D(Collider2D col)
    {
        if (col.tag == "Boss" || col.tag == "Crit")
        {
            Target enemy = col.GetComponent <Target>();
            if (enemy != null)
            {
                cam.GetComponent <CameraShake>().shakecamera();
                enemy.TakeDamage(damage);
                SumScore.Add(5);
            }
        }

        if (col.tag == "Enemy")
        {
            TargetEnemy enemy = col.GetComponent <TargetEnemy>();
            if (enemy != null)
            {
                cam.GetComponent <CameraShake>().shakecamera();
                enemy.TakeDamage(damage);
                SumScore.Add(5);
            }
        }

        if (col.tag == "EnemyBullet")
        {
            SumScore.Add(1);
        }

        Destroy(gameObject);
    }
Esempio n. 6
0
    private void OnDeath()
    {
        _isDead = true;
        _explosionParticles.transform.position = transform.position;
        _explosionParticles.gameObject.SetActive(true);

        _explosionParticles.Play();

        ExplosionAudio.Play();


        if (gameObject.tag == "Player")
        {
            GameManager.GameOver();
        }

        else
        {
            TargetEnemy.VisibleEnemies.Remove(gameObject.GetComponent <EnemyInView>());
            TargetEnemy.TurnOffLockOn();
            GameManager.EnemyKilled();
        }

        this.gameObject.SetActive(false);
    }
Esempio n. 7
0
        protected sealed override void OnCollideWithEnemy(Enemy enemy, Vector3 hitPosition)
        {
            Head.HitEnemies.Add(enemy);

            if (TargetEnemy.IsTarget(enemy) && enemy.FullDamageOnSmite)
            {
                enemy.TrueDamage(DamageOnHitTarget, this);
                DeactivateAllLinks();
            }
        }
Esempio n. 8
0
    //  공격
    public override void Attack()
    {
        TargetEnemy.Damage(AttackDamage);

        if (!TargetEnemy.isAlive())
        {
            SetIdle();
        }


        //  스킬 카운트
        Count++;
    }
Esempio n. 9
0
        public void InitFromPreviousLink(SmiteBullet existingLink)
        {
            Previous          = existingLink;
            Head              = existingLink.Head;
            DamageOnHitAny    = existingLink.DamageOnHitAny;
            DamageOnHitTarget = existingLink.DamageOnHitTarget;
            TargetEnemy.CloneFrom(existingLink.TargetEnemy);
            TargetPosition = existingLink.TargetPosition;

            if (!TargetEnemy.IsActive)
            {
                TargetPosition = TargetPosition.WithY(SpaceUtil.WorldMap.Top.y);
            }
        }
Esempio n. 10
0
    void Shoot()
    {
        // A simple fire animation using particals.
        gunSmoke.Play();

        // Raycast for targeting purposes.
        RaycastHit rayHit;

        //                      Player            Player forward   Going out to range
        if (Physics.Raycast(transform.position, transform.forward, out rayHit))
        {
            range = rayHit.distance;
        }
        {
            // Set up target.            What the ray hit.
            Target      target      = rayHit.transform.GetComponent <Target>();
            TargetEnemy enemyTarget = rayHit.transform.GetComponent <TargetEnemy>();
            TargetBase  baseTarget  = rayHit.transform.GetComponent <TargetBase>();
            TargetTank  tankTarget  = rayHit.transform.GetComponent <TargetTank>();

            //GameObject hitHere = Instantiate(hitEffect, transform.position + transform.forward * range, Quaternion.LookRotation(rayHit.point));
            GameObject hitHere = Instantiate(hitEffect, rayHit.point, Quaternion.LookRotation(rayHit.normal));
            Destroy(hitHere, 0.5f);

            Debug.DrawLine(transform.position, transform.position + transform.forward * range, Color.red);
            // Show me what the ray hit.
            // Debug.Log(rayHit.transform.name);
            if (enemyTarget != null)
            {   // Target takes damage.
                enemyTarget.HitEnemy(damage);
            }
            // Only if targe is not zero, a valid targe is in range.
            if (target != null)
            {   // Target takes damage.
                target.HitTarget(damage);
            }
            if (baseTarget != null)
            {
                baseTarget.HitBase(damage);
            }
            if (tankTarget != null)
            {
                tankTarget.HitBase(damage);
            }
        }
    }
Esempio n. 11
0
    private void RemoveTargetFromList(TargetEnemy targetable)
    {
        if (targetsInRange.Contains(targetable))
        {
            targetsInRange.Remove(targetable);
        }

        if (targetsInCone.Contains(targetable))
        {
            targetsInCone.Remove(targetable);
        }

        if (aimController.Target == targetable)
        {
            aimController.Target = null;
            TryGetTargetFormList();
        }
    }
Esempio n. 12
0
    private void OnTriggerExit(Collider other)
    {
        TargetEnemy targetable = null;

        if (other.attachedRigidbody)
        {
            targetable = other.attachedRigidbody.GetComponentInChildren <TargetEnemy>();
        }
        else
        {
            targetable = other.GetComponentInChildren <TargetEnemy>();
        }

        if (targetable != null)
        {
            RemoveTargetFromList(targetable);
        }
    }
Esempio n. 13
0
    //  탐색 레이더. 나중에 부모클래스로 빼줘야하고 애니메이션 이름 통일
    public IEnumerator Rader()
    {
        AngleZ = 0.0f;

        while (true)
        {
            //  레이 쏘는 방향 뱅글뱅글
            AngleZ  += 1440.0f * Time.deltaTime;
            Detector = (Quaternion.Euler(0.0f, 0.0f, AngleZ) * Vector3.down * Range)
                       + transform.position;
            Debug.DrawLine(transform.position, Detector, Color.red, 0.1f);

            hit = Physics2D.Linecast(transform.position, Detector, 1 << LayerMask.NameToLayer("Enemy"));

            if (hit)
            {
                TargetEnemy = (IDamageable)hit.transform.GetComponent(typeof(IDamageable));

                //  유효한 타겟인가?
                if (TargetEnemy.isAlive())
                {
                    cStatus           = Status.Attack;
                    anm.AnimationName = "heal";
                    yield break;
                }

                else
                {
                    SetIdle();
                }
            }

            else
            {
                if (cStatus == Status.Attack)
                {
                    SetIdle();
                }
            }

            yield return(null);
        }
    }
Esempio n. 14
0
    void Laser()
    {
        TargetEnemy.TakeDamage(damageOverTime * Time.deltaTime);
        TargetEnemy.Slow(slowAmount);

        if (!LineRenderer.enabled)
        {
            LineRenderer.enabled = true;
            impactEffect.Play();
            impactLight.enabled = true;
        }
        LineRenderer.SetPosition(0, firePoint.position);
        LineRenderer.SetPosition(1, Target.position);

        Vector3 dir = firePoint.position - Target.position; // vector3 for the impactEffect

        impactEffect.transform.position = Target.position + dir.normalized;
        impactEffect.transform.rotation = Quaternion.LookRotation(dir);
    }
Esempio n. 15
0
    private bool AnyBoundInsideCone(TargetEnemy target)
    {
        List <Vector3> bounds = target.GetBoundsList();

        foreach (var bound in bounds)
        {
            Vector3 dir = (bound - transform.position).normalized;
            float   dot = Vector3.Dot(transform.forward, dir);
            float   cos = Mathf.Cos(angle / 2f * Mathf.Deg2Rad);

            if (dot > cos)
            {
                return(true);
            }
        }

        return(false);

        // Vector3 dir = (target.Transform.position - transform.position).normalized;
        // float dot = Vector3.Dot(transform.forward, dir);
        // float cos = Mathf.Cos(angle / 2f * Mathf.Deg2Rad);
        //return dot > cos;
    }
Esempio n. 16
0
    //  콜백함수. 이벤트 발생시 호출됨
    void HandleEvent(Spine.TrackEntry trackEntry, Spine.Event e)
    {
        //  정확히 타격 판정이 발생하는 부분
        if (e.Data.Name == "hit" && !isAttacked)
        {
            print("event hitttttt");
            Attack();
            isAttacked = true;
        }

        //  공격 후
        if (e.Data.Name == "end attack" && isAttacked)
        {
            print("end Attack");

            //  적이 아직 사거리 내에 있는지 확인
            if (TargetEnemy.isAlive())
            {
                CheckDistance(transform.position, TargetEnemy.GetTransform().position, Range);
            }

            isAttacked = false;
        }
    }
Esempio n. 17
0
    void Update()
    {
        switch (cStatus)
        {
        case Status.None:
            break;

        case Status.Idle:
            break;

        case Status.Attack:
            iTween.RotateUpdate(gameObject,
                                iTween.Hash("rotation", new Vector3(0, 0, GetAngle(transform.position, TargetEnemy.GetTransform().position)), "time", 0.5f));
            anm.AnimationState.Event += HandleEvent;
            break;

        case Status.Skill:
            break;

        case Status.Dead:
            anm.AnimationName = "death";
            anm.loop          = false;
            break;

        default:
            break;
        }
    }