public void Ignite(Vector3 worldBurnPosition, int generation = 0) { if (this.isBurning) { return; } this.burnGeneration = generation; this.spreadTimer = 0f; this.isBurning = true; FireDamagePoint fireDamagePoint = this.FindClosestFirePoint(base.transform.InverseTransformPoint(worldBurnPosition)); if (fireDamagePoint != null) { this.BurnPoint(fireDamagePoint); this.UpdateSizeParameter(); } if (this.BurnMaterial && !this.Structure) { base.GetComponent <Renderer>().material = this.BurnMaterial; } for (int i = 0; i < this.AdditionalBurnMaterials.Length; i++) { this.AdditionalBurnMaterials[i].renderer.material = this.AdditionalBurnMaterials[i].material; } }
private void OnEnable() { this.BurningOff(); this.RandomizedSpreadInterval = this.SpreadInterval + UnityEngine.Random.value; for (int i = 0; i < this.FirePoints.Length; i++) { FireDamagePoint fireDamagePoint = this.FirePoints[i]; fireDamagePoint.isBurning = false; fireDamagePoint.particleSystem = null; } }
public void ExtinguishPoint(FireParticle particle) { for (int i = 0; i < this.FirePoints.Length; i++) { FireDamagePoint fireDamagePoint = this.FirePoints[i]; if (fireDamagePoint.particleSystem == particle) { fireDamagePoint.particleSystem = null; return; } } }
private void UpdateSizeParameter() { if (this.sizeParameter != null && this.MyFuel != 0f) { float num = 0f; for (int i = 0; i < this.FirePoints.Length; i++) { FireDamagePoint fireDamagePoint = this.FirePoints[i]; if (fireDamagePoint.particleSystem != null) { num += fireDamagePoint.particleSystem.MyFuel; } } UnityUtil.ERRCHECK(this.sizeParameter.setValue(100f * num / (this.MyFuel * (float)this.FirePoints.Length))); } }
protected void ResetFirePoints() { for (int i = 0; i < this.FirePoints.Length; i++) { FireDamagePoint fireDamagePoint = this.FirePoints[i]; if (fireDamagePoint != null) { fireDamagePoint.isBurning = false; if (fireDamagePoint.particleSystem) { PoolManager.Pools["Particles"].Despawn(fireDamagePoint.particleSystem.transform); fireDamagePoint.particleSystem = null; } } } }
private void Spread() { if (BoltNetwork.isClient) { return; } for (int i = 0; i < this.FirePoints.Length; i++) { FireDamagePoint fireDamagePoint = this.FirePoints[i]; if (fireDamagePoint.isBurning) { FireDamagePoint fireDamagePoint2 = this.FindClosestFirePoint(fireDamagePoint.Position); if (fireDamagePoint2 != null) { this.BurnPoint(fireDamagePoint2); } } } if (this.burnGeneration + 1 < 10 && this.SpreadLayers != 0) { for (int j = 0; j < this.FirePoints.Length; j++) { FireDamagePoint fireDamagePoint3 = this.FirePoints[j]; if (fireDamagePoint3.isBurning) { Vector3 vector = base.transform.TransformPoint(fireDamagePoint3.Position); Collider[] array = Physics.OverlapSphere(vector, fireDamagePoint3.Radius, this.SpreadLayers); for (int k = 0; k < array.Length; k++) { Collider collider = array[k]; if (!collider.transform.IsChildOf(base.transform)) { FireDamage componentInChildren = collider.GetComponentInChildren <FireDamage>(); if (componentInChildren) { componentInChildren.Ignite(vector, this.burnGeneration + 1); } else { collider.SendMessage("Burn", SendMessageOptions.DontRequireReceiver); } } } } } } }
private void BurnPoint(FireDamagePoint firePoint) { ParticleSystem particleSystem = PoolManager.Pools["Particles"].Spawn(this.FireParticleSystem, base.transform.TransformPoint(firePoint.Position), Quaternion.identity); if (particleSystem != null) { firePoint.isBurning = true; firePoint.particleSystem = particleSystem.GetComponent <FireParticle>(); firePoint.particleSystem.MyFuel = this.MyFuel; firePoint.particleSystem.Parent = this; if (this.flareUpParameter != null) { UnityUtil.ERRCHECK(this.flareUpParameter.setValue(1f)); UnityUtil.ERRCHECK(this.flareUpParameter.setValue(0f)); } } }
private FireDamagePoint FindClosestFirePoint(Vector3 localPosition) { FireDamagePoint result = null; float num = 999999f; for (int i = 0; i < this.FirePoints.Length; i++) { FireDamagePoint fireDamagePoint = this.FirePoints[i]; if (!fireDamagePoint.isBurning) { float sqrMagnitude = (fireDamagePoint.Position - localPosition).sqrMagnitude; if (sqrMagnitude < num) { result = fireDamagePoint; num = sqrMagnitude; } } } return(result); }
protected void StopBurning() { if (this.isBurning) { this.SetMaterialBurnAmount(0f); } this.BurningOff(); if (!this.isBurning) { this.ResetFirePoints(); } else { FireDamagePoint fireDamagePoint = this.FindClosestFirePoint(Vector3.zero); if (fireDamagePoint != null) { this.BurnPoint(fireDamagePoint); } } }
private void OnDrawGizmosSelected() { Color color = Gizmos.color; Matrix4x4 matrix = Gizmos.matrix; Gizmos.color = Color.red; Gizmos.matrix = base.transform.localToWorldMatrix; for (int i = 0; i < this.FirePoints.Length; i++) { FireDamagePoint fireDamagePoint = this.FirePoints[i]; if (fireDamagePoint.isBurning) { Gizmos.DrawSphere(fireDamagePoint.Position, fireDamagePoint.Radius); } else { Gizmos.DrawWireSphere(fireDamagePoint.Position, fireDamagePoint.Radius); } } Gizmos.matrix = matrix; Gizmos.color = color; }
public void Ignite(Vector3 worldBurnPosition, int generation = 0) { if (this.isBurning) { return; } this.burnGeneration = generation; this.spreadTimer = 0f; this.isBurning = true; FireDamagePoint fireDamagePoint = this.FindClosestFirePoint(base.transform.InverseTransformPoint(worldBurnPosition)); if (fireDamagePoint != null) { this.BurnPoint(fireDamagePoint); this.UpdateSizeParameter(); } if (this.BurnMaterial && !this.Structure) { Renderer component = base.GetComponent <Renderer>(); if (component.sharedMaterial != this.BurnMaterial) { this.OriginalMaterial = component.sharedMaterial; component.sharedMaterial = this.BurnMaterial; } } for (int i = 0; i < this.AdditionalBurnMaterials.Length; i++) { if (this.AdditionalBurnMaterials[i].renderer.sharedMaterial != this.AdditionalBurnMaterials[i].material) { this.AdditionalBurnMaterials[i].originalMaterial = this.AdditionalBurnMaterials[i].renderer.sharedMaterial; this.AdditionalBurnMaterials[i].renderer.sharedMaterial = this.AdditionalBurnMaterials[i].material; } } if (this.DestroyWhenComplete) { IEnumerator enumerator = base.transform.GetEnumerator(); try { while (enumerator.MoveNext()) { object obj = enumerator.Current; Transform transform = (Transform)obj; PickUp component2 = transform.GetComponent <PickUp>(); if (component2) { component2._destroyTarget = component2.gameObject; if (component2._myPickUp) { UnityEngine.Object.Destroy(component2._myPickUp); } if (component2._sheen) { UnityEngine.Object.Destroy(component2._sheen); } UnityEngine.Object.Destroy(component2.gameObject); } } } finally { IDisposable disposable; if ((disposable = (enumerator as IDisposable)) != null) { disposable.Dispose(); } } } }
private void BurnPoint(FireDamagePoint firePoint) { ParticleSystem particleSystem = PoolManager.Pools["Particles"].Spawn(this.FireParticleSystem, base.transform.TransformPoint(firePoint.Position), Quaternion.identity); if (particleSystem != null) { firePoint.isBurning = true; firePoint.particleSystem = particleSystem.GetComponent<FireParticle>(); firePoint.particleSystem.MyFuel = this.MyFuel; firePoint.particleSystem.Parent = this; if (this.flareUpParameter != null) { UnityUtil.ERRCHECK(this.flareUpParameter.setValue(1f)); UnityUtil.ERRCHECK(this.flareUpParameter.setValue(0f)); } } }