public void Notify_RepairStationDespawned(Building_RepairStation rps)
 {
     if (repairStations.Contains(rps))
     {
         repairStations.Remove(rps);
     }
 }
 public void Notify_RepairStationSpawned(Building_RepairStation rps)
 {
     if (!repairStations.Contains(rps))
     {
         repairStations.Add(rps);
     }
 }
Beispiel #3
0
 public static void DeregisterRepairStation(Building_RepairStation rps)
 {
     if (rps != null && listerDroids.repairStations.Contains(rps))
     {
         listerDroids.repairStations.Remove(rps);
     }
 }
Beispiel #4
0
        public virtual void Repair(Building_RepairStation repairStation)
        {
            List <Hediff_Injury>      allInjuries     = health.hediffSet.GetHediffs <Hediff_Injury>().ToList();
            List <Hediff_MissingPart> allMissingParts = health.hediffSet.GetHediffs <Hediff_MissingPart>().ToList();


            float num = Rand.Value;

            if ((allInjuries.Count == 0 || num > 0.6) && allMissingParts.Count > 0 && repairStation != null &&
                repairStation.HasEnoughOf(repairStation.Def.repairThingDef, repairStation.Def.repairCostAmount))
            {
                Hediff_MissingPart hediff = allMissingParts.RandomElement();
                if (repairStation.TakeSomeOf(repairStation.Def.repairThingDef, repairStation.Def.repairCostAmount))
                {
                    health.hediffSet.RestorePart(hediff.Part.HighestMissingPart(this));
                }
            }
            else if (allInjuries.Count > 0)
            {
                Hediff_Injury hediff = allInjuries.RandomElement();
                if (hediff.def.injuryProps.fullyHealableOnlyByTreatment)
                {
                    HediffComp_Treatable treatable = hediff.TryGetComp <HediffComp_Treatable>();
                    if (treatable != null && !treatable.treatedWithMedicine)
                    {
                        treatable.NewlyTreated(1f, ThingDefOf.Medicine);
                    }
                }
                hediff.DirectHeal(repairStation.Def.repairAmount);
            }
        }
Beispiel #5
0
 public static void RegisterRepairStation(Building_RepairStation rps)
 {
     if (rps != null && !listerDroids.repairStations.Contains(rps))
     {
         listerDroids.repairStations.Add(rps);
     }
 }
 public void Notify_RepairStationSpawned(Building_RepairStation rps)
 {
     if(!repairStations.Contains(rps))
     {
         repairStations.Add(rps);
     }
 }
 public void Notify_RepairStationDespawned(Building_RepairStation rps)
 {
     if (repairStations.Contains(rps))
     {
         repairStations.Remove(rps);
     }
 }
Beispiel #8
0
        public override bool HasJobOnThing(Pawn pawn, Thing t)
        {
            Building_RepairStation rps      = t as Building_RepairStation;
            IRepairable            repairee = pawn as IRepairable;

            return(rps != null && repairee != null && rps.IsAvailable(repairee) && pawn.CanReserveAndReach(rps, PathEndMode, Danger.Some, 1));
        }
        public override Job JobOnThing(Pawn pawn, Thing t)
        {
            Building_RepairStation rps = ListerDroids.ClosestRepairStationFor(pawn, t);
            Job job = new Job(ReactivateDroidJobDef, t, rps);

            job.maxNumToCarry = 1;
            return(job);
        }
Beispiel #10
0
        public static Building_RepairStation ClosestRepairStationFor(Pawn pawn, Thing t)
        {
            Predicate <Thing> pred = (Thing thing) =>
            {
                Building_RepairStation rps = thing as Building_RepairStation;
                if (rps != null)
                {
                    return(rps.IsAvailableForReactivation);
                }
                return(false);
            };

            return((Building_RepairStation)GenClosest.ClosestThing_Global_Reachable(t.Position, ListerDroids.AllRepairStationsThings, PathEndMode.InteractionCell, TraverseParms.For(pawn), 9999f, pred));
        }
 private void Notify_SupplierSpawned()
 {
     if (Find.ListerBuildings.AllBuildingsColonistOfClass <Building_RepairStation>() != null)
     {
         foreach (var c in GenAdj.CellsAdjacentCardinal(this.parent))
         {
             Building_RepairStation rps = Find.ThingGrid.ThingAt <Building_RepairStation>(c);
             if (rps != null)
             {
                 rps.Notify_SupplierSpawned(this);
                 repairStations.Add(rps);
             }
         }
     }
 }
        protected override void FillTab()
        {
            Pawn pawn = null;

            if (base.SelPawn != null)
            {
                pawn = base.SelPawn;
            }
            else if (base.SelThing is Corpse)
            {
                Corpse corpse = base.SelThing as Corpse;
                if (corpse != null)
                {
                    pawn = corpse.innerPawn;
                }
            }
            else if (base.SelThing is DeactivatedDroid)
            {
                DeactivatedDroid droid = base.SelThing as DeactivatedDroid;
                if (droid != null)
                {
                    pawn = droid.InnerDroid;
                }
            }
            else if (base.SelThing is Building_RepairStation)
            {
                Building_RepairStation rps = base.SelThing as Building_RepairStation;
                if (rps != null)
                {
                    pawn = rps.InnerDroid.InnerDroid;
                }
            }
            if (pawn == null)
            {
                Log.Error("Health tab found no selected pawn to display.");
                return;
            }
            Corpse corpse2         = base.SelThing as Corpse;
            bool   showBloodLoss   = corpse2 == null || corpse2.Age < 60000;
            bool   flag            = base.SelThing.def.AllRecipes.Any <RecipeDef>();
            bool   flag2           = !pawn.RaceProps.Humanlike && pawn.Downed;
            bool   allowOperations = flag && !pawn.Dead && (pawn.IsColonist || pawn.HostFaction == Faction.OfColony || flag2);
            Rect   outRect         = new Rect(0f, 20f, this.size.x, this.size.y - 20f);

            HealthCardUtility.DrawPawnHealthCard(outRect, pawn, allowOperations, showBloodLoss, base.SelThing);
        }
