Пример #1
0
    void Start()
    {
        Pico.LevelChanged += Initialize;
        Initialize();

        Anchor = Instantiate(Pico.ProjectorTemplate) as GameObject;
        Anchor.name = "Anchor";
        Anchor.GetComponent<ProjectorBehaviour>().IsGizmo = true;
        Anchor.FindChild("Inner").active = false;
        Anchor.FindChild("Pyramid").active = false;
        HighlightFace = Anchor.FindChild("Highlight Face");
        HighlightFace.GetComponentInChildren<Renderer>().enabled = false;

        Keyboard = KeyboardManager.Instance;
        Keyboard.RegisterKey(KeyCode.W);
        Keyboard.RegisterKey(KeyCode.S);
        Keyboard.RegisterKey(KeyCode.R);
        Keyboard.RegisterKey(KeyCode.Z);
        Keyboard.RegisterKey(KeyCode.Space);
        Keyboard.RegisterKey(KeyCode.LeftControl);

        Anchor.transform.position = new Vector3(0, 0, 0);

        Mouse = MouseManager.Instance;
        Gamepads = GamepadsManager.Instance;
    }
Пример #2
0
        public override GameObject GetPrefab()
        {
            GameObject prefab = GameObject.Instantiate(this.GameObject);

            prefab.name = this.ClassID;

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

            // Horizontal flip
            GameObject model = prefab.FindChild("Starship_circuit_box_01_03");

            model.transform.localScale = new Vector3(model.transform.localScale.x * -1.0f, model.transform.localScale.y, model.transform.localScale.z);

            // Remove Cube object to prevent physics bugs
            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);
            }

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

            if (collider == null)
            {
                collider = prefab.AddComponent <BoxCollider>();
            }
            collider.size = new Vector3(0.6f, 0.6f, 0.08f);

            // 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
            var placeTool = prefab.GetComponent <PlaceTool>();

            if (placeTool == null)
            {
                placeTool = prefab.AddComponent <PlaceTool>();
            }
            placeTool.allowedInBase          = true;
            placeTool.allowedOnBase          = true;
            placeTool.allowedOnCeiling       = false;
            placeTool.allowedOnConstructable = true;
            placeTool.allowedOnGround        = true;
            placeTool.allowedOnRigidBody     = true;
            placeTool.allowedOnWalls         = true;
            placeTool.allowedOutside         = false;
            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.46f;
            fabricating.localMaxY   = 0.5f;
            fabricating.posOffset   = new Vector3(-0.16f, 0.46f, 0.04f);
            fabricating.eulerOffset = new Vector3(0f, 0f, 0f);
            fabricating.scaleFactor = 0.6f;

            return(prefab);
        }
        // Save seamoth doll state
        public void OnProtoSerialize(ProtobufSerializer serializer)
        {
            PrefabIdentifier id = GetComponentInParent <PrefabIdentifier>();

            if (id == null)
            {
                return;
            }

            string saveFolder = FilesHelper.GetSaveFolderPath();

            if (!Directory.Exists(saveFolder))
            {
                Directory.CreateDirectory(saveFolder);
            }

            GameObject rightArm           = this.gameObject.FindChild("prawnsuit").FindChild("ExosuitArmRight");
            GameObject rightArmRig        = rightArm.FindChild("exosuit_01_armRight 1").FindChild("ArmRig 1");
            GameObject rightTorpedoArm    = rightArmRig.FindChild("exosuit_arm_torpedoLauncher_geo 1");
            GameObject rightDrillArm      = rightArmRig.FindChild("exosuit_drill_geo 1");
            GameObject rightGrapplinArm   = rightArmRig.FindChild("exosuit_grapplingHook_geo 1");
            GameObject rightPropulsionArm = rightArmRig.FindChild("exosuit_propulsion_geo 1");

            string state = "";

            if (rightTorpedoArm.GetComponent <Renderer>().enabled)
            {
                state = "0";
            }
            else if (rightDrillArm.GetComponent <Renderer>().enabled)
            {
                state = "1";
            }
            else if (rightGrapplinArm.GetComponent <Renderer>().enabled)
            {
                state = "2";
            }
            else if (rightPropulsionArm.GetComponent <Renderer>().enabled)
            {
                state = "3";
            }
            else // Right hand arm
            {
                state = "4";
            }

            GameObject leftArm           = this.gameObject.FindChild("prawnsuit").FindChild("ExosuitArmLeft");
            GameObject leftArmRig        = leftArm.FindChild("exosuit_01_armRight").FindChild("ArmRig");
            GameObject leftTorpedoArm    = leftArmRig.FindChild("exosuit_arm_torpedoLauncher_geo");
            GameObject leftDrillArm      = leftArmRig.FindChild("exosuit_drill_geo");
            GameObject leftGrapplinArm   = leftArmRig.FindChild("exosuit_grapplingHook_geo");
            GameObject leftPropulsionArm = leftArmRig.FindChild("exosuit_propulsion_geo");

            if (leftTorpedoArm.GetComponent <Renderer>().enabled)
            {
                state += "0";
            }
            else if (leftDrillArm.GetComponent <Renderer>().enabled)
            {
                state += "1";
            }
            else if (leftGrapplinArm.GetComponent <Renderer>().enabled)
            {
                state += "2";
            }
            else if (leftPropulsionArm.GetComponent <Renderer>().enabled)
            {
                state += "3";
            }
            else // Right hand arm
            {
                state += "4";
            }

            File.WriteAllText(Path.Combine(saveFolder, "prawnsuitdoll_" + id.Id + ".txt"), state);
        }
Пример #4
0
        public override GameObject GetGameObject()
        {
            GameObject prefab        = GameObject.Instantiate(this.GameObject);
            GameObject newsofaPrefab = GameObject.Instantiate(this.newsofa);

            prefab.name = this.ClassID;

            // Modify tech tag
            var techTag = prefab.GetComponent <TechTag>();

            techTag.type = this.TechType;

            // Modify prefab identifier
            var prefabId = prefab.GetComponent <PrefabIdentifier>();

            prefabId.ClassId = this.ClassID;

            // Retrieve model node
            GameObject model = prefab.FindChild("model");

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

            // Add large world entity
            var lwe = prefab.AddComponent <LargeWorldEntity>();

            lwe.cellLevel = LargeWorldEntity.CellLevel.Near;

            // Modify box colliders
            var collider = prefab.FindChild("Collider").GetComponent <BoxCollider>();

            collider.size = new Vector3(0.85f, 0.43f, 0.85f);
            var builderTrigger = prefab.FindChild("Builder Trigger").GetComponent <BoxCollider>();

            builderTrigger.size = new Vector3(0.85f, 0.43f, 0.85f);

            // Disable renderers
            Renderer[] renderers = prefab.GetComponentsInChildren <Renderer>();
            foreach (Renderer rend in renderers)
            {
                rend.enabled = false;
            }
            newsofaPrefab.transform.parent           = prefab.transform;
            newsofaPrefab.transform.localPosition    = new Vector3(0.0f, 0.0f, 0.0f);
            newsofaPrefab.transform.localScale       = new Vector3(3.48f, 3.48f, 3.48f);
            newsofaPrefab.transform.localEulerAngles = new Vector3(0.0f, 0.0f, 0.0f);
            newsofaPrefab.SetActive(true);

            // Get bench
            var bench = prefab.GetComponent <Bench>();

            bench.cinematicController.animatedTransform.localPosition = new Vector3(bench.cinematicController.animatedTransform.localPosition.x, bench.cinematicController.animatedTransform.localPosition.y, bench.cinematicController.animatedTransform.localPosition.z + 0.31f);

            // Set proper shaders
            Shader shader = Shader.Find("MarmosetUBER");

            renderers = prefab.GetComponentsInChildren <Renderer>();
            foreach (Renderer renderer in renderers)
            {
                foreach (Material tmpMat in renderer.materials)
                {
                    // Associate MarmosetUBER shader
                    tmpMat.shader = shader;

                    if (string.Compare(tmpMat.name, "descent_bar_sofa_01 (Instance)", true, CultureInfo.InvariantCulture) == 0)
                    {
                        tmpMat.SetTexture("_BumpMap", normal);
                        tmpMat.SetTexture("_SpecTex", spec);
                        tmpMat.EnableKeyword("MARMO_NORMALMAP");
                        tmpMat.EnableKeyword("MARMO_SPECMAP");
                        tmpMat.EnableKeyword("_ZWRITE_ON"); // Enable Z write
                    }
                }
            }

            // Update sky applier
            var skyapplier = prefab.GetComponent <SkyApplier>();

            skyapplier.renderers    = renderers;
            skyapplier.anchorSky    = Skies.Auto;
            skyapplier.updaterIndex = 0;

            if (ConfigSwitcher.SofaStr1_asBuidable)
            {
                // Update contructable
                var constructible = prefab.GetComponent <Constructable>();
                constructible.allowedInBase           = true;
                constructible.allowedInSub            = true;
                constructible.allowedOutside          = ConfigSwitcher.AllowBuildOutside;
                constructible.allowedOnCeiling        = false;
                constructible.allowedOnGround         = true;
                constructible.allowedOnConstructables = false;
                constructible.controlModelState       = true;
                constructible.deconstructionAllowed   = true;
                constructible.rotationEnabled         = true;
                constructible.model    = prefab.FindChild("descent_bar_sofa_str_01(Clone)");
                constructible.techType = this.TechType;
                constructible.enabled  = true;

                // Update constructable bounds
                var constructableBounds = prefab.GetComponent <ConstructableBounds>();
                constructableBounds.bounds = new OrientedBounds(new Vector3(constructableBounds.bounds.position.x, constructableBounds.bounds.position.y, constructableBounds.bounds.position.z),
                                                                new Quaternion(constructableBounds.bounds.rotation.x, constructableBounds.bounds.rotation.y, constructableBounds.bounds.rotation.z, constructableBounds.bounds.rotation.w),
                                                                new Vector3(constructableBounds.bounds.extents.x * 0.3f, constructableBounds.bounds.extents.y, constructableBounds.bounds.extents.z * 0.3f));
            }
            else
            {
                // Remove constructable
                var constructable   = prefab.GetComponent <Constructable>();
                var constructBounds = prefab.GetComponent <ConstructableBounds>();
                GameObject.DestroyImmediate(constructable);
                GameObject.DestroyImmediate(constructBounds);

                // 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          = false;
                placeTool.allowedOnCeiling       = false;
                placeTool.allowedOnConstructable = true;
                placeTool.allowedOnGround        = true;
                placeTool.allowedOnRigidBody     = true;
                placeTool.allowedOnWalls         = false;
                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;
                placeTool.drawTime             = 0.5f;
                placeTool.dropTime             = 1;
                placeTool.holsterTime          = 0.35f;

                // Add fabricating animation
                var fabricatingA = prefab.AddComponent <VFXFabricating>();
                fabricatingA.localMinY   = -0.2f;
                fabricatingA.localMaxY   = 0.7f;
                fabricatingA.posOffset   = new Vector3(0f, 0f, 0.1f);
                fabricatingA.eulerOffset = new Vector3(0f, 0f, 0f);
                fabricatingA.scaleFactor = 0.5f;
            }

            return(prefab);
        }
        public void CreateCannonLeft()
        {
            cannon_base_left = new GameObject("cannon_base_left");
            cannon_base_left.transform.SetParent(gameObject.transform);
            cannon_base_left.transform.localPosition = new Vector3(3.55f, -7.19f, 0.81f);
            cannon_base_left.transform.localRotation = Quaternion.Euler(0f, 0f, 0f);

            GameObject cannon_left_circuit_box = CraftData.InstantiateFromPrefab(TechType.StarshipCircuitBox);

            cannon_left_circuit_box.transform.SetParent(cannon_base_left.transform, false);

            cannon_left_circuit_box.CleanObject();
            cannon_left_circuit_box.name = "cannon_left_circuit_box";
            cannon_left_circuit_box.transform.localPosition = new Vector3(0.56f, 0.48f, -0.66f);
            cannon_left_circuit_box.transform.localScale    = new Vector3(0.72f, 0.72f, 0.72f);
            cannon_left_circuit_box.transform.localRotation = Quaternion.Euler(72f, 90f, 0f);

            GameObject cannon_pylon_left = CraftData.InstantiateFromPrefab(TechType.PowerTransmitter);

            cannon_pylon_left.transform.SetParent(cannon_base_left.transform, false);
            Utils.ZeroTransform(cannon_pylon_left.transform);

            GameObject laserBeam = Instantiate(cannon_pylon_left.GetComponent <PowerFX>().vfxPrefab, cannon_base_left.transform, false);

            laserBeam.SetActive(false);

            LineRenderer lineRenderer = laserBeam.GetComponent <LineRenderer>();

            lineRenderer.startWidth     = 0.2f;
            lineRenderer.endWidth       = 0.2f;
            lineRenderer.positionCount  = 2;
            lineRenderer.material.color = beamcolor;

            Destroy(cannon_pylon_left.FindChild("powerFX_AttachPoint"));
            Destroy(cannon_pylon_left.FindChild("builder trigger"));
            cannon_pylon_left.CleanObject();
            cannon_pylon_left.name = "cannon_pylon_left";
            cannon_pylon_left.transform.localPosition = new Vector3(0.00f, 0.44f, 0f);
            cannon_pylon_left.transform.localRotation = Quaternion.Euler(0f, 180f, 180f);

            cannon_left_rotation_point = new GameObject("cannon_left_rotation_point");
            cannon_left_rotation_point.transform.SetParent(cannon_pylon_left.transform, false);
            cannon_left_rotation_point.transform.localPosition = new Vector3(0.00f, 0.98f, 0.00f);
            cannon_left_rotation_point.transform.localRotation = Quaternion.Euler(25f, 180f, 0f);

            GameObject cannon_left = CraftData.InstantiateFromPrefab(TechType.ExosuitTorpedoArmModule);

            cannon_left.transform.SetParent(cannon_left_rotation_point.transform, false);

            Destroy(cannon_left.FindChild("GameObject"));
            cannon_left.transform.Find("model/exosuit_rig_armLeft:exosuit_torpedoLauncher_geo").name = "cannon_model";

            cannon_left.CleanObject();
            cannon_left.name = "cannon_left";
            cannon_left.transform.localPosition = new Vector3(0.00f, 0.14f, -0.66f);
            cannon_left.transform.localRotation = Quaternion.Euler(0f, 270f, 180f);

            SetMeshMaterial(cannon_left.transform.Find("model/cannon_model").gameObject, Main.cannon_material, 1);

            cannon_left_tube_right      = Instantiate(laserBeam, cannon_left.transform, Vector3.zero, Quaternion.identity, false);
            cannon_left_tube_right.name = "cannon_left_tube_right";
            cannon_left_tube_right.transform.localPosition = new Vector3(0.68f, 0.0f, -0.17f);
            cannon_left_tube_right.transform.localRotation = Quaternion.Euler(0f, 90f, 0f);
            left_right = cannon_left_tube_right.GetComponent <LineRenderer>();

            cannon_left_tube_left      = Instantiate(laserBeam, cannon_left.transform, Vector3.zero, Quaternion.identity, false);
            cannon_left_tube_left.name = "cannon_left_tube_left";
            cannon_left_tube_left.transform.localPosition = new Vector3(0.68f, 0.0f, 0.17f);
            cannon_left_tube_left.transform.localRotation = Quaternion.Euler(0f, 90f, 0f);
            left_left = cannon_left_tube_left.GetComponent <LineRenderer>();

            Destroy(laserBeam);
        }
Пример #6
0
        public void OnProtoDeserialize(ProtobufSerializer serializer)
        {
            // Retrieve save file
            PrefabIdentifier id = GetComponent <PrefabIdentifier>();

            if (id == null)
            {
                if ((id = GetComponentInParent <PrefabIdentifier>()) == null)
                {
                    return;
                }
            }

            string filePath = Path.Combine(FilesHelper.GetSaveFolderPath(), "custompictureframe_" + id.Id + ".txt");

            if (File.Exists(filePath))
            {
                GameObject   frame = this.gameObject.FindChild("mesh");
                PictureFrame pf    = this.gameObject.GetComponent <PictureFrame>();

                string   tmpSize = File.ReadAllText(filePath).Replace(',', '.'); // Replace , with . for backward compatibility.
                string[] sizes   = tmpSize.Split("\r\n".ToCharArray(), StringSplitOptions.RemoveEmptyEntries);
                if (sizes.Length >= 10 || sizes.Length <= 12)
                {
                    // Restore frame angles
                    string[] eulerAngles = sizes[0].Split("|".ToCharArray(), StringSplitOptions.RemoveEmptyEntries);
                    if (eulerAngles.Length == 3)
                    {
                        Vector3 savedEulerAngles = new Vector3(OriginFrameEulerAngles.x, OriginFrameEulerAngles.y, OriginFrameEulerAngles.z);
                        float.TryParse(eulerAngles[0], NumberStyles.Float, CultureInfo.InvariantCulture, out savedEulerAngles.x);
                        float.TryParse(eulerAngles[1], NumberStyles.Float, CultureInfo.InvariantCulture, out savedEulerAngles.y);
                        float.TryParse(eulerAngles[2], NumberStyles.Float, CultureInfo.InvariantCulture, out savedEulerAngles.z);
                        frame.transform.localEulerAngles = savedEulerAngles;
                    }

                    // Restore collider size
                    string[] colliderSize = sizes[1].Split("|".ToCharArray(), StringSplitOptions.RemoveEmptyEntries);
                    if (colliderSize.Length == 3)
                    {
                        Vector3 savedColliderSize = new Vector3(OriginColliderSize.x, OriginColliderSize.y, OriginColliderSize.z);
                        float.TryParse(colliderSize[0], NumberStyles.Float, CultureInfo.InvariantCulture, out savedColliderSize.x);
                        float.TryParse(colliderSize[1], NumberStyles.Float, CultureInfo.InvariantCulture, out savedColliderSize.y);
                        float.TryParse(colliderSize[2], NumberStyles.Float, CultureInfo.InvariantCulture, out savedColliderSize.z);
                        GameObject  trigger  = this.gameObject.FindChild("Trigger");
                        BoxCollider collider = trigger.GetComponent <BoxCollider>();
                        collider.size = savedColliderSize;
                    }

                    // Restore picture scale
                    string[] imageRendererScale = sizes[2].Split("|".ToCharArray(), StringSplitOptions.RemoveEmptyEntries);
                    if (imageRendererScale.Length == 3)
                    {
                        Vector3 savedImageRendererScale = new Vector3(OriginImageScale.x, OriginImageScale.y, OriginImageScale.z);
                        float.TryParse(imageRendererScale[0], NumberStyles.Float, CultureInfo.InvariantCulture, out savedImageRendererScale.x);
                        float.TryParse(imageRendererScale[1], NumberStyles.Float, CultureInfo.InvariantCulture, out savedImageRendererScale.y);
                        float.TryParse(imageRendererScale[2], NumberStyles.Float, CultureInfo.InvariantCulture, out savedImageRendererScale.z);
                        pf.imageRenderer.transform.localScale = savedImageRendererScale;
                    }

                    // Restore frame border visibility
                    GameObject   pictureFrame  = frame.FindChild("submarine_Picture_Frame");
                    MeshRenderer frameRenderer = pictureFrame.GetComponent <MeshRenderer>();
                    frameRenderer.enabled = ((string.Compare(sizes[3], "1", false, CultureInfo.InvariantCulture) == 0) ? true : false);
                    GameObject   frameButton    = pictureFrame.FindChild("submarine_Picture_Frame_button");
                    MeshRenderer buttonRenderer = frameButton.GetComponent <MeshRenderer>();
                    buttonRenderer.enabled = ((string.Compare(sizes[3], "1", false, CultureInfo.InvariantCulture) == 0) ? true : false);
                    GameObject poster      = this.gameObject.FindChild("poster_decorations(Clone)");
                    GameObject posterModel = poster.FindChild("model");
                    GameObject magnetModel = posterModel.FindChild("poster_kitty");

                    // Restore constructable bounds extents
                    string[] constructableBoundsExtents = sizes[4].Split("|".ToCharArray(), StringSplitOptions.RemoveEmptyEntries);
                    if (constructableBoundsExtents.Length == 3)
                    {
                        Vector3 savedConstructableBoundsExtents = new Vector3(OriginConstructableBoundsExtents.x, OriginConstructableBoundsExtents.y, OriginConstructableBoundsExtents.z);
                        float.TryParse(constructableBoundsExtents[0], NumberStyles.Float, CultureInfo.InvariantCulture, out savedConstructableBoundsExtents.x);
                        float.TryParse(constructableBoundsExtents[1], NumberStyles.Float, CultureInfo.InvariantCulture, out savedConstructableBoundsExtents.y);
                        float.TryParse(constructableBoundsExtents[2], NumberStyles.Float, CultureInfo.InvariantCulture, out savedConstructableBoundsExtents.z);
                        ConstructableBounds constructableBounds = this.gameObject.GetComponent <ConstructableBounds>();
                        constructableBounds.bounds.extents = savedConstructableBoundsExtents;
                    }

                    // Restore picture frame sizes & positions
                    string[] modelScale = sizes[5].Split("|".ToCharArray(), StringSplitOptions.RemoveEmptyEntries);
                    if (modelScale.Length == 3)
                    {
                        Vector3 updateModelScale = new Vector3(OriginFrameScale.x, OriginFrameScale.y, OriginFrameScale.z);
                        float.TryParse(modelScale[0], NumberStyles.Float, CultureInfo.InvariantCulture, out updateModelScale.x);
                        float.TryParse(modelScale[1], NumberStyles.Float, CultureInfo.InvariantCulture, out updateModelScale.y);
                        float.TryParse(modelScale[2], NumberStyles.Float, CultureInfo.InvariantCulture, out updateModelScale.z);
                        frame.transform.localScale = updateModelScale;
                    }
                    string[] posterMagnetPosition = sizes[6].Split("|".ToCharArray(), StringSplitOptions.RemoveEmptyEntries);
                    if (posterMagnetPosition.Length == 3)
                    {
                        Vector3 updatePosterMagnetPosition = new Vector3(OriginPosterPosition.x, OriginPosterPosition.y, OriginPosterPosition.z);
                        float.TryParse(posterMagnetPosition[0], NumberStyles.Float, CultureInfo.InvariantCulture, out updatePosterMagnetPosition.x);
                        float.TryParse(posterMagnetPosition[1], NumberStyles.Float, CultureInfo.InvariantCulture, out updatePosterMagnetPosition.y);
                        float.TryParse(posterMagnetPosition[2], NumberStyles.Float, CultureInfo.InvariantCulture, out updatePosterMagnetPosition.z);
                        poster.transform.localPosition = updatePosterMagnetPosition;
                    }
                    string[] posterModelPosition = sizes[7].Split("|".ToCharArray(), StringSplitOptions.RemoveEmptyEntries);
                    if (posterModelPosition.Length == 3)
                    {
                        Vector3 updatePosterModelPosition = new Vector3(OriginPosterModelPosition.x, OriginPosterModelPosition.y, OriginPosterModelPosition.z);
                        float.TryParse(posterModelPosition[0], NumberStyles.Float, CultureInfo.InvariantCulture, out updatePosterModelPosition.x);
                        float.TryParse(posterModelPosition[1], NumberStyles.Float, CultureInfo.InvariantCulture, out updatePosterModelPosition.y);
                        float.TryParse(posterModelPosition[2], NumberStyles.Float, CultureInfo.InvariantCulture, out updatePosterModelPosition.z);
                        posterModel.transform.localPosition = updatePosterModelPosition;
                    }
                    string[] posterModelScale = sizes[8].Split("|".ToCharArray(), StringSplitOptions.RemoveEmptyEntries);
                    if (posterModelScale.Length == 3)
                    {
                        Vector3 updatePosterModelScale = new Vector3(OriginPosterModelScale.x, OriginPosterModelScale.y, OriginPosterModelScale.z);
                        float.TryParse(posterModelScale[0], NumberStyles.Float, CultureInfo.InvariantCulture, out updatePosterModelScale.x);
                        float.TryParse(posterModelScale[1], NumberStyles.Float, CultureInfo.InvariantCulture, out updatePosterModelScale.y);
                        float.TryParse(posterModelScale[2], NumberStyles.Float, CultureInfo.InvariantCulture, out updatePosterModelScale.z);
                        posterModel.transform.localScale = updatePosterModelScale;
                    }
                    string[] imageRendererPosition = sizes[9].Split("|".ToCharArray(), StringSplitOptions.RemoveEmptyEntries);
                    if (imageRendererPosition.Length == 3)
                    {
                        Vector3 updateImageRendererPosition = Vector3.zero;
                        float.TryParse(imageRendererPosition[0], NumberStyles.Float, CultureInfo.InvariantCulture, out updateImageRendererPosition.x);
                        float.TryParse(imageRendererPosition[1], NumberStyles.Float, CultureInfo.InvariantCulture, out updateImageRendererPosition.y);
                        float.TryParse(imageRendererPosition[2], NumberStyles.Float, CultureInfo.InvariantCulture, out updateImageRendererPosition.z);
                        pf.imageRenderer.transform.localPosition = updateImageRendererPosition;
                    }
                    // Restore magnet scale
                    if (sizes.Length >= 11)
                    {
                        string[] posterMagnetScale = sizes[10].Split("|".ToCharArray(), StringSplitOptions.RemoveEmptyEntries);
                        if (posterMagnetScale.Length == 3)
                        {
                            Vector3 updateMagnetScale = new Vector3(OriginMagnetScale.x, OriginMagnetScale.y, OriginMagnetScale.z);
                            float.TryParse(posterMagnetScale[0], NumberStyles.Float, CultureInfo.InvariantCulture, out updateMagnetScale.x);
                            float.TryParse(posterMagnetScale[1], NumberStyles.Float, CultureInfo.InvariantCulture, out updateMagnetScale.y);
                            float.TryParse(posterMagnetScale[2], NumberStyles.Float, CultureInfo.InvariantCulture, out updateMagnetScale.z);
                            magnetModel.transform.localScale = updateMagnetScale;
                        }
                    }
                    // Restore frame position
                    if (sizes.Length >= 12)
                    {
                        string[] framePosition = sizes[11].Split("|".ToCharArray(), StringSplitOptions.RemoveEmptyEntries);
                        if (framePosition.Length == 3)
                        {
                            Vector3 updateFramePosition = new Vector3(OriginFramePosition.x, OriginFramePosition.y, OriginFramePosition.z + 0.0001f);
                            float.TryParse(framePosition[0], NumberStyles.Float, CultureInfo.InvariantCulture, out updateFramePosition.x);
                            float.TryParse(framePosition[1], NumberStyles.Float, CultureInfo.InvariantCulture, out updateFramePosition.y);
                            float.TryParse(framePosition[2], NumberStyles.Float, CultureInfo.InvariantCulture, out updateFramePosition.z);
                            frame.transform.localPosition = updateFramePosition;
                        }
                    }

                    // Restore flip toogle
                    this.Flipped = (pf.imageRenderer.transform.localScale.x > pf.imageRenderer.transform.localScale.y);

                    GameObject   bgBisModel      = posterModel.FindChild("poster_background_bis");
                    MeshRenderer bgBisRenderer   = bgBisModel?.GetComponent <MeshRenderer>();
                    GameObject   bgPivotModel    = posterModel.FindChild("poster_background_pivot");
                    MeshRenderer bgPivotRenderer = bgPivotModel?.GetComponent <MeshRenderer>();

                    // Rotate poster background if needed
                    if (this.Flipped)
                    {
                        bgPivotRenderer.enabled = !(string.Compare(sizes[3], "1", false, CultureInfo.InvariantCulture) == 0);
                        bgBisRenderer.enabled   = false;
                    }
                    else
                    {
                        bgPivotRenderer.enabled = false;
                        bgBisRenderer.enabled   = !(string.Compare(sizes[3], "1", false, CultureInfo.InvariantCulture) == 0);
                    }

                    MeshRenderer magnetRenderer = magnetModel.GetComponent <MeshRenderer>();

                    // Adjust magnet position
                    if (bgPivotRenderer.enabled)
                    {
                        magnetModel.transform.localPosition = new Vector3(0f, -0.0115f, 0f);
                    }
                    else
                    {
                        magnetModel.transform.localPosition = Vector3.zero;
                    }

                    // Restore magnet visibility
                    magnetRenderer.enabled = (string.Compare(sizes[3], "2", false, CultureInfo.InvariantCulture) == 0);

                    // Refresh picture
                    PictureFrameEnumHelper.SetStateMethod.Invoke(pf, new object[] { PictureFrameEnumHelper.ThumbnailEnumValue });
                    this.Invoke("MySetState", 2f);
                }
            }
        }
