public static bool Prefix(SlimeVarietyModules __instance, List <Component> ___addedComponents) { foreach (GameObject gameObject in __instance.slimeModules) { if (gameObject != null) { foreach (Component component in gameObject.GetComponents <Component>()) { if (component is Collider || __instance.GetComponent(component.GetType()) == null) { ___addedComponents.Add(__instance.gameObject.AddComponent(component.GetType()).GetCopyOf(component)); } } } int childCount = gameObject.transform.childCount; for (int k = 0; k < childCount; k++) { if (__instance.gameObject.transform.Find(gameObject.transform.GetChild(k).name) != null) { continue; } GameObject gameObject2 = UnityEngine.Object.Instantiate(gameObject.transform.GetChild(k).gameObject, __instance.transform); gameObject2.transform.localPosition = gameObject.transform.GetChild(k).gameObject.transform.localPosition; gameObject2.transform.localRotation = gameObject.transform.GetChild(k).gameObject.transform.localRotation; } } if (__instance.baseModule != null) { bool flag = __instance.GetComponent <RejectBaseNontriggerColliders>() != null; foreach (Component component in __instance.baseModule.GetComponents <Component>()) { if (component is Collider && (((Collider)component).isTrigger || !flag) || __instance.GetComponent(component.GetType()) == null) { ___addedComponents.Add(__instance.gameObject.AddComponent(component.GetType()).GetCopyOf(component)); } } int childCount = __instance.baseModule.transform.childCount; for (int k = 0; k < childCount; k++) { if (__instance.gameObject.transform.Find(__instance.baseModule.transform.GetChild(k).name) != null) { continue; } GameObject gameObject = UnityEngine.Object.Instantiate(__instance.baseModule.transform.GetChild(k).gameObject, __instance.transform); gameObject.transform.localPosition = __instance.baseModule.transform.GetChild(k).gameObject.transform.localPosition; gameObject.transform.localRotation = __instance.baseModule.transform.GetChild(k).gameObject.transform.localRotation; } } __instance.GetComponent <SlimeSubbehaviourPlexer>().CollectSubbehaviours(); return(false); }
protected override void Build() { // Get GameObjects Prefab = CustomBase != null?PrefabUtils.CopyPrefab(CustomBase) : PrefabUtils.CopyPrefab(BaseItem); Prefab.name = NamePrefix + Name; Prefab.transform.localScale = Scale * Definition.PrefabScale; // Load Components SlimeAppearanceApplicator app = Prefab.GetComponent <SlimeAppearanceApplicator>(); SlimeVarietyModules mod = Prefab.GetComponent <SlimeVarietyModules>(); SlimeEat eat = Prefab.GetComponent <SlimeEat>(); SlimeHealth hp = Prefab.GetComponent <SlimeHealth>(); Rigidbody body = Prefab.GetComponent <Rigidbody>(); Vacuumable vac = Prefab.GetComponent <Vacuumable>(); Identifiable iden = Prefab.GetComponent <Identifiable>(); // Setup Components app.SlimeDefinition = Definition; app.Appearance = Definition.AppearancesDefault[0]; mod.baseModule = Definition.BaseModule; mod.slimeModules = Definition.SlimeModules; eat.slimeDefinition = Definition; eat.minDriveToEat = MinDriveToEat; eat.drivePerEat = DrivePerEat; eat.agitationPerEat = AgitationPerEat; eat.agitationPerFavEat = AgitationPerFavEat; hp.maxHealth = Health; body.mass = Mass; vac.size = Size; iden.id = ID; // Get rid of unneeded components Object.Destroy(Prefab.GetComponent <PinkSlimeFoodTypeTracker>()); }
/// <summary>Builds this Item</summary> protected override void Build() { //foreach (Identifiable.Id slime in Identifiable.SLIME_CLASS) //{ // Make new Definition SlimeDefinition other = SlimeUtils.GetDefinitionByID(Identifiable.Id.PINK_SLIME); SlimeDefinition newDef = Definition.CombineForLargo(other); // Translation DefTranslation.Add(newDef.IdentifiableId, Regex.Replace(Definition.Name, "(\\B[A-Z])", " $1") + " " + Regex.Replace(other.Name, "(\\B[A-Z])", " $1") + " Largo"); //if (newDef == null) // continue; // Get GameObjects Prefab = PrefabUtils.CopyPrefab(BaseItem); Prefab.name = NamePrefix + Definition.Name + other.Name; Prefab.transform.localScale = Scale * newDef.PrefabScale; // PRIMARY SETUP // Load Components SlimeAppearanceApplicator app = Prefab.GetComponent <SlimeAppearanceApplicator>(); SlimeVarietyModules mod = Prefab.GetComponent <SlimeVarietyModules>(); // Setup Components app.SlimeDefinition = newDef; mod.baseModule = newDef.BaseModule; mod.slimeModules = newDef.SlimeModules; mod.Assemble(); // SECONDARY SETUP // Load Components SlimeEat eat = Prefab.GetComponent <SlimeEat>(); SlimeHealth hp = Prefab.GetComponent <SlimeHealth>(); Rigidbody body = Prefab.GetComponent <Rigidbody>(); Vacuumable vac = Prefab.GetComponent <Vacuumable>(); Identifiable iden = Prefab.GetComponent <Identifiable>(); // Setup Components eat.slimeDefinition = newDef; eat.minDriveToEat = MinDriveToEat; eat.drivePerEat = DrivePerEat; eat.agitationPerEat = AgitationPerEat; eat.agitationPerFavEat = AgitationPerFavEat; hp.maxHealth = Health; body.mass = Mass; vac.size = Size; iden.id = newDef.IdentifiableId; // TERTIARY SETUP // Load Components SlimeEmotions emot = Prefab.GetComponent <SlimeEmotions>(); SlimeEmotions emot2 = BaseItem.GetComponent <SlimeEmotions>(); emot.initAgitation = emot2.initAgitation; emot.initFear = emot2.initFear; emot.initHunger = emot2.initHunger; // Add to Largo List Prefabs.Add(newDef.IdentifiableId, Prefab); //} }