public void FinishPowerRerouting() { this.SetFaction(Faction.OfColony); string eventText = " You have successfully rerouted the power network of the mechanoid terraformer.\n\n" + "Remember that you need some batteries to stock the brief surges of energy generated by the thunderstorms."; Find.LetterStack.ReceiveLetter("Rerouting", eventText, LetterType.Good, this.Position); this.reverseEngineeringState = Building_MechanoidTerraformer.ReverseEngineeringState.PowerRerouted; }
// ===================== Initialization and save/load functions ===================== public override void SpawnSetup() { base.SpawnSetup(); // Case where this is not the first terraformer to land. if (Building_MechanoidTerraformer.studyIsCompleted && (this.reverseEngineeringState == ReverseEngineeringState.BuildingNotApproched)) { this.reverseEngineeringState = ReverseEngineeringState.StudyCompleted; } // Pylons initialization. GetPylonsPositions(); // Components initialization. this.powerComp = base.GetComp <CompPowerTrader>(); // Drawing and icons. generatorTexture = MaterialPool.MatFrom("Things/Building/Generator", ShaderDatabase.Transparent); displayStudyReportIcon = ContentFinder <Texture2D> .Get("Ui/Commands/CommandButton_DisplayStudyReport"); }
public override IEnumerable<FloatMenuOption> GetFloatMenuOptions(Pawn pawn) { List<FloatMenuOption> list = new List<FloatMenuOption>(); if (pawn.Dead || pawn.Downed || pawn.IsBurning()) { FloatMenuOption item = new FloatMenuOption("Cannot use (incapacitated)", null); yield return item; yield break; } if (pawn.CanReserve(this) == false) { FloatMenuOption item = new FloatMenuOption("Cannot use (reserved)", null); yield return item; yield break; } else if (pawn.CanReach(this, PathEndMode.ClosestTouch, Danger.Some) == false) { FloatMenuOption item = new FloatMenuOption("Cannot use (no path)", null); yield return item; yield break; } else { switch (this.reverseEngineeringState) { case ReverseEngineeringState.BuildingNotApproched: Action action = delegate { Job job = new Job(DefDatabase<JobDef>.GetNamed(Util_MechanoidTerraformer.JobDefName_ScoutStrangeArtifact), this); pawn.drafter.TakeOrderedJob(job); }; FloatMenuOption item = new FloatMenuOption("Scout strange artifact", action); yield return item; break; case ReverseEngineeringState.BuildingNotSecured: Action action2 = delegate { Job job = new Job(DefDatabase<JobDef>.GetNamed(Util_MechanoidTerraformer.JobDefName_SecureStrangeArtifact), this); pawn.drafter.TakeOrderedJob(job); }; FloatMenuOption item2 = new FloatMenuOption("Secure strange artifact", action2); yield return item2; break; case ReverseEngineeringState.Studying: if (pawn.drafter.Drafted) { yield break; } if (this.studyIsPaused) { Action action3 = delegate { this.studyIsPaused = false; if ((pawn.skills.GetSkill(SkillDefOf.Research).TotallyDisabled == false) && (pawn.skills.GetSkill(SkillDefOf.Research).level >= minResearchLevelToStudyArtifact)) { Job job = new Job(DefDatabase<JobDef>.GetNamed(Util_MechanoidTerraformer.JobDefName_StudyStrangeArtifact), this); pawn.drafter.TakeOrderedJob(job); } else { Messages.Message(pawn.Name.ToStringShort + " is not skilled enough to study the strange artifact (research level " + minResearchLevelToStudyArtifact + " is required).", MessageSound.RejectInput); pawn.jobs.StopAll(true); } }; FloatMenuOption item3 = new FloatMenuOption("Start study", action3); yield return item3; } else { Action action4 = delegate { this.studyIsPaused = true; pawn.jobs.StopAll(true); }; FloatMenuOption item4 = new FloatMenuOption("Pause study", action4); yield return item4; } break; case ReverseEngineeringState.StudyCompleted: if (pawn.drafter.Drafted) { yield break; } Action action5 = delegate { this.reroutingIsPaused = false; this.reverseEngineeringState = ReverseEngineeringState.ReroutingPower; if ((pawn.skills.GetSkill(SkillDefOf.Research).TotallyDisabled == false) && (pawn.skills.GetSkill(SkillDefOf.Research).level >= minResearchLevelToReroutePower)) { Job job = new Job(DefDatabase<JobDef>.GetNamed(Util_MechanoidTerraformer.JobDefName_ReroutePower), this); pawn.drafter.TakeOrderedJob(job); } else { Messages.Message(pawn.Name.ToStringShort + " is not skilled enough to reroute the terraformer power network (research level " + minResearchLevelToReroutePower + " is required).", MessageSound.RejectInput); pawn.jobs.StopAll(true); } }; FloatMenuOption item5 = new FloatMenuOption("1) Reroute power network OR", action5); yield return item5; Action action6 = delegate { this.extractionIsPaused = false; this.reverseEngineeringState = ReverseEngineeringState.ExtractingWeatherController; if ((pawn.skills.GetSkill(SkillDefOf.Research).TotallyDisabled == false) && (pawn.skills.GetSkill(SkillDefOf.Research).level >= minResearchLevelToExtractWeatherController)) { Job job = new Job(DefDatabase<JobDef>.GetNamed(Util_MechanoidTerraformer.JobDefName_ExtractWeatherController), this); pawn.drafter.TakeOrderedJob(job); } else { Messages.Message(pawn.Name.ToStringShort + " is not skilled enough to extract the terraformer weather controller (research level " + minResearchLevelToExtractWeatherController + " is required).", MessageSound.RejectInput); pawn.jobs.StopAll(true); } }; FloatMenuOption item6 = new FloatMenuOption("2) Extract weather controller", action6); yield return item6; break; case ReverseEngineeringState.ReroutingPower: if (pawn.drafter.Drafted) { yield break; } if (this.reroutingIsPaused) { Action action7 = delegate { this.reroutingIsPaused = false; if ((pawn.skills.GetSkill(SkillDefOf.Research).TotallyDisabled == false) && (pawn.skills.GetSkill(SkillDefOf.Research).level >= minResearchLevelToReroutePower)) { Job job = new Job(DefDatabase<JobDef>.GetNamed(Util_MechanoidTerraformer.JobDefName_ReroutePower), this); pawn.drafter.TakeOrderedJob(job); } else { Messages.Message(pawn.Name.ToStringShort + " is not skilled enough to reroute the terraformer power network (research level " + minResearchLevelToReroutePower + " is required).", MessageSound.RejectInput); pawn.jobs.StopAll(true); } }; FloatMenuOption item7 = new FloatMenuOption("Reroute power network", action7); yield return item7; } else { Action action8 = delegate { this.reroutingIsPaused = true; pawn.jobs.StopAll(true); }; FloatMenuOption item8 = new FloatMenuOption("Pause power rerouting", action8); yield return item8; } break; case ReverseEngineeringState.ExtractingWeatherController: if (pawn.drafter.Drafted) { yield break; } if (this.extractionIsPaused) { Action action9 = delegate { this.extractionIsPaused = false; if ((pawn.skills.GetSkill(SkillDefOf.Research).TotallyDisabled == false) && (pawn.skills.GetSkill(SkillDefOf.Research).level >= minResearchLevelToExtractWeatherController)) { Job job = new Job(DefDatabase<JobDef>.GetNamed(Util_MechanoidTerraformer.JobDefName_ReroutePower), this); pawn.drafter.TakeOrderedJob(job); } else { Messages.Message(pawn.Name.ToStringShort + " is not skilled enough to extract the terraformer weather controller (research level " + minResearchLevelToExtractWeatherController + " is required).", MessageSound.RejectInput); pawn.jobs.StopAll(true); } }; FloatMenuOption item9 = new FloatMenuOption("Extract weather controller", action9); yield return item9; } else { Action action10 = delegate { this.extractionIsPaused = true; pawn.jobs.StopAll(true); }; FloatMenuOption item10 = new FloatMenuOption("Pause weather controller extraction", action10); yield return item10; } break; } if ((this.reverseEngineeringState >= ReverseEngineeringState.StudyCompleted) && (this.invasionIsDone == false)) { Action action11 = delegate { Job job = new Job(DefDatabase<JobDef>.GetNamed(Util_MechanoidTerraformer.JobDefName_DisableBeacon), this); pawn.drafter.TakeOrderedJob(job); }; FloatMenuOption item11 = new FloatMenuOption("Disable beacon", action11); yield return item11; } } yield break; }
// ===================== Initialization and save/load functions ===================== public override void SpawnSetup() { base.SpawnSetup(); // Case where this is not the first terraformer to land. if (Building_MechanoidTerraformer.studyIsCompleted && (this.reverseEngineeringState == ReverseEngineeringState.BuildingNotApproched)) { this.reverseEngineeringState = ReverseEngineeringState.StudyCompleted; } // Pylons initialization. GetPylonsPositions(); // Components initialization. this.powerComp = base.GetComp<CompPowerTrader>(); // Drawing and icons. generatorTexture = MaterialPool.MatFrom("Things/Building/Generator", ShaderDatabase.Transparent); displayStudyReportIcon = ContentFinder<Texture2D>.Get("Ui/Commands/CommandButton_DisplayStudyReport"); }
public override IEnumerable <FloatMenuOption> GetFloatMenuOptions(Pawn pawn) { List <FloatMenuOption> list = new List <FloatMenuOption>(); if (pawn.Dead || pawn.Downed || pawn.IsBurning()) { FloatMenuOption item = new FloatMenuOption("Cannot use (incapacitated)", null); yield return(item); yield break; } if (pawn.CanReserve(this) == false) { FloatMenuOption item = new FloatMenuOption("Cannot use (reserved)", null); yield return(item); yield break; } else if (pawn.CanReach(this, PathEndMode.ClosestTouch, Danger.Some) == false) { FloatMenuOption item = new FloatMenuOption("Cannot use (no path)", null); yield return(item); yield break; } else { switch (this.reverseEngineeringState) { case ReverseEngineeringState.BuildingNotApproched: Action action = delegate { Job job = new Job(DefDatabase <JobDef> .GetNamed(Util_MechanoidTerraformer.JobDefName_ScoutStrangeArtifact), this); pawn.drafter.TakeOrderedJob(job); }; FloatMenuOption item = new FloatMenuOption("Scout strange artifact", action); yield return(item); break; case ReverseEngineeringState.BuildingNotSecured: Action action2 = delegate { Job job = new Job(DefDatabase <JobDef> .GetNamed(Util_MechanoidTerraformer.JobDefName_SecureStrangeArtifact), this); pawn.drafter.TakeOrderedJob(job); }; FloatMenuOption item2 = new FloatMenuOption("Secure strange artifact", action2); yield return(item2); break; case ReverseEngineeringState.Studying: if (pawn.drafter.Drafted) { yield break; } if (this.studyIsPaused) { Action action3 = delegate { this.studyIsPaused = false; if ((pawn.skills.GetSkill(SkillDefOf.Research).TotallyDisabled == false) && (pawn.skills.GetSkill(SkillDefOf.Research).level >= minResearchLevelToStudyArtifact)) { Job job = new Job(DefDatabase <JobDef> .GetNamed(Util_MechanoidTerraformer.JobDefName_StudyStrangeArtifact), this); pawn.drafter.TakeOrderedJob(job); } else { Messages.Message(pawn.Name.ToStringShort + " is not skilled enough to study the strange artifact (research level " + minResearchLevelToStudyArtifact + " is required).", MessageSound.RejectInput); pawn.jobs.StopAll(true); } }; FloatMenuOption item3 = new FloatMenuOption("Start study", action3); yield return(item3); } else { Action action4 = delegate { this.studyIsPaused = true; pawn.jobs.StopAll(true); }; FloatMenuOption item4 = new FloatMenuOption("Pause study", action4); yield return(item4); } break; case ReverseEngineeringState.StudyCompleted: if (pawn.drafter.Drafted) { yield break; } Action action5 = delegate { this.reroutingIsPaused = false; this.reverseEngineeringState = ReverseEngineeringState.ReroutingPower; if ((pawn.skills.GetSkill(SkillDefOf.Research).TotallyDisabled == false) && (pawn.skills.GetSkill(SkillDefOf.Research).level >= minResearchLevelToReroutePower)) { Job job = new Job(DefDatabase <JobDef> .GetNamed(Util_MechanoidTerraformer.JobDefName_ReroutePower), this); pawn.drafter.TakeOrderedJob(job); } else { Messages.Message(pawn.Name.ToStringShort + " is not skilled enough to reroute the terraformer power network (research level " + minResearchLevelToReroutePower + " is required).", MessageSound.RejectInput); pawn.jobs.StopAll(true); } }; FloatMenuOption item5 = new FloatMenuOption("1) Reroute power network OR", action5); yield return(item5); Action action6 = delegate { this.extractionIsPaused = false; this.reverseEngineeringState = ReverseEngineeringState.ExtractingWeatherController; if ((pawn.skills.GetSkill(SkillDefOf.Research).TotallyDisabled == false) && (pawn.skills.GetSkill(SkillDefOf.Research).level >= minResearchLevelToExtractWeatherController)) { Job job = new Job(DefDatabase <JobDef> .GetNamed(Util_MechanoidTerraformer.JobDefName_ExtractWeatherController), this); pawn.drafter.TakeOrderedJob(job); } else { Messages.Message(pawn.Name.ToStringShort + " is not skilled enough to extract the terraformer weather controller (research level " + minResearchLevelToExtractWeatherController + " is required).", MessageSound.RejectInput); pawn.jobs.StopAll(true); } }; FloatMenuOption item6 = new FloatMenuOption("2) Extract weather controller", action6); yield return(item6); break; case ReverseEngineeringState.ReroutingPower: if (pawn.drafter.Drafted) { yield break; } if (this.reroutingIsPaused) { Action action7 = delegate { this.reroutingIsPaused = false; if ((pawn.skills.GetSkill(SkillDefOf.Research).TotallyDisabled == false) && (pawn.skills.GetSkill(SkillDefOf.Research).level >= minResearchLevelToReroutePower)) { Job job = new Job(DefDatabase <JobDef> .GetNamed(Util_MechanoidTerraformer.JobDefName_ReroutePower), this); pawn.drafter.TakeOrderedJob(job); } else { Messages.Message(pawn.Name.ToStringShort + " is not skilled enough to reroute the terraformer power network (research level " + minResearchLevelToReroutePower + " is required).", MessageSound.RejectInput); pawn.jobs.StopAll(true); } }; FloatMenuOption item7 = new FloatMenuOption("Reroute power network", action7); yield return(item7); } else { Action action8 = delegate { this.reroutingIsPaused = true; pawn.jobs.StopAll(true); }; FloatMenuOption item8 = new FloatMenuOption("Pause power rerouting", action8); yield return(item8); } break; case ReverseEngineeringState.ExtractingWeatherController: if (pawn.drafter.Drafted) { yield break; } if (this.extractionIsPaused) { Action action9 = delegate { this.extractionIsPaused = false; if ((pawn.skills.GetSkill(SkillDefOf.Research).TotallyDisabled == false) && (pawn.skills.GetSkill(SkillDefOf.Research).level >= minResearchLevelToExtractWeatherController)) { Job job = new Job(DefDatabase <JobDef> .GetNamed(Util_MechanoidTerraformer.JobDefName_ReroutePower), this); pawn.drafter.TakeOrderedJob(job); } else { Messages.Message(pawn.Name.ToStringShort + " is not skilled enough to extract the terraformer weather controller (research level " + minResearchLevelToExtractWeatherController + " is required).", MessageSound.RejectInput); pawn.jobs.StopAll(true); } }; FloatMenuOption item9 = new FloatMenuOption("Extract weather controller", action9); yield return(item9); } else { Action action10 = delegate { this.extractionIsPaused = true; pawn.jobs.StopAll(true); }; FloatMenuOption item10 = new FloatMenuOption("Pause weather controller extraction", action10); yield return(item10); } break; } if ((this.reverseEngineeringState >= ReverseEngineeringState.StudyCompleted) && (this.invasionIsDone == false)) { Action action11 = delegate { Job job = new Job(DefDatabase <JobDef> .GetNamed(Util_MechanoidTerraformer.JobDefName_DisableBeacon), this); pawn.drafter.TakeOrderedJob(job); }; FloatMenuOption item11 = new FloatMenuOption("Disable beacon", action11); yield return(item11); } } yield break; }