public Effecter(EffecterDef def) { this.def = def; for (int i = 0; i < def.children.Count; i++) { children.Add(def.children[i].Spawn(this)); } }
private void AddOrMaintain(EffecterDef def) { for (int i = 0; i < this.pairs.Count; i++) { if (this.pairs[i].def == def) { this.pairs[i].Maintain(); return; } } PawnStatusEffecters.LiveEffecter liveEffecter = FullPool <PawnStatusEffecters.LiveEffecter> .Get(); liveEffecter.def = def; liveEffecter.Maintain(); this.pairs.Add(liveEffecter); }
private void AddOrMaintain(EffecterDef def) { for (int i = 0; i < pairs.Count; i++) { if (pairs[i].def == def) { pairs[i].Maintain(); return; } } LiveEffecter liveEffecter = FullPool <LiveEffecter> .Get(); liveEffecter.def = def; liveEffecter.Maintain(); pairs.Add(liveEffecter); }
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)); }
public void EffectersTick() { List <Hediff> hediffs = this.pawn.health.hediffSet.hediffs; for (int i = 0; i < hediffs.Count; i++) { HediffComp_Effecter hediffComp_Effecter = hediffs[i].TryGetComp <HediffComp_Effecter>(); if (hediffComp_Effecter != null) { EffecterDef effecterDef = hediffComp_Effecter.CurrentStateEffecter(); if (effecterDef != null) { this.AddOrMaintain(effecterDef); } } } if (this.pawn.mindState.mentalStateHandler.CurState != null) { EffecterDef effecterDef2 = this.pawn.mindState.mentalStateHandler.CurState.CurrentStateEffecter(); if (effecterDef2 != null) { this.AddOrMaintain(effecterDef2); } } for (int j = this.pairs.Count - 1; j >= 0; j--) { if (this.pairs[j].Expired) { this.pairs[j].Cleanup(); this.pairs.RemoveAt(j); } else { this.pairs[j].Tick(this.pawn); } } }
public void EffectersTick() { List <Hediff> hediffs = pawn.health.hediffSet.hediffs; for (int i = 0; i < hediffs.Count; i++) { HediffComp_Effecter hediffComp_Effecter = hediffs[i].TryGetComp <HediffComp_Effecter>(); if (hediffComp_Effecter != null) { EffecterDef effecterDef = hediffComp_Effecter.CurrentStateEffecter(); if (effecterDef != null) { AddOrMaintain(effecterDef); } } } if (pawn.mindState.mentalStateHandler.CurState != null) { EffecterDef effecterDef2 = pawn.mindState.mentalStateHandler.CurState.CurrentStateEffecter(); if (effecterDef2 != null) { AddOrMaintain(effecterDef2); } } for (int num = pairs.Count - 1; num >= 0; num--) { if (pairs[num].Expired) { pairs[num].Cleanup(); pairs.RemoveAt(num); } else { pairs[num].Tick(pawn); } } }
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); }
public void Reset() { this.def = null; this.effecter = null; this.lastMaintainTick = -1; }
public void Reset() { def = null; effecter = null; lastMaintainTick = -1; }