Пример #7
0
        public override void RegisterItem()
        {
            if (this.IsRegistered == false)
            {
                GameObject aquarium = Resources.Load <GameObject>("Submarine/Build/Aquarium");

                // Retrieve model node
                GameObject model = this.GameObject.FindChild("prawnsuit");

                // Move model
                model.transform.localPosition = new Vector3(model.transform.localPosition.x, model.transform.localPosition.y - 0.002f, model.transform.localPosition.z);

                // Add prefab identifier
                var prefabId = this.GameObject.AddComponent <PrefabIdentifier>();
                prefabId.ClassId = this.ClassID;

                // Add large world entity
                PrefabsHelper.SetDefaultLargeWorldEntity(this.GameObject);

                // Add tech tag
                var techTag = this.GameObject.AddComponent <TechTag>();
                techTag.type = this.TechType;

                // Add box collider
                var collider = this.GameObject.AddComponent <BoxCollider>();
                //collider.radius = 0.0375f;
                collider.size   = new Vector3(0.04f, 0.115f, 0.04f);
                collider.center = new Vector3(collider.center.x, collider.center.y + 0.0575f, collider.center.z);

                // Get glass material
                Material   glass      = null;
                Renderer[] aRenderers = aquarium.GetComponentsInChildren <Renderer>(true);
                foreach (Renderer aRenderer in aRenderers)
                {
                    foreach (Material aMaterial in aRenderer.materials)
                    {
                        if (aMaterial.name.StartsWith("Aquarium_glass", StringComparison.OrdinalIgnoreCase))
                        {
                            glass = aMaterial;
                            break;
                        }
                    }
                    if (glass != null)
                    {
                        break;
                    }
                }

                // Set proper shaders (for crafting animation)
                Shader  shader     = Shader.Find("MarmosetUBER");
                Texture normal     = AssetsHelper.Assets.LoadAsset <Texture>("exosuit_01_normal");
                Texture spec       = AssetsHelper.Assets.LoadAsset <Texture>("exosuit_01_spec");
                Texture colorMask  = AssetsHelper.Assets.LoadAsset <Texture>("exosuit_01_colorMask");
                Texture illum      = AssetsHelper.Assets.LoadAsset <Texture>("exosuit_01_illum");
                Texture normal2    = AssetsHelper.Assets.LoadAsset <Texture>("exosuit_01_fp_normal");
                Texture illum2     = AssetsHelper.Assets.LoadAsset <Texture>("exosuit_01_fp_illum");
                Texture normal3    = AssetsHelper.Assets.LoadAsset <Texture>("Exosuit_Arm_Propulsion_Cannon_normal");
                Texture colorMask3 = AssetsHelper.Assets.LoadAsset <Texture>("Exosuit_Arm_Propulsion_Cannon_colorMask");
                Texture illum3     = AssetsHelper.Assets.LoadAsset <Texture>("Exosuit_Arm_Propulsion_Cannon_illum");
                Texture normal4    = AssetsHelper.Assets.LoadAsset <Texture>("Exosuit_grappling_arm_normal");
                Texture colorMask4 = AssetsHelper.Assets.LoadAsset <Texture>("Exosuit_grappling_arm_colorMask");
                Texture illum4     = AssetsHelper.Assets.LoadAsset <Texture>("Exosuit_grappling_arm_illum");
                Texture normal5    = AssetsHelper.Assets.LoadAsset <Texture>("exosuit_01_glass_normal");
                Texture normal6    = AssetsHelper.Assets.LoadAsset <Texture>("exosuit_storage_01_normal");
                Texture colorMask6 = AssetsHelper.Assets.LoadAsset <Texture>("exosuit_storage_01_colorMask");
                Texture illum6     = AssetsHelper.Assets.LoadAsset <Texture>("exosuit_storage_01_illum");
                Texture normal7    = AssetsHelper.Assets.LoadAsset <Texture>("Exosuit_torpedo_launcher_arm_normal");
                Texture colorMask7 = AssetsHelper.Assets.LoadAsset <Texture>("Exosuit_torpedo_launcher_arm_colorMask");
                Texture illum7     = AssetsHelper.Assets.LoadAsset <Texture>("Exosuit_torpedo_launcher_arm_illum");
                Texture normal8    = AssetsHelper.Assets.LoadAsset <Texture>("engine_power_cell_ion_normal");
                Texture spec8      = AssetsHelper.Assets.LoadAsset <Texture>("engine_power_cell_ion_spec");
                Texture illum8     = AssetsHelper.Assets.LoadAsset <Texture>("engine_power_cell_ion_illum");
                Texture normal9    = AssetsHelper.Assets.LoadAsset <Texture>("seamoth_torpedo_01_normal");
                Texture spec9      = AssetsHelper.Assets.LoadAsset <Texture>("seamoth_torpedo_01_spec");
                Texture normal10   = AssetsHelper.Assets.LoadAsset <Texture>("seamoth_upgrade_slots_01_normal");
                Texture spec10     = AssetsHelper.Assets.LoadAsset <Texture>("seamoth_upgrade_slots_01_spec");
                Texture illum10    = AssetsHelper.Assets.LoadAsset <Texture>("seamoth_upgrade_slots_01_illum");
                Texture normal11   = AssetsHelper.Assets.LoadAsset <Texture>("submarine_engine_power_cells_01_normal");
                Texture spec11     = AssetsHelper.Assets.LoadAsset <Texture>("submarine_engine_power_cells_01_spec");
                Texture illum11    = AssetsHelper.Assets.LoadAsset <Texture>("submarine_engine_power_cells_01_illum");

                Renderer[] renderers = this.GameObject.GetAllComponentsInChildren <Renderer>();
                foreach (Renderer renderer in renderers)
                {
                    if (renderer.name.StartsWith("Exosuit_cabin_01_glass", true, CultureInfo.InvariantCulture))
                    {
                        renderer.material = glass;
                    }
                    else if (renderer.materials != null)
                    {
                        foreach (Material tmpMat in renderer.materials)
                        {
                            // Associate MarmosetUBER shader
                            if (string.Compare(tmpMat.name, "exosuit_cabin_01_glass (Instance)", true, CultureInfo.InvariantCulture) == 0)
                            {
                                tmpMat.EnableKeyword("MARMO_SIMPLE_GLASS");
                                tmpMat.EnableKeyword("WBOIT");
                            }
                            else if (string.Compare(tmpMat.name, "exosuit_01_glass (Instance)", true, CultureInfo.InvariantCulture) != 0)
                            {
                                tmpMat.shader = shader;
                            }

                            if (string.Compare(tmpMat.name, "exosuit_01 (Instance)", true, CultureInfo.InvariantCulture) == 0)
                            {
                                tmpMat.SetTexture("_BumpMap", normal);
                                tmpMat.SetTexture("_ColorMask", colorMask);
                                tmpMat.SetTexture("_SpecTex", spec);
                                tmpMat.SetTexture("_Illum", illum);
                                tmpMat.SetFloat("_EmissionLM", 0.75f); // Set always visible

                                // Enable color mask
                                tmpMat.EnableKeyword("MARMO_VERTEX_COLOR");
                                // Enable specular
                                //tmpMat.EnableKeyword("MARMO_SPECULAR_ON");
                                tmpMat.EnableKeyword("MARMO_SPECULAR_IBL");
                                tmpMat.EnableKeyword("MARMO_SPECULAR_DIRECT");
                                tmpMat.EnableKeyword("MARMO_SPECMAP");
                                tmpMat.EnableKeyword("MARMO_MIP_GLOSS");
                                // Enable normal map
                                tmpMat.EnableKeyword("MARMO_NORMALMAP");
                                // Enable emission map
                                tmpMat.EnableKeyword("MARMO_EMISSION");
                                // Enable Z write
                                tmpMat.EnableKeyword("_ZWRITE_ON");
                            }
                            else if (string.Compare(tmpMat.name, "exosuit_01_fp (Instance)", true, CultureInfo.InvariantCulture) == 0)
                            {
                                tmpMat.SetTexture("_BumpMap", normal2);
                                tmpMat.SetTexture("_Illum", illum2);
                                tmpMat.SetFloat("_EmissionLM", 0.75f); // Set always visible

                                // Enable normal map
                                tmpMat.EnableKeyword("MARMO_NORMALMAP");
                                // Enable emission map
                                tmpMat.EnableKeyword("MARMO_EMISSION");
                                // Enable Z write
                                tmpMat.EnableKeyword("_ZWRITE_ON");
                            }
                            else if (string.Compare(tmpMat.name, "Exosuit_Arm_Propulsion_Cannon (Instance)", true, CultureInfo.InvariantCulture) == 0)
                            {
                                tmpMat.SetTexture("_BumpMap", normal3);
                                tmpMat.SetTexture("_ColorMask", colorMask3);
                                tmpMat.SetTexture("_Illum", illum3);
                                tmpMat.SetFloat("_EmissionLM", 0.75f); // Set always visible

                                // Enable color mask
                                tmpMat.EnableKeyword("MARMO_VERTEX_COLOR");
                                // Enable normal map
                                tmpMat.EnableKeyword("MARMO_NORMALMAP");
                                // Enable emission map
                                tmpMat.EnableKeyword("MARMO_EMISSION");
                                // Enable Z write
                                tmpMat.EnableKeyword("_ZWRITE_ON");
                            }
                            else if (string.Compare(tmpMat.name, "Exosuit_grappling_arm (Instance)", true, CultureInfo.InvariantCulture) == 0)
                            {
                                tmpMat.SetTexture("_BumpMap", normal4);
                                tmpMat.SetTexture("_ColorMask", colorMask4);
                                tmpMat.SetTexture("_Illum", illum4);
                                tmpMat.SetFloat("_EmissionLM", 0.75f); // Set always visible

                                // Enable color mask
                                tmpMat.EnableKeyword("MARMO_VERTEX_COLOR");
                                // Enable normal map
                                tmpMat.EnableKeyword("MARMO_NORMALMAP");
                                // Enable emission map
                                tmpMat.EnableKeyword("MARMO_EMISSION");
                                // Enable Z write
                                tmpMat.EnableKeyword("_ZWRITE_ON");
                            }

                            /*
                             * else if (tmpMat.name.CompareTo("exosuit_01_glass (Instance)") == 0)
                             * {
                             *  tmpMat.SetTexture("_BumpMap", normal5);
                             *
                             *  tmpMat.EnableKeyword("MARMO_SIMPLE_GLASS");
                             *  tmpMat.EnableKeyword("MARMO_NORMALMAP");
                             *  tmpMat.EnableKeyword("WBOIT");
                             *  tmpMat.EnableKeyword("_ZWRITE_ON");
                             * }
                             * else if (tmpMat.name.CompareTo("exosuit_cabin_01_glass (Instance)") == 0)
                             * {
                             *  tmpMat.EnableKeyword("MARMO_SIMPLE_GLASS");
                             *  tmpMat.EnableKeyword("WBOIT");
                             * }
                             */
                            else if (string.Compare(tmpMat.name, "exosuit_storage_01 (Instance)", true, CultureInfo.InvariantCulture) == 0)
                            {
                                tmpMat.SetTexture("_BumpMap", normal6);
                                tmpMat.SetTexture("_ColorMask", colorMask6);
                                tmpMat.SetTexture("_Illum", illum6);
                                tmpMat.SetFloat("_EmissionLM", 0.75f); // Set always visible

                                // Enable color mask
                                tmpMat.EnableKeyword("MARMO_VERTEX_COLOR");
                                // Enable normal map
                                tmpMat.EnableKeyword("MARMO_NORMALMAP");
                                // Enable emission map
                                tmpMat.EnableKeyword("MARMO_EMISSION");
                                // Enable Z write
                                tmpMat.EnableKeyword("_ZWRITE_ON");
                            }
                            else if (string.Compare(tmpMat.name, "Exosuit_torpedo_launcher_arm (Instance)", true, CultureInfo.InvariantCulture) == 0)
                            {
                                tmpMat.SetTexture("_BumpMap", normal7);
                                tmpMat.SetTexture("_ColorMask", colorMask7);
                                tmpMat.SetTexture("_Illum", illum7);
                                tmpMat.SetFloat("_EmissionLM", 0.75f); // Set always visible

                                // Enable color mask
                                tmpMat.EnableKeyword("MARMO_VERTEX_COLOR");
                                // Enable normal map
                                tmpMat.EnableKeyword("MARMO_NORMALMAP");
                                // Enable emission map
                                tmpMat.EnableKeyword("MARMO_EMISSION");
                                // Enable Z write
                                tmpMat.EnableKeyword("_ZWRITE_ON");
                            }
                            else if (string.Compare(tmpMat.name, "power_cell_01 (Instance)", true, CultureInfo.InvariantCulture) == 0)
                            {
                                tmpMat.SetTexture("_BumpMap", normal8);
                                tmpMat.SetTexture("_SpecTex", spec8);
                                tmpMat.SetTexture("_Illum", illum8);
                                tmpMat.SetFloat("_EmissionLM", 0.75f); // Set always visible

                                // Enable specular
                                tmpMat.EnableKeyword("MARMO_SPECULAR_IBL");
                                tmpMat.EnableKeyword("MARMO_SPECULAR_DIRECT");
                                tmpMat.EnableKeyword("MARMO_SPECMAP");
                                tmpMat.EnableKeyword("MARMO_MIP_GLOSS");
                                // Enable normal map
                                tmpMat.EnableKeyword("MARMO_NORMALMAP");
                                // Enable emission map
                                tmpMat.EnableKeyword("MARMO_EMISSION");
                                // Enable Z write
                                tmpMat.EnableKeyword("_ZWRITE_ON");
                            }
                            else if (string.Compare(tmpMat.name, "seamoth_torpedo_01 (Instance)", true, CultureInfo.InvariantCulture) == 0)
                            {
                                tmpMat.SetTexture("_BumpMap", normal9);
                                tmpMat.SetTexture("_SpecTex", spec9);
                                tmpMat.SetFloat("_EmissionLM", 0.75f); // Set always visible

                                // Enable specular
                                tmpMat.EnableKeyword("MARMO_SPECULAR_IBL");
                                tmpMat.EnableKeyword("MARMO_SPECULAR_DIRECT");
                                tmpMat.EnableKeyword("MARMO_SPECMAP");
                                tmpMat.EnableKeyword("MARMO_MIP_GLOSS");
                                // Enable normal map
                                tmpMat.EnableKeyword("MARMO_NORMALMAP");
                                // Enable Z write
                                tmpMat.EnableKeyword("_ZWRITE_ON");
                            }
                            else if (string.Compare(tmpMat.name, "seamoth_upgrade_slots_01 (Instance)", true, CultureInfo.InvariantCulture) == 0)
                            {
                                tmpMat.SetTexture("_BumpMap", normal10);
                                tmpMat.SetTexture("_SpecTex", spec10);
                                tmpMat.SetTexture("_Illum", illum10);
                                tmpMat.SetFloat("_EmissionLM", 0.75f); // Set always visible

                                // Enable specular
                                tmpMat.EnableKeyword("MARMO_SPECULAR_IBL");
                                tmpMat.EnableKeyword("MARMO_SPECULAR_DIRECT");
                                tmpMat.EnableKeyword("MARMO_SPECMAP");
                                tmpMat.EnableKeyword("MARMO_MIP_GLOSS");
                                // Enable normal map
                                tmpMat.EnableKeyword("MARMO_NORMALMAP");
                                // Enable emission map
                                tmpMat.EnableKeyword("MARMO_EMISSION");
                                // Enable Z write
                                tmpMat.EnableKeyword("_ZWRITE_ON");
                            }
                            else if (string.Compare(tmpMat.name, "submarine_engine_power_cells_01 (Instance)", true, CultureInfo.InvariantCulture) == 0)
                            {
                                tmpMat.SetTexture("_BumpMap", normal11);
                                tmpMat.SetTexture("_SpecTex", spec11);
                                tmpMat.SetTexture("_Illum", illum11);
                                tmpMat.SetFloat("_EmissionLM", 0.75f); // Set always visible

                                // Enable specular
                                tmpMat.EnableKeyword("MARMO_SPECULAR_IBL");
                                tmpMat.EnableKeyword("MARMO_SPECULAR_DIRECT");
                                tmpMat.EnableKeyword("MARMO_SPECMAP");
                                tmpMat.EnableKeyword("MARMO_MIP_GLOSS");
                                // Enable normal map
                                tmpMat.EnableKeyword("MARMO_NORMALMAP");
                                // Enable emission map
                                tmpMat.EnableKeyword("MARMO_EMISSION");
                                // Enable Z write
                                tmpMat.EnableKeyword("_ZWRITE_ON");
                            }
                        }
                    }
                }

                // Add sky applier
#if BELOWZERO
                BaseModuleLighting bml = this.GameObject.GetComponent <BaseModuleLighting>();
                if (bml == null)
                {
                    bml = this.GameObject.GetComponentInChildren <BaseModuleLighting>();
                }
                if (bml == null)
                {
                    bml = this.GameObject.AddComponent <BaseModuleLighting>();
                }
#endif
                SkyApplier applier = this.GameObject.GetComponent <SkyApplier>();
                if (applier == null)
                {
                    applier = this.GameObject.GetComponentInChildren <SkyApplier>();
                }
                if (applier == null)
                {
                    applier = this.GameObject.AddComponent <SkyApplier>();
                }
                applier.renderers    = renderers;
                applier.anchorSky    = Skies.Auto;
                applier.updaterIndex = 0;
                SkyApplier[] appliers = this.GameObject.GetComponentsInChildren <SkyApplier>();
                if (appliers != null && appliers.Length > 0)
                {
                    foreach (SkyApplier ap in appliers)
                    {
                        ap.renderers    = renderers;
                        ap.anchorSky    = Skies.Auto;
                        ap.updaterIndex = 0;
                    }
                }

                // Add contructable
                var constructible = this.GameObject.AddComponent <Constructable>();
                constructible.allowedInBase           = true;
                constructible.allowedInSub            = true;
                constructible.allowedOutside          = true;
                constructible.allowedOnCeiling        = false;
                constructible.allowedOnGround         = true;
                constructible.allowedOnConstructables = true;
#if BELOWZERO
                constructible.allowedUnderwater = true;
#endif
                constructible.controlModelState     = true;
                constructible.deconstructionAllowed = true;
                constructible.rotationEnabled       = true;
                constructible.model            = model;
                constructible.techType         = this.TechType;
                constructible.placeMinDistance = 0.6f;
                constructible.enabled          = true;

                // Add constructable bounds
                var bounds = this.GameObject.AddComponent <ConstructableBounds>();
                bounds.bounds.position = new Vector3(bounds.bounds.position.x, bounds.bounds.position.y + 0.002f, bounds.bounds.position.z);

                // Add model controler
                var exosuitDollControler = this.GameObject.AddComponent <ExosuitDollController>();

                #region Disable right arms (except hand arm)

                GameObject rightArm           = model.FindChild("ExosuitArmRight");
                GameObject rightArmRig        = rightArm.FindChild("exosuit_01_armRight 1").FindChild("ArmRig 1");
                GameObject rightTorpedoArm    = rightArmRig.FindChild("exosuit_arm_torpedoLauncher_geo 1");
                GameObject rightDrillArm      = rightArmRig.FindChild("exosuit_drill_geo 1");
                GameObject rightGrapplinArm   = rightArmRig.FindChild("exosuit_grapplingHook_geo 1");
                GameObject rightGrapplinHand  = rightArmRig.FindChild("exosuit_grapplingHook_hand_geo 1");
                GameObject rightHandArm       = rightArmRig.FindChild("exosuit_hand_geo 1");
                GameObject rightPropulsionArm = rightArmRig.FindChild("exosuit_propulsion_geo 1");

                // Disable right torpedo arm
                List <Renderer> rightTorpedoArmRenderers = new List <Renderer>();
                rightTorpedoArm.GetComponentsInChildren <Renderer>(rightTorpedoArmRenderers);
                if (!rightTorpedoArmRenderers.Contains(rightTorpedoArm.GetComponent <Renderer>()))
                {
                    rightTorpedoArmRenderers.Add(rightTorpedoArm.GetComponent <Renderer>());
                }
                foreach (Renderer rend in rightTorpedoArmRenderers)
                {
                    rend.enabled = false;
                }

                // Disable right drill arm
                rightDrillArm.GetComponent <Renderer>().enabled = false;

                // Disable right grapplin arm
                List <Renderer> rightGrapplinArmRenderers = new List <Renderer>();
                rightGrapplinHand.GetComponentsInChildren <Renderer>(rightGrapplinArmRenderers);
                if (!rightGrapplinArmRenderers.Contains(rightGrapplinHand.GetComponent <Renderer>()))
                {
                    rightGrapplinArmRenderers.Add(rightGrapplinHand.GetComponent <Renderer>());
                }
                foreach (Renderer rend in rightGrapplinArmRenderers)
                {
                    rend.enabled = false;
                }
                rightGrapplinArm.GetComponent <Renderer>().enabled = false;

                // Disable right propulsion arm
                rightPropulsionArm.GetComponent <Renderer>().enabled = false;

                #endregion

                #region Disable left arms (except hand arm)

                GameObject leftArm           = model.FindChild("ExosuitArmLeft");
                GameObject leftArmRig        = leftArm.FindChild("exosuit_01_armRight").FindChild("ArmRig");
                GameObject leftTorpedoArm    = leftArmRig.FindChild("exosuit_arm_torpedoLauncher_geo");
                GameObject leftDrillArm      = leftArmRig.FindChild("exosuit_drill_geo");
                GameObject leftGrapplinArm   = leftArmRig.FindChild("exosuit_grapplingHook_geo");
                GameObject leftGrapplinHand  = leftArmRig.FindChild("exosuit_grapplingHook_hand_geo");
                GameObject leftHandArm       = leftArmRig.FindChild("exosuit_hand_geo");
                GameObject leftPropulsionArm = leftArmRig.FindChild("exosuit_propulsion_geo");

                // Disable left torpedo arm
                List <Renderer> leftTorpedoArmRenderers = new List <Renderer>();
                leftTorpedoArm.GetComponentsInChildren <Renderer>(leftTorpedoArmRenderers);
                if (!leftTorpedoArmRenderers.Contains(leftTorpedoArm.GetComponent <Renderer>()))
                {
                    leftTorpedoArmRenderers.Add(leftTorpedoArm.GetComponent <Renderer>());
                }
                foreach (Renderer rend in leftTorpedoArmRenderers)
                {
                    rend.enabled = false;
                }

                // Disable left drill arm
                leftDrillArm.GetComponent <Renderer>().enabled = false;

                // Disable right grapplin arm
                List <Renderer> leftGrapplinArmRenderers = new List <Renderer>();
                leftGrapplinHand.GetComponentsInChildren <Renderer>(leftGrapplinArmRenderers);
                if (!leftGrapplinArmRenderers.Contains(leftGrapplinHand.GetComponent <Renderer>()))
                {
                    leftGrapplinArmRenderers.Add(leftGrapplinHand.GetComponent <Renderer>());
                }
                foreach (Renderer rend in leftGrapplinArmRenderers)
                {
                    rend.enabled = false;
                }
                leftGrapplinArm.GetComponent <Renderer>().enabled = false;

                // Disable right propulsion arm
                leftPropulsionArm.GetComponent <Renderer>().enabled = false;

                #endregion

                // Add new TechType to the buildables
                SMLHelper.V2.Handlers.CraftDataHandler.AddBuildable(this.TechType);
                SMLHelper.V2.Handlers.CraftDataHandler.AddToGroup(TechGroup.Miscellaneous, TechCategory.Misc, this.TechType);

                // Set the buildable prefab
                SMLHelper.V2.Handlers.PrefabHandler.RegisterPrefab(this);

                // Set the custom sprite
                SMLHelper.V2.Handlers.SpriteHandler.RegisterSprite(this.TechType, SpriteManager.Get(TechType.Exosuit));

                // Associate recipe to the new TechType
                SMLHelper.V2.Handlers.CraftDataHandler.SetTechData(this.TechType, this.Recipe);

                this.IsRegistered = true;
            }
        }
