Example #1
0
 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;
 }
Example #2
0
 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);
 }
Example #3
0
        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;
            }
        }
Example #4
0
        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();
        }