public override void UsedThisTick() { base.UsedThisTick(); lastUsedTick = Find.TickManager.TicksGame; if (effecter == null) { EffecterDef effecterDef = DefDatabase <EffecterDef> .GetNamedSilentFail("Drill"); if (effecterDef == null) { return; } effecter = effecterDef.Spawn(); } else { effecter.EffectTick(this, this); } if (Find.TickManager.TicksGame % FilthRate == 0) { FilthMaker.MakeFilth(this.RandomAdjacentCell8Way(), MapHeld, FilthDef); } if (lastStartedTick + TicksUntilDamage < Find.TickManager.TicksGame) { lastStartedTick = Find.TickManager.TicksGame; Vein.TakeDamage(new DamageInfo(DamageDefOf.Crush, DamageRate)); } }
public override void Tick() { base.Tick(); ticksLeft--; if (ticksLeft <= 0) { this.Destroy(); } if (Spawned) { if (effecter == null) { EffecterDef progressBar = EffecterDefOf.ProgressBar; effecter = progressBar.Spawn(); } else { LocalTargetInfo target = this; if (this.Spawned) { effecter.EffectTick(this, TargetInfo.Invalid); } MoteProgressBar mote = ((SubEffecter_ProgressBar)effecter.children[0]).mote; if (mote != null) { float result = 1f - (float)(PawnGhost.ticksToDestroy - this.ticksLeft) / (float)PawnGhost.ticksToDestroy; mote.progress = Mathf.Clamp01(result); mote.offsetZ = -0.5f; } } } }
public static void DoEffecter(EffecterDef effecterDef, IntVec3 position, Map map) { Effecter effecter = effecterDef.Spawn(); effecter.Trigger(new TargetInfo(position, map, false), new TargetInfo(position, map, false)); effecter.Cleanup(); }
public static Toil WithEffect(this Toil toil, Func <EffecterDef> effecterDefGetter, Func <LocalTargetInfo> effectTargetGetter) { Effecter effecter = null; toil.AddPreTickAction(delegate { if (effecter == null) { EffecterDef effecterDef = effecterDefGetter(); if (effecterDef != null) { effecter = effecterDef.Spawn(); } } else { effecter.EffectTick(toil.actor, effectTargetGetter().ToTargetInfo(toil.actor.Map)); } }); toil.AddFinishAction(delegate { if (effecter != null) { effecter.Cleanup(); effecter = null; } }); return(toil); }
public override void CompPostTick(ref float severityAdjustment) { base.CompPostTick(ref severityAdjustment); if (Find.TickManager.TicksGame % 60 == 0) { //if (!werewolfFlagged && Pawn?.GetComp<CompWerewolf>() is CompWerewolf compWW && compWW.CurrentWerewolfForm != null) //{ // werewolfFlagged = true; // baseRageDuration = null; // rageRemaining = -999; //} if (Pawn.Spawned) { if (effecter == null) { EffecterDef progressBar = EffecterDefOf.ProgressBar; effecter = progressBar.Spawn(); } else { LocalTargetInfo target = Pawn; if (Pawn.Spawned) { effecter.EffectTick(Pawn, TargetInfo.Invalid); } MoteProgressBar mote = ((SubEffecter_ProgressBar)effecter.children[0]).mote; if (mote != null) { float result = 1f - (float)(this.BaseRageDuration() - this.RageRemaining) / (float)this.BaseRageDuration(); mote.progress = Mathf.Clamp01(result); mote.offsetZ = -1.0f; } } } if (RageRemaining < 0 || !Pawn.Spawned || (Pawn.GetComp <CompWerewolf>() is CompWerewolf ww && !ww.IsTransformed)) { this.effecter.Cleanup(); //Log.Message("Rage ended"); severityAdjustment = -999.99f; if (Pawn?.mindState?.mentalStateHandler?.CurState is MentalState_WerewolfFury fury) { fury.RecoverFromState(); } if (Pawn?.GetComp <CompWerewolf>() is CompWerewolf compWerewolf) { if (compWerewolf.CurrentWerewolfForm != null) { compWerewolf.TransformBack(); } } return; } RageRemaining--; } }
public void Tick(Pawn vehicle) { if (effecter == null) { effecter = def.Spawn(); } effecter.EffectTick(vehicle, null); }
public void TriggerEffect(EffecterDef effect, Vector3 position, Thing hitThing = null) { if (effect == null) { return; } var targetInfo = hitThing != null ? new TargetInfo(hitThing) : new TargetInfo(IntVec3.FromVector3(position), Map, false); if (hitThing != null) { effecter = effect.Spawn(hitThing, hitThing.Map); } else { effecter = effect.Spawn(); } effecter.Trigger(targetInfo, null); // effecter.Cleanup(); }
void TriggerEffect(EffecterDef effect, Vector3 position) { if (effect == null) { return; } var targetInfo = new TargetInfo(IntVec3.FromVector3(position), Map, false); Effecter effecter = effect.Spawn(); effecter.offset = position - targetInfo.CenterVector3; effecter.Trigger(targetInfo, targetInfo); effecter.Cleanup(); }
void TriggerEffect(EffecterDef effect, IntVec3 dest) { if (effect == null) { return; } var targetInfo = new TargetInfo(dest, Map, false); Effecter effecter = effect.Spawn(); effecter.Trigger(targetInfo, targetInfo); effecter.Cleanup(); }
public void TriggerEffect(EffecterDef effect, Vector3 position, Thing hitThing = null) { if (effect == null) { return; } var targetInfo = hitThing ?? new TargetInfo(IntVec3.FromVector3(position), launcher.Map, false); effecter = effect.Spawn(); effecter.offset = (position - targetInfo.CenterVector3); effecter.ticksLeft = this.projDef.effecterLifetime; effecter.Trigger(targetInfo, null); // effecter.Cleanup(); }
// Token: 0x06003BF5 RID: 15349 RVA: 0x001C4174 File Offset: 0x001C2574 public static Toil NPCWithProgressBar(this Toil toil, TargetIndex ind, Func <float> progressGetter, bool interpolateBetweenActorAndTarget = false, float offsetZ = -0.5f) { Effecter effecter = null; toil.AddPreTickAction(delegate { /* * if (toil.actor.Faction != Faction.OfPlayer) * { * return; * } */ if (effecter == null) { EffecterDef progressBar = EffecterDefOf.ProgressBar; effecter = progressBar.Spawn(); } else { LocalTargetInfo target = toil.actor.CurJob.GetTarget(ind); if (!target.IsValid || (target.HasThing && !target.Thing.Spawned)) { effecter.EffectTick(toil.actor, TargetInfo.Invalid); } else if (interpolateBetweenActorAndTarget) { effecter.EffectTick(toil.actor.CurJob.GetTarget(ind).ToTargetInfo(toil.actor.Map), toil.actor); } else { effecter.EffectTick(toil.actor.CurJob.GetTarget(ind).ToTargetInfo(toil.actor.Map), TargetInfo.Invalid); } MoteProgressBar mote = ((SubEffecter_ProgressBar)effecter.children[0]).mote; if (mote != null) { mote.progress = Mathf.Clamp01(progressGetter()); mote.offsetZ = offsetZ; } } }); toil.AddFinishAction(delegate { if (effecter != null) { effecter.Cleanup(); effecter = null; } }); return(toil); }
public void StartRefreshing(Pawn pawn, LocalTargetInfo targetInfo) { //if (pawn.ThingID != this.PodOwnerId) if (this.PodOwner != pawn) { return; } this.SaveNeeds(pawn.needs.AllNeeds); pawn.DeSpawn(DestroyMode.Vanish); if (this.TryAcceptThing(pawn)) { this.CurrentTicksLeft = this.CurrentMaxTicks = this.TotalTicksPerAction; this.JobState = PS_Conditioning_JobState.Refreshing; EffecterDef progressBar = EffecterDefOf.ProgressBar; ProgressBarEffector = progressBar.Spawn(); ProgressBarEffector.EffectTick(targetInfo.ToTargetInfo(this.Map), TargetInfo.Invalid); } }
public void StartFixingBotched(Pawn pawn) { //if (pawn.ThingID != this.PodOwnerId) if (PodOwner != null && PodOwner != pawn) { return; } SaveNeeds(pawn.needs.AllNeeds); pawn.DeSpawn(DestroyMode.Vanish); if (TryAcceptThing(pawn)) { CurrentTicksLeft = CurrentMaxTicks = TicksPerDay; JobState = PS_Conditioning_JobState.FixingBotch; EffecterDef progressBar = EffecterDefOf.ProgressBar; ProgressBarEffector = progressBar.Spawn(); var target = new TargetInfo(this); ProgressBarEffector.EffectTick(target, TargetInfo.Invalid); } }
public void StartDeconditioning(Pawn pawn, PS_Conditioning_Data conData) { //if (pawn.ThingID != this.PodOwnerId) if (this.PodOwner != pawn) { return; } this.SaveNeeds(pawn.needs.AllNeeds); pawn.DeSpawn(DestroyMode.Vanish); if (this.TryAcceptThing(pawn)) { this.CurrentMaxTicks = this.TicksPerDay; this.CurrentTicksLeft = CurrentMaxTicks; this.JobState = PS_Conditioning_JobState.Deconditioning; this.ConditioningData = conData; EffecterDef progressBar = EffecterDefOf.ProgressBar; ProgressBarEffector = progressBar.Spawn(); var target = new TargetInfo(this); ProgressBarEffector.EffectTick(target, TargetInfo.Invalid); } }
public override void CompTick() { base.CompTick(); if (Coolingdown) { cooldownTicksRemaining -= 1; } if (!Coolingdown) { if (progressBar != null) { progressBar.Cleanup(); progressBar = null; } } else { if (progressBar == null) { EffecterDef progressBarDef = MeeseeksDefOf.CM_Meeseeks_Box_Effecter_Progress_Bar; progressBar = progressBarDef.Spawn(); } else { progressBar.EffectTick(this.parent, TargetInfo.Invalid); MoteProgressBar_Colored mote = ((SubEffecter_ProgressBar_Colored)progressBar.children[0]).mote; if (mote != null) { mote.SetFilledColor(new Color(0.95f, 0.10f, 0.15f)); mote.progress = Mathf.Clamp01(((float)cooldownTicksRemaining / cooldownTicksTotal)); mote.offsetZ = -0.5f; } } } }
public void StartReconditioning(Pawn pawn, PS_Conditioning_Data conData) { if (this.PodOwner != null && this.PodOwner != pawn)//!string.IsNullOrEmpty(this.PodOwnerId) && pawn.ThingID != this.PodOwnerId) { Log.Error("PS_Buildings_ReconPod: Tried to start conditioning on a pawn that was not the owner"); return; } this.SaveNeeds(pawn.needs.AllNeeds); pawn.DeSpawn(DestroyMode.Vanish); if (this.TryAcceptThing(pawn)) { this.ConditioningData = conData; this.CurrentMaxTicks = PS_ConditioningHelper.DaysToCondition(pawn) * this.TicksPerDay; this.CurrentTicksLeft = CurrentMaxTicks; this.JobState = PS_Conditioning_JobState.Reconditioning; this.TryAssignPawn(pawn); EffecterDef progressBar = EffecterDefOf.ProgressBar; ProgressBarEffector = progressBar.Spawn(); var target = new TargetInfo(this); ProgressBarEffector.EffectTick(target, TargetInfo.Invalid); } }
public override void Tick() { base.Tick(); if (this.pawn == null && this.pawn?.Corpse?.InnerPawn == null) { return; } if (this.sustainer != null && !this.sustainer.Ended) { this.sustainer.Maintain(); } else { //LongEventHandler.ExecuteWhenFinished(delegate //{ SoundDef def = SoundDef.Named("FireBurning"); SoundInfo info = SoundInfo.InMap(new TargetInfo(this.pawn.Position, this.pawn.Map, false), MaintenanceType.PerTick); info.volumeFactor *= 2; //this.sustainer = def.TrySpawnSustainer(info); //SustainerAggregatorUtility.AggregateOrSpawnSustainerFor(this, def, info); this.sustainer = SustainerAggregatorUtility.AggregateOrSpawnSustainerFor(this, def, info); //}); } if (sunBurningEffect != null) { sunBurningEffect.EffectTick(this.pawn, this.pawn); if (Find.TickManager.TicksGame % 20 == 0) { if (this.CurStageIndex > 1 && Rand.Value > 0.5f) { MoteMaker.ThrowSmoke(this.pawn.DrawPos, this.pawn.Map, 1f); } if (this.CurStageIndex > 1 && Rand.Value < (this.CurStageIndex * 0.31f)) { MoteMaker.ThrowFireGlow(this.pawn.PositionHeld, this.pawn.Map, 1f); } } } if (Find.TickManager.TicksGame % checkRate == 0) { if (pawn?.PositionHeld is IntVec3 pos && pos != default(IntVec3) && pos.Roofed(pawn?.MapHeld ?? Find.VisibleMap) == false && VampireUtility.IsDaylight(pawn)) { if (sunBurningEffect == null) { EffecterDef effecterDef = EffecterDefOf.RoofWork; if (effecterDef != null) { sunBurningEffect = effecterDef.Spawn(); } } if (this.CurStageIndex > 1) { Burn(); } this.Severity += 0.017f; } else { curSunDamage = 5; this.Severity -= 0.2f; if (sunBurningEffect != null) { sunBurningEffect = null; } if (pawn?.MentalStateDef == VampDefOf.ROMV_Rotschreck) { pawn.MentalState.RecoverFromState(); } if (pawn?.CurJob?.def == VampDefOf.ROMV_DigAndHide) { pawn.jobs.StopAll(); } } }
public new DamageWorker.DamageResult ApplyToPawn(DamageInfo dinfo, Pawn pawn) { DamageWorker.DamageResult damageResult = new DamageWorker.DamageResult(); if (dinfo.Amount <= 0f) { return(damageResult); } if (!DebugSettings.enablePlayerDamage && pawn.Faction == Faction.OfPlayer) { return(damageResult); } dinfo.SetAmount((dinfo.Amount * pawn.def.race.baseHealthScale)); Map mapHeld = pawn.MapHeld; bool spawnedOrAnyParentSpawned = pawn.SpawnedOrAnyParentSpawned; if (dinfo.AllowDamagePropagation && dinfo.Amount >= (float)dinfo.Def.minDamageToFragment) { Rand.PushState(); int num = Rand.RangeInclusive(2, 4); Rand.PopState(); for (int i = 0; i < num; i++) { DamageInfo dinfo2 = dinfo; dinfo2.SetAmount(dinfo.Amount / (float)num); this.ApplyDamageToPart(dinfo2, pawn, damageResult); } } else { this.ApplyDamageToPart(dinfo, pawn, damageResult); this.ApplySmallPawnDamagePropagation(dinfo, pawn, damageResult); } if (damageResult.wounded) { DamageWorker_AddInjuryStrengthX.PlayWoundedVoiceSound(dinfo, pawn); pawn.Drawer.Notify_DamageApplied(dinfo); EffecterDef damageEffecter = pawn.RaceProps.FleshType.damageEffecter; if (damageEffecter != null) { if (pawn.health.woundedEffecter != null && pawn.health.woundedEffecter.def != damageEffecter) { pawn.health.woundedEffecter.Cleanup(); } pawn.health.woundedEffecter = damageEffecter.Spawn(); pawn.health.woundedEffecter.Trigger(pawn, dinfo.Instigator ?? pawn); } if (dinfo.Def.damageEffecter != null) { Effecter effecter = dinfo.Def.damageEffecter.Spawn(); effecter.Trigger(pawn, pawn); effecter.Cleanup(); } } if (damageResult.headshot && pawn.Spawned) { MoteMaker.ThrowText(new Vector3((float)pawn.Position.x + 1f, (float)pawn.Position.y, (float)pawn.Position.z + 1f), pawn.Map, "Headshot".Translate(), Color.white, -1f); if (dinfo.Instigator != null) { Pawn pawn2 = dinfo.Instigator as Pawn; if (pawn2 != null) { pawn2.records.Increment(RecordDefOf.Headshots); } } } if ((damageResult.deflected || damageResult.diminished) && spawnedOrAnyParentSpawned) { EffecterDef effecterDef; if (damageResult.deflected) { if (damageResult.deflectedByMetalArmor && dinfo.Def.canUseDeflectMetalEffect) { if (dinfo.Def == DamageDefOf.Bullet) { effecterDef = EffecterDefOf.Deflect_Metal_Bullet; } else { effecterDef = EffecterDefOf.Deflect_Metal; } } else if (dinfo.Def == DamageDefOf.Bullet) { effecterDef = EffecterDefOf.Deflect_General_Bullet; } else { effecterDef = EffecterDefOf.Deflect_General; } } else if (damageResult.diminishedByMetalArmor) { effecterDef = EffecterDefOf.DamageDiminished_Metal; } else { effecterDef = EffecterDefOf.DamageDiminished_General; } 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); }