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); } }
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); } } }
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); } } } } }
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); } } } } }