Exemplo n.º 1
0
        public bool SuitablePosition(IntVec3 pos, Map map, bool fallback = false)
        {
            if (!pos.InBounds(map))
            {
                return(false);
            }
            if (!pos.Roofed(map))
            {
                return(false);
            }
            if (!pos.Standable(map))
            {
                return(false);
            }

            if (!fallback)
            {
                int v = 0;
                int h = 0;
                if (new IntVec3(pos.x + 1, pos.y, pos.z + 0).Impassable(map))
                {
                    v++;
                }
                if (new IntVec3(pos.x - 1, pos.y, pos.z + 0).Impassable(map))
                {
                    v++;
                }
                if (new IntVec3(pos.x + 0, pos.y, pos.z + 1).Impassable(map))
                {
                    h++;
                }
                if (new IntVec3(pos.x + 0, pos.y, pos.z - 1).Impassable(map))
                {
                    h++;
                }

                if (v < 1 || h < 1)
                {
                    return(false);
                }
            }

            CompPower comp = PowerConnectionMaker.BestTransmitterForConnector(pos, map);

            if (comp?.PowerNet == null)
            {
                return(false);
            }

            return(comp.PowerNet.HasActivePowerSource);
        }
Exemplo n.º 2
0
        public static void Postfix(ref BuildableDef def)
        {
            ThingDef thingDef = def as ThingDef;

            if (thingDef != null && thingDef.GetCompProperties <CompProperties_SteamAlternator>() != null)
            {
                IntVec3   intVec    = UI.MouseCell();
                CompPower compPower = PowerConnectionMaker.BestTransmitterForConnector(intVec, Find.VisibleMap, null);
                if (compPower != null)
                {
                    PowerNetGraphics.RenderAnticipatedWirePieceConnecting(intVec, compPower.parent);
                }
            }
        }
        public override void SelectedUpdate()
        {
            base.SelectedUpdate();
            IntVec3  intVec   = UI.MouseCell();
            ThingDef thingDef = this.entDef as ThingDef;

            if (thingDef != null && (thingDef.EverTransmitsPower || thingDef.ConnectToPower))
            {
                OverlayDrawHandler.DrawPowerGridOverlayThisFrame();
                if (thingDef.ConnectToPower)
                {
                    CompPower compPower = PowerConnectionMaker.BestTransmitterForConnector(intVec, Find.VisibleMap, null);
                    if (compPower != null)
                    {
                        PowerNetGraphics.RenderAnticipatedWirePieceConnecting(intVec, compPower.parent);
                    }
                }
            }
        }
Exemplo n.º 4
0
 public static void Postfix(PowerNetManager __instance, ref IntVec3 cell)
 {
     if (__instance.map.powerNetGrid.TransmittedPowerNetAt(cell) == null &&
         cell.GetFirstBuilding(__instance.map).TryGetComp <CompSteamAlternator>() != null)
     {
         Building_Steam alternator = null;
         foreach (Thing thing in cell.GetThingList(__instance.map))
         {
             if (thing.TryGetComp <CompSteamAlternator>() != null)
             {
                 alternator = (Building_Steam)thing;
                 break;
             }
         }
         PowerNet powerNet = new PowerNet(new List <CompPower> {
             alternator.PowerComp
         });
         __instance.RegisterPowerNet(powerNet);
         PowerConnectionMaker.ConnectAllConnectorsToTransmitter(powerNet.transmitters[0]);
     }
 }
        protected override IEnumerable <Toil> MakeNewToils()
        {
            PawnAutocleaner   cleaner = pawn as PawnAutocleaner;
            AutocleanerJobDef def     = job.def as AutocleanerJobDef;

            CompPowerTrader comp = pawn.TryGetComp <CompPowerTrader>();

            if (comp != null)
            {
                PowerConnectionMaker.DisconnectFromPowerNet(comp);
            }

            Toil initExtractTargetFromQueue = Toils_JobTransforms.ClearDespawnedNullOrForbiddenQueuedTargets(TargetIndex.A, null);

            yield return(initExtractTargetFromQueue);

            yield return(Toils_JobTransforms.SucceedOnNoTargetInQueue(TargetIndex.A));

            yield return(Toils_JobTransforms.ExtractNextTargetFromQueue(TargetIndex.A, true));

            yield return(Toils_Goto.GotoThing(TargetIndex.A, PathEndMode.OnCell).JumpIfDespawnedOrNullOrForbidden(TargetIndex.A, initExtractTargetFromQueue).JumpIfOutsideHomeArea(TargetIndex.A, initExtractTargetFromQueue));

            Toil clean = new Toil();

            clean.initAction = delegate()
            {
                cleaningWorkDone          = 0f;
                totalCleaningWorkDone     = 0f;
                totalCleaningWorkRequired = Filth.def.filth.cleaningWorkToReduceThickness * Filth.thickness;
            };
            clean.tickAction = delegate()
            {
                Filth filth = Filth;
                cleaningWorkDone      += 1f;
                totalCleaningWorkDone += 1f;

                if (cleaner != null && def != null)
                {
                    cleaner.charge -= def.activeDischargePerSecond / cleaner.AutoDef.dischargePeriodTicks;

                    if (cleaner.LowPower)
                    {
                        EndJobWith(JobCondition.Incompletable);
                        return;
                    }
                }

                if (cleaningWorkDone > filth.def.filth.cleaningWorkToReduceThickness)
                {
                    filth.ThinFilth();
                    cleaningWorkDone = 0f;
                    if (filth.Destroyed)
                    {
                        clean.actor.records.Increment(RecordDefOf.MessesCleaned);
                        ReadyForNextToil();
                        return;
                    }
                }
            };
            clean.defaultCompleteMode = ToilCompleteMode.Never;
            clean.WithProgressBar(TargetIndex.A, () => totalCleaningWorkDone / totalCleaningWorkRequired, true, -0.5f);
            clean.PlaySustainerOrSound(() => SoundDefOf.Interact_CleanFilth);
            clean.JumpIfDespawnedOrNullOrForbidden(TargetIndex.A, initExtractTargetFromQueue);
            clean.JumpIfOutsideHomeArea(TargetIndex.A, initExtractTargetFromQueue);
            yield return(clean);

            yield return(Toils_Jump.Jump(initExtractTargetFromQueue));

            yield break;
        }