Пример #8
0
        protected override void SpawnPostProcess(GameObject finishedFurniture)
        {
            if (finishedFurniture.TryGetComponent(out Bench bench))
            {
                try
                {
                    NitroxId benchId = NitroxEntity.GetId(finishedFurniture);

                    GameObject benchTileLeft = new GameObject("BenchPlaceLeft")
                    {
                        layer = LAYER_USEABLE
                    };
                    benchTileLeft.transform.SetParent(finishedFurniture.transform, false);
                    benchTileLeft.transform.localPosition -= new Vector3(0.75f, 0, 0);
                    BoxCollider benchTileLeftCollider = benchTileLeft.AddComponent <BoxCollider>();
                    benchTileLeftCollider.center    = new Vector3(0, 0.25f, 0);
                    benchTileLeftCollider.size      = new Vector3(0.85f, 0.5f, 0.65f);
                    benchTileLeftCollider.isTrigger = true;

                    GameObject benchTileCenter = new GameObject("BenchPlaceCenter")
                    {
                        layer = LAYER_USEABLE
                    };
                    benchTileCenter.transform.SetParent(finishedFurniture.transform, false);
                    BoxCollider benchTileCenterCollider = benchTileCenter.AddComponent <BoxCollider>();
                    benchTileCenterCollider.center    = new Vector3(0, 0.25f, 0);
                    benchTileCenterCollider.size      = new Vector3(0.7f, 0.5f, 0.65f);
                    benchTileCenterCollider.isTrigger = true;

                    GameObject benchTileRight = new GameObject("BenchPlaceRight")
                    {
                        layer = LAYER_USEABLE
                    };
                    benchTileRight.transform.SetParent(finishedFurniture.transform, false);
                    benchTileRight.transform.localPosition += new Vector3(0.75f, 0, 0);
                    BoxCollider benchTileRightCollider = benchTileRight.AddComponent <BoxCollider>();
                    benchTileRightCollider.center    = new Vector3(0, 0.25f, 0);
                    benchTileRightCollider.size      = new Vector3(0.85f, 0.5f, 0.65f);
                    benchTileRightCollider.isTrigger = true;

                    GameObject animationRoot = finishedFurniture.FindChild("bench_animation");

                    MultiplayerBench.FromBench(bench, benchTileLeft, MultiplayerBench.Side.LEFT, animationRoot);
                    MultiplayerBench.FromBench(bench, benchTileCenter, MultiplayerBench.Side.CENTER, animationRoot);
                    MultiplayerBench.FromBench(bench, benchTileRight, MultiplayerBench.Side.RIGHT, animationRoot);


                    NitroxId benchLeftId   = benchId.Increment();
                    NitroxId benchCenterId = benchLeftId.Increment();
                    NitroxId benchRightId  = benchCenterId.Increment();
                    NitroxEntity.SetNewId(benchTileLeft, benchLeftId);
                    NitroxEntity.SetNewId(benchTileCenter, benchCenterId);
                    NitroxEntity.SetNewId(benchTileRight, benchRightId);

                    UnityEngine.Object.Destroy(bench);
                    UnityEngine.Object.Destroy(finishedFurniture.FindChild("Builder Trigger"));
                }
                catch (Exception ex)
                {
                    Log.Error(ex);
                }
            }
        }
Пример #9
0
        public override GameObject GetGameObject()
        {
            GameObject prefab = GameObject.Instantiate(this.GameObject);

            prefab.name = this.ClassID;

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

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

            // Move
            relicHlpr.transform.localPosition = new Vector3(relicHlpr.transform.localPosition.x, relicHlpr.transform.localPosition.y - 0.275f, relicHlpr.transform.localPosition.z);
            // Scale
            foreach (Transform tr in prefab.transform)
            {
                tr.transform.localScale *= 0.4f;
            }

            // 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
            var applier = prefab.GetComponent <SkyApplier>();

            if (applier == null)
            {
                applier = prefab.AddComponent <SkyApplier>();
            }
            applier.anchorSky    = Skies.Auto;
            applier.updaterIndex = 0;

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

            collider.radius        = 0.2f;
            collider.height        = 0.5f;
            collider.contactOffset = 0.1f;
            foreach (CapsuleCollider c in prefab.GetComponentsInChildren <CapsuleCollider>())
            {
                c.radius *= 0.4f;
                c.height *= 0.4f;
            }

            // 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.8f;
            fabricating.posOffset   = new Vector3(0.045f, -0.04f, 0.02f);
            fabricating.eulerOffset = new Vector3(0f, 0f, 0f);
            fabricating.scaleFactor = 0.7f;

            return(prefab);
        }
Пример #10
0
        public override GameObject GetPrefab()
        {
            GameObject prefab = GameObject.Instantiate(this.GameObject);

            prefab.name = this.ClassID;

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

            // Delete Cube object to prevent bugs (when holding item while swimming)
            GameObject cube = prefab.FindChild("Cube");

            GameObject.DestroyImmediate(cube);

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

            GameObject.DestroyImmediate(rb);

            // Translate model
            GameObject model = prefab.FindChild("biodome_lab_shelf_01");

            //model.transform.position = new Vector3(model.transform.position.x, model.transform.position.y, model.transform.position.z + 1.8f);

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

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

            collider.size = new Vector3(0.8f, 0.9f, 0.5f);

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

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

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

            placeTool.allowedInBase          = true;
            placeTool.allowedOnBase          = false;
            placeTool.allowedOnCeiling       = false;
            placeTool.allowedOnConstructable = false;
            placeTool.allowedOnGround        = true;
            placeTool.allowedOnRigidBody     = true;
            placeTool.allowedOnWalls         = false;
            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.1f;
            fabricating.localMaxY   = 0.9f;
            fabricating.posOffset   = new Vector3(0f, 0f, 0.04f);
            fabricating.eulerOffset = new Vector3(0f, 0f, 0f);
            fabricating.scaleFactor = 0.35f;

            return(prefab);
        }
Пример #11
0
        public override GameObject GetPrefab()
        {
            GameObject prefab = GameObject.Instantiate(this.GameObject);
            GameObject model  = prefab.FindChild("biodome_lab_containers_open_02");

            prefab.name = this.ClassID;

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

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

            // Add world forces
            var forces = prefab.AddComponent <WorldForces>();

            forces.useRigidbody      = rb;
            forces.handleGravity     = true;
            forces.handleDrag        = true;
            forces.aboveWaterGravity = 9.81f;
            forces.underwaterGravity = 1;
            forces.aboveWaterDrag    = 0.1f;
            forces.underwaterDrag    = 1;

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

            collider.size = new Vector3(0.35f, 0.5f, 0.35f);

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

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

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

            placeTool.allowedInBase          = true;
            placeTool.allowedOnBase          = false;
            placeTool.allowedOnCeiling       = false;
            placeTool.allowedOnConstructable = true;
            placeTool.allowedOnGround        = true;
            placeTool.allowedOnRigidBody     = true;
            placeTool.allowedOnWalls         = false;
            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 = model.AddComponent <VFXFabricating>();

            fabricating.localMinY   = -0.1f;
            fabricating.localMaxY   = 0.36f;
            fabricating.posOffset   = new Vector3(0f, 0f, 0.04f);
            fabricating.eulerOffset = new Vector3(0f, 0f, 0f);
            fabricating.scaleFactor = 1f;

            return(prefab);
        }
Пример #12
0
        public static void Prefix(Exosuit __instance)
        {
            int arraySize = __instance.armPrefabs.Length;

            for (int i = 0; i < arraySize; i++)
            {
                if (__instance.armPrefabs[i].techType == RepulsionCannonArmPrefab.TechTypeID)
                {
                    return;
                }
            }

            for (int i = 0; i < arraySize; i++)
            {
                if (__instance.armPrefabs[i].techType == TechType.ExosuitPropulsionArmModule)
                {
                    Array.Resize(ref __instance.armPrefabs, arraySize + 1);

                    __instance.armPrefabs[arraySize] = new Exosuit.ExosuitArmPrefab()
                    {
                        prefab   = __instance.armPrefabs[i].prefab.GetPrefabClone(null, true, "ExosuitRepulsionCannonArm"),
                        techType = RepulsionCannonArmPrefab.TechTypeID
                    };
                    break;
                }
            }

            GameObject RepulsionCannonPrefab = __instance.armPrefabs[arraySize].prefab;

            RepulsionCannonPrefab.transform.position = new Vector3(0, -1930, 0);

            UnityEngine.Object.DestroyImmediate(RepulsionCannonPrefab.FindChild("xPropulsionCannon_Beams"));
            UnityEngine.Object.DestroyImmediate(RepulsionCannonPrefab.FindChild("PropulsionCannonGrabbedEffect"));

            UnityEngine.Object.DestroyImmediate(RepulsionCannonPrefab.GetComponent <ExosuitPropulsionArm>());
            UnityEngine.Object.DestroyImmediate(RepulsionCannonPrefab.GetComponent <PropulsionCannon>());

            GameObject elbow = RepulsionCannonPrefab.FindChildInMaxDepth("elbow");

            GameObject repulsion = elbow.FindChild("propulsion");

            repulsion.name = "repulsion";

            GameObject ArmRig = RepulsionCannonPrefab.FindChildInMaxDepth("ArmRig");

            GameObject exosuit_repulsion_geo = ArmRig.FindChild("exosuit_propulsion_geo");

            exosuit_repulsion_geo.name = "exosuit_repulsion_geo";

            exosuit_repulsion_geo.ChangeObjectTexture(2, illumTex: Main.illumTex.GetObjectClone());

            RepulsionCannonArmControl control = RepulsionCannonPrefab.GetOrAddComponent <RepulsionCannonArmControl>();

            control.muzzle = RepulsionCannonPrefab.FindChildInMaxDepth("repulsion").FindChild("muzzle").transform;

            var repulsionPrefab = Resources.Load <GameObject>("WorldEntities/Tools/RepulsionCannon").GetPrefabClone();

            var repulsionCannon = repulsionPrefab.GetComponent <RepulsionCannon>();

            control.fxControl = repulsionCannon.fxControl.GetComponentClone(control.transform);

            for (int i = 0; i < control.fxControl.emitters.Length; i++)
            {
                VFXController.VFXEmitter emitter = control.fxControl.emitters[i];

                emitter.parentTransform = control.muzzle;

                if (emitter.fx != null)
                {
                    foreach (ParticleSystem ps in emitter.fx.GetComponentsInChildren <ParticleSystem>(true))
                    {
                        ParticleSystem.MainModule psMain = ps.main;

                        ParticleSystem.MinMaxCurve startSize = psMain.startSize;

                        if (startSize.mode == ParticleSystemCurveMode.TwoConstants)
                        {
                            startSize.constant    = 1.5f;
                            startSize.constantMax = 1.5f;
                            startSize.constantMin = 1.5f;
                            psMain.startSize      = startSize;
                        }
                    }
                }
            }

            control.bubblesFX = repulsionCannon.bubblesFX.GetPrefabClone(RepulsionCannonPrefab.transform, false);

            control.shootSound = repulsionCannon.shootSound.GetObjectClone();

            control.animator = RepulsionCannonPrefab.GetComponent <Animator>();

            UnityEngine.Object.DestroyImmediate(repulsionPrefab);

            UnityEngine.Object.DestroyImmediate(RepulsionCannonPrefab.FindChild("RepulsionPrefab(Clone)"));
        }
        public override GameObject GetGameObject()
        {
            GameObject prefab = GameObject.Instantiate(this.GameObject);

            prefab.name = this.ClassID;

            // 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 storage container size to 18
            SpecimenAnalyzer specimenAnalyzer = prefab.GetComponent <SpecimenAnalyzer>();

            if (specimenAnalyzer.storageContainer != null)
            {
                specimenAnalyzer.storageContainer.height = 6;
                specimenAnalyzer.storageContainer.width  = 3;
            }

            if (!ConfigSwitcher.SpecimenAnalyzer_asBuildable)
            {
                // Remove "Constructable" possibility
                Constructable construct = prefab.GetComponent <Constructable>();
                GameObject.DestroyImmediate(construct);

                // Disable colliders to prevent physics bug in Cyclops, and add a small one so we can
                // pick the Specimen Analyzer.
                Collider[] colliders = prefab.GetComponentsInChildren <Collider>();
                foreach (Collider coll in colliders)
                {
                    coll.enabled = false;
                }
                SphereCollider newCollider = prefab.AddComponent <SphereCollider>();
                newCollider.radius = 0.9f;

                // 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          = false;
                placeTool.allowedOnCeiling       = false;
                placeTool.allowedOnConstructable = false;
                placeTool.allowedOnGround        = true;
                placeTool.allowedOnRigidBody     = true;
                placeTool.allowedOnWalls         = false;
                placeTool.allowedOutside         = ConfigSwitcher.AllowPlaceOutside;
                placeTool.rotationEnabled        = true;
                placeTool.enabled              = true;
                placeTool.hasAnimations        = false;
                placeTool.hasBashAnimation     = false;
                placeTool.hasFirstUseAnimation = false;
                placeTool.mainCollider         = newCollider;
                placeTool.pickupable           = pickupable;

                // Add fabricating animation
                var fabricating = prefab.FindChild("model").AddComponent <VFXFabricating>();
                fabricating.localMinY   = -0.1f;
                fabricating.localMaxY   = 0.9f;
                fabricating.posOffset   = new Vector3(0f, 0f, 0.04f);
                fabricating.eulerOffset = new Vector3(0f, 0f, 0f);
                fabricating.scaleFactor = 0.35f;
            }
            else
            {
                // Set as constructible
                var constructible = prefab.GetComponent <Constructable>();
                constructible.allowedOnWall           = false;
                constructible.allowedInBase           = true;
                constructible.allowedInSub            = true;
                constructible.allowedOutside          = ConfigSwitcher.AllowBuildOutside;
                constructible.allowedOnCeiling        = false;
                constructible.allowedOnGround         = true;
                constructible.allowedOnConstructables = false;
                constructible.deconstructionAllowed   = true;
                constructible.controlModelState       = true;
                constructible.enabled  = true;
                constructible.techType = this.TechType;
            }

            return(prefab);
        }
