Beispiel #1
0
        public override GameObject GetGameObject()
        {
            GameObject prefab    = GameObject.Instantiate(this.GameObject);
            GameObject container = GameObject.Instantiate(this.CargoCrateContainer);
            GameObject model     = prefab.FindChild("submarine_locker_04");

            prefab.name = this.ClassID;

            // Update container renderers
            GameObject cargoCrateModel = container.FindChild("model");

            Renderer[] cargoCrateRenderers = cargoCrateModel.GetComponentsInChildren <Renderer>();
            container.transform.parent = prefab.transform;
            foreach (Renderer rend in cargoCrateRenderers)
            {
                rend.enabled = false;
            }
            container.transform.localPosition    = new Vector3(0.0f, 0.0f, 0.0f);
            container.transform.localScale       = new Vector3(0.001f, 0.001f, 0.001f);
            container.transform.localEulerAngles = new Vector3(0.0f, 0.0f, 0.0f);
            container.SetActive(true);

            // Update colliders
            GameObject  builderTrigger  = container.FindChild("Builder Trigger");
            GameObject  objectTrigger   = container.FindChild("Collider");
            BoxCollider builderCollider = builderTrigger.GetComponent <BoxCollider>();

            builderCollider.isTrigger = false;
            builderCollider.enabled   = false;
            BoxCollider objectCollider = objectTrigger.GetComponent <BoxCollider>();

            objectCollider.isTrigger = false;
            objectCollider.enabled   = false;

            // Delete constructable bounds
            ConstructableBounds cb = container.GetComponent <ConstructableBounds>();

            GameObject.DestroyImmediate(cb);

            // Update TechTag
            var techTag = prefab.AddComponent <TechTag>();

            techTag.type = this.TechType;

            // Update prefab ID
            var prefabId = prefab.GetComponent <PrefabIdentifier>();

            prefabId.ClassId = this.ClassID;

            // Remove rigid body
            Rigidbody rb = prefab.GetComponent <Rigidbody>();

            GameObject.DestroyImmediate(rb);

            // Add collider
            BoxCollider collider = model.AddComponent <BoxCollider>();

            collider.size   = new Vector3(0.4f, 2.0f, 0.5f);
            collider.center = new Vector3(0.0f, 1.0f, 0.0f);

            // Update large world entity
            PrefabsHelper.UpdateExistingLargeWorldEntities(prefab);

            // Update sky applier
#if BELOWZERO
            SkyApplier[] sas = prefab.GetComponentsInChildren <SkyApplier>();
            while (prefab.GetComponentInChildren <SkyApplier>() != null)
            {
                GameObject.DestroyImmediate(prefab.GetComponentInChildren <SkyApplier>());
            }
            if (prefab.GetComponent <SkyApplier>() != null)
            {
                GameObject.DestroyImmediate(prefab.GetComponent <SkyApplier>());
            }
            while (prefab.GetComponentInChildren <BaseModuleLighting>() != null)
            {
                GameObject.DestroyImmediate(prefab.GetComponentInChildren <BaseModuleLighting>());
            }
            if (prefab.GetComponent <BaseModuleLighting>() != null)
            {
                GameObject.DestroyImmediate(prefab.GetComponent <BaseModuleLighting>());
            }

            BaseModuleLighting bml = prefab.AddComponent <BaseModuleLighting>();
            SkyApplier         sa  = prefab.AddComponent <SkyApplier>();
            sa.renderers = prefab.GetComponentsInChildren <Renderer>();
            sa.anchorSky = Skies.Auto;
#else
            PrefabsHelper.SetDefaultSkyApplier(prefab);
#endif

            // Set as constructible
            Constructable constructible = prefab.AddComponent <Constructable>();
            constructible.techType                = this.TechType;
            constructible.allowedOnWall           = false;
            constructible.allowedInBase           = true;
            constructible.allowedInSub            = true;
            constructible.allowedOutside          = ConfigSwitcher.AllowBuildOutside;
            constructible.allowedOnCeiling        = false;
            constructible.allowedOnGround         = true;
            constructible.allowedOnConstructables = false;
            constructible.rotationEnabled         = true;
            constructible.deconstructionAllowed   = true;
            constructible.controlModelState       = true;
            constructible.model            = model;
            constructible.placeMinDistance = 0.6f;

            // Add constructable bounds
            ConstructableBounds bounds = prefab.AddComponent <ConstructableBounds>();

            // Add model controler
            var decorativeLockerController = prefab.AddComponent <DecorativeLockerController>();

            return(prefab);
        }
        public override GameObject GetGameObject()
        {
            GameObject prefab = GameObject.Instantiate(this.GameObject);

            prefab.name = this.ClassID;

            // Remove unwanted elements
            GameObject.DestroyImmediate(prefab.GetComponent <Rigidbody>());
            GameObject.DestroyImmediate(prefab.GetComponent <ImmuneToPropulsioncannon>());

            // Rotate model
            GameObject model = prefab.FindChild("Creatures_eggs_17");

            model.transform.localEulerAngles = new Vector3(model.transform.localEulerAngles.x - 90f, model.transform.localEulerAngles.y, model.transform.localEulerAngles.z);
            // Scale model
            model.transform.localScale *= 0.8f;

#if BELOWZERO
            MeshRenderer[] renderers = model.GetComponents <MeshRenderer>();
            if (renderers != null)
            {
                foreach (MeshRenderer rend in renderers)
                {
                    if (rend.materials != null)
                    {
                        foreach (Material mat in rend.materials)
                        {
                            mat.shader = marmosetUber;
                            if (mat.name.StartsWith("Creatures_eggs_17"))
                            {
                                mat.SetTexture("_BumpMap", normal);
                                mat.EnableKeyword("MARMO_NORMALMAP");
                                mat.EnableKeyword("_ZWRITE_ON"); // Enable Z write
                            }
                        }
                    }
                }
            }
#endif

            // Scale collider
            CapsuleCollider c = prefab.GetComponentInChildren <CapsuleCollider>();
            c.radius *= 0.5f;
            c.height *= 0.5f;

            // Update TechTag
            var techTag = prefab.GetComponent <TechTag>();
            if (techTag == null)
            {
                if ((techTag = prefab.GetComponentInChildren <TechTag>()) == null)
                {
                    techTag = prefab.AddComponent <TechTag>();
                }
            }
            techTag.type = this.TechType;

            // Update prefab ID
            var prefabId = prefab.GetComponent <PrefabIdentifier>();
            if (prefabId == null)
            {
                if ((prefabId = prefab.GetComponentInChildren <PrefabIdentifier>()) == null)
                {
                    prefabId = prefab.AddComponent <PrefabIdentifier>();
                }
            }
            prefabId.ClassId = this.ClassID;

            // Update sky applier
            PrefabsHelper.SetDefaultSkyApplier(prefab);

            // Update large world entity
            PrefabsHelper.UpdateExistingLargeWorldEntities(prefab);

            // We can pick this item
            PrefabsHelper.SetDefaultPickupable(prefab);

            // We can place this item
            //prefab.AddComponent<EggSeaDragon_PT>();
            PrefabsHelper.SetDefaultPlaceTool(prefab);

            // Add fabricating animation
            var fabricating = prefab.AddComponent <VFXFabricating>();
            fabricating.localMinY   = -0.2f;
            fabricating.localMaxY   = 0.8f;
            fabricating.posOffset   = new Vector3(0f, 0.03f, -0.15f);
            fabricating.eulerOffset = new Vector3(0f, 0f, 0f);
            fabricating.scaleFactor = 0.35f;

            return(prefab);
        }
