public virtual void ExplosionAffectCell(Explosion explosion, IntVec3 c, List <Thing> damagedThings, bool canThrowMotes) { if (this.def.explosionCellMote != null && canThrowMotes) { float t = Mathf.Clamp01((explosion.Position - c).LengthHorizontal / explosion.radius); Color color = Color.Lerp(this.def.explosionColorCenter, this.def.explosionColorEdge, t); MoteMaker.ThrowExplosionCell(c, explosion.Map, this.def.explosionCellMote, color); } DamageWorker.thingsToAffect.Clear(); float num = float.MinValue; bool flag = false; List <Thing> list = explosion.Map.thingGrid.ThingsListAt(c); for (int i = 0; i < list.Count; i++) { Thing thing = list[i]; if (thing.def.category != ThingCategory.Mote && thing.def.category != ThingCategory.Ethereal) { DamageWorker.thingsToAffect.Add(thing); if (thing.def.Fillage == FillCategory.Full && thing.def.Altitude > num) { flag = true; num = thing.def.Altitude; } } } for (int j = 0; j < DamageWorker.thingsToAffect.Count; j++) { if (DamageWorker.thingsToAffect[j].def.Altitude >= num) { this.defaultDamageThing(explosion, DamageWorker.thingsToAffect[j], damagedThings, c); } } if (!flag) { this.defaultDamageTerrain(explosion, c); } if (this.def.explosionSnowMeltAmount > 0.0001f) { float lengthHorizontal = (c - explosion.Position).LengthHorizontal; float num2 = 1f - lengthHorizontal / explosion.radius; if (num2 > 0f) { explosion.Map.snowGrid.AddDepth(c, -num2 * this.def.explosionSnowMeltAmount); } } if (this.def == DamageDefOf.Bomb || this.def == DamageDefOf.Flame) { List <Thing> list2 = explosion.Map.listerThings.ThingsOfDef(ThingDefOf.RectTrigger); for (int k = 0; k < list2.Count; k++) { RectTrigger rectTrigger = (RectTrigger)list2[k]; if (rectTrigger.activateOnExplosion && rectTrigger.Rect.Contains(c)) { rectTrigger.ActivatedBy(null); } } } }
public virtual void ExplosionAffectCell(Explosion explosion, IntVec3 c, List <Thing> damagedThings, bool canThrowMotes) { if (c.InBounds(explosion.Map)) { if (this.def.explosionCellMote != null && canThrowMotes) { float t = Mathf.Clamp01((explosion.Position - c).LengthHorizontal / explosion.radius); Color color = Color.Lerp(this.def.explosionColorCenter, this.def.explosionColorEdge, t); MoteMaker.ThrowExplosionCell(c, explosion.Map, this.def.explosionCellMote, color); } List <Thing> list = explosion.Map.thingGrid.ThingsListAt(c); DamageWorker.thingsToAffect.Clear(); float num = -3.40282347E+38f; for (int i = 0; i < list.Count; i++) { Thing thing = list[i]; DamageWorker.thingsToAffect.Add(thing); if (thing.def.Fillage == FillCategory.Full && thing.def.Altitude > num) { num = thing.def.Altitude; } } for (int j = 0; j < DamageWorker.thingsToAffect.Count; j++) { if (DamageWorker.thingsToAffect[j].def.Altitude >= num) { this.ExplosionDamageThing(explosion, DamageWorker.thingsToAffect[j], damagedThings, c); } } if (this.def.explosionSnowMeltAmount > 9.9999997473787516E-05) { float lengthHorizontal = (c - explosion.Position).LengthHorizontal; float num2 = (float)(1.0 - lengthHorizontal / explosion.radius); if (num2 > 0.0) { explosion.Map.snowGrid.AddDepth(c, (float)((0.0 - num2) * this.def.explosionSnowMeltAmount)); } } if (this.def != DamageDefOf.Bomb && this.def != DamageDefOf.Flame) { return; } List <Thing> list2 = explosion.Map.listerThings.ThingsOfDef(ThingDefOf.RectTrigger); for (int k = 0; k < list2.Count; k++) { RectTrigger rectTrigger = (RectTrigger)list2[k]; if (rectTrigger.activateOnExplosion && rectTrigger.Rect.Contains(c)) { rectTrigger.ActivatedBy(null); } } } }