Пример #14
0
        public override void RegisterItem()
        {
            if (this.IsRegistered == false)
            {
                // Retrieve model node
                GameObject model = this.GameObject.FindChild("prawnsuit");

                // Move model
                model.transform.localPosition = new Vector3(model.transform.localPosition.x, model.transform.localPosition.y - 0.002f, model.transform.localPosition.z);

                // Add prefab identifier
                var prefabId = this.GameObject.AddComponent <PrefabIdentifier>();
                prefabId.ClassId = this.ClassID;

                // Add large world entity
                var lwe = this.GameObject.AddComponent <LargeWorldEntity>();
                lwe.cellLevel = LargeWorldEntity.CellLevel.Near;

                // Add tech tag
                var techTag = this.GameObject.AddComponent <TechTag>();
                techTag.type = this.TechType;

                // Add box collider
                var collider = this.GameObject.AddComponent <BoxCollider>();
                //collider.radius = 0.0375f;
                collider.size   = new Vector3(0.04f, 0.115f, 0.04f);
                collider.center = new Vector3(collider.center.x, collider.center.y + 0.0575f, collider.center.z);

                // Set proper shaders (for crafting animation)
                Shader  shader     = Shader.Find("MarmosetUBER");
                Texture normal     = AssetsHelper.Assets.LoadAsset <Texture>("exosuit_01_normal");
                Texture spec       = AssetsHelper.Assets.LoadAsset <Texture>("exosuit_01_spec");
                Texture colorMask  = AssetsHelper.Assets.LoadAsset <Texture>("exosuit_01_colorMask");
                Texture illum      = AssetsHelper.Assets.LoadAsset <Texture>("exosuit_01_illum");
                Texture normal2    = AssetsHelper.Assets.LoadAsset <Texture>("exosuit_01_fp_normal");
                Texture illum2     = AssetsHelper.Assets.LoadAsset <Texture>("exosuit_01_fp_illum");
                Texture normal3    = AssetsHelper.Assets.LoadAsset <Texture>("Exosuit_Arm_Propulsion_Cannon_normal");
                Texture colorMask3 = AssetsHelper.Assets.LoadAsset <Texture>("Exosuit_Arm_Propulsion_Cannon_colorMask");
                Texture illum3     = AssetsHelper.Assets.LoadAsset <Texture>("Exosuit_Arm_Propulsion_Cannon_illum");
                Texture normal4    = AssetsHelper.Assets.LoadAsset <Texture>("Exosuit_grappling_arm_normal");
                Texture colorMask4 = AssetsHelper.Assets.LoadAsset <Texture>("Exosuit_grappling_arm_colorMask");
                Texture illum4     = AssetsHelper.Assets.LoadAsset <Texture>("Exosuit_grappling_arm_illum");
                Texture normal5    = AssetsHelper.Assets.LoadAsset <Texture>("exosuit_01_glass_normal");
                Texture normal6    = AssetsHelper.Assets.LoadAsset <Texture>("exosuit_storage_01_normal");
                Texture colorMask6 = AssetsHelper.Assets.LoadAsset <Texture>("exosuit_storage_01_colorMask");
                Texture illum6     = AssetsHelper.Assets.LoadAsset <Texture>("exosuit_storage_01_illum");
                Texture normal7    = AssetsHelper.Assets.LoadAsset <Texture>("Exosuit_torpedo_launcher_arm_normal");
                Texture colorMask7 = AssetsHelper.Assets.LoadAsset <Texture>("Exosuit_torpedo_launcher_arm_colorMask");
                Texture illum7     = AssetsHelper.Assets.LoadAsset <Texture>("Exosuit_torpedo_launcher_arm_illum");
                Texture normal8    = AssetsHelper.Assets.LoadAsset <Texture>("engine_power_cell_ion_normal");
                Texture spec8      = AssetsHelper.Assets.LoadAsset <Texture>("engine_power_cell_ion_spec");
                Texture illum8     = AssetsHelper.Assets.LoadAsset <Texture>("engine_power_cell_ion_illum");
                Texture normal9    = AssetsHelper.Assets.LoadAsset <Texture>("seamoth_torpedo_01_normal");
                Texture spec9      = AssetsHelper.Assets.LoadAsset <Texture>("seamoth_torpedo_01_spec");
                Texture normal10   = AssetsHelper.Assets.LoadAsset <Texture>("seamoth_upgrade_slots_01_normal");
                Texture spec10     = AssetsHelper.Assets.LoadAsset <Texture>("seamoth_upgrade_slots_01_spec");
                Texture illum10    = AssetsHelper.Assets.LoadAsset <Texture>("seamoth_upgrade_slots_01_illum");
                Texture normal11   = AssetsHelper.Assets.LoadAsset <Texture>("submarine_engine_power_cells_01_normal");
                Texture spec11     = AssetsHelper.Assets.LoadAsset <Texture>("submarine_engine_power_cells_01_spec");
                Texture illum11    = AssetsHelper.Assets.LoadAsset <Texture>("submarine_engine_power_cells_01_illum");

                Renderer[] renderers = this.GameObject.GetComponentsInChildren <Renderer>();
                foreach (Renderer renderer in renderers)
                {
                    foreach (Material tmpMat in renderer.materials)
                    {
                        // Associate MarmosetUBER shader
                        if (tmpMat.name.CompareTo("exosuit_01_glass (Instance)") != 0 && tmpMat.name.CompareTo("exosuit_cabin_01_glass (Instance)") != 0)
                        {
                            tmpMat.shader = shader;
                        }

                        if (tmpMat.name.CompareTo("exosuit_01 (Instance)") == 0)
                        {
                            tmpMat.SetTexture("_BumpMap", normal);
                            tmpMat.SetTexture("_ColorMask", colorMask);
                            tmpMat.SetTexture("_SpecTex", spec);
                            tmpMat.SetTexture("_Illum", illum);
                            tmpMat.SetFloat("_EmissionLM", 0.75f); // Set always visible

                            // Enable color mask
                            tmpMat.EnableKeyword("MARMO_VERTEX_COLOR");
                            // Enable specular
                            //tmpMat.EnableKeyword("MARMO_SPECULAR_ON");
                            tmpMat.EnableKeyword("MARMO_SPECULAR_IBL");
                            tmpMat.EnableKeyword("MARMO_SPECULAR_DIRECT");
                            tmpMat.EnableKeyword("MARMO_MIP_GLOSS");
                            // Enable normal map
                            tmpMat.EnableKeyword("MARMO_NORMALMAP");
                            // Enable emission map
                            tmpMat.EnableKeyword("MARMO_EMISSION");
                        }
                        else if (tmpMat.name.CompareTo("exosuit_01_fp (Instance)") == 0)
                        {
                            tmpMat.SetTexture("_BumpMap", normal2);
                            tmpMat.SetTexture("_Illum", illum2);
                            tmpMat.SetFloat("_EmissionLM", 0.75f); // Set always visible

                            // Enable normal map
                            tmpMat.EnableKeyword("MARMO_NORMALMAP");
                            // Enable emission map
                            tmpMat.EnableKeyword("MARMO_EMISSION");
                        }
                        else if (tmpMat.name.CompareTo("Exosuit_Arm_Propulsion_Cannon (Instance)") == 0)
                        {
                            tmpMat.SetTexture("_BumpMap", normal3);
                            tmpMat.SetTexture("_ColorMask", colorMask3);
                            tmpMat.SetTexture("_Illum", illum3);
                            tmpMat.SetFloat("_EmissionLM", 0.75f); // Set always visible

                            // Enable color mask
                            tmpMat.EnableKeyword("MARMO_VERTEX_COLOR");
                            // Enable normal map
                            tmpMat.EnableKeyword("MARMO_NORMALMAP");
                            // Enable emission map
                            tmpMat.EnableKeyword("MARMO_EMISSION");
                        }
                        else if (tmpMat.name.CompareTo("Exosuit_grappling_arm (Instance)") == 0)
                        {
                            tmpMat.SetTexture("_BumpMap", normal4);
                            tmpMat.SetTexture("_ColorMask", colorMask4);
                            tmpMat.SetTexture("_Illum", illum4);
                            tmpMat.SetFloat("_EmissionLM", 0.75f); // Set always visible

                            // Enable color mask
                            tmpMat.EnableKeyword("MARMO_VERTEX_COLOR");
                            // Enable normal map
                            tmpMat.EnableKeyword("MARMO_NORMALMAP");
                            // Enable emission map
                            tmpMat.EnableKeyword("MARMO_EMISSION");
                        }
                        else if (tmpMat.name.CompareTo("exosuit_01_glass (Instance)") == 0)
                        {
                            tmpMat.SetTexture("_BumpMap", normal5);
                            // Enable normal map
                            tmpMat.EnableKeyword("MARMO_NORMALMAP");
                        }
                        else if (tmpMat.name.CompareTo("exosuit_storage_01 (Instance)") == 0)
                        {
                            tmpMat.SetTexture("_BumpMap", normal6);
                            tmpMat.SetTexture("_ColorMask", colorMask6);
                            tmpMat.SetTexture("_Illum", illum6);
                            tmpMat.SetFloat("_EmissionLM", 0.75f); // Set always visible

                            // Enable color mask
                            tmpMat.EnableKeyword("MARMO_VERTEX_COLOR");
                            // Enable normal map
                            tmpMat.EnableKeyword("MARMO_NORMALMAP");
                            // Enable emission map
                            tmpMat.EnableKeyword("MARMO_EMISSION");
                        }
                        else if (tmpMat.name.CompareTo("Exosuit_torpedo_launcher_arm (Instance)") == 0)
                        {
                            tmpMat.SetTexture("_BumpMap", normal7);
                            tmpMat.SetTexture("_ColorMask", colorMask7);
                            tmpMat.SetTexture("_Illum", illum7);
                            tmpMat.SetFloat("_EmissionLM", 0.75f); // Set always visible

                            // Enable color mask
                            tmpMat.EnableKeyword("MARMO_VERTEX_COLOR");
                            // Enable normal map
                            tmpMat.EnableKeyword("MARMO_NORMALMAP");
                            // Enable emission map
                            tmpMat.EnableKeyword("MARMO_EMISSION");
                        }
                        else if (tmpMat.name.CompareTo("power_cell_01 (Instance)") == 0)
                        {
                            tmpMat.SetTexture("_BumpMap", normal8);
                            tmpMat.SetTexture("_SpecTex", spec8);
                            tmpMat.SetTexture("_Illum", illum8);
                            tmpMat.SetFloat("_EmissionLM", 0.75f); // Set always visible

                            // Enable specular
                            tmpMat.EnableKeyword("MARMO_SPECULAR_IBL");
                            tmpMat.EnableKeyword("MARMO_SPECULAR_DIRECT");
                            tmpMat.EnableKeyword("MARMO_MIP_GLOSS");
                            // Enable normal map
                            tmpMat.EnableKeyword("MARMO_NORMALMAP");
                            // Enable emission map
                            tmpMat.EnableKeyword("MARMO_EMISSION");
                        }
                        else if (tmpMat.name.CompareTo("seamoth_torpedo_01 (Instance)") == 0)
                        {
                            tmpMat.SetTexture("_BumpMap", normal9);
                            tmpMat.SetTexture("_SpecTex", spec9);
                            tmpMat.SetFloat("_EmissionLM", 0.75f); // Set always visible

                            // Enable specular
                            tmpMat.EnableKeyword("MARMO_SPECULAR_IBL");
                            tmpMat.EnableKeyword("MARMO_SPECULAR_DIRECT");
                            tmpMat.EnableKeyword("MARMO_MIP_GLOSS");
                            // Enable normal map
                            tmpMat.EnableKeyword("MARMO_NORMALMAP");
                        }
                        else if (tmpMat.name.CompareTo("seamoth_upgrade_slots_01 (Instance)") == 0)
                        {
                            tmpMat.SetTexture("_BumpMap", normal10);
                            tmpMat.SetTexture("_SpecTex", spec10);
                            tmpMat.SetTexture("_Illum", illum10);
                            tmpMat.SetFloat("_EmissionLM", 0.75f); // Set always visible

                            // Enable specular
                            tmpMat.EnableKeyword("MARMO_SPECULAR_IBL");
                            tmpMat.EnableKeyword("MARMO_SPECULAR_DIRECT");
                            tmpMat.EnableKeyword("MARMO_MIP_GLOSS");
                            // Enable normal map
                            tmpMat.EnableKeyword("MARMO_NORMALMAP");
                            // Enable emission map
                            tmpMat.EnableKeyword("MARMO_EMISSION");
                        }
                        else if (tmpMat.name.CompareTo("submarine_engine_power_cells_01 (Instance)") == 0)
                        {
                            tmpMat.SetTexture("_BumpMap", normal11);
                            tmpMat.SetTexture("_SpecTex", spec11);
                            tmpMat.SetTexture("_Illum", illum11);
                            tmpMat.SetFloat("_EmissionLM", 0.75f); // Set always visible

                            // Enable specular
                            tmpMat.EnableKeyword("MARMO_SPECULAR_IBL");
                            tmpMat.EnableKeyword("MARMO_SPECULAR_DIRECT");
                            tmpMat.EnableKeyword("MARMO_MIP_GLOSS");
                            // Enable normal map
                            tmpMat.EnableKeyword("MARMO_NORMALMAP");
                            // Enable emission map
                            tmpMat.EnableKeyword("MARMO_EMISSION");
                        }
                    }
                }

                // Add sky applier
                var skyapplier = this.GameObject.AddComponent <SkyApplier>();
                skyapplier.renderers = renderers;
                skyapplier.anchorSky = Skies.Auto;

                // Add contructable
                var constructible = this.GameObject.AddComponent <Constructable>();
                constructible.allowedInBase           = true;
                constructible.allowedInSub            = true;
                constructible.allowedOutside          = true;
                constructible.allowedOnCeiling        = false;
                constructible.allowedOnGround         = true;
                constructible.allowedOnConstructables = true;
                constructible.controlModelState       = true;
                constructible.deconstructionAllowed   = true;
                constructible.rotationEnabled         = true;
                constructible.model    = model;
                constructible.techType = this.TechType;
                constructible.enabled  = true;

                // Add constructable bounds
                var bounds = this.GameObject.AddComponent <ConstructableBounds>();
                bounds.bounds.position = new Vector3(bounds.bounds.position.x, bounds.bounds.position.y + 0.002f, bounds.bounds.position.z);

                // Add model controler
                var exosuitDollControler = this.GameObject.AddComponent <ExosuitDollController>();

                #region Disable right arms (except hand arm)

                GameObject rightArm           = model.FindChild("ExosuitArmRight");
                GameObject rightArmRig        = rightArm.FindChild("exosuit_01_armRight 1").FindChild("ArmRig 1");
                GameObject rightTorpedoArm    = rightArmRig.FindChild("exosuit_arm_torpedoLauncher_geo 1");
                GameObject rightDrillArm      = rightArmRig.FindChild("exosuit_drill_geo 1");
                GameObject rightGrapplinArm   = rightArmRig.FindChild("exosuit_grapplingHook_geo 1");
                GameObject rightGrapplinHand  = rightArmRig.FindChild("exosuit_grapplingHook_hand_geo 1");
                GameObject rightHandArm       = rightArmRig.FindChild("exosuit_hand_geo 1");
                GameObject rightPropulsionArm = rightArmRig.FindChild("exosuit_propulsion_geo 1");

                // Disable right torpedo arm
                List <Renderer> rightTorpedoArmRenderers = new List <Renderer>();
                rightTorpedoArm.GetComponentsInChildren <Renderer>(rightTorpedoArmRenderers);
                if (!rightTorpedoArmRenderers.Contains(rightTorpedoArm.GetComponent <Renderer>()))
                {
                    rightTorpedoArmRenderers.Add(rightTorpedoArm.GetComponent <Renderer>());
                }
                foreach (Renderer rend in rightTorpedoArmRenderers)
                {
                    rend.enabled = false;
                }

                // Disable right drill arm
                rightDrillArm.GetComponent <Renderer>().enabled = false;

                // Disable right grapplin arm
                List <Renderer> rightGrapplinArmRenderers = new List <Renderer>();
                rightGrapplinHand.GetComponentsInChildren <Renderer>(rightGrapplinArmRenderers);
                if (!rightGrapplinArmRenderers.Contains(rightGrapplinHand.GetComponent <Renderer>()))
                {
                    rightGrapplinArmRenderers.Add(rightGrapplinHand.GetComponent <Renderer>());
                }
                foreach (Renderer rend in rightGrapplinArmRenderers)
                {
                    rend.enabled = false;
                }
                rightGrapplinArm.GetComponent <Renderer>().enabled = false;

                // Disable right propulsion arm
                rightPropulsionArm.GetComponent <Renderer>().enabled = false;

                #endregion

                #region Disable left arms (except hand arm)

                GameObject leftArm           = model.FindChild("ExosuitArmLeft");
                GameObject leftArmRig        = leftArm.FindChild("exosuit_01_armRight").FindChild("ArmRig");
                GameObject leftTorpedoArm    = leftArmRig.FindChild("exosuit_arm_torpedoLauncher_geo");
                GameObject leftDrillArm      = leftArmRig.FindChild("exosuit_drill_geo");
                GameObject leftGrapplinArm   = leftArmRig.FindChild("exosuit_grapplingHook_geo");
                GameObject leftGrapplinHand  = leftArmRig.FindChild("exosuit_grapplingHook_hand_geo");
                GameObject leftHandArm       = leftArmRig.FindChild("exosuit_hand_geo");
                GameObject leftPropulsionArm = leftArmRig.FindChild("exosuit_propulsion_geo");

                // Disable left torpedo arm
                List <Renderer> leftTorpedoArmRenderers = new List <Renderer>();
                leftTorpedoArm.GetComponentsInChildren <Renderer>(leftTorpedoArmRenderers);
                if (!leftTorpedoArmRenderers.Contains(leftTorpedoArm.GetComponent <Renderer>()))
                {
                    leftTorpedoArmRenderers.Add(leftTorpedoArm.GetComponent <Renderer>());
                }
                foreach (Renderer rend in leftTorpedoArmRenderers)
                {
                    rend.enabled = false;
                }

                // Disable left drill arm
                leftDrillArm.GetComponent <Renderer>().enabled = false;

                // Disable right grapplin arm
                List <Renderer> leftGrapplinArmRenderers = new List <Renderer>();
                leftGrapplinHand.GetComponentsInChildren <Renderer>(leftGrapplinArmRenderers);
                if (!leftGrapplinArmRenderers.Contains(leftGrapplinHand.GetComponent <Renderer>()))
                {
                    leftGrapplinArmRenderers.Add(leftGrapplinHand.GetComponent <Renderer>());
                }
                foreach (Renderer rend in leftGrapplinArmRenderers)
                {
                    rend.enabled = false;
                }
                leftGrapplinArm.GetComponent <Renderer>().enabled = false;

                // Disable right propulsion arm
                leftPropulsionArm.GetComponent <Renderer>().enabled = false;

                #endregion

                // Add new TechType to the buildables
                CraftDataPatcher.customBuildables.Add(this.TechType);
                CraftDataPatcher.AddToCustomGroup(TechGroup.Miscellaneous, TechCategory.Misc, this.TechType);

                // Set the buildable prefab
                CustomPrefabHandler.customPrefabs.Add(new CustomPrefab(this.ClassID, this.ResourcePath, this.TechType, this.GetPrefab));

                // Set the custom sprite
                CustomSpriteHandler.customSprites.Add(new CustomSprite(this.TechType, SpriteManager.Get(TechType.Exosuit)));

                // Associate recipe to the new TechType
                CraftDataPatcher.customTechData[this.TechType] = this.Recipe;

                this.IsRegistered = true;
            }
        }
Пример #15
0
    void Start()
    {
        Array.Copy(EnergyRequirements, EnergyLeft, 3);

        Headz = gameObject.FindChild("headz");
        RainHead = Headz.FindChild("chr_rain");
        BowHead = Headz.FindChild("chr_bow");
        CrossHead = Headz.FindChild("chr_cross");

        CharginLazor = gameObject.FindChild("vfx_charginmahlazor");

        Controller = GetComponent<PlayerController>();
        Keyboard = KeyboardManager.Instance;
        Keyboard.RegisterKeys(KeyCode.A, KeyCode.S, KeyCode.D);

        RainHead.SetActiveRecursively(true);
        BowHead.SetActiveRecursively(false);
        CrossHead.SetActiveRecursively(false);
        CharginLazor.SetActiveRecursively(false);

        ShootingBow = false;
    }
        public override GameObject GetGameObject()
        {
            GameObject prefab = null;

            try
            {
                Log.Info($"Making {Information.DeepDrillerFriendly} GameObject");

                Log.Info("Instantiate GameObject");

                prefab = GameObject.Instantiate(LoadItems.DeepDrillerPrefab);



                prefab.name = Information.DeepDrillerName;


                //var storage = GameObject.Instantiate(SmallLocker);

                //storage.name = $"{Information.DeepDrillerName}S2";

                //var container = storage.GetComponent<StorageContainer>();
                //container.width = 6;
                //container.height = 6;
                //container.container.Resize(6, 6);
                //container.storageLabel = $"{Information.DeepDrillerFriendly}";
                //container.hoverText = $"Open {Information.DeepDrillerFriendly}";

                //storage.transform.SetParent(prefab.transform, false);
                //storage.transform.localPosition = new Vector3(0.0226624f, 3.9232f, 1f);
                //storage.transform.Rotate(new Vector3(0, 0, 0));
                //storage.transform.localScale = new Vector3(0.8129452f, 0.65f, 0.7868078f);

                //var meshRenderers = storage.GetComponentsInChildren<MeshRenderer>();

                //foreach (var meshRenderer in meshRenderers)
                //{
                //    GameObject.DestroyImmediate(meshRenderer);
                //}


                //var label = storage.FindChild("Label");
                //GameObject.DestroyImmediate(label);



                //Locker1(ref prefab);
                //Locker2(ref prefab);
                //Locker3(ref prefab);
                //Locker4(ref prefab);

                //========== Allows the building animation and material colors ==========//

                Shader     shader    = Shader.Find("MarmosetUBER");
                Renderer[] renderers = prefab.GetComponentsInChildren <Renderer>();
                foreach (Renderer renderer in renderers)
                {
                    renderer.material.shader = shader;
                }

                SkyApplier skyApplier = prefab.GetOrAddComponent <SkyApplier>();
                skyApplier.renderers = renderers;
                skyApplier.anchorSky = Skies.Auto;

                //========== Allows the building animation and material colors ==========//

                Log.Info("Adding Constructible");

                // Add constructible
                var constructable = prefab.GetOrAddComponent <Constructable>();
                constructable.allowedOnWall    = false;
                constructable.allowedOnGround  = true;
                constructable.allowedInSub     = false;
                constructable.allowedInBase    = false;
                constructable.allowedOnCeiling = false;
                constructable.allowedOutside   = true;
                constructable.model            = prefab.FindChild("model");
                constructable.rotationEnabled  = true;
                constructable.techType         = TechType;

                Log.Info("GetOrAdd TechTag");

                var powerFX = prefab.AddComponent <PowerFX>();

                // Add large world entity ALLOWS YOU TO SAVE ON TERRAIN
                var lwe = prefab.AddComponent <LargeWorldEntity>();
                lwe.cellLevel = LargeWorldEntity.CellLevel.Global;

                prefab.GetOrAddComponent <BoxCollider>();

                // Allows the object to be saved into the game
                //by setting the TechTag and the PrefabIdentifier
                prefab.GetOrAddComponent <TechTag>().type = this.TechType;

                Log.Info("GetOrAdd PrefabIdentifier");

                prefab.GetOrAddComponent <PrefabIdentifier>().ClassId = this.ClassID;

                prefab.GetOrAddComponent <BoxCollider>();

                Log.Info($"Add Component {nameof(DeepDrillerController)}");
                prefab.GetOrAddComponent <DeepDrillerController>();

                Log.Info($"Add Component {nameof(LiveMixin)}");
                prefab.AddComponent <LiveMixin>();

                Log.Info("Made GameObject");
            }
            catch (Exception e)
            {
                Log.Error($"{Information.DeepDrillerFriendly} Message: {e.Message}");
            }

            return(prefab);
        }
Пример #17
0
        public override GameObject GetGameObject()
        {
            GameObject prefab = GameObject.Instantiate(this.GameObject);

            prefab.name = this.ClassID;

            // Get sub objects
            GameObject model  = prefab.FindChild("lost_river_cove_tree_01");
            GameObject eggs   = model.FindChild("lost_river_cove_tree_01_eggs");
            GameObject shells = model.FindChild("lost_river_cove_tree_01_eggs_shells");

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

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

            // Translate model
            model.transform.localPosition = new Vector3(model.transform.localPosition.x, model.transform.localPosition.y + 0.02f, model.transform.localPosition.z - 1.6f);

            // Remove unwanted elements
            GameObject.DestroyImmediate(prefab.GetComponent <Rigidbody>());
            GameObject.DestroyImmediate(prefab.GetComponent <ConstructionObstacle>());
            foreach (Transform tr in prefab.transform)
            {
                if (string.Compare(tr.name, "lost_river_cove_tree_01", true, CultureInfo.InvariantCulture) != 0)
                {
                    GameObject.DestroyImmediate(tr);
                }
                else
                {
                    foreach (Transform ctr in tr)
                    {
                        if (!ctr.name.StartsWith("lost_river_cove_tree_01_eggs", true, CultureInfo.InvariantCulture))
                        {
                            GameObject.DestroyImmediate(ctr);
                        }
                    }
                }
            }

            // Disable existing renderers
            Renderer[] renderers = prefab.GetAllComponentsInChildren <Renderer>();
            foreach (Renderer rend in renderers)
            {
                if (!rend.name.StartsWith("lost_river_cove_tree_01_eggs", true, CultureInfo.InvariantCulture))
                {
                    rend.enabled = false;
                }
            }

            // Delete existing colliders
            Collider[] colliders = prefab.GetAllComponentsInChildren <Collider>();
            for (int i = 0; i < colliders.Length; i++)
            {
                GameObject.DestroyImmediate(colliders[i]);
            }

            // Add main collider
            BoxCollider c = prefab.AddComponent <BoxCollider>();

            c.size   = new Vector3(1f, 0.8f, 1f);
            c.center = new Vector3(c.center.x, c.center.y + 0.4f, c.center.z + 0.3f);

            // 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 large world entity
            LargeWorldEntity lwe = prefab.GetComponent <LargeWorldEntity>();

            lwe.cellLevel = LargeWorldEntity.CellLevel.Near;

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

            // We can place this item
            PrefabsHelper.SetDefaultPlaceTool(prefab, c);

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

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

            return(prefab);
        }
