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

            prefab.name = this.ClassID;

            if (!ConfigSwitcher.AlienRelic7Animation)
            {
                prefab.GetComponentInChildren <Animator>().enabled = false;
            }

            // Get objects
            GameObject relicHlpr = prefab.FindChild("alien_relic_07_hlpr");

            // Scale
            foreach (Transform tr in prefab.transform)
            {
                tr.transform.localScale *= 0.75f;
            }
            // Rotate
            relicHlpr.transform.localEulerAngles = new Vector3(relicHlpr.transform.localEulerAngles.x, relicHlpr.transform.localEulerAngles.y + 90f, relicHlpr.transform.localEulerAngles.z);
            // Translate
            relicHlpr.transform.localPosition = new Vector3(relicHlpr.transform.localPosition.x, relicHlpr.transform.localPosition.y + 0.19f, relicHlpr.transform.localPosition.z);

            // 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;

            // Remove rigid body to prevent bugs

            /*
             * var rbs = prefab.GetComponentsInChildren<Rigidbody>();
             * if (rbs != null && rbs.Length > 0)
             *  foreach (var rbp in rbs)
             *      GameObject.DestroyImmediate(rbp);
             * var rb = prefab.GetComponent<Rigidbody>();
             * if (rb != null)
             *  GameObject.DestroyImmediate(rb);
             */

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

            // Scale colliders
            var collider = prefab.GetComponent <CapsuleCollider>();

            collider.radius        = 0.1f;
            collider.height        = 0.1f;
            collider.contactOffset = 0.1f;
            collider.isTrigger     = true;
            foreach (BoxCollider c in prefab.GetComponentsInChildren <BoxCollider>())
            {
                c.size     *= 0.5f;
                c.isTrigger = true;
            }

            // We can pick this item
            var pickupable = prefab.GetComponent <Pickupable>();

            if (pickupable == null)
            {
                pickupable = prefab.AddComponent <Pickupable>();
            }
            pickupable.isPickupable = true;
            pickupable.randomizeRotationWhenDropped = true;

            // We can place this item
            prefab.AddComponent <CustomPlaceToolController>();
            //var placeTool = prefab.GetComponent<PlaceTool>();
            //if (placeTool != null)
            //    GameObject.DestroyImmediate(placeTool);
            var placeTool = prefab.AddComponent <GenericPlaceTool>();

            placeTool.allowedInBase          = true;
            placeTool.allowedOnBase          = true;
            placeTool.allowedOnCeiling       = false;
            placeTool.allowedOnConstructable = true;
            placeTool.allowedOnGround        = true;
            placeTool.allowedOnRigidBody     = true;
            placeTool.allowedOnWalls         = true;
            placeTool.allowedOutside         = ConfigSwitcher.AllowPlaceOutside;
            placeTool.rotationEnabled        = true;
            placeTool.enabled              = true;
            placeTool.hasAnimations        = false;
            placeTool.hasBashAnimation     = false;
            placeTool.hasFirstUseAnimation = false;
            placeTool.mainCollider         = collider;
            placeTool.pickupable           = pickupable;

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

            fabricating.localMinY   = -0.2f;
            fabricating.localMaxY   = 0.4f;
            fabricating.posOffset   = new Vector3(0f, 0f, 0f);
            fabricating.eulerOffset = new Vector3(0f, 0f, 0f);
            fabricating.scaleFactor = 0.7f;

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

            prefab.name = this.ClassID;

            if (!ConfigSwitcher.AlienRelic1Animation)
            {
                prefab.GetComponentInChildren <Animator>().enabled = false;
            }

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

            // Get objects
            //GameObject model = prefab.FindChild("relic_01");
            GameObject relicRot  = prefab.FindChild("alien_relic_01_world_rot");
            GameObject relicHlpr = relicRot.FindChild("alien_relic_01_hlpr");

            //GameObject relicCtrl = relicHlpr.FindChild("alien_relic_01_ctrl");
            //GameObject subModel = relicCtrl.FindChild("relic_01");

            // Translate helper
            relicHlpr.transform.localPosition = new Vector3(0f, 1.85f, 0f);

            // Scale prefab
            foreach (Transform tr in prefab.transform)
            {
                tr.localScale *= 0.5f;
            }

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

            techTag.type = this.TechType;

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

            prefabId.ClassId = this.ClassID;

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

            // Scale collider
            var collider = prefab.AddComponent <BoxCollider>();

            collider.size      = new Vector3(0.5f, 0.6f, 0.5f);
            collider.center    = new Vector3(0f, 0.3f, 0f);
            collider.isTrigger = true;

            // We can pick this item
            var pickupable = prefab.AddComponent <Pickupable>();

            pickupable.isPickupable = true;
            pickupable.randomizeRotationWhenDropped = true;

            // We can place this item
            prefab.AddComponent <CustomPlaceToolController>();
            var placeTool = prefab.AddComponent <AlienArtefact1_PT>();

            placeTool.allowedInBase          = true;
            placeTool.allowedOnBase          = true;
            placeTool.allowedOnCeiling       = false;
            placeTool.allowedOnConstructable = true;
            placeTool.allowedOnGround        = true;
            placeTool.allowedOnRigidBody     = true;
            placeTool.allowedOnWalls         = true;
            placeTool.allowedOutside         = ConfigSwitcher.AllowPlaceOutside;
            placeTool.rotationEnabled        = true;
            placeTool.enabled              = true;
            placeTool.hasAnimations        = false;
            placeTool.hasBashAnimation     = false;
            placeTool.hasFirstUseAnimation = false;
            placeTool.ghostModelPrefab     = prefab;
            placeTool.mainCollider         = collider;
            placeTool.pickupable           = pickupable;

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

            fabricating.localMinY   = -0.2f;
            fabricating.localMaxY   = 0.8f;
            fabricating.posOffset   = new Vector3(0f, -0.06f, 0.02f);
            fabricating.eulerOffset = new Vector3(0f, 0f, 0f);
            fabricating.scaleFactor = 0.6f;

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

            prefab.name = this.ClassID;

            // Translate
            foreach (Transform tr in prefab.transform)
            {
                tr.localPosition = new Vector3(tr.localPosition.x, tr.localPosition.y + 0.25f, tr.localPosition.z);
            }

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

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

            // Remove unwanted components
            EntityTag entityTag = prefab.GetComponent <EntityTag>();

            if (entityTag != null)
            {
                GameObject.DestroyImmediate(entityTag);
            }
            EcoTarget ecoTarget = prefab.GetComponent <EcoTarget>();

            if (ecoTarget != null)
            {
                GameObject.DestroyImmediate(ecoTarget);
            }
            ResourceTracker resourceTracker = prefab.GetComponent <ResourceTracker>();

            if (resourceTracker != null)
            {
                GameObject.DestroyImmediate(resourceTracker);
            }
            WorldForces worldForces = prefab.GetComponent <WorldForces>();

            if (worldForces != null)
            {
                GameObject.DestroyImmediate(worldForces);
            }

            // 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;

            // Remove Cube object to prevent physics
            GameObject cube = prefab.FindChild("Cube");

            if (cube != null)
            {
                GameObject.DestroyImmediate(cube);
            }

            // Remove rigid body to prevent physics bugs
            var rb = prefab.GetComponent <Rigidbody>();

            if (rb != null)
            {
                GameObject.DestroyImmediate(rb);
            }

            // Add box collider
            var collider = prefab.GetComponent <BoxCollider>();

            if (collider == null)
            {
                Collider[] colliders = prefab.GetComponentsInChildren <Collider>();
                if (colliders != null)
                {
                    foreach (Collider c in colliders)
                    {
                        GameObject.DestroyImmediate(c);
                    }
                }
                collider = prefab.AddComponent <BoxCollider>();
            }
            collider.size      = new Vector3(0.7f, 0.7f, 0.7f);
            collider.center    = new Vector3(collider.center.x - 0.15f, collider.center.y + 1.0f, collider.center.z - 1.0f);
            collider.isTrigger = true;

            // We can pick this item
            var pickupable = prefab.GetComponent <Pickupable>();

            if (pickupable == null)
            {
                pickupable = prefab.AddComponent <Pickupable>();
            }
            pickupable.isPickupable = true;
            pickupable.randomizeRotationWhenDropped = true;

            // We can place this item
            prefab.AddComponent <CustomPlaceToolController>();
            var placeTool = prefab.GetComponent <PlaceTool>();

            if (placeTool != null)
            {
                GameObject.DestroyImmediate(placeTool);
            }
            placeTool = prefab.AddComponent <GenericPlaceTool>();
            placeTool.allowedInBase          = true;
            placeTool.allowedOnBase          = true;
            placeTool.allowedOnCeiling       = false;
            placeTool.allowedOnConstructable = true;
            placeTool.allowedOnGround        = true;
            placeTool.allowedOnRigidBody     = true;
            placeTool.allowedOnWalls         = true;
            placeTool.allowedOutside         = ConfigSwitcher.AllowPlaceOutside;
            placeTool.rotationEnabled        = true;
            placeTool.enabled              = true;
            placeTool.hasAnimations        = false;
            placeTool.hasBashAnimation     = false;
            placeTool.hasFirstUseAnimation = false;
            placeTool.mainCollider         = collider;
            placeTool.pickupable           = pickupable;

            // Update sky applier
            PrefabsHelper.ReplaceSkyApplier(prefab, true);

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

            fabricating.localMinY   = -0.2f;
            fabricating.localMaxY   = 0.6f;
            fabricating.posOffset   = new Vector3(0.1f, 0.141f, 0.3f);
            fabricating.eulerOffset = new Vector3(0f, 0f, 0f);
            fabricating.scaleFactor = 0.2f;

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

            prefab.name = this.ClassID;

            if (!ConfigSwitcher.AlienRelic6Animation)
            {
                prefab.GetComponentInChildren <Animator>().enabled = false;
            }

            // Get objects
            GameObject relicCtrl = prefab.FindChild("alien_relic_02_core_ctrl");

            // Move
            relicCtrl.transform.localPosition = new Vector3(relicCtrl.transform.localPosition.x, relicCtrl.transform.localPosition.y + 0.22f, relicCtrl.transform.localPosition.z);

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

            techTag.type = this.TechType;

            // Update EntityTag
            var entityTag = prefab.GetComponent <EntityTag>();

            entityTag.slotType = EntitySlot.Type.Small;

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

            prefabId.ClassId = this.ClassID;

            // Remove rigid body to prevent bugs
            //GameObject.DestroyImmediate(prefab.GetComponent<Rigidbody>());
            //var rb = prefab.GetComponent<Rigidbody>();
            //rb.mass = 0.0f;
            //rb.detectCollisions = false;

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

            // Adjust colliders
            var collider = prefab.GetComponent <CapsuleCollider>();

            collider.radius    = 0.1f;
            collider.height    = 0.16f;
            collider.center    = new Vector3(0f, 0.08f, 0f);
            collider.isTrigger = true;
            var sCollider = prefab.GetComponentInChildren <SphereCollider>();

            sCollider.radius   *= 0.5f;
            sCollider.isTrigger = true;
            var bCollider = prefab.GetComponentInChildren <BoxCollider>();

            bCollider.size      = new Vector3(2f, 2f, 2f);
            bCollider.center    = Vector3.zero;
            bCollider.isTrigger = true;
            Targeting.AddToIgnoreList(bCollider.transform.parent);

            // We can pick this item
            var pickupable = prefab.AddComponent <Pickupable>();

            pickupable.isPickupable = true;
            pickupable.randomizeRotationWhenDropped = true;

            // We can place this item
            prefab.AddComponent <CustomPlaceToolController>();
            var placeTool = prefab.AddComponent <GenericPlaceTool>();

            placeTool.allowedInBase          = true;
            placeTool.allowedOnBase          = true;
            placeTool.allowedOnCeiling       = true;
            placeTool.allowedOnConstructable = true;
            placeTool.allowedOnGround        = true;
            placeTool.allowedOnRigidBody     = true;
            placeTool.allowedOnWalls         = true;
            placeTool.allowedOutside         = ConfigSwitcher.AllowPlaceOutside;
            placeTool.rotationEnabled        = true;
            placeTool.enabled              = true;
            placeTool.hasAnimations        = false;
            placeTool.hasBashAnimation     = false;
            placeTool.hasFirstUseAnimation = false;
            placeTool.mainCollider         = collider;
            placeTool.pickupable           = pickupable;

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

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

            return(prefab);
        }