public static void Prefix(WaterParkCreature __instance) { if (__instance.pickupable.GetTechType() == TechType.Shocker && __instance.GetCanBreed() && DayNightCycle.main.timePassed > __instance.timeNextBreed) { __instance.GetWaterPark()?.gameObject.GetComponent <PowerSource>()?.AddEnergy(100f, out _); } }
static void WaterParkCreature_Update_Postfix(WaterParkCreature __instance) { if (Main.config.dbgCfg.showWaterParkCreatures) { $"age: {__instance.age} canBreed: {__instance.GetCanBreed()} matureTime: {__instance.matureTime} isMature: {__instance.isMature}". onScreen($"waterpark {__instance.name} {__instance.GetHashCode()}"); } }
public static void Postfix(WaterPark __instance, WaterParkCreature creature) { if (!__instance.items.Contains(creature) || __instance.HasFreeSpace()) { return; } List <BaseBioReactor> baseBioReactors = __instance.gameObject.GetComponentInParent <SubRoot>().gameObject.GetComponentsInChildren <BaseBioReactor>().ToList(); bool hasBred = false; foreach (WaterParkItem waterParkItem in __instance.items) { WaterParkCreature parkCreature = waterParkItem as WaterParkCreature; if (parkCreature != null && parkCreature != creature && parkCreature.GetCanBreed() && parkCreature.pickupable.GetTechType() == creature.pickupable.GetTechType() && !parkCreature.pickupable.GetTechType().ToString().Contains("Egg")) { foreach (BaseBioReactor baseBioReactor in baseBioReactors) { if (baseBioReactor.container.HasRoomFor(parkCreature.pickupable)) { creature.ResetBreedTime(); parkCreature.ResetBreedTime(); GameObject gameObject = CraftData.InstantiateFromPrefab(CraftData.GetTechType(parkCreature.data.eggOrChildPrefab), false); gameObject.SetActive(false); baseBioReactor.container.AddItem(gameObject.EnsureComponent <Pickupable>()); hasBred = true; break; } } if (!hasBred && Config.OverFlowIntoOcean && parkCreature.data.isPickupableOutside) { creature.ResetBreedTime(); parkCreature.ResetBreedTime(); if (count > Config.WaterParkSize) { GameObject gameObject = CraftData.InstantiateFromPrefab(CraftData.GetTechType(parkCreature.gameObject), false); gameObject.transform.position = __instance.gameObject.GetComponentInParent <SubRoot>().transform.position + new Vector3(Random.Range(-30, 30), Random.Range(-2, 30), Random.Range(-30, 30)); gameObject.SetActive(true); count = 0; } else { count++; } } break; } } }