Пример #18
0
        public override GameObject GetGameObject()
        {
#if DEBUG_AQUARIUM
            Logger.Log("DEBUG: A0");
#endif
            // Instantiate root prefab
            GameObject prefab = GameObject.Instantiate(Resources.Load <GameObject>("Submarine/Build/Aquarium"));
            prefab.name = this.ClassID;

            // Get sub objects
            GameObject model                         = prefab.FindChild("model");
            GameObject bubbles                       = prefab.FindChild("Bubbles");
            GameObject xBubbles                      = bubbles.FindChild("xBubbles");
            GameObject storage                       = prefab.FindChild("StorageRoot");
            GameObject collider                      = prefab.FindChild("Collider");
            GameObject coral                         = model.FindChild("Coral");
            GameObject coral1                        = coral.FindChild("coral_reef_grass_11");
            GameObject coral2                        = coral.FindChild("coral_reef_grass_10");
            GameObject coral3                        = coral.FindChild("coral_reef_grass_09");
            GameObject coral4                        = coral.FindChild("coral_reef_grass_07");
            GameObject coral5                        = coral.FindChild("coral_reef_plant_middle_03");
            GameObject coral6                        = coral.FindChild("coral_reef_small_deco_15_red");
            GameObject coral7                        = coral.FindChild("coral_reef_grass_03_04");
            GameObject coral8                        = coral.FindChild("coral_reef_small_deco_14");
            GameObject coral9                        = coral.FindChild("coral_reef_grass_03_03");
            GameObject coral10                       = coral.FindChild("coral_reef_grass_03_02");
            GameObject coral11                       = coral.FindChild("Coral_reef_purple_fan");
            GameObject aquariumAnim2                 = model.FindChild("Aquarium_animation2");
            GameObject aquariumAnim2Root             = aquariumAnim2.FindChild("root");
            GameObject aquariumAnim2Geo              = aquariumAnim2.FindChild("Aquarium_geo");
            GameObject aquariumAnim2GeoAquarium      = aquariumAnim2Geo.FindChild("Aquarium");
            GameObject aquariumAnim2GeoAquariumGlass = aquariumAnim2Geo.FindChild("Aquarium_glass");
            GameObject aquariumAnim2Fish1            = aquariumAnim2Root.FindChild("fish1");
            GameObject aquariumAnim2Fish2            = aquariumAnim2Root.FindChild("fish2");
            GameObject aquariumAnim2Fish3            = aquariumAnim2Root.FindChild("fish3");
            GameObject aquariumAnim2Fish4            = aquariumAnim2Root.FindChild("fish4");
            GameObject aquariumAnim2Attach4          = aquariumAnim2Fish4.FindChild("fish_attach4");
            GameObject aquariumAnim1                 = model.FindChild("Aquarium_animation");
            GameObject aquariumAnim1Root             = aquariumAnim1.FindChild("root");
            GameObject aquariumAnim1Geo              = aquariumAnim1.FindChild("Aquarium_geo");
            GameObject aquariumAnim1GeoAquarium      = aquariumAnim1Geo.FindChild("Aquarium");
            GameObject aquariumAnim1GeoAquariumGlass = aquariumAnim1Geo.FindChild("Aquarium_glass");
            GameObject aquariumAnim1Fish1            = aquariumAnim1Root.FindChild("fish1");
            GameObject aquariumAnim1Fish2            = aquariumAnim1Root.FindChild("fish2");
            GameObject aquariumAnim1Fish3            = aquariumAnim1Root.FindChild("fish3");
            GameObject aquariumAnim1Fish4            = aquariumAnim1Root.FindChild("fish4");

            // Load resources
#if BELOWZERO
            GameObject greenCoral  = Resources.Load <GameObject>("WorldEntities/Flora/Shared/coral_reef_small_deco_13");
            GameObject blueCoral   = Resources.Load <GameObject>("WorldEntities/Flora/Shared/Coral_reef_blue_coral_tubes");
            GameObject brownCoral  = Resources.Load <GameObject>("WorldEntities/Flora/Shared/coral_reef_brown_coral_tubes_02_01");
            GameObject brownCoral1 = Resources.Load <GameObject>("WorldEntities/Flora/Shared/coral_reef_brown_coral_tubes_02_03");
#else
            GameObject greenCoral  = Resources.Load <GameObject>("WorldEntities/Doodads/Coral_reef/coral_reef_small_deco_13");
            GameObject blueCoral   = Resources.Load <GameObject>("WorldEntities/Doodads/Coral_reef/Coral_reef_blue_coral_tubes");
            GameObject brownCoral  = Resources.Load <GameObject>("WorldEntities/Doodads/Coral_reef/coral_reef_brown_coral_tubes_02_01");
            GameObject brownCoral1 = Resources.Load <GameObject>("WorldEntities/Doodads/Coral_reef/coral_reef_brown_coral_tubes_02_03");
#endif

#if DEBUG_AQUARIUM
            Logger.Log("DEBUG: A1");
#endif
            // Setup green coral
            if (greenCoral != null)
            {
                GameObject iGreenCoral = GameObject.Instantiate(greenCoral);
                iGreenCoral.name                    = "SmallDeco13";
                iGreenCoral.transform.parent        = coral.transform;
                iGreenCoral.transform.localScale   *= 0.179f;
                iGreenCoral.transform.localPosition = new Vector3(iGreenCoral.transform.localPosition.x, iGreenCoral.transform.localPosition.y + 0.17f, iGreenCoral.transform.localPosition.z - 0.635f);
                GameObject.DestroyImmediate(iGreenCoral.GetComponent <LargeWorldEntity>());
                GameObject.DestroyImmediate(iGreenCoral.GetComponent <PrefabIdentifier>());
            }

#if DEBUG_AQUARIUM
            Logger.Log("DEBUG: A2");
#endif
            // Setup blue coral
            if (blueCoral != null)
            {
                coral9.GetComponent <MeshRenderer>().enabled = false;

                GameObject iBlueCoral = GameObject.Instantiate(blueCoral);
                iBlueCoral.name                    = "BlueCoralTubes1";
                iBlueCoral.transform.parent        = coral.transform;
                iBlueCoral.transform.localPosition = Vector3.zero;
                iBlueCoral.transform.localScale   *= 0.31f;
                iBlueCoral.transform.localPosition = new Vector3(iBlueCoral.transform.localPosition.x + 0.22f, iBlueCoral.transform.localPosition.y + 0.16f, iBlueCoral.transform.localPosition.z - 0.77f);
                var lwe = iBlueCoral.GetComponent <LargeWorldEntity>();
                if (lwe != null)
                {
                    GameObject.DestroyImmediate(lwe);
                }
                var lmi = iBlueCoral.GetComponent <LiveMixin>();
                if (lmi != null)
                {
                    GameObject.DestroyImmediate(lmi);
                }
                var pid = iBlueCoral.GetComponent <PrefabIdentifier>();
                if (pid != null)
                {
                    GameObject.DestroyImmediate(pid);
                }

                var blueCoralModel = iBlueCoral.FindChild("Coral_reef_blue_coral_tubes");
                var blueCoralAnim  = blueCoralModel.GetComponent <Animator>();
                var blueCoralBase  = blueCoralModel.FindChild("base1");
                var blueCoralGeos  = blueCoralModel.FindChild("geos");

                LODGroup lodBlueCoral = iBlueCoral.GetComponent <LODGroup>();
                lodBlueCoral.ForceLOD(0);
                LOD[] lods = lodBlueCoral.GetLODs();
                lodBlueCoral.SetLODs(new LOD[] { lods[0] });
                lodBlueCoral.ForceLOD(0);
                lodBlueCoral.size = 3.0f;
            }

#if DEBUG_AQUARIUM
            Logger.Log("DEBUG: A3");
#endif
            // Setup brown coral 2
            if (brownCoral != null)
            {
                GameObject iBrownCoral = GameObject.Instantiate(brownCoral);
                iBrownCoral.name                       = "BrownCoralTubes2";
                iBrownCoral.transform.parent           = coral.transform;
                iBrownCoral.transform.localPosition    = Vector3.zero;
                iBrownCoral.transform.localScale      *= 0.3f;
                iBrownCoral.transform.localPosition    = new Vector3(iBrownCoral.transform.localPosition.x + 0.249f, iBrownCoral.transform.localPosition.y + 0.17f, iBrownCoral.transform.localPosition.z - 0.26f);
                iBrownCoral.transform.localEulerAngles = new Vector3(iBrownCoral.transform.localEulerAngles.x, iBrownCoral.transform.localEulerAngles.y + 15f, iBrownCoral.transform.localEulerAngles.z);
                var lwe = iBrownCoral.GetComponent <LargeWorldEntity>();
                if (lwe != null)
                {
                    GameObject.DestroyImmediate(lwe);
                }
                var rbo = iBrownCoral.GetComponent <Rigidbody>();
                if (rbo != null)
                {
                    GameObject.DestroyImmediate(rbo);
                }
                var lmi = iBrownCoral.GetComponent <LiveMixin>();
                if (lmi != null)
                {
                    GameObject.DestroyImmediate(lmi);
                }
                var pid = iBrownCoral.GetComponent <PrefabIdentifier>();
                if (pid != null)
                {
                    GameObject.DestroyImmediate(pid);
                }
                var bco = iBrownCoral.GetComponentInChildren <BoxCollider>();
                if (bco != null)
                {
                    GameObject.DestroyImmediate(bco);
                }
                // Scale models
                iBrownCoral.FindChild("coral_reef_brown_coral_tubes_02_01").transform.localScale      *= 0.4f;
                iBrownCoral.FindChild("coral_reef_brown_coral_tubes_02_01_LOD1").transform.localScale *= 0.4f;
                iBrownCoral.FindChild("coral_reef_brown_coral_tubes_02_01_LOD2").transform.localScale *= 0.4f;
                iBrownCoral.FindChild("coral_reef_brown_coral_tubes_02_01_LOD3").transform.localScale *= 0.4f;

                var lodBrownCoral = iBrownCoral.GetComponent <LODGroup>();
                lodBrownCoral.ForceLOD(0);
                LOD[] lods = lodBrownCoral.GetLODs();
                lodBrownCoral.SetLODs(new LOD[] { lods[0] });
                lodBrownCoral.ForceLOD(0);
                lodBrownCoral.size = 3.0f;
            }

#if DEBUG_AQUARIUM
            Logger.Log("DEBUG: A4");
#endif
            // Setup brown coral 2 bis
            if (brownCoral != null)
            {
                GameObject iBrownCoralB = GameObject.Instantiate(brownCoral);
                iBrownCoralB.name                       = "BrownCoralTubes2";
                iBrownCoralB.transform.parent           = coral.transform;
                iBrownCoralB.transform.localPosition    = Vector3.zero;
                iBrownCoralB.transform.localScale      *= 0.3f;
                iBrownCoralB.transform.localPosition    = new Vector3(iBrownCoralB.transform.localPosition.x - 0.18f, iBrownCoralB.transform.localPosition.y + 0.055f, iBrownCoralB.transform.localPosition.z - 0.115f);
                iBrownCoralB.transform.localEulerAngles = new Vector3(iBrownCoralB.transform.localEulerAngles.x, iBrownCoralB.transform.localEulerAngles.y - 105.0f, iBrownCoralB.transform.localEulerAngles.z + 15.0f);
                var lwe = iBrownCoralB.GetComponent <LargeWorldEntity>();
                if (lwe != null)
                {
                    GameObject.DestroyImmediate(lwe);
                }
                var rbo = iBrownCoralB.GetComponent <Rigidbody>();
                if (rbo != null)
                {
                    GameObject.DestroyImmediate(rbo);
                }
                var lmi = iBrownCoralB.GetComponent <LiveMixin>();
                if (lmi != null)
                {
                    GameObject.DestroyImmediate(lmi);
                }
                var pid = iBrownCoralB.GetComponent <PrefabIdentifier>();
                if (pid != null)
                {
                    GameObject.DestroyImmediate(pid);
                }
                var bco = iBrownCoralB.GetComponentInChildren <BoxCollider>();
                if (bco != null)
                {
                    GameObject.DestroyImmediate(bco);
                }
                // Scale models
                iBrownCoralB.FindChild("coral_reef_brown_coral_tubes_02_01").transform.localScale      *= 0.4f;
                iBrownCoralB.FindChild("coral_reef_brown_coral_tubes_02_01_LOD1").transform.localScale *= 0.4f;
                iBrownCoralB.FindChild("coral_reef_brown_coral_tubes_02_01_LOD2").transform.localScale *= 0.4f;
                iBrownCoralB.FindChild("coral_reef_brown_coral_tubes_02_01_LOD3").transform.localScale *= 0.4f;

                var lodBrownCoral = iBrownCoralB.GetComponent <LODGroup>();
                lodBrownCoral.ForceLOD(0);
                LOD[] lods = lodBrownCoral.GetLODs();
                lodBrownCoral.SetLODs(new LOD[] { lods[0] });
                lodBrownCoral.ForceLOD(0);
                lodBrownCoral.size = 3.0f;

                iBrownCoralB.transform.localScale *= 1.4f;
            }

#if DEBUG_AQUARIUM
            Logger.Log("DEBUG: A5");
#endif
            // Setup brown coral 1
            if (brownCoral1 != null)
            {
                GameObject iBrownCoral1 = GameObject.Instantiate(brownCoral1);
                iBrownCoral1.name                       = "BrownCoralTubes2";
                iBrownCoral1.transform.parent           = coral.transform;
                iBrownCoral1.transform.localPosition    = Vector3.zero;
                iBrownCoral1.transform.localScale      *= 0.4f;
                iBrownCoral1.transform.localPosition    = new Vector3(iBrownCoral1.transform.localPosition.x - 0.08f, iBrownCoral1.transform.localPosition.y + 0.055f, iBrownCoral1.transform.localPosition.z - 0.1144f);
                iBrownCoral1.transform.localEulerAngles = new Vector3(iBrownCoral1.transform.localEulerAngles.x, iBrownCoral1.transform.localEulerAngles.y - 30.0f, iBrownCoral1.transform.localEulerAngles.z);
                var lwe = iBrownCoral1.GetComponent <LargeWorldEntity>();
                if (lwe != null)
                {
                    GameObject.DestroyImmediate(lwe);
                }
                var rbo = iBrownCoral1.GetComponent <Rigidbody>();
                if (rbo != null)
                {
                    GameObject.DestroyImmediate(rbo);
                }
                var lmi = iBrownCoral1.GetComponent <LiveMixin>();
                if (lmi != null)
                {
                    GameObject.DestroyImmediate(lmi);
                }
                var pid = iBrownCoral1.GetComponent <PrefabIdentifier>();
                if (pid != null)
                {
                    GameObject.DestroyImmediate(pid);
                }
                var bco = iBrownCoral1.GetComponentInChildren <BoxCollider>();
                if (bco != null)
                {
                    GameObject.DestroyImmediate(bco);
                }
                // Scale models
                iBrownCoral1.FindChild("coral_reef_brown_coral_tubes_02_03").transform.localScale      *= 0.4f;
                iBrownCoral1.FindChild("coral_reef_brown_coral_tubes_02_03_LOD1").transform.localScale *= 0.4f;
                iBrownCoral1.FindChild("coral_reef_brown_coral_tubes_02_03_LOD2").transform.localScale *= 0.4f;
                iBrownCoral1.FindChild("coral_reef_brown_coral_tubes_02_03_LOD3").transform.localScale *= 0.4f;
                // Adjust LOD
                var lodBrownCoral = iBrownCoral1.GetComponent <LODGroup>();
                if (lodBrownCoral != null)
                {
                    lodBrownCoral.ForceLOD(0);
                    LOD[] lods = lodBrownCoral.GetLODs();
                    lodBrownCoral.SetLODs(new LOD[] { lods[0] });
                    lodBrownCoral.ForceLOD(0);
                    lodBrownCoral.size = 3.0f;
                }
            }

#if DEBUG_AQUARIUM
            Logger.Log("DEBUG: A6");
#endif
            // Adjust corals
            coral1.SetActive(false); // petite fougere jaune (gauche)
            coral2.SetActive(false); // grande fougere jaune 1 (droite)
            coral3.SetActive(false); // grande fougere jaune 2 (droite)
            coral4.SetActive(false); // grande fougere jaune 3 (droite)
            coral5.SetActive(false); // grande plante rose (centre gauche)
            coral6.SetActive(false); // corail rouge foncé a petit points blanc (droite)
            coral7.SetActive(false); // plante rose (droite)
            coral8.SetActive(false); // corail bleu foncé a pointes en spirales et bout rouge (gauche)
            coral9.SetActive(false); // plante rose (centre gauche)
            coral10.SetActive(true); // plante rose (centre gauche)
            coral11.SetActive(true); // algue en courone bleu/violet foncée (centre gauche)
            coral.transform.localScale     *= 0.6f;
            coral10.transform.localScale   *= 0.5f;
            coral10.transform.localPosition = new Vector3(coral10.transform.localPosition.x + 0.10f, coral10.transform.localPosition.y - 0.17f, coral10.transform.localPosition.z - 0.43f);
            coral11.transform.localPosition = new Vector3(coral11.transform.localPosition.x - 0.2f, coral11.transform.localPosition.y - 0.23f, coral11.transform.localPosition.z);

#if DEBUG_AQUARIUM
            Logger.Log("DEBUG: A7");
#endif
            // Adjust aquarium
            aquariumAnim2Geo.transform.localScale    = new Vector3(aquariumAnim2Geo.transform.localScale.x * (1.0f / 0.239f), aquariumAnim2Geo.transform.localScale.y * (1.0f / 0.24f), aquariumAnim2Geo.transform.localScale.z * (1.0f / 0.239f));
            aquariumAnim1Geo.transform.localScale    = new Vector3(aquariumAnim1Geo.transform.localScale.x * (1.0f / 0.239f), aquariumAnim1Geo.transform.localScale.y * (1.0f / 0.24f), aquariumAnim1Geo.transform.localScale.z * (1.0f / 0.239f));
            aquariumAnim2Geo.transform.localPosition = new Vector3(aquariumAnim2Geo.transform.localPosition.x, aquariumAnim2Geo.transform.localPosition.y - (0.20f * (1.0f / 0.24f)), aquariumAnim2Geo.transform.localPosition.z);
            aquariumAnim1Geo.transform.localPosition = new Vector3(aquariumAnim1Geo.transform.localPosition.x, aquariumAnim1Geo.transform.localPosition.y - (0.20f * (1.0f / 0.24f)), aquariumAnim1Geo.transform.localPosition.z);

            aquariumAnim2Geo.transform.localScale    = new Vector3(aquariumAnim2Geo.transform.localScale.x * 0.50f, aquariumAnim2Geo.transform.localScale.y * 0.285f, aquariumAnim2Geo.transform.localScale.z * 0.16f);
            aquariumAnim1Geo.transform.localScale    = new Vector3(aquariumAnim1Geo.transform.localScale.x * 0.50f, aquariumAnim1Geo.transform.localScale.y * 0.285f, aquariumAnim1Geo.transform.localScale.z * 0.16f);
            aquariumAnim2Geo.transform.localPosition = new Vector3(aquariumAnim2Geo.transform.localPosition.x, aquariumAnim2Geo.transform.localPosition.y, aquariumAnim2Geo.transform.localPosition.z + (0.145f * (1.0f / 0.239f)));
            aquariumAnim1Geo.transform.localPosition = new Vector3(aquariumAnim1Geo.transform.localPosition.x, aquariumAnim1Geo.transform.localPosition.y, aquariumAnim1Geo.transform.localPosition.z + (0.145f * (1.0f / 0.239f)));

            aquariumAnim2GeoAquarium.transform.localPosition = new Vector3(aquariumAnim2GeoAquarium.transform.localPosition.x, aquariumAnim2GeoAquarium.transform.localPosition.y, aquariumAnim2GeoAquarium.transform.localPosition.z - ((0.145f * 2.0f) * (1.0f / 0.16f)));
            aquariumAnim1GeoAquarium.transform.localPosition = new Vector3(aquariumAnim1GeoAquarium.transform.localPosition.x, aquariumAnim1GeoAquarium.transform.localPosition.y, aquariumAnim1GeoAquarium.transform.localPosition.z - ((0.145f * 2.0f) * (1.0f / 0.16f)));

#if DEBUG_AQUARIUM
            Logger.Log("DEBUG: A8");
#endif
            // Adjust fish
            aquariumAnim2Attach4.transform.localScale = new Vector3(aquariumAnim2Attach4.transform.localScale.x * 2.2f, aquariumAnim2Attach4.transform.localScale.y * 2.2f, aquariumAnim2Attach4.transform.localScale.z * 2.2f);

#if DEBUG_AQUARIUM
            Logger.Log("DEBUG: A9");
#endif
            // Adjust animators
            Animator anim = aquariumAnim1.GetComponent <Animator>();
            anim.transform.localScale    = new Vector3(anim.transform.localScale.x * 0.239f, anim.transform.localScale.y * 0.24f, anim.transform.localScale.z * 0.239f);
            anim.transform.localPosition = new Vector3(anim.transform.localPosition.x + 0.145f, anim.transform.localPosition.y + 0.20f, anim.transform.localPosition.z);
            Animator anim2 = aquariumAnim2.GetComponent <Animator>();
            anim2.transform.localScale    = new Vector3(anim2.transform.localScale.x * 0.239f, anim2.transform.localScale.y * 0.24f, anim2.transform.localScale.z * 0.239f);
            anim2.transform.localPosition = new Vector3(anim2.transform.localPosition.x + 0.145f, anim2.transform.localPosition.y + 0.20f, anim2.transform.localPosition.z);

#if DEBUG_AQUARIUM
            Logger.Log("DEBUG: A10");
#endif
            // Adjust bubbles
            bubbles.transform.localScale     = new Vector3(bubbles.transform.localScale.x * 0.07f, bubbles.transform.localScale.y * 0.07f, bubbles.transform.localScale.z * 0.07f);
            xBubbles.transform.localScale    = new Vector3(xBubbles.transform.localScale.x * 0.07f, xBubbles.transform.localScale.y * 0.07f, xBubbles.transform.localScale.z * 0.07f);
            xBubbles.transform.localPosition = new Vector3(xBubbles.transform.localPosition.x + 4.0f, xBubbles.transform.localPosition.y + 1.0f, xBubbles.transform.localPosition.z);
            var ps  = xBubbles.GetComponent <ParticleSystem>();
            var psr = xBubbles.GetComponent <ParticleSystemRenderer>();
#pragma warning disable CS0618
            ps.startSize     *= 0.5f;
            ps.startLifetime *= 0.18f;
            ps.startSpeed     = 0f;
            ps.emissionRate   = 6f;
            ps.maxParticles   = 5;
            ps.playbackSpeed *= 0.4f;
#pragma warning restore CS0618
            psr.lengthScale     *= 0.35f;
            psr.maxParticleSize *= 0.35f;
            foreach (Transform tr in xBubbles.transform)
            {
                tr.localPosition = new Vector3(0.5f, 0.0f, 0.0f);
                psr = tr.GetComponent <ParticleSystemRenderer>();
                if (tr.name.StartsWith("xDots", true, CultureInfo.InvariantCulture))
                {
                    ps = tr.GetComponent <ParticleSystem>();
#pragma warning disable CS0618
                    ps.startSize     *= 0.3f;
                    ps.startLifetime *= 0.11f;
                    ps.startSpeed     = 0.3f;
                    ps.emissionRate   = 3f;
                    ps.maxParticles   = 6;
                    ps.playbackSpeed *= 0.5f;
#pragma warning restore CS0618
                    psr.lengthScale     *= 0.11f;
                    psr.maxParticleSize *= 0.11f;
                }
                else if (tr.name.StartsWith("xLateralBubbles", true, CultureInfo.InvariantCulture))
                {
                    psr.enabled = false;
                }
            }

#if DEBUG_AQUARIUM
            Logger.Log("DEBUG: A11");
#endif
            // Adjust prefab identifier
            var prefabId = prefab.GetComponent <PrefabIdentifier>();
            prefabId.ClassId = this.ClassID;

            // Adjust tech tag
            var techTag = prefab.GetComponent <TechTag>();
            techTag.type = this.TechType;

#if DEBUG_AQUARIUM
            Logger.Log("DEBUG: A12");
#endif
            // Adjust contructable
            Constructable constructable = prefab.GetComponent <Constructable>();
            constructable.allowedInBase           = true;
            constructable.allowedInSub            = true;
            constructable.allowedOutside          = true;
            constructable.allowedOnCeiling        = false;
            constructable.allowedOnGround         = true;
            constructable.allowedOnConstructables = true;
#if BELOWZERO
            constructable.allowedUnderwater = true;
#endif
            constructable.controlModelState     = true;
            constructable.deconstructionAllowed = true;
            constructable.rotationEnabled       = true;
            //constructable.model = model;
            constructable.techType         = this.TechType;
            constructable.placeMinDistance = 0.5f;
            constructable.enabled          = true;

#if DEBUG_AQUARIUM
            Logger.Log("DEBUG: A13");
#endif
            // Adjust constructable bounds
            ConstructableBounds bounds = prefab.GetComponent <ConstructableBounds>();
            bounds.bounds = new OrientedBounds(new Vector3((bounds.bounds.position.x * 0.16f) + (0.145f * 2.0f), bounds.bounds.position.y * 0.285f, bounds.bounds.position.z * 0.5f), bounds.bounds.rotation, new Vector3(bounds.bounds.extents.x * 0.16f, bounds.bounds.extents.y * 0.285f, bounds.bounds.extents.z * 0.5f));

            // Adjust collider
            BoxCollider c = collider.GetComponent <BoxCollider>();
            c.size   = new Vector3(c.size.x * 0.16f, c.size.y * 0.285f, c.size.z * 0.5f);
            c.center = new Vector3((c.center.x * 0.16f) + (0.145f * 2.0f), c.center.y * 0.285f, c.center.z * 0.5f);

            // Adjust aquarium
            var aquarium = prefab.GetComponent <Aquarium>();
            aquarium.storageContainer.width  = 1;
            aquarium.storageContainer.height = 1;
            aquarium.trackObjects            = new GameObject[] { aquariumAnim2Attach4 };

#if DEBUG_AQUARIUM
            Logger.Log("DEBUG: A14");
#endif
            // Adjust rendering
#if SUBNAUTICA
            var             sas    = prefab.GetComponents <SkyApplier>();
            List <Renderer> rendsA = new List <Renderer>();
            List <Renderer> rendsB = new List <Renderer>();
#else
            var sas = prefab.GetComponentsInChildren <SkyApplier>();
#endif
            int i = 0;
            foreach (SkyApplier sa in sas)
            {
                int j = 0;
                foreach (Renderer rend in sa.renderers)
                {
#if DEBUG_AQUARIUM
                    Logger.Log("DEBUG: SkyApp " + i.ToString() + ": rend " + j.ToString() + " name=[" + rend.name + "]");
#endif
                    if (string.Compare(rend.name, "Aquarium", true, CultureInfo.InvariantCulture) != 0)
                    {
                        if (ConfigSwitcher.GlowingAquariumGlass && string.Compare(rend.name, "Aquarium_glass", true, CultureInfo.InvariantCulture) == 0)
                        {
                            foreach (Material mat in rend.materials)
                            {
                                mat.EnableKeyword("MARMO_EMISSION");
                                mat.EnableKeyword("MARMO_GLOW");
                                mat.SetFloat("_SpecInt", 16f);
                                mat.SetFloat("_EnableGlow", 1);
                                mat.SetColor("_GlowColor", new Color(0.79f, 0.9785799f, 1.0f, 0.08f));
                                mat.SetFloat("_GlowStrength", 0.18f);
                            }
                        }
#if SUBNAUTICA
                        if (i == 0)
                        {
                            rendsA.Add(rend);
                        }
                        else
                        {
                            rendsB.Add(rend);
                        }
#endif
                    }
                    j++;
                }
                i++;
            }
#if DEBUG_AQUARIUM
            Logger.Log("DEBUG: A15");
#endif
#if SUBNAUTICA
            sas[0].renderers = rendsA.ToArray();
            sas[1].renderers = rendsB.ToArray();
#endif
            Renderer[]      tmpRends = prefab.GetAllComponentsInChildren <Renderer>();
            List <Renderer> rends    = new List <Renderer>();
            foreach (Renderer tmpRend in tmpRends)
            {
                if (string.Compare(tmpRend.name, "Aquarium", true, CultureInfo.InvariantCulture) == 0)
                {
                    rends.Add(tmpRend);
                }
            }

#if DEBUG_AQUARIUM
            Logger.Log("DEBUG: A16");
#endif
            var fixedSa = prefab.AddComponent <SkyApplier>();
            fixedSa.anchorSky    = Skies.Auto;
            fixedSa.dynamic      = true;
            fixedSa.renderers    = rends.ToArray();
            fixedSa.updaterIndex = 0;

#if DEBUG_AQUARIUM
            Logger.Log("DEBUG: A17");
#endif
            // Adjust bubbles LOD
            var lodBubbles = bubbles.GetComponent <LODGroup>();
            lodBubbles.size *= (1.0f / 0.07f);

#if DEBUG_AQUARIUM
            Logger.Log("DEBUG: A18");
#endif
            // Remove unwanted elements
            GameObject.DestroyImmediate(aquariumAnim2Fish1);
            GameObject.DestroyImmediate(aquariumAnim2Fish2);
            GameObject.DestroyImmediate(aquariumAnim2Fish3);
            GameObject.DestroyImmediate(aquariumAnim1Fish1);
            GameObject.DestroyImmediate(aquariumAnim1Fish2);
            GameObject.DestroyImmediate(aquariumAnim1Fish3);
            GameObject.DestroyImmediate(aquariumAnim1Fish4);

#if DEBUG_AQUARIUM
            Logger.Log("DEBUG: A19");
#endif
            // Adjust prefab position
            foreach (Transform tr in prefab.transform)
            {
                tr.transform.localPosition = new Vector3(tr.transform.localPosition.x - 0.29f, tr.transform.localPosition.y, tr.transform.localPosition.z);
            }

#if DEBUG_AQUARIUM
            Logger.Log("DEBUG: A20");
#endif
            return(prefab);
        }
        private bool FindAllComponents()
        {
            #region Canvas
            _canvasGameObject = this.gameObject.GetComponentInChildren <Canvas>()?.gameObject;
            if (_canvasGameObject == null)
            {
                QuickLogger.Error("Canvas not found.");
                return(false);
            }
            #endregion

            #region Top
            var top = _canvasGameObject.FindChild("Top")?.gameObject;
            if (top == null)
            {
                QuickLogger.Error("Top not found.");
                return(false);
            }
            #endregion

            #region Overlay
            var overlay = _canvasGameObject.FindChild("Overlay")?.gameObject;
            if (overlay == null)
            {
                QuickLogger.Error("Overlay not found.");
                return(false);
            }
            #endregion

            #region Page_Name

            _pageName = overlay.FindChild("Page_Name").GetComponent <Text>();
            if (_pageName == null)
            {
                QuickLogger.Error("Page_Name not found.");
                return(false);
            }
            #endregion

            #region Message
            _message = top.FindChild("Message").GetComponent <Text>();
            if (_message == null)
            {
                QuickLogger.Error("Message found.");
                return(false);
            }
            #endregion

            #region Main
            var main = _canvasGameObject.FindChild("Main")?.gameObject;
            if (main == null)
            {
                QuickLogger.Error("Main not found.");
                return(false);
            }
            #endregion

            #region Page_1
            var page1 = main.FindChild("Page_1")?.gameObject;
            if (page1 == null)
            {
                QuickLogger.Error("Page_1 not found.");
                return(false);
            }
            #endregion

            #region Page_2
            var page2 = main.FindChild("Page_2")?.gameObject;
            if (page2 == null)
            {
                QuickLogger.Error("Page_2 not found.");
                return(false);
            }
            #endregion

            #region Page_3
            var page3 = main.FindChild("Page_3")?.gameObject;
            if (page3 == null)
            {
                QuickLogger.Error("Page_3 not found.");
                return(false);
            }
            #endregion

            #region Color Picker Page
            var colorPickerPage = main.FindChild("Color_Picker")?.gameObject;
            if (colorPickerPage == null)
            {
                QuickLogger.Error("Color_Picker not found.");
                return(false);
            }

            _colorPickerPage = colorPickerPage;
            #endregion

            #region Sent_Package Button
            var sentPackages = page1.FindChild("Sent_Package")?.gameObject;
            if (sentPackages == null)
            {
                QuickLogger.Error("Sent_Package not found.");
                return(false);
            }

            InterfaceButton sentPackages_BTN = sentPackages.AddComponent <InterfaceButton>();
            sentPackages_BTN.OnButtonClick = OnButtonClick;
            sentPackages_BTN.BtnName       = "SentPackages";
            sentPackages_BTN.ButtonMode    = InterfaceButtonMode.Background;
            sentPackages_BTN.TextLineOne   = GetLanguage(DisplayLanguagePatching.SendPackageKey);
            sentPackages_BTN.Tag           = this;
            #endregion

            #region Open_Container Button
            var openContainer = page1.FindChild("Open_Container")?.gameObject;
            if (openContainer == null)
            {
                QuickLogger.Error("Open_Container not found.");
                return(false);
            }

            InterfaceButton openContainer_BTN = openContainer.AddComponent <InterfaceButton>();
            openContainer_BTN.OnButtonClick = OnButtonClick;
            openContainer_BTN.BtnName       = "OpenContainer";
            openContainer_BTN.ButtonMode    = InterfaceButtonMode.Background;
            openContainer_BTN.TextLineOne   = GetLanguage(DisplayLanguagePatching.OpenShippingContainerKey);
            openContainer_BTN.Tag           = this;
            #endregion

            #region Color_Picker Button
            var colorPicker = page1.FindChild("Color_Picker")?.gameObject;

            if (colorPicker == null)
            {
                QuickLogger.Error("Color_Picker not found.");
                return(false);
            }

            InterfaceButton colorPicker_BTN = colorPicker.AddComponent <InterfaceButton>();
            colorPicker_BTN.OnButtonClick = OnButtonClick;
            colorPicker_BTN.BtnName       = "ColorPickerBTN";
            colorPicker_BTN.ButtonMode    = InterfaceButtonMode.Background;
            colorPicker_BTN.TextLineOne   = GetLanguage(DisplayLanguagePatching.ColorPickerKey);
            colorPicker_BTN.Tag           = this;
            #endregion

            #region Prev Button
            var prevBTN = page2.FindChild("Prev_BTN")?.gameObject;
            if (prevBTN == null)
            {
                QuickLogger.Error("Prev_BTN not found.");
                return(false);
            }

            PaginatorButton prev_BTN = prevBTN.AddComponent <PaginatorButton>();
            prev_BTN.TextLineOne          = GetLanguage(DisplayLanguagePatching.PrevPageKey);
            prev_BTN.ChangePageBy         = ChangePageBy;
            prev_BTN.AmountToChangePageBy = -1;
            #endregion

            #region Next Button
            var nextBTN = page2.FindChild("Next_BTN")?.gameObject;
            if (nextBTN == null)
            {
                QuickLogger.Error("Next_BTN not found.");
                return(false);
            }

            PaginatorButton next_BTN = nextBTN.AddComponent <PaginatorButton>();
            next_BTN.TextLineOne          = GetLanguage(DisplayLanguagePatching.NextPageKey);
            next_BTN.ChangePageBy         = ChangePageBy;
            next_BTN.AmountToChangePageBy = 1;
            #endregion

            #region Prev Button
            var colorPrevBTN = colorPickerPage.FindChild("Prev_BTN")?.gameObject;
            if (colorPrevBTN == null)
            {
                QuickLogger.Error("Color Prev_BTN not found.");
                return(false);
            }

            PaginatorButton colorPrev_BTN = colorPrevBTN.AddComponent <PaginatorButton>();
            colorPrev_BTN.TextLineOne          = GetLanguage(DisplayLanguagePatching.PrevPageKey);
            colorPrev_BTN.ChangePageBy         = ChangeColorPageBy;
            colorPrev_BTN.AmountToChangePageBy = -1;
            #endregion

            #region Next Button
            var colorNextBTN = colorPickerPage.FindChild("Next_BTN")?.gameObject;
            if (colorNextBTN == null)
            {
                QuickLogger.Error("Color Next_BTN not found.");
                return(false);
            }

            PaginatorButton colorNext_BTN = colorNextBTN.AddComponent <PaginatorButton>();
            colorNext_BTN.TextLineOne          = GetLanguage(DisplayLanguagePatching.NextPageKey);
            colorNext_BTN.ChangePageBy         = ChangeColorPageBy;
            colorNext_BTN.AmountToChangePageBy = 1;
            #endregion

            #region Cancel Button Text
            var cancelBtntxt = page2.FindChild("Cancel_BTN").GetComponent <Text>();
            if (cancelBtntxt == null)
            {
                QuickLogger.Error("Cancel_BTN Text not found.");
                return(false);
            }

            cancelBtntxt.text = GetLanguage(DisplayLanguagePatching.CancelKey);
            #endregion

            #region Cancel Button
            var cancelBTN = page2.FindChild("Cancel_BTN")?.gameObject;
            if (cancelBTN == null)
            {
                QuickLogger.Error("Cancel_BTN not found.");
                return(false);
            }

            InterfaceButton cancel_BTN = cancelBTN.AddComponent <InterfaceButton>();
            cancel_BTN.OnButtonClick = OnButtonClick;
            cancel_BTN.BtnName       = "CancelBTN";
            cancel_BTN.ButtonMode    = InterfaceButtonMode.TextColor;
            cancel_BTN.TextLineOne   = GetLanguage(DisplayLanguagePatching.CancelKey);
            cancel_BTN.TextComponent = cancelBtntxt;
            cancel_BTN.Tag           = this;
            #endregion

            #region Color Cancel Button Text
            var colorCancelBtntxt = colorPickerPage.FindChild("Cancel_BTN").GetComponent <Text>();
            if (colorCancelBtntxt == null)
            {
                QuickLogger.Error("Cancel_BTN Text not found.");
                return(false);
            }

            colorCancelBtntxt.text = GetLanguage(DisplayLanguagePatching.ColorBackKey);
            #endregion

            #region Color Cancel Button
            var colorCancelBTN = colorPickerPage.FindChild("Cancel_BTN")?.gameObject;
            if (colorCancelBTN == null)
            {
                QuickLogger.Error("Color Cancel_BTN not found.");
                return(false);
            }

            InterfaceButton colorCancel_BTN = colorCancelBTN.AddComponent <InterfaceButton>();
            colorCancel_BTN.OnButtonClick = OnButtonClick;
            colorCancel_BTN.BtnName       = "ColorCancelBTN";
            colorCancel_BTN.ButtonMode    = InterfaceButtonMode.TextColor;
            colorCancel_BTN.TextLineOne   = GetLanguage(DisplayLanguagePatching.ColorBackKey);
            colorCancel_BTN.TextComponent = colorCancelBtntxt;
            colorCancel_BTN.Tag           = this;
            #endregion

            #region Container
            _itemsGrid = page2.FindChild("Container")?.gameObject;
            if (_itemsGrid == null)
            {
                QuickLogger.Error("Container not found.");
                return(false);
            }
            #endregion

            #region Color Page Container
            _colorPageContainer = colorPickerPage.FindChild("Container")?.gameObject;
            if (_colorPageContainer == null)
            {
                QuickLogger.Error("Color Page Container not found.");
                return(false);
            }
            #endregion

            #region Message Page 2
            var messagePag2 = page2.FindChild("Message").GetComponent <Text>();
            if (messagePag2 == null)
            {
                QuickLogger.Error("Message Page 2 not found.");
                return(false);
            }

            messagePag2.text = GetLanguage(DisplayLanguagePatching.BasePageDescriptionKey);
            #endregion

            #region Message Color Page
            var messageColorPage = colorPickerPage.FindChild("Message").GetComponent <Text>();
            if (messageColorPage == null)
            {
                QuickLogger.Error("Message Color Page not found.");
                return(false);
            }

            messageColorPage.text = GetLanguage(DisplayLanguagePatching.ColorPageDescriptionKey);
            #endregion

            #region Page_Top Text
            _pageTopNumber = page2.FindChild("TopNumber").GetComponent <Text>();
            if (_pageTopNumber == null)
            {
                QuickLogger.Error("TopNumber Text not found.");
                return(false);
            }
            #endregion

            #region Page_Bottom Text
            _pageBottomNumber = page2.FindChild("BottomNumber").GetComponent <Text>();
            if (_pageBottomNumber == null)
            {
                QuickLogger.Error("BottomNumber Text not found.");
                return(false);
            }
            #endregion

            #region Color Page_Top Text
            _colorPageTopNumber = colorPickerPage.FindChild("TopNumber").GetComponent <Text>();
            if (_colorPageTopNumber == null)
            {
                QuickLogger.Error("Color TopNumber Text not found.");
                return(false);
            }
            #endregion

            #region Color Page_Bottom Text
            _colorPageBottomNumber = colorPickerPage.FindChild("BottomNumber").GetComponent <Text>();
            if (_colorPageBottomNumber == null)
            {
                QuickLogger.Error("Color BottomNumber Text not found.");
                return(false);
            }
            #endregion

            #region Shipping Text
            _shippingLabel = page3.FindChild("Shipping_LBL").GetComponent <Text>();
            if (_shippingLabel == null)
            {
                QuickLogger.Error("Shipping_LBL Text not found.");
                return(false);
            }

            _shippingLabel.text = GetLanguage(DisplayLanguagePatching.ShippingKey);
            #endregion

            #region Shipping Container Label
            var shippingContainerLabel = page1.FindChild("ShippingContainerLabel")?.gameObject;

            if (shippingContainerLabel == null)
            {
                QuickLogger.Error("ShippingContainerLabel  not found.");
                return(false);
            }

            shippingContainerLabel.GetComponent <Text>().text = _mono.Name;
            _alterraShippingNameController = shippingContainerLabel.AddComponent <AlterraShippingNameController>();
            _alterraShippingNameController.OnLabelChanged += OnLabelChanged;
            AlterraShippingNameController.Create(_mono, shippingContainerLabel);
            #endregion

            #region Time Left Text
            var timeLeftTXT = page3.FindChild("TimeLeft_LBL").GetComponent <Text>();
            if (timeLeftTXT == null)
            {
                QuickLogger.Error("TimeLeft_LBL Text not found.");
                return(false);
            }

            _timeLeftTXT = timeLeftTXT;
            #endregion

            return(true);
        }
