public override bool HasJobOnThing(Pawn pawn, Thing t, bool forced = false) { Building_BroodChamber building_broodchamber = t as Building_BroodChamber; bool result; if (building_broodchamber == null || !building_broodchamber.broodChamberFull) { result = false; } else if (t.IsBurning()) { result = false; } else { if (!t.IsForbidden(pawn)) { LocalTargetInfo target = t; if (pawn.CanReserve(target, 1, -1, null, forced)) { result = true; return(result); } } result = false; } return(result); }
public ThingDef DecideRandomBee() { Building_BroodChamber buildingbroodchamber = (Building_BroodChamber)this.job.GetTarget(TargetIndex.A).Thing; Building_Beehouse buildingbeehouse = buildingbroodchamber.GetAdjacentBeehouse(); Thing beeDrone = buildingbeehouse.innerContainerDrones.FirstOrFallback(); Thing beeQueen = buildingbeehouse.innerContainerQueens.FirstOrFallback(); ThingDef resultingBee; int randomNumber = rand.Next(1, 14); if (randomNumber >= 1 && randomNumber <= 5) { resultingBee = DefDatabase <ThingDef> .GetNamed(beeDrone.def.defName, true); } else if (randomNumber == 6) { resultingBee = DefDatabase <ThingDef> .GetNamed(getQueenFromDrone(beeDrone), true); } else if (randomNumber == 7) { resultingBee = DefDatabase <ThingDef> .GetNamed(beeQueen.def.defName, true); } else { resultingBee = DefDatabase <ThingDef> .GetNamed(getDroneFromQueen(beeQueen), true); } return(resultingBee); }
protected override IEnumerable <Toil> MakeNewToils() { this.FailOnDespawnedNullOrForbidden(TargetIndex.A); this.FailOnBurningImmobile(TargetIndex.A); yield return(Toils_Goto.GotoThing(TargetIndex.A, PathEndMode.Touch)); yield return(Toils_General.Wait(240).FailOnDestroyedNullOrForbidden(TargetIndex.A).FailOnCannotTouch(TargetIndex.A, PathEndMode.Touch).WithProgressBarToilDelay(TargetIndex.A, false, -0.5f)); yield return(new Toil { initAction = delegate { Building_BroodChamber buildingBroodChamber = (Building_BroodChamber)this.job.GetTarget(TargetIndex.A).Thing; Thing newBee = ThingMaker.MakeThing(DecideRandomBee()); GenSpawn.Spawn(newBee, buildingBroodChamber.Position - GenAdj.CardinalDirections[0], buildingBroodChamber.Map); StoragePriority currentPriority = StoreUtility.CurrentStoragePriorityOf(newBee); IntVec3 c; if (StoreUtility.TryFindBestBetterStoreCellFor(newBee, this.pawn, this.Map, currentPriority, this.pawn.Faction, out c, true)) { this.job.SetTarget(TargetIndex.C, c); this.job.SetTarget(TargetIndex.B, newBee); this.job.count = newBee.stackCount; buildingBroodChamber.broodChamberFull = false; buildingBroodChamber.tickCounter = 0; } else { this.EndJobWith(JobCondition.Incompletable); buildingBroodChamber.broodChamberFull = false; buildingBroodChamber.tickCounter = 0; } }, defaultCompleteMode = ToilCompleteMode.Instant }); yield return(Toils_Reserve.Reserve(TargetIndex.B, 1, -1, null)); yield return(Toils_Reserve.Reserve(TargetIndex.C, 1, -1, null)); yield return(Toils_Goto.GotoThing(TargetIndex.B, PathEndMode.ClosestTouch)); yield return(Toils_Haul.StartCarryThing(TargetIndex.B, false, false, false)); Toil carryToCell = Toils_Haul.CarryHauledThingToCell(TargetIndex.C); yield return(carryToCell); yield return(Toils_Haul.PlaceHauledThingInCell(TargetIndex.C, carryToCell, true)); }
public override void PostDraw() { if (RimBees_Settings.RB_Ben_ShowProgress) { Building_BroodChamber broodchamber = this.parent as Building_BroodChamber; var progress = broodchamber.tickCounter / ((float)broodchamber.ticksToDays * broodchamber.daysTotal); GenDraw.DrawFillableBar(new GenDraw.FillableBarRequest { center = parent.DrawPos + CompBeeHouse.ProgressBarOffset, size = CompBeeHouse.ProgressBarSize, fillPercent = progress, margin = 0.1f, rotation = Rot4.North, filledMat = CompBeeHouse.FilledMat, unfilledMat = CompBeeHouse.UnfilledMat, }); } }