diff options
author | chai <215380520@qq.com> | 2024-05-20 22:36:58 +0800 |
---|---|---|
committer | chai <215380520@qq.com> | 2024-05-20 22:36:58 +0800 |
commit | a22c505984697881f5f911a165ee022087b69e09 (patch) | |
tree | d3c030aef1ae9b8a01c889dd2902bb1e3324e72b /Thronefall_v1.0/Decompile/BuildingDestructionHandler.cs | |
parent | 4a4cc82d069b26bc4d4532e73860f86b211ca239 (diff) |
Diffstat (limited to 'Thronefall_v1.0/Decompile/BuildingDestructionHandler.cs')
-rw-r--r-- | Thronefall_v1.0/Decompile/BuildingDestructionHandler.cs | 62 |
1 files changed, 62 insertions, 0 deletions
diff --git a/Thronefall_v1.0/Decompile/BuildingDestructionHandler.cs b/Thronefall_v1.0/Decompile/BuildingDestructionHandler.cs new file mode 100644 index 0000000..d03a975 --- /dev/null +++ b/Thronefall_v1.0/Decompile/BuildingDestructionHandler.cs @@ -0,0 +1,62 @@ +using UnityEngine; + +public class BuildingDestructionHandler : MonoBehaviour +{ + public bool shakeCamera; + + public MeshRenderer mainMesh; + + public ParticleSystem debrisParticles; + + public ParticleSystem smokeParticles; + + public AudioSource destructionSource; + + public float destructionPitchRange = 0.2f; + + private ParticleSystem.ShapeModule debrisShape; + + private ParticleSystem.ShapeModule smokeShape; + + private float debrisPlaytime = 5f; + + private float debrisClock; + + private void Awake() + { + debrisShape = debrisParticles.shape; + smokeShape = smokeParticles.shape; + } + + private void OnEnable() + { + if (shakeCamera && (bool)CameraController.instance) + { + CameraController.instance.ShakePunch(); + } + debrisParticles.transform.position = mainMesh.transform.position; + debrisParticles.transform.rotation = mainMesh.transform.rotation; + smokeParticles.transform.position = mainMesh.transform.position; + smokeParticles.transform.rotation = mainMesh.transform.rotation; + debrisShape.scale = mainMesh.localBounds.size; + debrisShape.position = mainMesh.localBounds.center; + smokeShape.scale = mainMesh.localBounds.size; + smokeShape.position = mainMesh.localBounds.center; + debrisClock = 0f; + debrisParticles.Play(); + destructionSource.pitch = Random.Range(1f - destructionPitchRange, 1f + destructionPitchRange); + destructionSource.Play(); + } + + private void Update() + { + if (debrisParticles.isPlaying) + { + debrisClock += Time.deltaTime; + if (debrisClock >= debrisPlaytime) + { + debrisParticles.Pause(); + } + } + } +} |