Пример #20
0
        public static bool OnHandClick_Prefix(PictureFrame __instance, HandTargetEventData eventData)
        {
            if (!__instance.enabled)
            {
                return(true);
            }
            if (__instance.gameObject.name.StartsWith("CustomPictureFrame(Clone)", true, CultureInfo.InvariantCulture))
            {
                // Minimum CustomPictureFrame size = normal size / minSizeRatio
                float minSizeRatio = 4.0f;

                CustomPictureFrameController cpfController = __instance.gameObject.GetComponent <CustomPictureFrameController>();
                GameObject   frame           = __instance.gameObject.FindChild("mesh");
                GameObject   poster          = __instance.gameObject.FindChild("poster_decorations(Clone)");
                GameObject   posterModel     = poster.FindChild("model");
                GameObject   magnetModel     = posterModel.FindChild("poster_kitty");
                MeshRenderer magnetRenderer  = magnetModel.GetComponent <MeshRenderer>();
                GameObject   bgBisModel      = posterModel.FindChild("poster_background_bis");
                MeshRenderer bgBisRenderer   = bgBisModel.GetComponent <MeshRenderer>();
                GameObject   bgPivotModel    = posterModel.FindChild("poster_background_pivot");
                MeshRenderer bgPivotRenderer = bgPivotModel.GetComponent <MeshRenderer>();

                if (Input.GetKey(KeyCode.R))
                {
                    GameObject   pictureFrame  = frame.FindChild("submarine_Picture_Frame");
                    MeshRenderer frameRenderer = pictureFrame.GetComponent <MeshRenderer>();

                    // Rotate frame
                    if (cpfController.Flipped)
                    {
                        frame.transform.localEulerAngles = new Vector3(frame.transform.localEulerAngles.x, frame.transform.localEulerAngles.y, frame.transform.localEulerAngles.z + 90f);
                    }
                    else
                    {
                        frame.transform.localEulerAngles = new Vector3(frame.transform.localEulerAngles.x, frame.transform.localEulerAngles.y, frame.transform.localEulerAngles.z - 90f);
                    }

                    // Adjust poster style
                    if (!frameRenderer.enabled)
                    {
                        bgBisRenderer.enabled   = !bgBisRenderer.enabled;
                        bgPivotRenderer.enabled = !bgPivotRenderer.enabled;
                        // Adjust magnet pos
                        if (bgPivotRenderer.enabled)
                        {
                            magnetModel.transform.localPosition = new Vector3(0f, -0.0115f, 0f);
                        }
                        else
                        {
                            magnetModel.transform.localPosition = new Vector3(0f, 0f, 0f);
                        }
                    }
                    else
                    {
                        bgBisRenderer.enabled   = false;
                        bgPivotRenderer.enabled = false;
                    }

                    // Toogle flip
                    cpfController.Flipped = !cpfController.Flipped;

                    // Rotate collider
                    GameObject  trigger  = __instance.gameObject.FindChild("Trigger");
                    BoxCollider collider = trigger.GetComponent <BoxCollider>();
                    collider.size = new Vector3(collider.size.y, collider.size.x, collider.size.z);

                    // Rotate image
                    __instance.imageRenderer.transform.localScale = new Vector3(__instance.imageRenderer.transform.localScale.y, __instance.imageRenderer.transform.localScale.x, __instance.imageRenderer.transform.localScale.z);

                    // Rotate constructable bounds extents
                    var constructableBounds = __instance.gameObject.GetComponent <ConstructableBounds>();
                    constructableBounds.bounds.extents = new Vector3(constructableBounds.bounds.extents.y, constructableBounds.bounds.extents.x, constructableBounds.bounds.extents.z);

                    // Refresh picture
                    PictureFrameEnumHelper.SetStateMethod.Invoke(__instance, new object[] { PictureFrameEnumHelper.ThumbnailEnumValue });
                    PictureFrameEnumHelper.SetStateMethod.Invoke(__instance, new object[] { PictureFrameEnumHelper.FullEnumValue });

                    return(false);
                }
                else if (Input.GetKey(KeyCode.F))
                {
                    // Get objects.
                    GameObject   pictureFrame   = frame.FindChild("submarine_Picture_Frame");
                    GameObject   frameButton    = pictureFrame.FindChild("submarine_Picture_Frame_button");
                    MeshRenderer frameRenderer  = pictureFrame.GetComponent <MeshRenderer>();
                    MeshRenderer buttonRenderer = frameButton.GetComponent <MeshRenderer>();
                    GameObject   bgModel        = posterModel.FindChild("poster_background");
                    MeshRenderer bgRenderer     = bgModel.GetComponent <MeshRenderer>();

                    // Switch frame style.
                    if (frameRenderer.enabled) // If we're in picture frame mode, switch to poster mode.
                    {
                        // Disable picture frame
                        frameRenderer.enabled  = false;
                        buttonRenderer.enabled = false;
                        // Enable poster magnet
                        magnetRenderer.enabled = true;
                        bgRenderer.enabled     = false;
                        // Enable bg bis
                        bgBisRenderer.enabled   = !cpfController.Flipped;
                        bgPivotRenderer.enabled = cpfController.Flipped;
                        // Adjust magnet pos.
                        if (cpfController.Flipped)
                        {
                            magnetModel.transform.localPosition = new Vector3(0f, -0.0115f, 0f);
                        }
                        else
                        {
                            magnetModel.transform.localPosition = new Vector3(0f, 0f, 0f);
                        }
                        // Adjust image pos.
                        __instance.imageRenderer.transform.localPosition = new Vector3(__instance.imageRenderer.transform.localPosition.x, __instance.imageRenderer.transform.localPosition.y, __instance.imageRenderer.transform.localPosition.z - 0.0045f);
                    }
                    else if (magnetRenderer.enabled) // Else if we're in poster mode, switch to plain image mode.
                    {
                        // Disable picture frame
                        frameRenderer.enabled  = false;
                        buttonRenderer.enabled = false;
                        // Disable poster magnet and poster bg
                        magnetRenderer.enabled = false;
                        bgRenderer.enabled     = false;
                        // Enable bg bis
                        bgBisRenderer.enabled   = !cpfController.Flipped;
                        bgPivotRenderer.enabled = cpfController.Flipped;
                    }
                    else // Else if we're if plain image mode, switch to picture frame mode.
                    {
                        // Enable picture frame
                        frameRenderer.enabled  = true;
                        buttonRenderer.enabled = true;
                        // Disable poster magnet and poster bg
                        magnetRenderer.enabled = false;
                        bgRenderer.enabled     = false;
                        // Disable bg bis
                        bgBisRenderer.enabled   = false;
                        bgPivotRenderer.enabled = false;
                        // Adjust image pos
                        __instance.imageRenderer.transform.localPosition = new Vector3(__instance.imageRenderer.transform.localPosition.x, __instance.imageRenderer.transform.localPosition.y, __instance.imageRenderer.transform.localPosition.z + 0.0045f);
                    }

                    return(false);
                }
                else if (Input.GetKey(KeyCode.E))
                {
                    // CustomPictureFrame scale ratio step
                    float scaleRatio = 1.1f;

                    if (frame.transform.localScale.x >= 3.0f)
                    {
                        // Set minimum size
                        frame.transform.localScale                    = new Vector3(cpfController.OriginFrameScale.x * (1.0f / minSizeRatio), cpfController.OriginFrameScale.y * (1.0f / minSizeRatio), cpfController.OriginFrameScale.z);
                        poster.transform.localPosition                = new Vector3(cpfController.OriginPosterPosition.x * (1.0f / minSizeRatio), cpfController.OriginPosterPosition.y * (1.0f / minSizeRatio), cpfController.OriginPosterPosition.z);
                        posterModel.transform.localPosition           = new Vector3(cpfController.OriginPosterModelPosition.x * (1.0f / minSizeRatio), cpfController.OriginPosterModelPosition.y * (1.0f / minSizeRatio), cpfController.OriginPosterModelPosition.z);
                        posterModel.transform.localScale              = new Vector3(cpfController.OriginPosterModelScale.x * (1.0f / minSizeRatio), cpfController.OriginPosterModelScale.y * (1.0f / minSizeRatio), cpfController.OriginPosterModelScale.z);
                        __instance.imageRenderer.transform.localScale = new Vector3(cpfController.OriginImageScale.x * (1.0f / minSizeRatio), cpfController.OriginImageScale.y * (1.0f / minSizeRatio), cpfController.OriginImageScale.z * (1.0f / minSizeRatio));
                        magnetModel.transform.localScale              = new Vector3(cpfController.OriginMagnetScale.x, (cpfController.OriginMagnetScale.y * (1.0f / minSizeRatio)) + 0.1f, cpfController.OriginMagnetScale.z);
                        frame.transform.localPosition                 = new Vector3(cpfController.OriginFramePosition.x, cpfController.OriginFramePosition.y, cpfController.OriginFramePosition.z + 0.0001f);

                        if (cpfController.Flipped)
                        {
#if DEBUG_CUSTOM_PICTURE_FRAME
                            Logger.Log("DEBUG: ENTERING FLIPPED");
                            Logger.Log("DEBUG: BG BIS IS " + (bgBisRenderer.enabled ? "ENABLED" : "DISABLED"));
                            Logger.Log("DEBUG: BG PIVOT IS " + (bgPivotRenderer.enabled ? "ENABLED" : "DISABLED"));
#endif
                            // Rotate image
                            __instance.imageRenderer.transform.localScale = new Vector3(__instance.imageRenderer.transform.localScale.y, __instance.imageRenderer.transform.localScale.x, __instance.imageRenderer.transform.localScale.z);
                        }
#if DEBUG_CUSTOM_PICTURE_FRAME
                        else
                        {
                            Logger.Log("DEBUG: ENTERING NOT FLIPPED");
                            Logger.Log("DEBUG: BG BIS IS " + (bgBisRenderer.enabled ? "ENABLED" : "DISABLED"));
                            Logger.Log("DEBUG: BG PIVOT IS " + (bgPivotRenderer.enabled ? "ENABLED" : "DISABLED"));
                        }
#endif
                    }
                    else
                    {
                        // Increase size
                        frame.transform.localScale                    = new Vector3(frame.transform.localScale.x * scaleRatio, frame.transform.localScale.y * scaleRatio, frame.transform.localScale.z); // *= scaleRatio;
                        poster.transform.localPosition                = new Vector3(poster.transform.localPosition.x, poster.transform.localPosition.y * scaleRatio, poster.transform.localPosition.z);
                        posterModel.transform.localPosition           = new Vector3(posterModel.transform.localPosition.x, posterModel.transform.localPosition.y * scaleRatio, posterModel.transform.localPosition.z);
                        posterModel.transform.localScale              = new Vector3(posterModel.transform.localScale.x * scaleRatio, posterModel.transform.localScale.y * scaleRatio, posterModel.transform.localScale.z);                                                     // *= scaleRatio;
                        __instance.imageRenderer.transform.localScale = new Vector3(__instance.imageRenderer.transform.localScale.x * scaleRatio, __instance.imageRenderer.transform.localScale.y * scaleRatio, __instance.imageRenderer.transform.localScale.z * scaleRatio); //*= scaleRatio;
                        magnetModel.transform.localScale              = new Vector3(magnetModel.transform.localScale.x, magnetModel.transform.localScale.y * scaleRatio, magnetModel.transform.localScale.z);
                        frame.transform.localPosition                 = new Vector3(frame.transform.localPosition.x, frame.transform.localPosition.y, frame.transform.localPosition.z * 1.0f);
                    }

                    // Refresh picture
                    PictureFrameEnumHelper.SetStateMethod.Invoke(__instance, new object[] { PictureFrameEnumHelper.ThumbnailEnumValue });
                    PictureFrameEnumHelper.SetStateMethod.Invoke(__instance, new object[] { PictureFrameEnumHelper.FullEnumValue });

                    return(false);
                }
            }
            return(true);
        }
