예제 #1
0
 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 _);
     }
 }
예제 #2
0
 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()}");
     }
 }
예제 #3
0
        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;
                }
            }
        }