summaryrefslogtreecommitdiff
path: root/Valheim_v0.141.2_r202102/Valheim/assembly_valheim/ParticleDecal.cs
diff options
context:
space:
mode:
Diffstat (limited to 'Valheim_v0.141.2_r202102/Valheim/assembly_valheim/ParticleDecal.cs')
-rw-r--r--Valheim_v0.141.2_r202102/Valheim/assembly_valheim/ParticleDecal.cs42
1 files changed, 42 insertions, 0 deletions
diff --git a/Valheim_v0.141.2_r202102/Valheim/assembly_valheim/ParticleDecal.cs b/Valheim_v0.141.2_r202102/Valheim/assembly_valheim/ParticleDecal.cs
new file mode 100644
index 0000000..f9bf10e
--- /dev/null
+++ b/Valheim_v0.141.2_r202102/Valheim/assembly_valheim/ParticleDecal.cs
@@ -0,0 +1,42 @@
+using System.Collections.Generic;
+using UnityEngine;
+
+[ExecuteInEditMode]
+public class ParticleDecal : MonoBehaviour
+{
+ public ParticleSystem m_decalSystem;
+
+ [Range(0f, 100f)]
+ public float m_chance = 100f;
+
+ private ParticleSystem part;
+
+ private List<ParticleCollisionEvent> collisionEvents = new List<ParticleCollisionEvent>();
+
+ private void Awake()
+ {
+ part = GetComponent<ParticleSystem>();
+ collisionEvents = new List<ParticleCollisionEvent>();
+ }
+
+ private void OnParticleCollision(GameObject other)
+ {
+ if (!(m_chance < 100f) || !(Random.Range(0f, 100f) > m_chance))
+ {
+ int num = part.GetCollisionEvents(other, collisionEvents);
+ for (int i = 0; i < num; i++)
+ {
+ ParticleCollisionEvent particleCollisionEvent = collisionEvents[i];
+ Vector3 eulerAngles = Quaternion.LookRotation(particleCollisionEvent.normal).eulerAngles;
+ eulerAngles.x = 0f - eulerAngles.x + 180f;
+ eulerAngles.y = 0f - eulerAngles.y;
+ eulerAngles.z = Random.Range(0, 360);
+ ParticleSystem.EmitParams emitParams = default(ParticleSystem.EmitParams);
+ emitParams.position = particleCollisionEvent.intersection;
+ emitParams.rotation3D = eulerAngles;
+ emitParams.velocity = -particleCollisionEvent.normal * 0.001f;
+ m_decalSystem.Emit(emitParams, 1);
+ }
+ }
+ }
+}