Пример #21
0
        public override GameObject GetGameObject()
        {
            GameObject prefab = GameObject.Instantiate(this.GameObject);

            prefab.name = this.ClassID;

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

            techTag.type = this.TechType;

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

            prefabId.ClassId = this.ClassID;

            // Update StorageContainer
            StorageContainer sc = prefab.GetComponent <StorageContainer>();

            sc.height = 2;

            // Update Planter
            var planter = prefab.GetComponent <Planter>();

            if (planter != null)
            {
                planter.isIndoor    = false;
                planter.environment = Planter.PlantEnvironment.Water;
            }

            // Update constructable
            Constructable constructable = prefab.GetComponent <Constructable>();

            constructable.allowedOutside   = true;
            constructable.allowedInBase    = ConfigSwitcher.AllowOutdoorLongPlanterInside;
            constructable.allowedInSub     = ConfigSwitcher.AllowOutdoorLongPlanterInside;
            constructable.placeMinDistance = 0.8f;

            // Update constructable bounds
            ConstructableBounds bounds = prefab.GetComponent <ConstructableBounds>();

            bounds.bounds.extents  = new Vector3(bounds.bounds.extents.x * 0.3f, bounds.bounds.extents.y * 0.4f, bounds.bounds.extents.z);
            bounds.bounds.position = new Vector3(bounds.bounds.position.x + 0.3f, bounds.bounds.position.y * 0.4f, bounds.bounds.position.z);

            float xPad             = 1.22f; //0.5f;
            float yPad             = -0.25f;
            float scaleRatio       = 0.4f;
            float heightScaleRatio = 0.5f;

            // Update box collider
            GameObject  objectTrigger  = prefab.FindChild("collider");
            BoxCollider objectCollider = objectTrigger.GetComponent <BoxCollider>();

            objectCollider.size = new Vector3(objectCollider.size.x * scaleRatio, objectCollider.size.y * heightScaleRatio, objectCollider.size.z);
            //objectCollider.center = new Vector3(objectCollider.center.x + pad, objectCollider.center.y, objectCollider.center.z);

            // Update model
            GameObject model = prefab.FindChild("model");

            model.transform.localScale = new Vector3(model.transform.localScale.x * scaleRatio, model.transform.localScale.y * heightScaleRatio, model.transform.localScale.z);
            //model.transform.localPosition = new Vector3(model.transform.localPosition.x + pad, model.transform.localPosition.y, model.transform.localPosition.z);
            //model.transform.localRotation = new Quaternion(model.transform.localRotation.x, model.transform.localRotation.y + 20.0f, model.transform.localRotation.z, model.transform.localRotation.w);

            GameObject slots = prefab.FindChild("slots");

            foreach (Transform tr in slots.transform)
            {
                tr.localPosition = new Vector3(tr.localPosition.x + xPad, tr.localPosition.y + yPad, tr.localPosition.z);
            }
            GameObject slotsSmall = prefab.FindChild("slots_small");

            foreach (Transform tr in slotsSmall.transform)
            {
                tr.localPosition = new Vector3(tr.localPosition.x + xPad, tr.localPosition.y + yPad, tr.localPosition.z);
            }

            // Update sky applier
            SkyApplier sa = prefab.GetComponent <SkyApplier>();

            if (sa == null)
            {
                sa = prefab.GetComponentInChildren <SkyApplier>();
            }
            if (sa == null)
            {
                sa = prefab.AddComponent <SkyApplier>();
            }
            sa.renderers = prefab.GetComponentsInChildren <Renderer>();
            sa.anchorSky = Skies.Auto;

            return(prefab);
        }
Пример #22
0
        public void OnProtoSerialize(ProtobufSerializer serializer)
        {
            // Retrieve prefab unique ID
            PrefabIdentifier id = GetComponent <PrefabIdentifier>();

            if (id == null)
            {
                if ((id = GetComponentInParent <PrefabIdentifier>()) == null)
                {
                    return;
                }
            }

            // Get saves folder and create it if it doesn't exist
            string saveFolder = FilesHelper.GetSaveFolderPath();

            if (!Directory.Exists(saveFolder))
            {
                Directory.CreateDirectory(saveFolder);
            }

            // Save model angles
            GameObject frame    = this.gameObject.FindChild("mesh");
            string     saveData = Convert.ToString(frame.transform.localEulerAngles.x, CultureInfo.InvariantCulture) + "|" +
                                  Convert.ToString(frame.transform.localEulerAngles.y, CultureInfo.InvariantCulture) + "|" +
                                  Convert.ToString(frame.transform.localEulerAngles.z, CultureInfo.InvariantCulture) + Environment.NewLine;

            // Save collider size
            GameObject  trigger  = this.gameObject.FindChild("Trigger");
            BoxCollider collider = trigger.GetComponent <BoxCollider>();

            saveData += Convert.ToString(collider.size.x, CultureInfo.InvariantCulture) + "|" +
                        Convert.ToString(collider.size.y, CultureInfo.InvariantCulture) + "|" +
                        Convert.ToString(collider.size.z, CultureInfo.InvariantCulture) + Environment.NewLine;

            // Save picture scale
            PictureFrame pf = this.gameObject.GetComponent <PictureFrame>();

            saveData += Convert.ToString(pf.imageRenderer.transform.localScale.x, CultureInfo.InvariantCulture) + "|" +
                        Convert.ToString(pf.imageRenderer.transform.localScale.y, CultureInfo.InvariantCulture) + "|" +
                        Convert.ToString(pf.imageRenderer.transform.localScale.z, CultureInfo.InvariantCulture) + Environment.NewLine;

            // Save frame border visibility
            GameObject   pictureFrame  = frame.FindChild("submarine_Picture_Frame");
            GameObject   poster        = this.gameObject.FindChild("poster_decorations(Clone)");
            GameObject   posterModel   = poster.FindChild("model");
            GameObject   magnetModel   = posterModel.FindChild("poster_kitty");
            MeshRenderer frameRenderer = pictureFrame.GetComponent <MeshRenderer>();

            if (frameRenderer.enabled)
            {
                saveData += "1" + Environment.NewLine;
            }
            else
            {
                MeshRenderer magnetRenderer = magnetModel.GetComponent <MeshRenderer>();
                if (magnetRenderer.enabled)
                {
                    saveData += "2" + Environment.NewLine;
                }
                else
                {
                    saveData += "0" + Environment.NewLine;
                }
            }

            // Save constructable bounds extents
            ConstructableBounds constructableBounds = this.gameObject.GetComponent <ConstructableBounds>();

            saveData += Convert.ToString(constructableBounds.bounds.extents.x, CultureInfo.InvariantCulture) + "|" +
                        Convert.ToString(constructableBounds.bounds.extents.y, CultureInfo.InvariantCulture) + "|" +
                        Convert.ToString(constructableBounds.bounds.extents.z, CultureInfo.InvariantCulture) + Environment.NewLine;

            // Save current sizes
            saveData += Convert.ToString(frame.transform.localScale.x, CultureInfo.InvariantCulture) + "|" + Convert.ToString(frame.transform.localScale.y, CultureInfo.InvariantCulture) + "|" + Convert.ToString(frame.transform.localScale.z, CultureInfo.InvariantCulture) + Environment.NewLine;
            saveData += Convert.ToString(poster.transform.localPosition.x, CultureInfo.InvariantCulture) + "|" + Convert.ToString(poster.transform.localPosition.y, CultureInfo.InvariantCulture) + "|" + Convert.ToString(poster.transform.localPosition.z, CultureInfo.InvariantCulture) + Environment.NewLine;
            saveData += Convert.ToString(posterModel.transform.localPosition.x, CultureInfo.InvariantCulture) + "|" + Convert.ToString(posterModel.transform.localPosition.y, CultureInfo.InvariantCulture) + "|" + Convert.ToString(posterModel.transform.localPosition.z, CultureInfo.InvariantCulture) + Environment.NewLine;
            saveData += Convert.ToString(posterModel.transform.localScale.x, CultureInfo.InvariantCulture) + "|" + Convert.ToString(posterModel.transform.localScale.y, CultureInfo.InvariantCulture) + "|" + Convert.ToString(posterModel.transform.localScale.z, CultureInfo.InvariantCulture) + Environment.NewLine;
            saveData += Convert.ToString(pf.imageRenderer.transform.localPosition.x, CultureInfo.InvariantCulture) + "|" + Convert.ToString(pf.imageRenderer.transform.localPosition.y, CultureInfo.InvariantCulture) + "|" + Convert.ToString(pf.imageRenderer.transform.localPosition.z, CultureInfo.InvariantCulture) + Environment.NewLine;
            saveData += Convert.ToString(magnetModel.transform.localScale.x, CultureInfo.InvariantCulture) + "|" + Convert.ToString(magnetModel.transform.localScale.y, CultureInfo.InvariantCulture) + "|" + Convert.ToString(magnetModel.transform.localScale.z, CultureInfo.InvariantCulture) + Environment.NewLine;
            saveData += Convert.ToString(frame.transform.localPosition.x, CultureInfo.InvariantCulture) + "|" + Convert.ToString(frame.transform.localPosition.y, CultureInfo.InvariantCulture) + "|" + Convert.ToString(frame.transform.localPosition.z, CultureInfo.InvariantCulture) + Environment.NewLine;

            // Save state to file
            File.WriteAllText(Path.Combine(saveFolder, "custompictureframe_" + id.Id + ".txt"), saveData);
        }
Пример #23
0
 protected void SetShield(GameObject obj)
 {
     obj.GetComponent <PlortInvulnerability>().activateObj = obj.FindChild("Shield");
 }
Пример #24
0
        public override GameObject GetPrefab()
        {
            GameObject prefab     = GameObject.Instantiate(this.GameObject);
            GameObject signPrefab = GameObject.Instantiate(this.SignObject);

            prefab.name = this.ClassID;

            // 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 identifier
            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 rb = prefab.GetComponent <Rigidbody>();

            GameObject.DestroyImmediate(rb);

            // Get box collider
            GameObject cube     = prefab.FindChild("Cube");
            var        collider = cube.GetComponent <BoxCollider>();

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

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

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

            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 editable label
            signPrefab.transform.parent           = prefab.transform;
            signPrefab.transform.localPosition    = new Vector3(0f, 0.25f, 0.096f);
            signPrefab.transform.localScale       = new Vector3(1.0f, 1.0f, 1.0f);
            signPrefab.transform.localEulerAngles = new Vector3(0f, 0f, 0f);
            signPrefab.SetActive(true);
            var ssf = prefab.AddComponent <SignSetupFixer>();

            // Hide "no signal" material
            MeshRenderer[] renderers = prefab.GetComponentsInChildren <MeshRenderer>();
            foreach (MeshRenderer rend in renderers)
            {
                if (rend.name.CompareTo("Starship_wall_monitor_01_03") == 0)
                {
                    Material[] tmp = rend.materials;
                    if (tmp.Length >= 2)
                    {
                        if (tmp[0].name.CompareTo("Starship_wall_monitor_01_screen (Instance)") == 0)
                        {
                            rend.materials = new Material[] { screenMaterial, tmp[1] }
                        }
                        ;
                        else if (tmp[1].name.CompareTo("Starship_wall_monitor_01_screen (Instance)") == 0)
                        {
                            rend.materials = new Material[] { tmp[0], screenMaterial }
                        }
                        ;
                    }
                }
            }

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

            fabricating.localMinY   = -0.1f;
            fabricating.localMaxY   = 0.9f;
            fabricating.posOffset   = new Vector3(0f, 0f, 0.04f);
            fabricating.eulerOffset = new Vector3(0f, 0f, 0f);
            fabricating.scaleFactor = 1f;

            return(prefab);
        }
    }
Пример #25
0
        protected override void ModifyGameObject()
        {
            GameObject freezeCannon = Object.Instantiate(Main.assetBundle.LoadAsset <GameObject>("FreezeCannonNew"), _GameObject.transform);

            PropulsionCannon propulsionCannon = _GameObject.GetComponent <PropulsionCannon>();

            Object.DestroyImmediate(_GameObject.GetComponent <PropulsionCannonWeapon>());
            Object.DestroyImmediate(_GameObject.transform.Find("PropulsionCannonGrabbedEffect").gameObject);
            Object.DestroyImmediate(_GameObject.transform.Find("objectHolder").gameObject);

            FreezeCannonWeapon cannonWeapon = _GameObject.AddComponent <FreezeCannonWeapon>();

            cannonWeapon.freezeCannon = _GameObject.AddComponent <FreezeCannon>();

            cannonWeapon.pickupable   = _GameObject.GetComponent <Pickupable>();
            cannonWeapon.mainCollider = _GameObject.GetComponent <Collider>();

            cannonWeapon.freezeCannon.fxBeam        = Object.Instantiate(propulsionCannon.fxBeam, cannonWeapon.transform);
            cannonWeapon.freezeCannon.fxTrailPrefab = Object.Instantiate(propulsionCannon.fxTrailPrefab, cannonWeapon.transform);
            cannonWeapon.freezeCannon.muzzle        = freezeCannon.FindChild("muzzle").transform;

            cannonWeapon.freezeCannon.fxControl    = propulsionCannon.fxControl;
            cannonWeapon.freezeCannon.connectSound = propulsionCannon.grabbingSound;

            cannonWeapon.freezeCannon.shootSound      = ScriptableObject.CreateInstance <FMODAsset>();
            cannonWeapon.freezeCannon.shootSound.name = "fire";
            cannonWeapon.freezeCannon.shootSound.path = "event:/tools/gravcannon/fire";

            cannonWeapon.freezeCannon.validTargetSound      = ScriptableObject.CreateInstance <FMODAsset>();
            cannonWeapon.freezeCannon.validTargetSound.name = "ready";
            cannonWeapon.freezeCannon.validTargetSound.path = "event:/tools/gravcannon/ready";

            //Object.DestroyImmediate(propulsionCannon);

            cannonWeapon.reloadMode               = PlayerTool.ReloadMode.Direct;
            cannonWeapon.drawTime                 = 0;
            cannonWeapon.holsterTime              = 0.1f;
            cannonWeapon.dropTime                 = 0;
            cannonWeapon.ikAimRightArm            = true;
            cannonWeapon.ikAimLeftArm             = true;
            cannonWeapon.useLeftAimTargetOnPlayer = true;

            cannonWeapon.leftHandIKTarget = freezeCannon.FindChild("leftHandTarget").transform;
            cannonWeapon.socket           = PlayerTool.Socket.RightHand;

            cannonWeapon.reloadSound      = ScriptableObject.CreateInstance <FMODAsset>();
            cannonWeapon.reloadSound.name = "reload";
            cannonWeapon.reloadSound.path = "event:/tools/gravcannon/reload";

            cannonWeapon.drawSound      = ScriptableObject.CreateInstance <FMODAsset>();
            cannonWeapon.drawSound.name = "deploy";
            cannonWeapon.drawSound.path = "event:/tools/gravcannon/deploy";

            freezeCannon.transform.localScale    = new Vector3(0.14f, 0.14f, 0.14f);
            freezeCannon.transform.localPosition = new Vector3(0.0f, -0.04F, -0.13f);
            freezeCannon.transform.localRotation = Quaternion.Euler(0.0f, 0.0f, 0.0f);

            Texture2D _MainTex = Main.assetBundle.LoadAsset <Texture2D>("freezeCannon_main");
            Texture2D _Illum   = Main.assetBundle.LoadAsset <Texture2D>("freezeCannon_illum");
            Texture2D _BumpMap = Main.assetBundle.LoadAsset <Texture2D>("freezeCannon_bump");
            Texture2D _SpecTex = Main.assetBundle.LoadAsset <Texture2D>("freezeCannon_spec");

            Shader marmoShader = Shader.Find("MarmosetUBER");

            MeshRenderer freezeRenderer = freezeCannon.GetComponent <MeshRenderer>();

            for (int i = 0; i < freezeRenderer.materials.Length; i++)
            {
                Material material = freezeRenderer.materials[i];

                switch (i)
                {
                case 0:
                    material.shader = marmoShader;
                    //material.EnableKeyword("UWE_3COLOR");
                    //material.EnableKeyword("MARMO_NORMALMAP");
                    material.EnableKeyword("_ZWRITE_ON");
                    material.SetTexture(Shader.PropertyToID("_MainTex"), _MainTex);
                    material.SetTexture(Shader.PropertyToID("_BumpMap"), _BumpMap);
                    break;

                case 1:
                    material.shader = marmoShader;
                    //material.EnableKeyword("UWE_3COLOR");
                    //material.EnableKeyword("MARMO_NORMALMAP");
                    material.EnableKeyword("MARMO_EMISSION");
                    material.EnableKeyword("_ZWRITE_ON");
                    material.SetTexture(Shader.PropertyToID("_MainTex"), _MainTex);
                    material.SetTexture(Shader.PropertyToID("_BumpMap"), _BumpMap);
                    material.SetTexture(Shader.PropertyToID("_Illum"), _Illum);
                    break;

                default:
                    material.shader = marmoShader;
                    //material.EnableKeyword("UWE_3COLOR");
                    break;
                }


                material.DisableKeyword("_NORMALMAP");

                //material.EnableKeyword("MARMO_SPECMAP");
                //material.SetTexture(Shader.PropertyToID("_SpecTex"), _SpecTex);
            }
        }
        public static void SetLeftArm(GameObject gameObject, string arm)
        {
            GameObject leftArm           = gameObject.FindChild("prawnsuit").FindChild("ExosuitArmLeft");
            GameObject leftArmRig        = leftArm.FindChild("exosuit_01_armRight").FindChild("ArmRig");
            GameObject leftTorpedoArm    = leftArmRig.FindChild("exosuit_arm_torpedoLauncher_geo");
            GameObject leftDrillArm      = leftArmRig.FindChild("exosuit_drill_geo");
            GameObject leftGrapplinArm   = leftArmRig.FindChild("exosuit_grapplingHook_geo");
            GameObject leftGrapplinHand  = leftArmRig.FindChild("exosuit_grapplingHook_hand_geo");
            GameObject leftHandArm       = leftArmRig.FindChild("exosuit_hand_geo");
            GameObject leftPropulsionArm = leftArmRig.FindChild("exosuit_propulsion_geo");

            // Right torpedo arm
            if (arm.CompareTo("0") != 0)
            {
                List <Renderer> leftTorpedoArmRenderers = new List <Renderer>();
                leftTorpedoArm.GetComponentsInChildren <Renderer>(leftTorpedoArmRenderers);
                if (!leftTorpedoArmRenderers.Contains(leftTorpedoArm.GetComponent <Renderer>()))
                {
                    leftTorpedoArmRenderers.Add(leftTorpedoArm.GetComponent <Renderer>());
                }
                foreach (Renderer rend in leftTorpedoArmRenderers)
                {
                    rend.enabled = false;
                }
            }
            else
            {
                List <Renderer> renderers = new List <Renderer>();
                leftTorpedoArm.GetComponentsInChildren <Renderer>(renderers);
                if (!renderers.Contains(leftTorpedoArm.GetComponent <Renderer>()))
                {
                    renderers.Add(leftTorpedoArm.GetComponent <Renderer>());
                }
                foreach (Renderer rend in renderers)
                {
                    rend.enabled = true;
                }
            }

            // Right drill arm
            leftDrillArm.GetComponent <Renderer>().enabled = (arm.CompareTo("1") == 0);

            // Right grapplin arm
            if (arm.CompareTo("2") != 0)
            {
                List <Renderer> rightGrapplinArmRenderers = new List <Renderer>();
                leftGrapplinHand.GetComponentsInChildren <Renderer>(rightGrapplinArmRenderers);
                if (!rightGrapplinArmRenderers.Contains(leftGrapplinHand.GetComponent <Renderer>()))
                {
                    rightGrapplinArmRenderers.Add(leftGrapplinHand.GetComponent <Renderer>());
                }
                foreach (Renderer rend in rightGrapplinArmRenderers)
                {
                    rend.enabled = false;
                }
                leftGrapplinArm.GetComponent <Renderer>().enabled = false;
            }
            else
            {
                leftGrapplinArm.GetComponent <Renderer>().enabled = true;
                List <Renderer> renderers = new List <Renderer>();
                leftGrapplinHand.GetComponentsInChildren <Renderer>(renderers);
                if (!renderers.Contains(leftGrapplinHand.GetComponent <Renderer>()))
                {
                    renderers.Add(leftGrapplinHand.GetComponent <Renderer>());
                }
                foreach (Renderer rend in renderers)
                {
                    rend.enabled = true;
                }
            }

            // Right propulsion arm
            leftPropulsionArm.GetComponent <Renderer>().enabled = (arm.CompareTo("3") == 0);

            // Right hand arm
            leftHandArm.GetComponent <Renderer>().enabled = (arm.CompareTo("4") == 0);
        }