Beispiel #3
0
        public override GameObject GetGameObject()
        {
            GameObject prefab = GameObject.Instantiate(this.GameObject);

            prefab.name = this.ClassID;

            // Remove unwanted elements
            GameObject.DestroyImmediate(prefab.GetComponent <Rigidbody>());
            GameObject.DestroyImmediate(prefab.GetComponent <IncubatorEgg>());
            GameObject.DestroyImmediate(prefab.GetComponent <VFXController>());
            GameObject.DestroyImmediate(prefab.GetComponentInChildren <Animator>());
            GameObject.DestroyImmediate(prefab.GetComponentInChildren <IncubatorEggAnimation>());

            GameObject model = prefab.FindChild("Creatures_eggs_11");

            // Rotate model
            model.transform.localEulerAngles = new Vector3(model.transform.localEulerAngles.x, model.transform.localEulerAngles.y + 180f, model.transform.localEulerAngles.z);

            // Scale model
            model.transform.localScale *= 0.2f;

            // Scale colliders
            foreach (SphereCollider c in prefab.GetAllComponentsInChildren <SphereCollider>())
            {
                c.radius *= 0.15f;
            }

            // Update TechTag
            var techTag = prefab.GetComponent <TechTag>();

            if (techTag == null)
            {
                if ((techTag = prefab.GetComponentInChildren <TechTag>()) == null)
                {
                    techTag = prefab.AddComponent <TechTag>();
                }
            }
            techTag.type = this.TechType;

            // Update prefab ID
            var prefabId = prefab.GetComponent <PrefabIdentifier>();

            if (prefabId == null)
            {
                if ((prefabId = prefab.GetComponentInChildren <PrefabIdentifier>()) == null)
                {
                    prefabId = prefab.AddComponent <PrefabIdentifier>();
                }
            }
            prefabId.ClassId = this.ClassID;

            // Update sky applier
            PrefabsHelper.SetDefaultSkyApplier(prefab);

            // Update large world entity
            PrefabsHelper.UpdateExistingLargeWorldEntities(prefab);

            // We can pick this item
            PrefabsHelper.SetDefaultPickupable(prefab);

            // We can place this item
            prefab.AddComponent <CustomPlaceToolController>();
            prefab.AddComponent <EggSeaEmperor_PT>();
            PrefabsHelper.SetDefaultPlaceTool(prefab);

            // Add fabricating animation
            var fabricating = prefab.AddComponent <VFXFabricating>();

            fabricating.localMinY   = -0.2f;
            fabricating.localMaxY   = 0.8f;
            fabricating.posOffset   = new Vector3(0f, 0.03f, 0.04f);
            fabricating.eulerOffset = new Vector3(0f, 0f, 0f);
            fabricating.scaleFactor = 1.15f;

            return(prefab);
        }