summaryrefslogtreecommitdiff
path: root/Assets/Art/Vfx/GrabSquaresEffect/AbstractWiresEffect/Scripts/CollisionSpawner.cs
diff options
context:
space:
mode:
Diffstat (limited to 'Assets/Art/Vfx/GrabSquaresEffect/AbstractWiresEffect/Scripts/CollisionSpawner.cs')
-rw-r--r--Assets/Art/Vfx/GrabSquaresEffect/AbstractWiresEffect/Scripts/CollisionSpawner.cs53
1 files changed, 53 insertions, 0 deletions
diff --git a/Assets/Art/Vfx/GrabSquaresEffect/AbstractWiresEffect/Scripts/CollisionSpawner.cs b/Assets/Art/Vfx/GrabSquaresEffect/AbstractWiresEffect/Scripts/CollisionSpawner.cs
new file mode 100644
index 00000000..82f19fd9
--- /dev/null
+++ b/Assets/Art/Vfx/GrabSquaresEffect/AbstractWiresEffect/Scripts/CollisionSpawner.cs
@@ -0,0 +1,53 @@
+using UnityEngine;
+
+namespace Assets.AbstractWiresEffect.Scripts
+{
+ [RequireComponent(typeof(CollisionDetector))]
+ internal sealed class CollisionSpawner : MonoBehaviour
+ {
+ public GameObject CollisionEffect;
+ public float LifeTime = 1f;
+
+ private bool _isAlreadySpawned;
+ private CollisionDetector _collisionDetector;
+
+ private void Start()
+ {
+ _collisionDetector = GetComponent<CollisionDetector>();
+ _collisionDetector.CollisionDetected += OnCollisionDetected;
+ }
+
+ private void OnCollisionDetected(Vector3 hit)
+ {
+ if (_isAlreadySpawned)
+ return;
+
+ InstantiateImpactEffect(hit);
+
+ ////todo add decal
+ ////InstantiateDecal();
+ }
+
+ private void InstantiateImpactEffect(Vector3 pos)
+ {
+ var impactEffect = Instantiate(CollisionEffect, pos, CollisionEffect.transform.rotation);
+ impactEffect.transform.position = pos;
+
+ //todo add ivoke with delay and params
+ Destroy(impactEffect, LifeTime);
+ Invoke("Reset", LifeTime);
+
+ _isAlreadySpawned = true;
+ }
+
+ private void Reset()
+ {
+ _isAlreadySpawned = false;
+ }
+
+ private void OnDestroy()
+ {
+ _collisionDetector.CollisionDetected -= OnCollisionDetected;
+ }
+ }
+}