using UnityEngine; namespace Artngame.SKYMASTER { public class manageParticleRotationSM : MonoBehaviour { private ParticleSystem ShurikenParticle; private ParticleSystemRenderer PrenderS; public bool StableRollMethod2; public bool StableRollAllAxis; private int psize; private Transform Cam_transf; private Vector3 Prev_cam_rot; private ParticleSystem.Particle[] particles; private void Start() { Cam_transf = Camera.main.transform; Prev_cam_rot = Cam_transf.eulerAngles; ParticleSystem.MainModule main = GetComponent().main; psize = main.maxParticles; ParticleSystem.Particle[] array = new ParticleSystem.Particle[main.maxParticles]; GetComponent().GetParticles(array); if (GetComponent() != null) { PrenderS = base.gameObject.GetComponent(); ShurikenParticle = GetComponent(); } if (PrenderS != null) { PrenderS.sortMode = ParticleSystemSortMode.Distance; } } private void LateUpdate() { float num = Cam_transf.eulerAngles.z - Prev_cam_rot.z; float y = Cam_transf.eulerAngles.y; float num2 = y - Prev_cam_rot.y; if (Mathf.Abs(num2) > 180f) { num2 = 360f - Mathf.Abs(num2); } float num3 = 0f; float num4 = 0f; if (StableRollMethod2) { num3 = Mathf.Abs(Vector3.Angle(Cam_transf.forward, Mathf.Sign(Cam_transf.forward.y) * Vector3.up)); num4 = (0f - Mathf.Sign(Cam_transf.forward.y)) * Vector3.Dot(Cam_transf.forward, Mathf.Sign(Cam_transf.forward.y) * Vector3.up); } if (particles == null) { particles = new ParticleSystem.Particle[ShurikenParticle.main.maxParticles]; } ShurikenParticle.GetParticles(particles); for (int i = 0; i < particles.Length; i++) { if (StableRollMethod2) { if (!StableRollAllAxis) { float num5 = Cam_transf.eulerAngles.z - Prev_cam_rot.z; float y2 = Cam_transf.eulerAngles.y; if (num5 == 0f && y2 != Prev_cam_rot.y && Mathf.Abs(Vector3.Angle(Cam_transf.forward, Vector3.up)) < 65f) { float num6 = y2 - Prev_cam_rot.y; particles[i].rotation = particles[i].rotation + num6; } else if (!(Mathf.Abs(Vector3.Angle(Cam_transf.forward, Vector3.up)) < 45f)) { particles[i].rotation = particles[i].rotation + num5; } } else if (num == 0f && y != Prev_cam_rot.y && num3 < 65f) { particles[i].rotation = particles[i].rotation - num2 * num4; } else { Mathf.Abs(Vector3.Angle(Cam_transf.forward, Vector3.up)); _ = 45f; particles[i].rotation = particles[i].rotation + num - num2 * num4; } } if (!(Prev_cam_rot == Cam_transf.eulerAngles)) { Prev_cam_rot = Cam_transf.eulerAngles; } } if (Prev_cam_rot != Cam_transf.eulerAngles) { Prev_cam_rot = Cam_transf.eulerAngles; } ShurikenParticle.SetParticles(particles, particles.Length); } } }