Пример #27
0
        public override GameObject GetPrefab()
        {
            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
            LargeWorldEntity lwe = prefab.GetComponent <LargeWorldEntity>();

            lwe.cellLevel = LargeWorldEntity.CellLevel.Near;

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

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

            return(prefab);
        }
        public void OnHandClick(GUIHand hand)
        {
            if (!enabled)
            {
                return;
            }

            GameObject model = this.gameObject.FindChild("prawnsuit");

            if (model == null)
            {
                return;
            }

            if (Input.GetKey(KeyCode.E))
            {
                GameObject rightArm           = model.FindChild("ExosuitArmRight");
                GameObject rightArmRig        = rightArm.FindChild("exosuit_01_armRight 1").FindChild("ArmRig 1");
                GameObject rightTorpedoArm    = rightArmRig.FindChild("exosuit_arm_torpedoLauncher_geo 1");
                GameObject rightDrillArm      = rightArmRig.FindChild("exosuit_drill_geo 1");
                GameObject rightGrapplinArm   = rightArmRig.FindChild("exosuit_grapplingHook_geo 1");
                GameObject rightGrapplinHand  = rightArmRig.FindChild("exosuit_grapplingHook_hand_geo 1");
                GameObject rightHandArm       = rightArmRig.FindChild("exosuit_hand_geo 1");
                GameObject rightPropulsionArm = rightArmRig.FindChild("exosuit_propulsion_geo 1");

                if (rightTorpedoArm.GetComponent <Renderer>().enabled)
                {
                    List <Renderer> renderers = new List <Renderer>();
                    rightTorpedoArm.GetComponentsInChildren <Renderer>(renderers);
                    if (!renderers.Contains(rightTorpedoArm.GetComponent <Renderer>()))
                    {
                        renderers.Add(rightTorpedoArm.GetComponent <Renderer>());
                    }
                    foreach (Renderer rend in renderers)
                    {
                        rend.enabled = false;
                    }

                    rightDrillArm.GetComponent <Renderer>().enabled = true;
                }
                else if (rightDrillArm.GetComponent <Renderer>().enabled)
                {
                    rightDrillArm.GetComponent <Renderer>().enabled = false;

                    rightGrapplinArm.GetComponent <Renderer>().enabled = true;
                    List <Renderer> renderers = new List <Renderer>();
                    rightGrapplinHand.GetComponentsInChildren <Renderer>(renderers);
                    if (!renderers.Contains(rightGrapplinHand.GetComponent <Renderer>()))
                    {
                        renderers.Add(rightGrapplinHand.GetComponent <Renderer>());
                    }
                    foreach (Renderer rend in renderers)
                    {
                        rend.enabled = true;
                    }
                }
                else if (rightGrapplinArm.GetComponent <Renderer>().enabled)
                {
                    List <Renderer> renderers = new List <Renderer>();
                    rightGrapplinHand.GetComponentsInChildren <Renderer>(renderers);
                    if (!renderers.Contains(rightGrapplinHand.GetComponent <Renderer>()))
                    {
                        renderers.Add(rightGrapplinHand.GetComponent <Renderer>());
                    }
                    foreach (Renderer rend in renderers)
                    {
                        rend.enabled = false;
                    }
                    rightGrapplinArm.GetComponent <Renderer>().enabled = false;

                    rightHandArm.GetComponent <Renderer>().enabled = true;
                }
                else if (rightHandArm.GetComponent <Renderer>().enabled)
                {
                    rightHandArm.GetComponent <Renderer>().enabled = false;

                    rightPropulsionArm.GetComponent <Renderer>().enabled = true;
                }
                else
                {
                    rightPropulsionArm.GetComponent <Renderer>().enabled = false;

                    List <Renderer> renderers = new List <Renderer>();
                    rightTorpedoArm.GetComponentsInChildren <Renderer>(renderers);
                    if (!renderers.Contains(rightTorpedoArm.GetComponent <Renderer>()))
                    {
                        renderers.Add(rightTorpedoArm.GetComponent <Renderer>());
                    }
                    foreach (Renderer rend in renderers)
                    {
                        rend.enabled = true;
                    }
                }
            }
            else
            {
                GameObject leftArm           = model.FindChild("ExosuitArmLeft");
                GameObject leftArmRig        = leftArm.FindChild("exosuit_01_armRight").FindChild("ArmRig");
                GameObject leftTorpedoArm    = leftArmRig.FindChild("exosuit_arm_torpedoLauncher_geo");
                GameObject leftDrillArm      = leftArmRig.FindChild("exosuit_drill_geo");
                GameObject leftGrapplinArm   = leftArmRig.FindChild("exosuit_grapplingHook_geo");
                GameObject leftGrapplinHand  = leftArmRig.FindChild("exosuit_grapplingHook_hand_geo");
                GameObject leftHandArm       = leftArmRig.FindChild("exosuit_hand_geo");
                GameObject leftPropulsionArm = leftArmRig.FindChild("exosuit_propulsion_geo");

                if (leftTorpedoArm.GetComponent <Renderer>().enabled)
                {
                    List <Renderer> renderers = new List <Renderer>();
                    leftTorpedoArm.GetComponentsInChildren <Renderer>(renderers);
                    if (!renderers.Contains(leftTorpedoArm.GetComponent <Renderer>()))
                    {
                        renderers.Add(leftTorpedoArm.GetComponent <Renderer>());
                    }
                    foreach (Renderer rend in renderers)
                    {
                        rend.enabled = false;
                    }

                    leftDrillArm.GetComponent <Renderer>().enabled = true;
                }
                else if (leftDrillArm.GetComponent <Renderer>().enabled)
                {
                    leftDrillArm.GetComponent <Renderer>().enabled = false;

                    leftGrapplinArm.GetComponent <Renderer>().enabled = true;
                    List <Renderer> renderers = new List <Renderer>();
                    leftGrapplinHand.GetComponentsInChildren <Renderer>(renderers);
                    if (!renderers.Contains(leftGrapplinHand.GetComponent <Renderer>()))
                    {
                        renderers.Add(leftGrapplinHand.GetComponent <Renderer>());
                    }
                    foreach (Renderer rend in renderers)
                    {
                        rend.enabled = true;
                    }
                }
                else if (leftGrapplinArm.GetComponent <Renderer>().enabled)
                {
                    List <Renderer> renderers = new List <Renderer>();
                    leftGrapplinHand.GetComponentsInChildren <Renderer>(renderers);
                    if (!renderers.Contains(leftGrapplinHand.GetComponent <Renderer>()))
                    {
                        renderers.Add(leftGrapplinHand.GetComponent <Renderer>());
                    }
                    foreach (Renderer rend in renderers)
                    {
                        rend.enabled = false;
                    }
                    leftGrapplinArm.GetComponent <Renderer>().enabled = false;

                    leftHandArm.GetComponent <Renderer>().enabled = true;
                }
                else if (leftHandArm.GetComponent <Renderer>().enabled)
                {
                    leftHandArm.GetComponent <Renderer>().enabled = false;

                    leftPropulsionArm.GetComponent <Renderer>().enabled = true;
                }
                else
                {
                    leftPropulsionArm.GetComponent <Renderer>().enabled = false;

                    List <Renderer> renderers = new List <Renderer>();
                    leftTorpedoArm.GetComponentsInChildren <Renderer>(renderers);
                    if (!renderers.Contains(leftTorpedoArm.GetComponent <Renderer>()))
                    {
                        renderers.Add(leftTorpedoArm.GetComponent <Renderer>());
                    }
                    foreach (Renderer rend in renderers)
                    {
                        rend.enabled = true;
                    }
                }
            }
        }
Пример #29
0
        public override GameObject GetGameObject()
        {
            GameObject prefab = GameObject.Instantiate(this.GameObject);

            prefab.name = this.ClassID;

            // Add tech tag
            var techTag = prefab.AddComponent <TechTag>();

            techTag.type = this.TechType;

            // Add prefab identifier
            var prefabId = prefab.AddComponent <PrefabIdentifier>();

            prefabId.ClassId = this.ClassID;

            // Retrieve model node
            GameObject model = prefab.FindChild("forklift");

            // Add large world entity
            var lwe = prefab.AddComponent <LargeWorldEntity>();

            lwe.cellLevel = LargeWorldEntity.CellLevel.Near;

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

            collider.size   = new Vector3(0.05f, 0.064f, 0.04f);
            collider.center = new Vector3(collider.center.x, collider.center.y + 0.032f, collider.center.z);

            // Set proper shaders (for crafting animation)
            Shader shader = Shader.Find("MarmosetUBER");

            Renderer[] renderers = prefab.GetComponentsInChildren <Renderer>();
            foreach (Renderer renderer in renderers)
            {
                foreach (Material tmpMat in renderer.materials)
                {
                    // Associate MarmosetUBER shader
                    tmpMat.shader = shader;

                    if (string.Compare(tmpMat.name, "generic_forklift (Instance)", true, CultureInfo.InvariantCulture) == 0)
                    {
                        tmpMat.SetTexture("_BumpMap", normal);
                        tmpMat.SetTexture("_Illum", illum);
                        tmpMat.SetFloat("_EmissionLM", 0.75f); // Set always visible

                        tmpMat.EnableKeyword("MARMO_NORMALMAP");
                        tmpMat.EnableKeyword("MARMO_EMISSION");
                        tmpMat.EnableKeyword("_ZWRITE_ON"); // Enable Z write
                    }
                }
            }

            // Add sky applier
            var skyapplier = prefab.AddComponent <SkyApplier>();

            skyapplier.renderers = renderers;
            skyapplier.anchorSky = Skies.Auto;

            if (ConfigSwitcher.Forklift_asBuidable)
            {
                // Add contructable
                var constructible = prefab.AddComponent <Constructable>();
                constructible.allowedInBase           = true;
                constructible.allowedInSub            = true;
                constructible.allowedOutside          = true;
                constructible.allowedOnCeiling        = false;
                constructible.allowedOnGround         = true;
                constructible.allowedOnConstructables = true;
                constructible.controlModelState       = true;
                constructible.deconstructionAllowed   = true;
                constructible.rotationEnabled         = true;
                constructible.model            = model;
                constructible.techType         = this.TechType;
                constructible.placeMinDistance = 0.6f;
                constructible.enabled          = true;

                // Add constructable bounds
                var bounds = prefab.AddComponent <ConstructableBounds>();
                bounds.bounds.position = new Vector3(bounds.bounds.position.x, bounds.bounds.position.y + 0.003f, bounds.bounds.position.z);

                // Add forklift controller
                var forkliftController = prefab.AddComponent <ForkliftController>();
            }
            else
            {
                // 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       = false;
                placeTool.allowedOnConstructable = true;
                placeTool.allowedOnGround        = true;
                placeTool.allowedOnRigidBody     = true;
                placeTool.allowedOnWalls         = false;
                placeTool.allowedOutside         = true;
                placeTool.rotationEnabled        = true;
                placeTool.enabled              = true;
                placeTool.hasAnimations        = false;
                placeTool.hasBashAnimation     = false;
                placeTool.hasFirstUseAnimation = false;
                placeTool.mainCollider         = collider;
                placeTool.pickupable           = pickupable;
                placeTool.drawTime             = 0.5f;
                placeTool.dropTime             = 1;
                placeTool.holsterTime          = 0.35f;

                // Add fabricating animation
                var fabricatingA = prefab.AddComponent <VFXFabricating>();
                fabricatingA.localMinY   = -0.2f;
                fabricatingA.localMaxY   = 0.7f;
                fabricatingA.posOffset   = new Vector3(0f, 0f, 0f);
                fabricatingA.eulerOffset = new Vector3(0f, 0f, 0f);
                fabricatingA.scaleFactor = 1f;
            }

            // Scale prefab
            prefab.transform.localScale *= 5.0f;

            return(prefab);
        }
Пример #30
0
        public override GameObject GetPrefab()
        {
            GameObject prefab = GameObject.Instantiate(this.GameObject);

            prefab.name = this.ClassID;

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

            // Retrieve collider
            GameObject child    = prefab.FindChild("Nutrient_block");
            Collider   collider = child.GetComponent <BoxCollider>();

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

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

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

            placeTool.allowedInBase          = true;
            placeTool.allowedOnBase          = false;
            placeTool.allowedOnCeiling       = false;
            placeTool.allowedOnConstructable = true;
            placeTool.allowedOnGround        = true;
            placeTool.allowedOnRigidBody     = true;
            placeTool.allowedOnWalls         = false;
            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.FindChild("Nutrient_block").AddComponent <VFXFabricating>();

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

            return(prefab);
        }
        public override GameObject GetGameObject()
        {
            // Instantiate prefabs
            GameObject prefab       = GameObject.Instantiate(this.GameObject);
            GameObject posterPrefab = GameObject.Instantiate(this.posterMagnetObj);

            // Get objects
            GameObject   posterRootModel       = posterPrefab.FindChild("model");
            GameObject   magnetModel           = posterRootModel.FindChild("poster_kitty");
            MeshRenderer magnetRenderer        = magnetModel.GetComponent <MeshRenderer>();
            GameObject   posterBgModel         = posterRootModel.FindChild("poster_background");
            MeshRenderer posterBgRenderer      = posterBgModel.GetComponent <MeshRenderer>();
            GameObject   posterBgBisModel      = posterRootModel.FindChild("poster_background_bis");
            MeshRenderer posterBgBisRenderer   = posterBgBisModel.GetComponent <MeshRenderer>();
            GameObject   posterBgPivotModel    = posterRootModel.FindChild("poster_background_pivot");
            MeshRenderer posterBgPivotRenderer = posterBgPivotModel.GetComponent <MeshRenderer>();
            Shader       marmosetUber          = Shader.Find("MarmosetUBER");

            // Update poster border shader, normal/emission maps, hide parts of the prefab
            if (magnetRenderer != null && magnetRenderer.materials != null)
            {
                foreach (Material tmpMat in magnetRenderer.materials)
                {
                    tmpMat.shader = marmosetUber;
                    if (string.Compare(tmpMat.name, "poster_magnet (Instance)", true, CultureInfo.InvariantCulture) == 0)
                    {
                        tmpMat.SetTexture("_BumpMap", normal);
                        tmpMat.SetTexture("_Illum", illum);
                        tmpMat.EnableKeyword("MARMO_NORMALMAP"); // Enable normal map
                        tmpMat.EnableKeyword("MARMO_EMISSION");  // Enable emission map
                        tmpMat.EnableKeyword("_ZWRITE_ON");      // Enable Z write
                    }
                }
            }
            if (posterBgBisRenderer != null && posterBgBisRenderer.materials != null)
            {
                foreach (Material tmpMat in posterBgBisRenderer.materials)
                {
                    tmpMat.shader = marmosetUber;
                }
            }
            if (posterBgPivotRenderer != null && posterBgPivotRenderer.materials != null)
            {
                foreach (Material tmpMat in posterBgPivotRenderer.materials)
                {
                    tmpMat.shader = marmosetUber;
                }
            }

            // Adjust poster bg position and scale
            posterBgPivotModel.transform.localPosition = new Vector3(posterBgPivotModel.transform.localPosition.x - 0.0101f, posterBgPivotModel.transform.localPosition.y - 0.00053f, posterBgPivotModel.transform.localPosition.z);
            posterBgPivotModel.transform.localScale    = new Vector3(posterBgPivotModel.transform.localScale.x * 0.741f, posterBgPivotModel.transform.localScale.y, posterBgPivotModel.transform.localScale.z * 1.396f);
            posterBgBisModel.transform.localPosition   = new Vector3(posterBgBisModel.transform.localPosition.x - 0.00005f, posterBgBisModel.transform.localPosition.y + 0.0006f, posterBgBisModel.transform.localPosition.z);
            posterBgBisModel.transform.localScale      = new Vector3(posterBgBisModel.transform.localScale.x, posterBgBisModel.transform.localScale.y, posterBgBisModel.transform.localScale.z * 1.035f);

            // Set poster relative position
            posterPrefab.transform.parent           = prefab.transform;
            posterPrefab.transform.localPosition    = new Vector3(-0.002f, 0.289f, 0f);
            posterPrefab.transform.localScale       = new Vector3(22.5f, 30.5f, 30.5f);
            posterPrefab.transform.localEulerAngles = new Vector3(0.0f, 0.0f, 0.0f);
            posterPrefab.SetActive(true);
            magnetRenderer.enabled        = false;
            posterBgRenderer.enabled      = false;
            posterBgBisRenderer.enabled   = false;
            posterBgPivotRenderer.enabled = false;

            // Get prefab sub models
            GameObject model   = prefab.FindChild("mesh");
            GameObject screen  = prefab.FindChild("Screen");
            GameObject trigger = prefab.FindChild("Trigger");

            // Adjust position from wall (except for poster)
            foreach (Transform tr in prefab.transform)
            {
                if (!tr.name.StartsWith("poster_decorations", true, CultureInfo.InvariantCulture))
                {
                    tr.localPosition = new Vector3(tr.localPosition.x, tr.localPosition.y, tr.localPosition.z + 0.005f);
                }
            }

            // Update prefab name
            prefab.name = this.ClassID;

            // Modify tech tag
            var techTag = prefab.GetComponent <TechTag>();

            techTag.type = this.TechType;

            // Modify prefab identifier
            var prefabId = prefab.GetComponent <PrefabIdentifier>();

            prefabId.ClassId = this.ClassID;

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

            // Adjust frame position
            model = prefab.FindChild("mesh");
            model.transform.localPosition = new Vector3(model.transform.localPosition.x, model.transform.localPosition.y, model.transform.localPosition.z + 0.0055f);

            // Update box collider size and rotate it
            BoxCollider collider = trigger.GetComponent <BoxCollider>();

            collider.size = new Vector3(collider.size.x - 0.15f, collider.size.y - 0.15f, collider.size.z);
            collider.size = new Vector3(collider.size.y, collider.size.x, collider.size.z);

            // Update sky applier
            var skyapplier = model.GetComponent <SkyApplier>();

            Renderer[] renderers = prefab.GetComponentsInChildren <Renderer>();
            skyapplier.renderers    = renderers;
            skyapplier.anchorSky    = Skies.Auto;
            skyapplier.updaterIndex = 0;

            // Update contructable
            var constructible = prefab.GetComponent <Constructable>();

            constructible.techType = this.TechType;

            PictureFrame pf = prefab.GetComponent <PictureFrame>();

            // Rotate PictureFrame
            pf.imageRenderer.transform.localScale = new Vector3(pf.imageRenderer.transform.localScale.y, pf.imageRenderer.transform.localScale.x, pf.imageRenderer.transform.localScale.z);

            // Move PictureFrame
            pf.imageRenderer.transform.localPosition = new Vector3(pf.imageRenderer.transform.localPosition.x, pf.imageRenderer.transform.localPosition.y, pf.imageRenderer.transform.localPosition.z + 0.0045f);

            // Update constructable bounds
            var constructableBounds = prefab.GetComponent <ConstructableBounds>();

            constructableBounds.bounds.extents = new Vector3(constructableBounds.bounds.extents.x * 0.7f, constructableBounds.bounds.extents.y * 0.4f, constructableBounds.bounds.extents.z);

            // Rotate constructable bounds
            constructableBounds.bounds.extents = new Vector3(constructableBounds.bounds.extents.y, constructableBounds.bounds.extents.x, constructableBounds.bounds.extents.z);

            // Adjust frame scale
            foreach (Transform tr in prefab.transform)
            {
                if (tr.name.StartsWith("mesh", true, CultureInfo.InvariantCulture))
                {
                    tr.localScale = new Vector3(tr.localScale.x, tr.localScale.y, tr.localScale.z + 0.002f);
                    break;
                }
            }

            // Get origin frame scale and angles
            Vector3 originFrameScale       = Vector3.zero;
            Vector3 originFramePosition    = Vector3.zero;
            Vector3 originFrameEulerAngles = Vector3.zero;

            foreach (Transform tr in prefab.transform)
            {
                if (tr.name.StartsWith("mesh", true, CultureInfo.InvariantCulture))
                {
                    originFrameScale       = tr.localScale;
                    originFramePosition    = tr.localPosition;
                    originFrameEulerAngles = tr.localEulerAngles;
                    break;
                }
            }
            // Get origin poster position, origin poster model position and scale, and origin magnet scale
            Vector3 originPosterPosition      = Vector3.zero;
            Vector3 originPosterModelPosition = Vector3.zero;
            Vector3 originPosterModelScale    = Vector3.zero;
            Vector3 originMagnetScale         = Vector3.zero;

            foreach (Transform tr in prefab.transform)
            {
                if (tr.name.StartsWith("poster_decorations", true, CultureInfo.InvariantCulture))
                {
                    originPosterPosition = tr.localPosition;
                    foreach (Transform ch in tr)
                    {
                        if (ch.name.StartsWith("model", true, CultureInfo.InvariantCulture))
                        {
                            originPosterModelPosition = ch.localPosition;
                            originPosterModelScale    = ch.localScale;
                            foreach (Transform chb in ch)
                            {
                                if (chb.name.StartsWith("poster_kitty", true, CultureInfo.InvariantCulture))
                                {
                                    originMagnetScale = chb.localScale;
                                    break;
                                }
                            }
                            break;
                        }
                    }
                    break;
                }
            }
            // Get origin image scale, origin collider size and origin constructable bounds extents
            Vector3 originImageScale   = pf.imageRenderer.transform.localScale;
            Vector3 originColliderSize = collider.size;
            Vector3 originConstructableBoundsExtents = constructableBounds.bounds.extents;

            // Add CustomPictureFrame controller
            CustomPictureFrameController cpfController = prefab.AddComponent <CustomPictureFrameController>();

            // Store origin values inside CPF controller
            cpfController.OriginFrameScale                 = originFrameScale;
            cpfController.OriginFramePosition              = originFramePosition;
            cpfController.OriginFrameEulerAngles           = originFrameEulerAngles;
            cpfController.OriginImageScale                 = originImageScale;
            cpfController.OriginColliderSize               = originColliderSize;
            cpfController.OriginConstructableBoundsExtents = originConstructableBoundsExtents;
            cpfController.OriginPosterPosition             = originPosterPosition;
            cpfController.OriginPosterModelPosition        = originPosterModelPosition;
            cpfController.OriginPosterModelScale           = originPosterModelScale;
            cpfController.OriginMagnetScale                = originMagnetScale;

            // Adjust PictureFrame rendering distance (displays full image quality if player is closer than 20m)
            pf.distance = 20.0f;

            return(prefab);
        }
Пример #32
0
	IEnumerable InitGameCoroutine()
	{
		GameObject background = Resources.Load("ui/prefab/panel_updatebackground") as GameObject;
		m_gameUpdatebackgroundDialog = NGUITools.AddChild(GUIRoot.GetUIRootObj(), background);

        var InitTip = m_gameUpdatebackgroundDialog.FindChild("InitTip");
        if (InitTip != null)
            InitTip.SetActive(false);

		Int32 updateSleepId = SleepTimeoutManager.Instance.addController();
		SleepTimeoutManager.Instance.setController(updateSleepId, (Int32)SleepTimeoutManager.Priority.Update, SleepTimeout.NeverSleep);
		
		yield return null;	//等待一帧,避免 realTimeSinceStartup 错误

		foreach (var item in GameUpdateManager.Instance.UpdateRoutine())
			yield return item;

        if (InitTip != null)
            InitTip.SetActive(true);
		yield return null;	//等待一帧,否则部分 Android 设备闪烁
        yield return null;	//等待一帧,否则部分 Android 设备闪烁

		//等待一段时间后恢复 sleepTimeout
		DelayRemoveSleepTimeoutController(30, updateSleepId);

        foreach (var item in InitGame())
            yield return item;
	}
 private void UpdateLanguage()
 {
     _healthSlider.FindChild("Heath_LBL").GetComponent <Text>().text = LanguageHelpers.GetLanguage(DisplayLanguagePatching.HealthKey);
     _powerSlider.FindChild("Power_LBL").GetComponent <Text>().text  = LanguageHelpers.GetLanguage(DisplayLanguagePatching.PowerKey);
 }