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