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; }
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); }
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); }
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); } } }
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; } }
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); } } }
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); }
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); }
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); }
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); }
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; } }
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); }
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); }
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); }
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); }
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); }
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); }
protected void SetShield(GameObject obj) { obj.GetComponent <PlortInvulnerability>().activateObj = obj.FindChild("Shield"); }
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); } }
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); }
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; } } } }
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); }
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); }
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); }