protected override IntVec3 GetWanderRoot(Pawn pawn) { HorrorHive hive = pawn.mindState.duty.focus.Thing as HorrorHive; if (hive == null || !hive.Spawned) { return(pawn.Position); } return(hive.Position); }
private HorrorHive SpawnHiveCluster(int hiveCount, Map map) { IntVec3 loc; if (!InfestationCellFinder.TryFindCell(out loc, map)) { return(null); } HorrorHive hive = (HorrorHive)GenSpawn.Spawn(ThingMaker.MakeThing(ThingDef.Named("HorrorHive"), null), loc, map); hive.SetFaction(Find.FactionManager.FirstFactionOfDef(FactionDef.Named("Horrors"))); return(hive); }
public new bool TryExecute(IncidentParms parms) { Map map = (Map)parms.target; HorrorHive t = null; int num; for (int i = Mathf.Max(GenMath.RoundRandom(parms.points / HivePoints), 1); i > 0; i -= num) { num = Mathf.Min(3, i); t = this.SpawnHiveCluster(num, map); } base.SendStandardLetter(parms, t); Find.TickManager.slower.SignalForceNormalSpeedShort(); return(true); }
protected override bool TryExecuteWorker(IncidentParms parms) { var map = (Map)parms.target; HorrorHive t = null; int num; for (var i = Mathf.Max(GenMath.RoundRandom(parms.points / HivePoints), 1); i > 0; i -= num) { num = Mathf.Min(3, i); t = SpawnHiveCluster(map); } SendStandardLetter(parms, t); Find.TickManager.slower.SignalForceNormalSpeedShort(); return(true); }
public override void CompTickRare() { HorrorHive hive = this.parent as HorrorHive; if ((hive == null || hive.active) && Find.TickManager.TicksGame >= this.nextHiveSpawnTick) { HorrorHive hive2; if (this.TrySpawnChildHive(false, out hive2)) { hive2.nextPawnSpawnTick = Find.TickManager.TicksGame + Rand.Range(150, 350); Messages.Message("MessageHiveReproduced".Translate(), hive2, MessageTypeDefOf.NegativeEvent); } else { this.CalculateNextHiveSpawnTick(); } } }
public bool TrySpawnChildHive(bool ignoreRoofedRequirement, out HorrorHive newHive) { if (!this.CanSpawnChildHive) { newHive = null; return(false); } IntVec3 invalid = IntVec3.Invalid; for (int i = 0; i < 3; i++) { float minDist = this.Props.HiveSpawnPreferredMinDist; if (i == 1) { minDist = 0f; } else { if (i == 2) { newHive = null; return(false); } } if (CellFinder.TryFindRandomReachableCellNear(this.parent.Position, this.parent.Map, this.Props.HiveSpawnRadius, TraverseParms.For(TraverseMode.NoPassClosedDoors, Danger.Deadly, false), (IntVec3 c) => this.CanSpawnHiveAt(c, minDist, ignoreRoofedRequirement), null, out invalid, 999999)) { break; } } newHive = (HorrorHive)GenSpawn.Spawn(this.parent.def, invalid, this.parent.Map); if (newHive.Faction != this.parent.Faction) { newHive.SetFaction(this.parent.Faction, null); } HorrorHive hive = this.parent as HorrorHive; if (hive != null) { newHive.active = hive.active; } this.CalculateNextHiveSpawnTick(); return(true); }