private unsafe void EmitLightningType(LightningType lightningType, float deltaTime) { int num8; float num9; int emitCount = lightningType.GetEmitCount(deltaTime); Bounds emitArea = lightningType.EmitArea; Vector3 min = emitArea.min; Vector3 max = emitArea.max; for (int i = 0; i < 3; i++) { ref Vector3 vectorRef; num9 = vectorRef[num8]; (vectorRef = (Vector3) & min)[num8 = i] = num9 * this.EmitterSize[i]; }
public void Update(float deltaTime, float realDeltaTime, LightningType lightningType, ref int flashPointId, Material cloudMaterial) { bool flag = false; float num = 0f; for (int i = 0; i < this.FlashCount; i++) { LightningObject obj2 = this._objects[i]; if (obj2.Active) { flag = true; obj2.Lifttime += realDeltaTime; if (this.LightningVisible && (obj2.Lifttime > obj2.DelayTime)) { obj2.Show(true); } if (obj2.Lifttime > obj2.StartLifttime) { obj2.Active = false; } float num3 = lightningType.IntensityCurve.Evaluate((obj2.Lifttime - obj2.DelayTime) / (obj2.StartLifttime - obj2.DelayTime)) * obj2.Intensity; num += num3; if (this.LightningVisible) { Transform transform = obj2.Object.transform; transform.localPosition += (Vector3)(this.Velocity * deltaTime); lightningType.DumbMPB.SetFloat("_TexOffsetX", obj2.Mat.texOffsetX); lightningType.DumbMPB.SetFloat("_EmissionScaler", num3); obj2.Object.GetComponent <Renderer>().SetPropertyBlock(lightningType.DumbMPB); } } } this.Active = flag; if (this.Active) { float intensity = num * (!this.LightningVisible ? lightningType.CloudLitIntensinty2 : lightningType.CloudLitIntensinty); this.SetFlashPoint(this.StartPosition, intensity, cloudMaterial, ref flashPointId); if (this.LightningVisible) { this.SetFlashPoint(this.EndPosition, intensity, cloudMaterial, ref flashPointId); } } }
public void Emit(Vector3 position, Vector3 velocity, bool lightningVisible, LightningType lightningType) { this.Active = true; this.LightningVisible = lightningVisible; this.StartPosition = position; this.EndPosition = this.StartPosition - ((Vector3)(Vector3.up * lightningType.Size)); this.Velocity = velocity; this.FlashCount = UnityEngine.Random.Range(1, LightningType.MaxFlashCount); float num = 0f; HashSet <int> set = new HashSet <int>(); int length = lightningType.Materials.Length; for (int i = 0; i < this.FlashCount; i++) { LightningObject obj2 = this._objects[i]; if (lightningVisible) { int num4; if (set.Count >= length) { break; } do { num4 = UnityEngine.Random.Range(0, length); }while (set.Contains(num4)); set.Add(num4); obj2.Mat = lightningType.Materials[num4]; obj2.UpdatePosition(position); } obj2.Intensity = UnityEngine.Random.Range(lightningType.MinIntensity, lightningType.MaxIntensity); obj2.Size = lightningType.Size; float num5 = lightningType.StartLifttime * (1f + (((UnityEngine.Random.value * 2f) - 1f) * lightningType.StartLifttimeDeviation)); obj2.StartLifttime = num5 + num; obj2.DelayTime = num; num += num5; obj2.Lifttime = 0f; obj2.Active = true; } }