예제 #1
0
    void LateUpdate()
    {
        origen = Vector3.Lerp(origen, origen + transformInicial.up, bulletSpeed * Time.deltaTime);

        Ray        rayBullet = new Ray(origen, direccion);
        RaycastHit rayBulletHit;

        Physics.Raycast(rayBullet, out rayBulletHit, lenght);

        Debug.DrawRay(origen, direccion, Color.blue);

        lineRenderer.SetPosition(0, origen);
        lineRenderer.SetPosition(1, origen + direccion);

        if (rayBulletHit.collider)
        {
            Destroyable col = rayBulletHit.collider.gameObject.GetComponent <Destroyable>();
            if (col)
            {
                if (col.IsDestroyable)
                {
                    col.ReceiveDamage(Damage);
                }
            }

            Destroy(gameObject);
        }
    }
예제 #2
0
        public override void ApplyEffect(Character source, GameObject target)
        {
            Character targetCh = Utils.GetCharacter(target);

            if (targetCh == null)             // target may be a Destroyable object
            {
                Destroyable d = target.GetComponent <Destroyable>();

                if (d != null && (source.CanAttack(d) || DamageFriendly))
                {
                    bool crit;
                    int  damage = source.CalculateDamage(Dmg + Random.Range(-RandomOffset, RandomOffset), null, SourceSkillObject, true, out crit, CriticalRate);
                    d.ReceiveDamage(source, damage);
                }
            }
            else             // target may be a character
            {
                if (source.CanAttack(targetCh) || DamageFriendly)
                {
                    bool crit;
                    int  damage = source.CalculateDamage(Dmg + Random.Range(-RandomOffset, RandomOffset), targetCh, SourceSkillObject, true, out crit, CriticalRate);

                    source.OnAttack(targetCh);

                    targetCh.ReceiveDamage(source, damage, SourceSkill, crit);
                }
            }
        }
예제 #3
0
        private void DoExplode()
        {
            if (source == null)
            {
                return;
            }

            Character targetCh;

            Collider2D[] colls = Physics2D.OverlapCircleAll(source.GetData().transform.position, radius);

            // explosion effect
            GameObject explosion = ((ActiveSkill)SourceSkillObject).CreateParticleEffect("PoisonExplosion", false, source.GetData().GetBody().transform.position);

            explosion.GetComponent <ParticleSystem>().Play();
            Object.Destroy(explosion, 2f);

            // give damages
            foreach (Collider2D col in colls)
            {
                if (col != null && col.gameObject != null)
                {
                    targetCh = col.gameObject.GetChar();

                    if (targetCh == null)
                    {
                        Destroyable d = col.gameObject.GetComponent <Destroyable>();

                        if (d != null && attackAll)                         // TODO fix
                        {
                            bool crit;
                            int  damage = source.CalculateDamage(Dmg, null, SourceSkillObject, true, out crit);
                            d.ReceiveDamage(source, damage);
                        }
                    }
                    else
                    {
                        if (attackTeam == targetCh.Team || attackAll)
                        {
                            bool crit;
                            int  damage = source.CalculateDamage(Dmg, targetCh, SourceSkillObject, true, out crit);

                            source.OnAttack(targetCh);

                            targetCh.ReceiveDamage(source, damage, SourceSkill, crit);
                        }
                    }
                }
            }
        }
예제 #4
0
        public override void ApplyEffect(Character source, GameObject target)
        {
            Character targetCh;

            Collider2D[] colls = Physics2D.OverlapCircleAll(source.GetData().transform.position, radius);

            foreach (Collider2D col in colls)
            {
                if (col != null && col.gameObject != null)
                {
                    targetCh = col.gameObject.GetChar();

                    if (targetCh == null)
                    {
                        Destroyable d = col.gameObject.GetComponent <Destroyable>();

                        if (d != null && source.CanAttack(d))
                        {
                            bool crit;
                            int  damage = source.CalculateDamage(Dmg + Random.Range(-RandomOffset, RandomOffset), null, SourceSkillObject, true, out crit);
                            d.ReceiveDamage(source, damage);
                        }
                    }
                    else
                    {
                        if (source.CanAttack(targetCh) || attackTeam == targetCh.Team || attackAll)
                        {
                            if (attackTeam >= 0 && targetCh.Team != attackTeam && !attackAll)
                            {
                                continue;
                            }

                            bool crit;
                            int  damage = source.CalculateDamage(Dmg + Random.Range(-RandomOffset, RandomOffset), targetCh, SourceSkillObject, true, out crit);

                            source.OnAttack(targetCh);

                            targetCh.ReceiveDamage(source, damage, SourceSkill, crit);
                        }
                    }
                }
            }
        }