Beispiel #13
0
        protected override IEnumerable <Toil> MakeNewToils()
        {
            this.FailOnBurningImmobile(DeactivatedDroid);
            this.FailOnBurningImmobile(RPS);
            this.FailOnDestroyedOrForbidden(DeactivatedDroid);
            this.FailOnDestroyedOrForbidden(RPS);

            DeactivatedDroid       droid = TargetThingA as DeactivatedDroid;
            Building_RepairStation rps   = TargetThingB as Building_RepairStation;

            //Reserve the item
            yield return(Toils_Reserve.Reserve(DeactivatedDroid));

            //Go to the item
            yield return(Toils_Goto.GotoThing(DeactivatedDroid, PathEndMode.ClosestTouch));

            //Pick up the item
            yield return(Toils_Haul.StartCarryThing(DeactivatedDroid));

            //Go to the rps
            yield return(Toils_Goto.GotoThing(RPS, PathEndMode.InteractionCell));

            //Drop the item
            Toil toil = new Toil();

            toil.initAction = delegate
            {
                Thing thing;
                if (!toil.actor.carryHands.TryDropCarriedThing(rps.InteractionCell, ThingPlaceMode.Direct, out thing))
                {
                    toil.actor.jobs.EndCurrentJob(JobCondition.Incompletable);
                }
            };
            yield return(toil);

            //Add the item to the rps
            toil            = new Toil();
            toil.initAction = delegate
            {
                rps.AddDroid(droid);
            };
            yield return(toil);
        }
 public static void RegisterRepairStation(Building_RepairStation rps)
 {
     if (rps != null && !listerDroids.repairStations.Contains(rps))
         listerDroids.repairStations.Add(rps);
 }
 public static void DeregisterRepairStation(Building_RepairStation rps)
 {
     if (rps != null && listerDroids.repairStations.Contains(rps))
         listerDroids.repairStations.Remove(rps);
 }
Beispiel #16
0
        public virtual void Repair(Building_RepairStation repairStation)
        {
            List<Hediff_Injury> allInjuries = health.hediffSet.GetHediffs<Hediff_Injury>().ToList();
            List<Hediff_MissingPart> allMissingParts = health.hediffSet.GetHediffs<Hediff_MissingPart>().ToList();

            float num = Rand.Value;

            if ((allInjuries.Count == 0 || num > 0.6) && allMissingParts.Count > 0 && repairStation != null &&
                repairStation.HasEnoughOf(repairStation.Def.repairThingDef, repairStation.Def.repairCostAmount))
            {
                Hediff_MissingPart hediff = allMissingParts.RandomElement();
                if (repairStation.TakeSomeOf(repairStation.Def.repairThingDef, repairStation.Def.repairCostAmount))
                {
                    health.hediffSet.RestorePart(hediff.Part.HighestMissingPart(this));
                }
            }
            else if (allInjuries.Count > 0)
            {
                Hediff_Injury hediff = allInjuries.RandomElement();
                if (hediff.def.injuryProps.fullyHealableOnlyByTreatment)
                {
                    HediffComp_Treatable treatable = hediff.TryGetComp<HediffComp_Treatable>();
                    if (treatable != null && !treatable.treatedWithMedicine)
                    {
                        treatable.NewlyTreated(1f, ThingDefOf.Medicine);
                    }
                }
                hediff.DirectHeal(repairStation.Def.repairAmount);
            }
        }