Files
BlueArchiveMiniGame/Assets/ThirdParty/DestroyIt/Demos (safe to delete)/Scripts/Effects/ShockWall.cs
2025-09-17 18:56:28 +08:00

44 lines
1.8 KiB
C#

using UnityEngine;
namespace DestroyIt
{
public class ShockWall : MonoBehaviour
{
public float blastForce = 200f;
public float damageAmount = 200f;
public Vector3 origin;
private void OnTriggerEnter(Collider col)
{
// If it has a rigidbody, apply force
Rigidbody rbody = col.attachedRigidbody;
if (rbody != null && !rbody.isKinematic)
rbody.AddExplosionForce(blastForce, origin, 0f, 0.5f);
// Check for Chip-Away Debris
ChipAwayDebris chipAwayDebris = col.gameObject.GetComponent<ChipAwayDebris>();
if (chipAwayDebris != null)
{
if (Random.Range(1, 100) > 50) // Do this about half the time...
{
chipAwayDebris.BreakOff(blastForce, 0f, 0.5f);
return; //Skip the destructible check if the debris hasn't chipped away yet.
}
return;
}
// If it's a destructible object, apply damage
// Only do this for the first active and enabled Destructible script found in parent objects
// Special Note: Destructible scripts are turned off on terrain trees by default (to save resources), so we will make an exception for them and process the damage anyway
Destructible[] destObjs = col.gameObject.GetComponentsInParent<Destructible>(false);
foreach (Destructible destObj in destObjs)
{
if (!destObj.isActiveAndEnabled && !destObj.isTerrainTree) continue;
ExplosiveDamage explosiveDamage = new ExplosiveDamage { DamageAmount = damageAmount, BlastForce = blastForce, Position = origin, Radius = 0f, UpwardModifier = 0.5f };
destObj.ApplyDamage(explosiveDamage);
break;
}
}
}
}