58 lines
1.9 KiB
C#
58 lines
1.9 KiB
C#
// ============================================================================
|
|
// 4. COMMON RUNTIME BEHAVIORS - Your Legendary Item Effects!
|
|
// ============================================================================
|
|
|
|
using UnityEngine;
|
|
|
|
public class ExplodeOnHitBehavior : RuntimeBehavior
|
|
{
|
|
public GameObject explosionPrefab;
|
|
public float explosionRadius = 5f;
|
|
public float explosionDamage = 30f;
|
|
public LayerMask targetLayers = -1;
|
|
|
|
public ExplodeOnHitBehavior()
|
|
{
|
|
Trigger = BehaviorTrigger.OnHit;
|
|
BehaviorName = "Explode on Hit";
|
|
}
|
|
|
|
public override void Execute(RuntimeAbilityInstance ability, Taggable user, Transform target, Vector3 point)
|
|
{
|
|
Vector3 explosionPoint = target != null ? target.position : point;
|
|
|
|
// Spawn explosion visual if prefab exists
|
|
if (explosionPrefab != null)
|
|
{
|
|
Object.Instantiate(explosionPrefab, explosionPoint, Quaternion.identity);
|
|
}
|
|
|
|
// Find targets in explosion radius
|
|
var colliders = Physics.OverlapSphere(explosionPoint, explosionRadius, targetLayers);
|
|
|
|
foreach (var collider in colliders)
|
|
{
|
|
var explosionTarget = collider.GetComponent<Taggable>();
|
|
if (explosionTarget != null && explosionTarget != user)
|
|
{
|
|
// Apply explosion damage
|
|
var health = explosionTarget.GetComponent<Health>();
|
|
if (health != null)
|
|
{
|
|
health.ChangeValue(-explosionDamage);
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
public override RuntimeBehavior Clone()
|
|
{
|
|
return new ExplodeOnHitBehavior
|
|
{
|
|
explosionPrefab = this.explosionPrefab,
|
|
explosionRadius = this.explosionRadius,
|
|
explosionDamage = this.explosionDamage,
|
|
targetLayers = this.targetLayers
|
|
};
|
|
}
|
|
} |