public void Tick(Pawn pawn) { if (effecter == null) { effecter = def.Spawn(); } effecter.EffectTick(pawn, null); }
private static void TriggerEffecter() { List <DebugMenuOption> list = new List <DebugMenuOption>(); List <EffecterDef> allDefsListForReading = DefDatabase <EffecterDef> .AllDefsListForReading; for (int i = 0; i < allDefsListForReading.Count; i++) { EffecterDef localDef = allDefsListForReading[i]; list.Add(new DebugMenuOption(localDef.defName, DebugMenuOptionMode.Tool, delegate { Effecter effecter = localDef.Spawn(); effecter.Trigger(new TargetInfo(UI.MouseCell(), Find.CurrentMap), new TargetInfo(UI.MouseCell(), Find.CurrentMap)); effecter.Cleanup(); })); } Find.WindowStack.Add(new Dialog_DebugOptionListLister(list)); }
private DamageResult ApplyToPawn(DamageInfo dinfo, Pawn pawn) { DamageResult damageResult = new DamageResult(); if (dinfo.Amount <= 0f) { return(damageResult); } if (!DebugSettings.enablePlayerDamage && pawn.Faction == Faction.OfPlayer) { return(damageResult); } Map mapHeld = pawn.MapHeld; bool spawnedOrAnyParentSpawned = pawn.SpawnedOrAnyParentSpawned; if (dinfo.AllowDamagePropagation && dinfo.Amount >= (float)dinfo.Def.minDamageToFragment) { int num = Rand.RangeInclusive(2, 4); for (int i = 0; i < num; i++) { DamageInfo dinfo2 = dinfo; dinfo2.SetAmount(dinfo.Amount / (float)num); ApplyDamageToPart(dinfo2, pawn, damageResult); } } else { ApplyDamageToPart(dinfo, pawn, damageResult); ApplySmallPawnDamagePropagation(dinfo, pawn, damageResult); } if (damageResult.wounded) { PlayWoundedVoiceSound(dinfo, pawn); pawn.Drawer.Notify_DamageApplied(dinfo); } if (damageResult.headshot && pawn.Spawned) { IntVec3 position = pawn.Position; float x = (float)position.x + 1f; IntVec3 position2 = pawn.Position; float y = (float)position2.y; IntVec3 position3 = pawn.Position; MoteMaker.ThrowText(new Vector3(x, y, (float)position3.z + 1f), pawn.Map, "Headshot".Translate(), Color.white); if (dinfo.Instigator != null) { (dinfo.Instigator as Pawn)?.records.Increment(RecordDefOf.Headshots); } } if ((damageResult.deflected || damageResult.diminished) && spawnedOrAnyParentSpawned) { EffecterDef effecterDef = damageResult.deflected ? ((damageResult.deflectedByMetalArmor && dinfo.Def.canUseDeflectMetalEffect) ? ((dinfo.Def != DamageDefOf.Bullet) ? EffecterDefOf.Deflect_Metal : EffecterDefOf.Deflect_Metal_Bullet) : ((dinfo.Def != DamageDefOf.Bullet) ? EffecterDefOf.Deflect_General : EffecterDefOf.Deflect_General_Bullet)) : ((!damageResult.diminishedByMetalArmor) ? EffecterDefOf.DamageDiminished_General : EffecterDefOf.DamageDiminished_Metal); if (pawn.health.deflectionEffecter == null || pawn.health.deflectionEffecter.def != effecterDef) { if (pawn.health.deflectionEffecter != null) { pawn.health.deflectionEffecter.Cleanup(); pawn.health.deflectionEffecter = null; } pawn.health.deflectionEffecter = effecterDef.Spawn(); } pawn.health.deflectionEffecter.Trigger(pawn, dinfo.Instigator ?? pawn); if (damageResult.deflected) { pawn.Drawer.Notify_DamageDeflected(dinfo); } } if (!damageResult.deflected && spawnedOrAnyParentSpawned) { ImpactSoundUtility.PlayImpactSound(pawn, dinfo.Def.impactSoundType, mapHeld); } return(damageResult); }