public override void PreApplyDamage(ref DamageInfo dinfo, out bool absorbed) { base.PreApplyDamage(ref dinfo, out absorbed); if (!absorbed) { stunner.Notify_DamageApplied(dinfo, affectedByEMP: true); absorbed = false; } }
private void BreakShield(DamageInfo dinfo) { float fTheta; if (Active) { SoundDefOf.EnergyShield_Broken.PlayOneShot(new TargetInfo(parent)); int num = Mathf.CeilToInt(Props.radius * 2f); fTheta = (float)Math.PI * 2f / (float)num; for (int i = 0; i < num; i++) { MoteMaker.MakeConnectingLine(PosAtIndex(i), PosAtIndex((i + 1) % num), ThingDefOf.Mote_LineEMP, parent.Map, 1.5f); } } dinfo.SetAmount((float)Props.disarmedByEmpForTicks / 30f); stunner.Notify_DamageApplied(dinfo, affectedByEMP: true); Vector3 PosAtIndex(int index) { return(new Vector3(Props.radius * Mathf.Cos(fTheta * (float)index) + (float)parent.Position.x, 0f, Props.radius * Mathf.Sin(fTheta * (float)index) + (float)parent.Position.z)); } }