public override IEnumerable <Gizmo> GetGizmos() { foreach (Gizmo c in base.GetGizmos()) { yield return(c); } if (HasAnyContents) { Pawn pawn = ContainedThing as Pawn; if (pawn != null) { if (pawn.RaceProps.FleshType == FleshTypeDefOf.Normal || pawn.RaceProps.FleshType == FleshTypeDefOf.Insectoid) { if (state == ReactorState.Full) { yield return(new Command_Action { defaultLabel = "Histolysis".Translate(), defaultDesc = "HistolysisDesc".Translate(), icon = ContentFinder <Texture2D> .Get("UI/Commands/Histolysis", true), action = delegate() { BioReactorSoundDef.Drowning.PlayOneShot(new TargetInfo(base.Position, base.Map, false)); state = ReactorState.HistolysisStating; } }); } } } } yield break; }
public override bool TryAcceptThing(Thing thing, bool allowSpecialEffects = true) { if (base.TryAcceptThing(thing, allowSpecialEffects)) { if (allowSpecialEffects) { SoundDefOf.CryptosleepCasket_Accept.PlayOneShot(new TargetInfo(base.Position, base.Map, false)); } state = ReactorState.StartFilling; Pawn pawn = thing as Pawn; if (pawn != null && pawn.RaceProps.Humanlike) { pawn.needs.mood.thoughts.memories.TryGainMemory(BioReactorThoughtDef.LivingBattery, null); } return(true); } return(false); }
public override void Tick() { base.Tick(); switch (state) { case ReactorState.Empty: break; case ReactorState.StartFilling: fillpct += 0.01f; if (fillpct >= 1) { state = ReactorState.Full; fillpct = 0; BioReactorSoundDef.Drowning.PlayOneShot(new TargetInfo(base.Position, base.Map, false)); } break; case ReactorState.Full: break; case ReactorState.HistolysisStating: histolysisPct += 0.005f; if (histolysisPct >= 1) { state = ReactorState.HistolysisEnding; Histolysis(); } break; case ReactorState.HistolysisEnding: histolysisPct -= 0.01f; if (histolysisPct <= 0) { histolysisPct = 0; state = ReactorState.HistolysisDone; } break; case ReactorState.HistolysisDone: break; } }
public override void EjectContents() { ThingDef filth_Slime = ThingDefOf.Filth_Slime; foreach (Thing thing in ((IEnumerable <Thing>) this.innerContainer)) { Pawn pawn = thing as Pawn; if (pawn != null) { PawnComponentsUtility.AddComponentsForSpawn(pawn); pawn.filth.GainFilth(filth_Slime); if (pawn.RaceProps.IsFlesh) { pawn.health.AddHediff(HediffDefOf.CryptosleepSickness, null, null, null); } } } if (!base.Destroyed) { SoundDefOf.CryptosleepCasket_Eject.PlayOneShot(SoundInfo.InMap(new TargetInfo(base.Position, base.Map, false), MaintenanceType.None)); } state = ReactorState.Empty; base.EjectContents(); }