// Token: 0x06002BA1 RID: 11169 RVA: 0x00104660 File Offset: 0x00102860 public static void CacheBounds(Transform transform, GameObject target, List <OrientedBounds> results, bool append = false) { if (!append) { results.Clear(); } if (target == null) { return; } ConstructableBounds[] componentsInChildren = target.GetComponentsInChildren <ConstructableBounds>(); for (int i = 0; i < componentsInChildren.Length; i++) { ConstructableBounds constructableBounds = componentsInChildren[i]; OrientedBounds localBounds = constructableBounds.bounds; OrientedBounds orientedBounds = OrientedBounds.ToWorldBounds(constructableBounds.transform, localBounds); if (transform != null) { orientedBounds = OrientedBounds.ToLocalBounds(transform, orientedBounds); } results.Add(orientedBounds); } }
public override GameObject GetPrefab() { GameObject prefab = GameObject.Instantiate(this.GameObject); prefab.name = this.ClassID; // Update TechTag var techTag = prefab.GetComponent <TechTag>(); techTag.type = this.TechType; // Update prefab ID var prefabId = prefab.GetComponent <PrefabIdentifier>(); prefabId.ClassId = this.ClassID; // Update StorageContainer StorageContainer sc = prefab.GetComponent <StorageContainer>(); sc.height = 2; // Update constructable bounds ConstructableBounds bounds = prefab.GetComponent <ConstructableBounds>(); bounds.bounds.extents = new Vector3(bounds.bounds.extents.x * 0.5f, bounds.bounds.extents.y, bounds.bounds.extents.z); bounds.bounds.position = new Vector3(bounds.bounds.position.x + 0.5f, bounds.bounds.position.y, bounds.bounds.position.z); // Update box collider GameObject builderTrigger = prefab.FindChild("Builder Trigger"); GameObject objectTrigger = prefab.FindChild("Collider"); BoxCollider builderCollider = builderTrigger.GetComponent <BoxCollider>(); BoxCollider objectCollider = objectTrigger.GetComponent <BoxCollider>(); builderCollider.size = new Vector3(builderCollider.size.x * 0.5f, builderCollider.size.y, builderCollider.size.z); objectCollider.size = new Vector3(objectCollider.size.x * 0.5f, objectCollider.size.y, objectCollider.size.z); builderCollider.center = new Vector3(builderCollider.center.x + 0.5f, builderCollider.center.y, builderCollider.center.z); objectCollider.center = new Vector3(objectCollider.center.x + 0.5f, objectCollider.center.y, objectCollider.center.z); // Update model GameObject model = prefab.FindChild("model"); model.transform.localScale = new Vector3(model.transform.localScale.x * 0.5f, model.transform.localScale.y, model.transform.localScale.z); model.transform.localPosition = new Vector3(model.transform.localPosition.x + 0.5f, 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); // Update grass GameObject tray = model.FindChild("Base_interior_Planter_Tray_01"); GameObject grass1 = tray.FindChild("pot_generic_plant_03"); GameObject grass2 = tray.FindChild("pot_generic_plant_04"); grass1.GetComponent <MeshRenderer>().enabled = false; grass2.GetComponent <MeshRenderer>().enabled = false; // Translate prefab //prefab.transform.localPosition = new Vector3(prefab.transform.localPosition.x + 0.6f, prefab.transform.localPosition.y, prefab.transform.localPosition.z); return(prefab); }
public override GameObject GetGameObject() { GameObject prefab = GameObject.Instantiate(this.GameObject); GameObject container = GameObject.Instantiate(this.CargoCrateContainer); 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.0001f, 0.0001f, 0.0001f); container.transform.localEulerAngles = new Vector3(0.0f, 0.0f, 0.0f); container.SetActive(true); // Update colliders GameObject builderTrigger = container.FindChild("Builder Trigger"); GameObject collider = container.FindChild("Collider"); BoxCollider builderCollider = builderTrigger.GetComponent <BoxCollider>(); builderCollider.isTrigger = false; builderCollider.enabled = false; BoxCollider objectCollider = collider.GetComponent <BoxCollider>(); objectCollider.isTrigger = false; objectCollider.enabled = false; // Delete constructable bounds ConstructableBounds cb = container.GetComponent <ConstructableBounds>(); GameObject.DestroyImmediate(cb); // 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 Start() { string classID = Guid.NewGuid().ToString(); GameObject StarshipMonitor = new GameObject(); GameObject StarshipMonitor_ref = Resources.Load("Submarine/Build/StarshipMonitor") as GameObject; //copy start GameObject UNITYID_63300 = StarshipMonitor_ref.transform.GetChild(0).gameObject; //Starship_wall_monitor_01_03 GameObject UNITYID_32295 = StarshipMonitor_ref.transform.GetChild(1).gameObject; //Cube GameObject UNITYID_35434 = StarshipMonitor_ref.transform.GetChild(2).gameObject; //Cube (1) //copy end PrefabIdentifier sc_prefabIdentifier = StarshipMonitor.AddComponent <PrefabIdentifier>(); sc_prefabIdentifier.ClassId = classID; LargeWorldEntity sc_largeWorldEntity = StarshipMonitor.AddComponent <LargeWorldEntity>(); sc_largeWorldEntity.cellLevel = LargeWorldEntity.CellLevel.Far; Constructable sc_constructable = StarshipMonitor.AddComponent <Constructable>(); sc_constructable.allowedOnWall = true; sc_constructable.allowedOnGround = false; sc_constructable.allowedOnCeiling = false; sc_constructable.allowedInSub = false; sc_constructable.forceUpright = false; sc_constructable.deconstructionAllowed = true; sc_constructable.rotationEnabled = false; sc_constructable.techType = TechType.id_6289; sc_constructable.model = null; StarshipMonitor.AddComponent <TechTag>().type = TechType.id_6289; ConstructableBounds sc_constructableBounds = new ConstructableBounds(); sc_constructableBounds.bounds = new OrientedBounds(new Vector3(0f, 0f, 0f), new Quaternion(0f, 0f, 0f, 1f), new Vector3(1.5f, 0.5f, 1.5f)); Texture2D lightoff = Texture2DFromData(Properties.Resources.testlight_png); GameObject I_UNITYID_63300 = Instantiate(UNITYID_63300); GameObject I_UNITYID_32295 = Instantiate(UNITYID_32295); GameObject I_UNITYID_35434 = Instantiate(UNITYID_35434); I_UNITYID_63300.transform.parent = StarshipMonitor.transform; I_UNITYID_32295.transform.parent = StarshipMonitor.transform; I_UNITYID_35434.transform.parent = StarshipMonitor.transform; I_UNITYID_63300.GetComponent <Renderer>().materials[1].SetTexture("_MainTex", lightoff); I_UNITYID_63300.GetComponent <Renderer>().materials[1].SetTexture("_Illum", lightoff); StarshipMonitor.AddComponent <BaseLightScript>(); StarshipMonitor.AddComponent <DontDestroyBaseLight>(); sc_constructable.model = I_UNITYID_63300; TechTypeItems.registerCustomTechType(6289, classID, "Light switch", "Turn the lights off and on!", EquipmentType.None, StarshipMonitor, "nesraksmods/baseswitch"); }
private GameObject CreateStorage() { GameObject originalPrefab = Resources.Load <GameObject>("Submarine/Build/Locker"); var container = GameObject.Instantiate(originalPrefab); // Update container renderers GameObject cargoCrateModel = container.FindChild("model"); Renderer[] cargoCrateRenderers = cargoCrateModel.GetComponentsInChildren <Renderer>(); 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.0001f, 0.0001f, 0.0001f); container.transform.localEulerAngles = new Vector3(0.0f, 0.0f, 0.0f); container.SetActive(true); // Update colliders GameObject builderTrigger = container.FindChild("Builder Trigger"); GameObject collider = container.FindChild("Collider"); BoxCollider builderCollider = builderTrigger.GetComponent <BoxCollider>(); builderCollider.isTrigger = false; builderCollider.enabled = false; BoxCollider objectCollider = collider.GetComponent <BoxCollider>(); objectCollider.isTrigger = false; objectCollider.enabled = false; // Delete constructable bounds ConstructableBounds cb = container.GetComponent <ConstructableBounds>(); GameObject.DestroyImmediate(cb); return(container); }
public override GameObject GetGameObject() { GameObject prefab = GameObject.Instantiate(this.GameObject); GameObject container = GameObject.Instantiate(this.CargoCrateContainer); GameObject model = prefab.FindChild("submarine_locker_04"); prefab.name = this.ClassID; // Update container renderers GameObject cargoCrateModel = container.FindChild("model"); Renderer[] cargoCrateRenderers = cargoCrateModel.GetComponentsInChildren <Renderer>(); container.transform.parent = prefab.transform; foreach (Renderer rend in cargoCrateRenderers) { rend.enabled = false; } container.transform.localPosition = new Vector3(0.0f, 0.0f, 0.0f); container.transform.localScale = new Vector3(0.001f, 0.001f, 0.001f); container.transform.localEulerAngles = new Vector3(0.0f, 0.0f, 0.0f); container.SetActive(true); // Update colliders GameObject builderTrigger = container.FindChild("Builder Trigger"); GameObject objectTrigger = container.FindChild("Collider"); BoxCollider builderCollider = builderTrigger.GetComponent <BoxCollider>(); builderCollider.isTrigger = false; builderCollider.enabled = false; BoxCollider objectCollider = objectTrigger.GetComponent <BoxCollider>(); objectCollider.isTrigger = false; objectCollider.enabled = false; // Delete constructable bounds ConstructableBounds cb = container.GetComponent <ConstructableBounds>(); GameObject.DestroyImmediate(cb); // Update TechTag var techTag = prefab.AddComponent <TechTag>(); techTag.type = this.TechType; // Update prefab ID var prefabId = prefab.GetComponent <PrefabIdentifier>(); prefabId.ClassId = this.ClassID; // Remove rigid body Rigidbody rb = prefab.GetComponent <Rigidbody>(); GameObject.DestroyImmediate(rb); // Add collider BoxCollider collider = model.AddComponent <BoxCollider>(); collider.size = new Vector3(0.4f, 2.0f, 0.5f); collider.center = new Vector3(0.0f, 1.0f, 0.0f); // Update large world entity PrefabsHelper.UpdateExistingLargeWorldEntities(prefab); // Update sky applier #if BELOWZERO SkyApplier[] sas = prefab.GetComponentsInChildren <SkyApplier>(); while (prefab.GetComponentInChildren <SkyApplier>() != null) { GameObject.DestroyImmediate(prefab.GetComponentInChildren <SkyApplier>()); } if (prefab.GetComponent <SkyApplier>() != null) { GameObject.DestroyImmediate(prefab.GetComponent <SkyApplier>()); } while (prefab.GetComponentInChildren <BaseModuleLighting>() != null) { GameObject.DestroyImmediate(prefab.GetComponentInChildren <BaseModuleLighting>()); } if (prefab.GetComponent <BaseModuleLighting>() != null) { GameObject.DestroyImmediate(prefab.GetComponent <BaseModuleLighting>()); } BaseModuleLighting bml = prefab.AddComponent <BaseModuleLighting>(); SkyApplier sa = prefab.AddComponent <SkyApplier>(); sa.renderers = prefab.GetComponentsInChildren <Renderer>(); sa.anchorSky = Skies.Auto; #else PrefabsHelper.SetDefaultSkyApplier(prefab); #endif // Set as constructible Constructable constructible = prefab.AddComponent <Constructable>(); constructible.techType = this.TechType; constructible.allowedOnWall = false; constructible.allowedInBase = true; constructible.allowedInSub = true; constructible.allowedOutside = ConfigSwitcher.AllowBuildOutside; constructible.allowedOnCeiling = false; constructible.allowedOnGround = true; constructible.allowedOnConstructables = false; constructible.rotationEnabled = true; constructible.deconstructionAllowed = true; constructible.controlModelState = true; constructible.model = model; constructible.placeMinDistance = 0.6f; // Add constructable bounds ConstructableBounds bounds = prefab.AddComponent <ConstructableBounds>(); // Add model controler var decorativeLockerController = prefab.AddComponent <DecorativeLockerController>(); return(prefab); }
public override GameObject GetGameObject() { GameObject prefab = GameObject.Instantiate(this.GameObject); GameObject model = prefab.FindChild("discovery_lab_cart_01"); prefab.name = this.ClassID; // Set TechTag TechTag techTag = prefab.AddComponent <TechTag>(); techTag.type = this.TechType; // Update prefab identifier PrefabIdentifier prefabId = prefab.GetComponent <PrefabIdentifier>(); prefabId.ClassId = this.ClassID; GameObject cube = prefab.FindChild("Cube"); GameObject.DestroyImmediate(cube); // Remove rigid body Rigidbody rb = prefab.GetComponent <Rigidbody>(); GameObject.DestroyImmediate(rb); // Add box collider BoxCollider collider = model.AddComponent <BoxCollider>(); collider.size = new Vector3(1.026103f, 0.6288151f, 0.91f); // -90X: Y<=>Z collider.center = new Vector3(0.005f, 0.001f, 0.455f); // -90X: Y<=>Z // Update large world entity LargeWorldEntity lwe = prefab.GetComponent <LargeWorldEntity>(); lwe.cellLevel = LargeWorldEntity.CellLevel.Near; // Get renderers Renderer[] rend = prefab.GetComponentsInChildren <Renderer>(); if (!ConfigSwitcher.LabCart_asBuildable) { // Set proper shaders for crafting animation foreach (Renderer renderer in rend) { renderer.material.shader = Shader.Find("MarmosetUBER"); } // We can pick this item Pickupable 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 = 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 VFXFabricating fabricating = model.AddComponent <VFXFabricating>(); fabricating.localMinY = -0.1f; fabricating.localMaxY = 0.9f; fabricating.posOffset = new Vector3(0f, 0f, 0.04f); fabricating.eulerOffset = new Vector3(-90f, 0f, 0f); fabricating.scaleFactor = 0.5f; } else { // 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.deconstructionAllowed = true; constructible.controlModelState = true; constructible.model = model; // Add constructible bounds ConstructableBounds bounds = prefab.AddComponent <ConstructableBounds>(); } // Update sky applier SkyApplier applier = prefab.GetComponent <SkyApplier>(); applier.anchorSky = Skies.Auto; applier.renderers = rend; return(prefab); }
public override GameObject GetGameObject() { GameObject prefab = GameObject.Instantiate(this.GameObject); prefab.name = this.ClassID; // Get model GameObject model = prefab.FindChild("Starship_control_terminal_01"); // Remove rigid body GameObject.DestroyImmediate(prefab.GetComponent <Rigidbody>()); // Update prefab ID var prefabId = prefab.GetComponent <PrefabIdentifier>(); prefabId.ClassId = this.ClassID; // Update large world entity var lwe = prefab.GetComponent <LargeWorldEntity>(); lwe.cellLevel = LargeWorldEntity.CellLevel.Near; // Add tech tag var techTag = prefab.AddComponent <TechTag>(); techTag.type = this.TechType; // Ajust collider BoxCollider[] cs = prefab.GetComponentsInChildren <BoxCollider>(); if (cs != null) { foreach (BoxCollider c in cs) { c.size *= 0.9f; } } // Set as constructible Constructable constructible = prefab.AddComponent <Constructable>(); constructible.techType = this.TechType; constructible.allowedOnWall = true; constructible.allowedInBase = true; constructible.allowedInSub = true; constructible.allowedOutside = ConfigSwitcher.AllowBuildOutside; constructible.allowedOnCeiling = false; constructible.allowedOnGround = true; constructible.allowedOnConstructables = true; constructible.rotationEnabled = true; constructible.deconstructionAllowed = true; constructible.controlModelState = true; constructible.surfaceType = VFXSurfaceTypes.electronic; constructible.model = model; constructible.placeMinDistance = 0.6f; // Add constructable bounds ConstructableBounds cb = prefab.AddComponent <ConstructableBounds>(); cb.bounds.size *= 0.9f; return(prefab); }
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; if (!ConfigSwitcher.AllowOutdoorLongPlanterInside) { constructable.allowedInBase = false; constructable.allowedInSub = false; } // Update constructable bounds ConstructableBounds bounds = prefab.GetComponent <ConstructableBounds>(); bounds.bounds.extents = new Vector3(bounds.bounds.extents.x * 0.5f, bounds.bounds.extents.y, bounds.bounds.extents.z); bounds.bounds.position = new Vector3(bounds.bounds.position.x + 0.5f, bounds.bounds.position.y, bounds.bounds.position.z); // Update box collider GameObject builderTrigger = prefab.FindChild("Builder Trigger"); GameObject objectTrigger = prefab.FindChild("Collider"); BoxCollider builderCollider = builderTrigger.GetComponent <BoxCollider>(); BoxCollider objectCollider = objectTrigger.GetComponent <BoxCollider>(); builderCollider.size = new Vector3(builderCollider.size.x * 0.5f, builderCollider.size.y, builderCollider.size.z); objectCollider.size = new Vector3(objectCollider.size.x * 0.5f, objectCollider.size.y, objectCollider.size.z); builderCollider.center = new Vector3(builderCollider.center.x + 0.5f, builderCollider.center.y, builderCollider.center.z); objectCollider.center = new Vector3(objectCollider.center.x + 0.5f, objectCollider.center.y, objectCollider.center.z); // Update model GameObject model = prefab.FindChild("model"); model.transform.localScale = new Vector3(model.transform.localScale.x * 0.5f, model.transform.localScale.y, model.transform.localScale.z); model.transform.localPosition = new Vector3(model.transform.localPosition.x + 0.5f, 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); // Update grass GameObject tray = model.FindChild("Base_interior_Planter_Tray_01"); GameObject grass1 = tray.FindChild("pot_generic_plant_03"); GameObject grass2 = tray.FindChild("pot_generic_plant_04"); grass1.GetComponent <MeshRenderer>().enabled = false; grass2.GetComponent <MeshRenderer>().enabled = false; // Translate prefab //prefab.transform.localPosition = new Vector3(prefab.transform.localPosition.x + 0.6f, prefab.transform.localPosition.y, prefab.transform.localPosition.z); // Update sky applier PrefabsHelper.SetDefaultSkyApplier(prefab); return(prefab); }
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 random image mode saveData += (this.RandomImage ? "1" : "0") + Environment.NewLine; // Save slideshow mode saveData += (this.Slideshow ? "1" : "0") + Environment.NewLine; // Save state to file File.WriteAllText(FilesHelper.Combine(saveFolder, "custompictureframe_" + id.Id + ".txt"), saveData, Encoding.UTF8); }
public void OnProtoDeserialize(ProtobufSerializer serializer) { // Retrieve save file PrefabIdentifier id = GetComponent <PrefabIdentifier>(); if (id == null) { if ((id = GetComponentInParent <PrefabIdentifier>()) == null) { return; } } string filePath = FilesHelper.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, Encoding.UTF8).Replace(',', '.'); // Replace , with . for backward compatibility. if (tmpSize == null) { return; } string[] sizes = tmpSize.Split(Environment.NewLine.ToCharArray(), StringSplitOptions.RemoveEmptyEntries); if (sizes != null && sizes.Length >= 10 && sizes.Length <= 14) { // 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 random image mode if (sizes.Length >= 13) { this.RandomImage = (sizes[12] == "1"); if (this.RandomImage) { PictureFrameEnumHelper.SetStateMethod.Invoke(pf, new object[] { PictureFrameEnumHelper.NoneEnumValue }); pf.fileName = null; this.SetRandomImage(id, pf); } } // Restore slideshow mode if (sizes.Length >= 14) { bool isSlideshowOn = (sizes[13] == "1"); if (!isSlideshowOn) { this.Slideshow = false; } else { PictureFrameEnumHelper.SetStateMethod.Invoke(pf, new object[] { PictureFrameEnumHelper.NoneEnumValue }); pf.fileName = null; this.StartSlideshow(id, pf); } } // 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); #if DEBUG_CUSTOM_PICTURE_FRAME Logger.Log("DEBUG: Current image in picture frame: fileName=[" + (string.IsNullOrEmpty(pf.fileName) ? "?" : pf.fileName) + "]"); #endif } } }
public override void RegisterItem() { if (this.IsRegistered == false) { GameObject aquarium = Resources.Load <GameObject>("Submarine/Build/Aquarium"); // Move model GameObject model = this.GameObject.FindChild("Model"); model.transform.localPosition = new Vector3(model.transform.localPosition.x, model.transform.localPosition.y + 0.032f, 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 collider var collider = this.GameObject.AddComponent <BoxCollider>(); collider.size = new Vector3(0.07f, 0.054f, 0.07f); collider.center = new Vector3(collider.center.x, collider.center.y + 0.027f, 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 marmosetUber = Shader.Find("MarmosetUBER"); Texture normal1 = AssetsHelper.Assets.LoadAsset <Texture>("power_cell_01_normal"); Texture spec1 = AssetsHelper.Assets.LoadAsset <Texture>("power_cell_01_spec"); Texture illum1 = AssetsHelper.Assets.LoadAsset <Texture>("power_cell_01_illum"); Texture normal2 = AssetsHelper.Assets.LoadAsset <Texture>("Submersible_SeaMoth_normal"); Texture spec2 = AssetsHelper.Assets.LoadAsset <Texture>("Submersible_SeaMoth_spec"); Texture illum2 = AssetsHelper.Assets.LoadAsset <Texture>("Submersible_SeaMoth_illum"); Texture normal3 = AssetsHelper.Assets.LoadAsset <Texture>("Submersible_SeaMoth_indoor_normal"); Texture illum3 = AssetsHelper.Assets.LoadAsset <Texture>("Submersible_SeaMoth_indoor_illum"); Texture normal4 = AssetsHelper.Assets.LoadAsset <Texture>("seamoth_storage_01_normal"); Texture normal5 = AssetsHelper.Assets.LoadAsset <Texture>("seamoth_storage_02_normal"); Texture illum5 = AssetsHelper.Assets.LoadAsset <Texture>("seamoth_storage_02_illum"); Texture normal6 = AssetsHelper.Assets.LoadAsset <Texture>("seamoth_power_cell_slot_01_normal"); Texture spec6 = AssetsHelper.Assets.LoadAsset <Texture>("seamoth_power_cell_slot_01_spec"); Texture normal7 = AssetsHelper.Assets.LoadAsset <Texture>("seamoth_torpedo_01_normal"); Texture spec7 = AssetsHelper.Assets.LoadAsset <Texture>("seamoth_torpedo_01_spec"); Texture normal8 = AssetsHelper.Assets.LoadAsset <Texture>("seamoth_torpedo_01_hatch_01_normal"); Texture spec8 = AssetsHelper.Assets.LoadAsset <Texture>("seamoth_torpedo_01_hatch_01_spec"); var renderers = this.GameObject.GetAllComponentsInChildren <Renderer>(); if (renderers.Length > 0) { foreach (Renderer rend in renderers) { if (rend.name.StartsWith("Submersible_SeaMoth_glass_geo", true, CultureInfo.InvariantCulture)) { rend.material = glass; } else if (rend.materials.Length > 0) { foreach (Material tmpMat in rend.materials) { if (string.Compare(tmpMat.name, "Submersible_SeaMoth_Glass_interior (Instance)", true, CultureInfo.InvariantCulture) == 0) { tmpMat.EnableKeyword("MARMO_SIMPLE_GLASS"); tmpMat.EnableKeyword("WBOIT"); } else if (string.Compare(tmpMat.name, "Submersible_SeaMoth_Glass (Instance)", true, CultureInfo.InvariantCulture) != 0) { tmpMat.shader = marmosetUber; if (string.Compare(tmpMat.name, "power_cell_01 (Instance)", true, CultureInfo.InvariantCulture) == 0) { tmpMat.SetTexture("_BumpMap", normal1); tmpMat.SetTexture("_SpecTex", spec1); tmpMat.SetTexture("_Illum", illum1); tmpMat.SetFloat("_EmissionLM", 0.75f); // Set always visible tmpMat.EnableKeyword("MARMO_NORMALMAP"); tmpMat.EnableKeyword("MARMO_EMISSION"); tmpMat.EnableKeyword("MARMO_SPECMAP"); tmpMat.EnableKeyword("_ZWRITE_ON"); // Enable Z write } else if (string.Compare(tmpMat.name, "Submersible_SeaMoth (Instance)", true, CultureInfo.InvariantCulture) == 0) { tmpMat.SetTexture("_BumpMap", normal2); tmpMat.SetTexture("_SpecTex", spec2); tmpMat.SetTexture("_Illum", illum2); tmpMat.SetFloat("_EmissionLM", 0.75f); // Set always visible tmpMat.EnableKeyword("MARMO_NORMALMAP"); tmpMat.EnableKeyword("MARMO_EMISSION"); tmpMat.EnableKeyword("MARMO_SPECMAP"); tmpMat.EnableKeyword("_ZWRITE_ON"); // Enable Z write } else if (string.Compare(tmpMat.name, "Submersible_SeaMoth_indoor (Instance)", true, CultureInfo.InvariantCulture) == 0) { tmpMat.SetTexture("_BumpMap", normal3); tmpMat.SetTexture("_Illum", illum3); tmpMat.SetFloat("_EmissionLM", 0.75f); // Set always visible tmpMat.EnableKeyword("MARMO_NORMALMAP"); tmpMat.EnableKeyword("MARMO_EMISSION"); tmpMat.EnableKeyword("_ZWRITE_ON"); // Enable Z write } else if (string.Compare(tmpMat.name, "seamoth_storage_01 (Instance)", true, CultureInfo.InvariantCulture) == 0) { tmpMat.SetTexture("_BumpMap", normal4); tmpMat.EnableKeyword("MARMO_NORMALMAP"); tmpMat.EnableKeyword("_ZWRITE_ON"); // Enable Z write } else if (string.Compare(tmpMat.name, "seamoth_storage_02 (Instance)", true, CultureInfo.InvariantCulture) == 0) { tmpMat.SetTexture("_BumpMap", normal5); tmpMat.SetTexture("_Illum", illum5); tmpMat.SetFloat("_EmissionLM", 0.75f); // Set always visible tmpMat.EnableKeyword("MARMO_NORMALMAP"); tmpMat.EnableKeyword("MARMO_EMISSION"); tmpMat.EnableKeyword("_ZWRITE_ON"); // Enable Z write } else if (string.Compare(tmpMat.name, "seamoth_power_cell_slot_01 (Instance)", true, CultureInfo.InvariantCulture) == 0) { tmpMat.SetTexture("_BumpMap", normal6); tmpMat.SetTexture("_SpecTex", spec6); tmpMat.EnableKeyword("MARMO_NORMALMAP"); tmpMat.EnableKeyword("MARMO_SPECMAP"); tmpMat.EnableKeyword("_ZWRITE_ON"); // Enable Z write } else if (string.Compare(tmpMat.name, "seamoth_torpedo_01 (Instance)", true, CultureInfo.InvariantCulture) == 0) { tmpMat.SetTexture("_BumpMap", normal7); tmpMat.SetTexture("_SpecTex", spec7); tmpMat.EnableKeyword("MARMO_NORMALMAP"); tmpMat.EnableKeyword("MARMO_SPECMAP"); tmpMat.EnableKeyword("_ZWRITE_ON"); // Enable Z write } else if (string.Compare(tmpMat.name, "seamoth_torpedo_01_hatch_01 (Instance)", true, CultureInfo.InvariantCulture) == 0) { tmpMat.SetTexture("_BumpMap", normal8); tmpMat.SetTexture("_SpecTex", spec8); tmpMat.EnableKeyword("MARMO_NORMALMAP"); tmpMat.EnableKeyword("MARMO_SPECMAP"); tmpMat.EnableKeyword("_ZWRITE_ON"); // Enable Z write } } } } } } // Add contructable Constructable constructable = this.GameObject.AddComponent <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.enabled = true; // Add constructable bounds ConstructableBounds bounds = this.GameObject.AddComponent <ConstructableBounds>(); bounds.bounds.position = new Vector3(bounds.bounds.position.x, bounds.bounds.position.y + 0.032f, bounds.bounds.position.z); // Add sky applier SkyApplier applier = this.GameObject.GetComponent <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 lights/model controler SeamothDollController controller = this.GameObject.AddComponent <SeamothDollController>(); // 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.Seamoth)); // Associate recipe to the new TechType SMLHelper.V2.Handlers.CraftDataHandler.SetTechData(this.TechType, this.Recipe); this.IsRegistered = true; } }
public override GameObject GetGameObject() { // 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/unused/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 // 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>()); } // 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; } // 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; } // 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; } // 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; } } // 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); // 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))); // 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); // 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); // 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; } } // Adjust prefab identifier var prefabId = prefab.GetComponent <PrefabIdentifier>(); prefabId.ClassId = this.ClassID; // Adjust tech tag var techTag = prefab.GetComponent <TechTag>(); techTag.type = this.TechType; // 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.enabled = true; // 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 }; // Adjust rendering var sas = prefab.GetComponents <SkyApplier>(); List <Renderer> rendsA = new List <Renderer>(); List <Renderer> rendsB = new List <Renderer>(); int i = 0; foreach (SkyApplier sa in sas) { foreach (Renderer rend in sa.renderers) { 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 (i == 0) { rendsA.Add(rend); } else { rendsB.Add(rend); } } } i++; } sas[0].renderers = rendsA.ToArray(); sas[1].renderers = rendsB.ToArray(); 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); } } var fixedSa = prefab.AddComponent <SkyApplier>(); fixedSa.anchorSky = Skies.Auto; fixedSa.dynamic = true; fixedSa.renderers = rends.ToArray(); fixedSa.updaterIndex = 0; // Adjust bubbles LOD var lodBubbles = bubbles.GetComponent <LODGroup>(); lodBubbles.size *= (1.0f / 0.07f); // Remove unwanted elements GameObject.DestroyImmediate(aquariumAnim2Fish1); GameObject.DestroyImmediate(aquariumAnim2Fish2); GameObject.DestroyImmediate(aquariumAnim2Fish3); GameObject.DestroyImmediate(aquariumAnim1Fish1); GameObject.DestroyImmediate(aquariumAnim1Fish2); GameObject.DestroyImmediate(aquariumAnim1Fish3); GameObject.DestroyImmediate(aquariumAnim1Fish4); // 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); } return(prefab); }
public override void RegisterItem() { if (this.IsRegistered == false) { GameObject model = this.GameObject.FindChild("CyclopsDoll"); // Scale model model.transform.localScale *= 0.12f; // Move model model.transform.localPosition = new Vector3(model.transform.localPosition.x, model.transform.localPosition.y + 0.135f, 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 collider var collider = this.GameObject.AddComponent <BoxCollider>(); collider.size = new Vector3(0.06f, 0.148f, 0.42f); collider.center = new Vector3(collider.center.x - 0.02f, collider.center.y + 0.135f, collider.center.z - 0.105f); // Get shaders/textures Shader marmosetUber = Shader.Find("MarmosetUBER"); if (normals == null) { normals = new Dictionary <string, Texture>(); foreach (KeyValuePair <string, string> elem in normalnames) { normals.Add(elem.Key, AssetsHelper.Assets.LoadAsset <Texture>(elem.Value)); } } // Get glass material GameObject aquarium = Resources.Load <GameObject>("Submarine/Build/Aquarium"); 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/textures var renderers = this.GameObject.GetAllComponentsInChildren <Renderer>(); if (renderers.Length > 0) { #if DEBUG_CYCLOPS_DOLL Logger.Log("DEBUG: Printing renderers:"); #endif foreach (Renderer rend in renderers) { if (rend.name.StartsWith("Cyclops_submarine_exterior_glass", true, CultureInfo.InvariantCulture) || rend.name.StartsWith("glass", true, CultureInfo.InvariantCulture)) { rend.material = glass; } else if (rend.materials.Length > 0) { #if DEBUG_CYCLOPS_DOLL Logger.Log("DEBUG: Found renderer name=[" + rend.name + "] type=[" + rend.GetType().ToString() + "]"); #endif foreach (Material tmpMat in rend.materials) { #if DEBUG_CYCLOPS_DOLL Logger.Log("DEBUG: \t=> material name=[" + tmpMat.name + "]"); #endif tmpMat.shader = marmosetUber; if (tmpMat.name.StartsWith("cyclops_submarine_exterior_decals_01_24", false, CultureInfo.InvariantCulture)) { tmpMat.SetFloat("_EnableCutOff", 1.0f); tmpMat.SetFloat("_Cutoff", 0.1f); tmpMat.EnableKeyword("MARMO_ALPHA_CLIP"); } else if (normals != null) { foreach (KeyValuePair <string, string> elem in normalnames) { if (tmpMat.name.StartsWith(elem.Key, false, CultureInfo.InvariantCulture)) { if (elem.Value != null && normals.ContainsKey(elem.Value) && normals[elem.Value] != null) { tmpMat.SetTexture("_BumpMap", normals[elem.Value]); tmpMat.EnableKeyword("MARMO_NORMALMAP"); tmpMat.EnableKeyword("_ZWRITE_ON"); } #if DEBUG_CYCLOPS_DOLL else { Logger.Log("DEBUG: Warning missing cyclops texture."); } #endif break; } } } } } } } // Add contructable Constructable constructable = this.GameObject.AddComponent <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.surfaceType = VFXSurfaceTypes.metal; constructable.placeMinDistance = 0.6f; constructable.enabled = true; // Add constructable bounds ConstructableBounds bounds = this.GameObject.AddComponent <ConstructableBounds>(); bounds.bounds.size *= 0.9f; Vector3 pos = bounds.bounds.position; bounds.bounds.position = new Vector3(pos.x - 0.02f, pos.y + 0.135f, pos.z - 0.105f); // 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.AddComponent <SkyApplier>(); if (applier != null) { applier.renderers = renderers; applier.anchorSky = Skies.Auto; applier.updaterIndex = 0; } // Add size controler CyclopsDollController controller = this.GameObject.AddComponent <CyclopsDollController>(); // Associate recipe to the new TechType SMLHelper.V2.Handlers.CraftDataHandler.SetTechData(this.TechType, this.Recipe); // 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.Cyclops)); this.IsRegistered = true; } }
public override void RegisterItem() { if (this.IsRegistered == false) { // Move model GameObject model = this.GameObject.FindChild("Model"); model.transform.localPosition = new Vector3(model.transform.localPosition.x, model.transform.localPosition.y + 0.032f, 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 collider var collider = this.GameObject.AddComponent <BoxCollider>(); collider.size = new Vector3(0.07f, 0.054f, 0.07f); collider.center = new Vector3(collider.center.x, collider.center.y + 0.027f, collider.center.z); // Set proper shaders (for crafting animation) Shader marmosetUber = Shader.Find("MarmosetUBER"); Texture normal1 = AssetsHelper.Assets.LoadAsset <Texture>("power_cell_01_normal"); Texture spec1 = AssetsHelper.Assets.LoadAsset <Texture>("power_cell_01_spec"); Texture illum1 = AssetsHelper.Assets.LoadAsset <Texture>("power_cell_01_illum"); Texture normal2 = AssetsHelper.Assets.LoadAsset <Texture>("Submersible_SeaMoth_normal"); Texture spec2 = AssetsHelper.Assets.LoadAsset <Texture>("Submersible_SeaMoth_spec"); Texture illum2 = AssetsHelper.Assets.LoadAsset <Texture>("Submersible_SeaMoth_illum"); Texture normal3 = AssetsHelper.Assets.LoadAsset <Texture>("Submersible_SeaMoth_indoor_normal"); Texture illum3 = AssetsHelper.Assets.LoadAsset <Texture>("Submersible_SeaMoth_indoor_illum"); Texture normal4 = AssetsHelper.Assets.LoadAsset <Texture>("seamoth_storage_01_normal"); Texture normal5 = AssetsHelper.Assets.LoadAsset <Texture>("seamoth_storage_02_normal"); Texture illum5 = AssetsHelper.Assets.LoadAsset <Texture>("seamoth_storage_02_illum"); Texture normal6 = AssetsHelper.Assets.LoadAsset <Texture>("seamoth_power_cell_slot_01_normal"); Texture spec6 = AssetsHelper.Assets.LoadAsset <Texture>("seamoth_power_cell_slot_01_spec"); Texture normal7 = AssetsHelper.Assets.LoadAsset <Texture>("seamoth_torpedo_01_normal"); Texture spec7 = AssetsHelper.Assets.LoadAsset <Texture>("seamoth_torpedo_01_spec"); Texture normal8 = AssetsHelper.Assets.LoadAsset <Texture>("seamoth_torpedo_01_hatch_01_normal"); Texture spec8 = AssetsHelper.Assets.LoadAsset <Texture>("seamoth_torpedo_01_hatch_01_spec"); var renderers = this.GameObject.GetComponentsInChildren <Renderer>(); if (renderers.Length > 0) { foreach (Renderer rend in renderers) { if (rend.materials.Length > 0) { foreach (Material tmpMat in rend.materials) { if (tmpMat.name.CompareTo("Submersible_SeaMoth_Glass (Instance)") != 0 && tmpMat.name.CompareTo("Submersible_SeaMoth_Glass_interior (Instance)") != 0) { tmpMat.shader = marmosetUber; if (tmpMat.name.CompareTo("power_cell_01 (Instance)") == 0) { tmpMat.SetTexture("_BumpMap", normal1); tmpMat.SetTexture("_SpecTex", spec1); tmpMat.SetTexture("_Illum", illum1); tmpMat.SetFloat("_EmissionLM", 0.75f); // Set always visible tmpMat.EnableKeyword("MARMO_NORMALMAP"); tmpMat.EnableKeyword("MARMO_EMISSION"); } else if (tmpMat.name.CompareTo("Submersible_SeaMoth (Instance)") == 0) { tmpMat.SetTexture("_BumpMap", normal2); tmpMat.SetTexture("_SpecTex", spec2); tmpMat.SetTexture("_Illum", illum2); tmpMat.SetFloat("_EmissionLM", 0.75f); // Set always visible tmpMat.EnableKeyword("MARMO_NORMALMAP"); tmpMat.EnableKeyword("MARMO_EMISSION"); } else if (tmpMat.name.CompareTo("Submersible_SeaMoth_indoor (Instance)") == 0) { tmpMat.SetTexture("_BumpMap", normal3); tmpMat.SetTexture("_Illum", illum3); tmpMat.SetFloat("_EmissionLM", 0.75f); // Set always visible tmpMat.EnableKeyword("MARMO_NORMALMAP"); tmpMat.EnableKeyword("MARMO_EMISSION"); } else if (tmpMat.name.CompareTo("seamoth_storage_01 (Instance)") == 0) { tmpMat.SetTexture("_BumpMap", normal4); tmpMat.EnableKeyword("MARMO_NORMALMAP"); } else if (tmpMat.name.CompareTo("seamoth_storage_02 (Instance)") == 0) { tmpMat.SetTexture("_BumpMap", normal5); tmpMat.SetTexture("_Illum", illum5); tmpMat.SetFloat("_EmissionLM", 0.75f); // Set always visible tmpMat.EnableKeyword("MARMO_NORMALMAP"); tmpMat.EnableKeyword("MARMO_EMISSION"); } else if (tmpMat.name.CompareTo("seamoth_power_cell_slot_01 (Instance)") == 0) { tmpMat.SetTexture("_BumpMap", normal6); tmpMat.SetTexture("_SpecTex", spec6); tmpMat.EnableKeyword("MARMO_NORMALMAP"); } else if (tmpMat.name.CompareTo("seamoth_torpedo_01 (Instance)") == 0) { tmpMat.SetTexture("_BumpMap", normal7); tmpMat.SetTexture("_SpecTex", spec7); tmpMat.EnableKeyword("MARMO_NORMALMAP"); } else if (tmpMat.name.CompareTo("seamoth_torpedo_01_hatch_01 (Instance)") == 0) { tmpMat.SetTexture("_BumpMap", normal8); tmpMat.SetTexture("_SpecTex", spec8); tmpMat.EnableKeyword("MARMO_NORMALMAP"); } } } } } } // Add contructable Constructable constructable = this.GameObject.AddComponent <Constructable>(); constructable.allowedInBase = true; constructable.allowedInSub = true; constructable.allowedOutside = true; constructable.allowedOnCeiling = false; constructable.allowedOnGround = true; constructable.allowedOnConstructables = true; constructable.controlModelState = true; constructable.deconstructionAllowed = true; constructable.rotationEnabled = true; constructable.model = model; constructable.techType = this.TechType; constructable.enabled = true; // Add constructable bounds ConstructableBounds bounds = this.GameObject.AddComponent <ConstructableBounds>(); bounds.bounds.position = new Vector3(bounds.bounds.position.x, bounds.bounds.position.y + 0.032f, bounds.bounds.position.z); // Add sky applier SkyApplier applier = this.GameObject.GetComponent <SkyApplier>(); if (applier == null) { applier = this.GameObject.AddComponent <SkyApplier>(); } applier.renderers = this.GameObject.GetComponentsInChildren <Renderer>(); applier.anchorSky = Skies.Auto; // Add lights/model controler SeamothDollController controller = this.GameObject.AddComponent <SeamothDollController>(); // 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, GetPrefab)); // Set the custom sprite CustomSpriteHandler.customSprites.Add(new CustomSprite(this.TechType, SpriteManager.Get(TechType.Seamoth))); // Associate recipe to the new TechType CraftDataPatcher.customTechData[this.TechType] = this.Recipe; this.IsRegistered = true; } }
public override void RegisterItem() { if (this.IsRegistered == false) { // Get model GameObject model = this.GameObject.FindChild("OutdoorLadderModel"); // Scale model model.transform.localScale *= 100.0f; // Add prefab identifier var prefabId = this.GameObject.AddComponent <PrefabIdentifier>(); prefabId.ClassId = this.ClassID; // Add large world entity PrefabsHelper.SetDefaultLargeWorldEntity(this.GameObject, LargeWorldEntity.CellLevel.Far); // Add tech tag var techTag = this.GameObject.AddComponent <TechTag>(); techTag.type = this.TechType; // Add collider var collider = this.GameObject.AddComponent <BoxCollider>(); collider.size = new Vector3(0.3f, 2.7f, 0.07f); collider.center = new Vector3(collider.center.x, collider.center.y + 0.55f, collider.center.z - 0.24f); // Set proper shaders and materials Shader marmosetUber = Shader.Find("MarmosetUBER"); Texture illum1 = AssetsHelper.Assets.LoadAsset <Texture>("base_ladder_01"); Texture normal1 = AssetsHelper.Assets.LoadAsset <Texture>("base_ladder_01_normal"); var renderers = this.GameObject.GetComponentsInChildren <Renderer>(); if (renderers != null && renderers.Length > 0) { foreach (Renderer rend in renderers) { foreach (Material tmpMat in rend.materials) { tmpMat.shader = marmosetUber; if (tmpMat.name.StartsWith("base_ladder_01")) { tmpMat.SetTexture("_BumpMap", normal1); #if SUBNAUTICA tmpMat.SetTexture("_Illum", illum1); tmpMat.SetFloat("_EmissionLM", 0.05f); tmpMat.EnableKeyword("MARMO_EMISSION"); #endif tmpMat.EnableKeyword("MARMO_NORMALMAP"); tmpMat.EnableKeyword("_ZWRITE_ON"); } } } } // Add contructable Constructable constructable = this.GameObject.AddComponent <Constructable>(); constructable.allowedInBase = false; constructable.allowedInSub = false; constructable.allowedOutside = true; constructable.allowedOnCeiling = true; constructable.allowedOnWall = true; 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.surfaceType = VFXSurfaceTypes.metal; constructable.placeMinDistance = 0.6f; constructable.placeMaxDistance = 10.0f; constructable.enabled = true; // Add constructable bounds ConstructableBounds bounds = this.GameObject.AddComponent <ConstructableBounds>(); // 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; #if SUBNAUTICA applier.emissiveFromPower = true; // Emissive from power #endif applier.enabled = true; // Add outdoor ladder controller OutdoorLadderController controller = this.GameObject.AddComponent <OutdoorLadderController>(); // Associate recipe to the new TechType SMLHelper.V2.Handlers.CraftDataHandler.SetTechData(this.TechType, this.Recipe); // Add new TechType to the buildables SMLHelper.V2.Handlers.CraftDataHandler.AddBuildable(this.TechType); SMLHelper.V2.Handlers.CraftDataHandler.AddToGroup(TechGroup.ExteriorModules, TechCategory.ExteriorModule, 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.BaseLadder)); this.IsRegistered = true; } }
public override GameObject GetPrefab() { GameObject prefab = GameObject.Instantiate(this.GameObject); GameObject container = GameObject.Instantiate(this.CargoCrateContainer); GameObject model = prefab.FindChild("submarine_locker_05"); 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 OnProtoSerialize(ProtobufSerializer serializer) { // Retrieve prefab unique ID PrefabIdentifier id = GetComponentInParent <PrefabIdentifier>(); if (id == 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 model = this.gameObject.FindChild("mesh"); string saveData = model.transform.localEulerAngles.x + "|" + model.transform.localEulerAngles.y + "|" + model.transform.localEulerAngles.z + Environment.NewLine; // Save collider size GameObject trigger = this.gameObject.FindChild("Trigger"); BoxCollider collider = trigger.GetComponent <BoxCollider>(); saveData += collider.size.x + "|" + collider.size.y + "|" + collider.size.z + Environment.NewLine; // Save picture scale PictureFrame pf = this.gameObject.GetComponent <PictureFrame>(); saveData += pf.imageRenderer.transform.localScale.x + "|" + pf.imageRenderer.transform.localScale.y + "|" + pf.imageRenderer.transform.localScale.z + Environment.NewLine; // Save frame border visibility GameObject pictureFrame = model.FindChild("submarine_Picture_Frame"); GameObject posterMagnet = this.gameObject.FindChild("poster_kitty(Clone)"); GameObject posterMagnetModel = posterMagnet.FindChild("model"); MeshRenderer frameRenderer = pictureFrame.GetComponent <MeshRenderer>(); if (frameRenderer.enabled) { saveData += "1" + Environment.NewLine; } else { GameObject magnetModel = posterMagnet.FindChild("model").FindChild("poster_kitty"); 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 += constructableBounds.bounds.extents.x + "|" + constructableBounds.bounds.extents.y + "|" + constructableBounds.bounds.extents.z + Environment.NewLine; // Save current sizes saveData += model.transform.localScale.x + "|" + model.transform.localScale.y + "|" + model.transform.localScale.z + Environment.NewLine; saveData += posterMagnet.transform.localPosition.x + "|" + posterMagnet.transform.localPosition.y + "|" + posterMagnet.transform.localPosition.z + Environment.NewLine; saveData += posterMagnetModel.transform.localPosition.x + "|" + posterMagnetModel.transform.localPosition.y + "|" + posterMagnetModel.transform.localPosition.z + Environment.NewLine; saveData += posterMagnetModel.transform.localScale.x + "|" + posterMagnetModel.transform.localScale.y + "|" + posterMagnetModel.transform.localScale.z + Environment.NewLine; saveData += pf.imageRenderer.transform.localPosition.x + "|" + pf.imageRenderer.transform.localPosition.y + "|" + pf.imageRenderer.transform.localPosition.z + Environment.NewLine; //pf.imageRenderer.transform.localScale // Save state to file File.WriteAllText(Path.Combine(saveFolder, "custompictureframe_" + id.Id + ".txt"), saveData); }
public static void Patch() { Debug.Log("Patching base clocks"); QPatch.harmony = HarmonyInstance.Create("com.baseclocks.mod"); BaseClocksConfig.Load(); OptionsPanelHandler.RegisterModOptions(new BaseClocksModOptions()); AssetBundle assetBundle = AssetBundle.LoadFromFile("./QMods/BaseClocks/clocks"); s_ModPath = "./QMods/BaseClocks"; GameObject sign = Resources.Load <GameObject>("Submarine/Build/Sign"); Font signFont = sign.GetComponentInChildren <Text>(true).font; Shader marmosetUber = Shader.Find("MarmosetUBER"); Material marmosetUberMat = new Material(marmosetUber); #if LOG string desktopPath = System.Environment.GetFolderPath(Environment.SpecialFolder.Desktop); string fullpath = string.Concat(desktopPath, "/MarmosetUBERProperties.txt"); using (System.IO.TextWriter tw = System.IO.File.CreateText(fullpath)) { PrintShaderProperty("_Color", marmosetUberMat, tw); PrintShaderProperty("_ReflectColor", marmosetUberMat, tw); tw.Line(); PrintShaderProperty("_Cube", marmosetUberMat, tw); PrintShaderProperty("_MainTex", marmosetUberMat, tw); tw.Line(); PrintShaderProperty("_MarmoSpecEnum", marmosetUberMat, tw); tw.Line(); PrintShaderProperty("_Roughness", marmosetUberMat, tw); PrintShaderProperty("_Glossiness", marmosetUberMat, tw); PrintShaderProperty("_Gloss", marmosetUberMat, tw); PrintShaderProperty("_Metal", marmosetUberMat, tw); PrintShaderProperty("_Metallic", marmosetUberMat, tw); PrintShaderProperty("_Metalness", marmosetUberMat, tw); PrintShaderProperty("_Metallicness", marmosetUberMat, tw); PrintShaderProperty("_ReflectColor", marmosetUberMat, tw); PrintShaderProperty("_Reflectivity", marmosetUberMat, tw); tw.Line(); PrintShaderProperty("_Spec", marmosetUberMat, tw); PrintShaderProperty("_SpecTex", marmosetUberMat, tw); PrintShaderProperty("_SpecColor", marmosetUberMat, tw); PrintShaderProperty("_SpecColor2", marmosetUberMat, tw); PrintShaderProperty("_SpecColor3", marmosetUberMat, tw); PrintShaderProperty("_SpecCubeIBL", marmosetUberMat, tw); PrintShaderProperty("_SpecInt", marmosetUberMat, tw); PrintShaderProperty("_SpecGlossMap", marmosetUberMat, tw); PrintShaderProperty("_Specular", marmosetUberMat, tw); PrintShaderProperty("_Shininess", marmosetUberMat, tw); PrintShaderProperty("_SpecularAmount", marmosetUberMat, tw); tw.Line(); PrintShaderProperty("_EnableGlow", marmosetUberMat, tw); PrintShaderProperty("_SIGMap", marmosetUberMat, tw); PrintShaderProperty("_AffectedByDayNightCycle", marmosetUberMat, tw); tw.Line(); PrintShaderProperty("_SelfIllumination", marmosetUberMat, tw); PrintShaderProperty("_EnableGlow", marmosetUberMat, tw); PrintShaderProperty("_GlowColor", marmosetUberMat, tw); PrintShaderProperty("_Illum", marmosetUberMat, tw); PrintShaderProperty("_GlowStrength", marmosetUberMat, tw); PrintShaderProperty("_GlowStrengthNight", marmosetUberMat, tw); tw.Line(); PrintShaderProperty("_Fresnel", marmosetUberMat, tw); PrintShaderProperty("_FresnelFade", marmosetUberMat, tw); tw.Line(); PrintShaderProperty("_BaseLight", marmosetUberMat, tw); PrintShaderProperty("_AO", marmosetUberMat, tw); tw.Close(); } #endif //Analogue clock GameObject analogueBaseClock = assetBundle.LoadAsset <GameObject>("Actual Time Analog Clock UGUI"); SMLHelper.V2.Utility.PrefabUtils.AddBasicComponents(ref analogueBaseClock, k_ClassID); ReplaceMaterialShader(analogueBaseClock, marmosetUber, true, true); ApplySkyApplier(analogueBaseClock); Constructable constructable = analogueBaseClock.AddComponent <Constructable>(); constructable.allowedOnWall = true; constructable.allowedInSub = true; constructable.allowedOnGround = false; constructable.allowedOutside = false; constructable.model = analogueBaseClock.transform.GetChild(0).gameObject; DestroyPhysicsComponents(analogueBaseClock); ConstructableBounds constructableBounds = analogueBaseClock.AddComponent <ConstructableBounds>(); TechTag techTag = analogueBaseClock.AddComponent <TechTag>(); BaseAnalogueClock actualTimeAnalogueClock = analogueBaseClock.AddComponent <BaseAnalogueClock>(); actualTimeAnalogueClock.HourHand = analogueBaseClock.transform.GetChild(1).GetChild(1); actualTimeAnalogueClock.MinuteHand = analogueBaseClock.transform.GetChild(1).GetChild(2); actualTimeAnalogueClock.SecondHand = analogueBaseClock.transform.GetChild(1).GetChild(3); TechData techData = new TechData(); techData.Ingredients.Add(new Ingredient(TechType.Titanium, 1)); techData.Ingredients.Add(new Ingredient(TechType.CopperWire, 1)); BaseClockBuildable analogueClockBuildable = new BaseClockBuildable(k_ClassID, "Analogue Clock", "An Analogue clock.", "analogueClock.png", analogueBaseClock.gameObject, techData); analogueClockBuildable.Patch(); Debug.Log("Patched analogueClockBuildable"); //Digital clock GameObject digitalBaseClock = assetBundle.LoadAsset <GameObject>("Actual Time Digital Clock UGUI"); SMLHelper.V2.Utility.PrefabUtils.AddBasicComponents(ref digitalBaseClock, k_ClassID_Digital); ReplaceMaterialShader(digitalBaseClock, marmosetUber); ApplySkyApplier(digitalBaseClock); constructable = digitalBaseClock.AddComponent <Constructable>(); constructable.allowedOnWall = true; constructable.allowedInSub = true; constructable.allowedOnGround = false; constructable.allowedOutside = false; constructable.model = digitalBaseClock.transform.GetChild(0).gameObject; DestroyPhysicsComponents(digitalBaseClock); constructableBounds = digitalBaseClock.AddComponent <ConstructableBounds>(); techTag = digitalBaseClock.AddComponent <TechTag>(); BaseDigitalClock digitalClock = digitalBaseClock.AddComponent <BaseDigitalClock>(); digitalClock.Text = digitalBaseClock.transform.GetChild(1).GetChild(0).GetComponent <Text>(); digitalClock.PeriodText = digitalBaseClock.transform.GetChild(1).GetChild(1).GetComponent <Text>(); digitalClock.SetFont(signFont); techData = new TechData(); techData.Ingredients.Add(new Ingredient(TechType.Titanium, 1)); techData.Ingredients.Add(new Ingredient(TechType.CopperWire, 1)); LanguageHandler.SetLanguageLine(BaseClock.k_SetGameTime, "Set to Normal Time"); LanguageHandler.SetLanguageLine(BaseClock.k_SetSystemTime, "Set to System Time"); BaseClockBuildable digitalClockBuildable = new BaseClockBuildable(k_ClassID_Digital, "Digital Clock", "A Digital clock.", "digitalClock.png", digitalClock.gameObject, techData); digitalClockBuildable.Patch(); Debug.Log("Patched digitalClockBuildable"); #if INCLUDE_TEST_BUILDABLES //Material balls. techType = TechTypePatcher.AddTechType(k_ClassID_Materials, "Material Balls", "Material Test"); GameObject materialBalls = assetBundle.LoadAsset <GameObject>("Material Balls"); Utility.AddBasicComponents(ref materialBalls, k_ClassID_Materials); DestroyPhysicsComponents(materialBalls); constructable = materialBalls.AddComponent <Constructable>(); constructable.allowedOnWall = false; constructable.allowedInSub = true; constructable.allowedOnGround = true; constructable.allowedOnCeiling = false; constructable.allowedOnConstructables = false; constructable.allowedOutside = true; constructable.model = materialBalls.transform.GetChild(0).gameObject; constructable.name = "Material Balls"; constructableBounds = materialBalls.AddComponent <ConstructableBounds>(); techTag = materialBalls.AddComponent <TechTag>(); techTag.type = techType; ReplaceMaterialShader(materialBalls, marmosetUber, false, true); AddSkyApplier(materialBalls); materialBalls.AddComponent <MaterialLogger>(); CustomPrefabHandler.customPrefabs.Add(new CustomPrefab(k_ClassID_Materials, "Submarine/Build/MaterialBalls", materialBalls, techType)); techDataHelper = new TechDataHelper(); techDataHelper._ingredients = new List <IngredientHelper>(); techDataHelper._ingredients.Add(new IngredientHelper(TechType.Titanium, 1)); techDataHelper._techType = techType; CraftDataPatcher.customTechData.Add(techType, techDataHelper); CraftDataPatcher.customBuildables.Add(techType); dictionary[TechGroup.InteriorModules][TechCategory.InteriorModule].Add(techType); //Texture test. techType = TechTypePatcher.AddTechType(k_ClassID_TextureTest, "Texture Test", "Texture Test"); GameObject textureTest = assetBundle.LoadAsset <GameObject>("Texture Test"); Utility.AddBasicComponents(ref textureTest, k_ClassID_TextureTest); DestroyPhysicsComponents(textureTest); constructable = textureTest.AddComponent <Constructable>(); constructable.allowedOnWall = true; constructable.allowedInSub = true; constructable.allowedOnGround = false; constructable.allowedOnCeiling = false; constructable.allowedOnConstructables = false; constructable.allowedOutside = false; constructable.model = textureTest.transform.GetChild(0).gameObject; constructable.name = "Texture Test"; constructableBounds = textureTest.AddComponent <ConstructableBounds>(); techTag = textureTest.AddComponent <TechTag>(); techTag.type = techType; ReplaceMaterialShader(textureTest, marmosetUber, true, true); AddSkyApplier(textureTest); textureTest.AddComponent <MaterialLogger>(); CustomPrefabHandler.customPrefabs.Add(new CustomPrefab(k_ClassID_TextureTest, "Submarine/Build/TextureTest", textureTest, techType)); techDataHelper = new TechDataHelper(); techDataHelper._ingredients = new List <IngredientHelper>(); techDataHelper._ingredients.Add(new IngredientHelper(TechType.Titanium, 1)); techDataHelper._techType = techType; CraftDataPatcher.customTechData.Add(techType, techDataHelper); CraftDataPatcher.customBuildables.Add(techType); dictionary[TechGroup.InteriorModules][TechCategory.InteriorModule].Add(techType); #endif #if LOG //Print small locker objects and components to desktop. fullpath = string.Concat(desktopPath, "/FabricatorComponents.txt"); GameObject fabricator = Resources.Load <GameObject>("Submarine/Build/Fabricator"); GameObject medicalCabinet = Resources.Load <GameObject>("Submarine/Build/MedicalCabinet"); if (fabricator != null) { using (System.IO.TextWriter tw = System.IO.File.CreateText(fullpath)) { PrintComponents(fabricator, tw); tw.Close(); } MaterialLogger.LogMaterialsToDesktop(fabricator); } fullpath = string.Concat(desktopPath, "/SignComponents.txt"); if (sign != null) { using (System.IO.TextWriter tw = System.IO.File.CreateText(fullpath)) { PrintComponents(sign, tw); tw.Close(); } } fullpath = string.Concat(desktopPath, "/MedicalCabinetComponents.txt"); if (medicalCabinet != null) { using (System.IO.TextWriter tw = System.IO.File.CreateText(fullpath)) { PrintComponents(medicalCabinet, tw); tw.Close(); } MaterialLogger.LogMaterialsToDesktop(medicalCabinet); } MaterialLogger.LogMaterialsToDesktop(analogueBaseClock); Resources.UnloadAsset(sign); Resources.UnloadAsset(fabricator); Resources.UnloadAsset(medicalCabinet); MonoBehaviour.Destroy(marmosetUberMat); #endif }
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 constructable Constructable constructable = prefab.GetComponent <Constructable>(); constructable.placeMinDistance = 0.8f; if (ConfigSwitcher.AllowIndoorLongPlanterOutside) { constructable.allowedOutside = true; } // Update constructable bounds ConstructableBounds bounds = prefab.GetComponent <ConstructableBounds>(); bounds.bounds.extents = new Vector3(bounds.bounds.extents.x * 0.5f, bounds.bounds.extents.y, bounds.bounds.extents.z); bounds.bounds.position = new Vector3(bounds.bounds.position.x + 0.5f, bounds.bounds.position.y, bounds.bounds.position.z); // Update box collider GameObject builderTrigger = prefab.FindChild("Builder Trigger"); GameObject objectTrigger = prefab.FindChild("Collider"); BoxCollider builderCollider = builderTrigger.GetComponent <BoxCollider>(); BoxCollider objectCollider = objectTrigger.GetComponent <BoxCollider>(); builderCollider.size = new Vector3(builderCollider.size.x * 0.5f, builderCollider.size.y, builderCollider.size.z); objectCollider.size = new Vector3(objectCollider.size.x * 0.5f, objectCollider.size.y, objectCollider.size.z); builderCollider.center = new Vector3(builderCollider.center.x + 0.5f, builderCollider.center.y, builderCollider.center.z); objectCollider.center = new Vector3(objectCollider.center.x + 0.5f, objectCollider.center.y, objectCollider.center.z); // Update model GameObject model = prefab.FindChild("model"); model.transform.localScale = new Vector3(model.transform.localScale.x * 0.5f, model.transform.localScale.y, model.transform.localScale.z); model.transform.localPosition = new Vector3(model.transform.localPosition.x + 0.5f, 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); // Update grass GameObject tray = model.FindChild("Base_interior_Planter_Tray_01"); GameObject grass1 = tray.FindChild("pot_generic_plant_03"); GameObject grass2 = tray.FindChild("pot_generic_plant_04"); grass1.GetComponent <MeshRenderer>().enabled = false; grass2.GetComponent <MeshRenderer>().enabled = false; // Translate prefab //prefab.transform.localPosition = new Vector3(prefab.transform.localPosition.x + 0.6f, prefab.transform.localPosition.y, prefab.transform.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 override void RegisterItem() { if (this.IsRegistered == false) { // Get objects GameObject model = this.GameObject.FindChild("Model"); // Rotate model //model.transform.localEulerAngles = new Vector3(model.transform.localEulerAngles.x - 90f, model.transform.localEulerAngles.y, model.transform.localEulerAngles.z); // Move model //model.transform.localPosition = new Vector3(model.transform.localPosition.x, model.transform.localPosition.y + 0.032f, model.transform.localPosition.z); // Apply shaders and materials var renderers = this.GameObject.GetAllComponentsInChildren <Renderer>(); Shader marmosetUber = Shader.Find("MarmosetUBER"); Texture normal1 = AssetsHelper.Assets.LoadAsset <Texture>("precursor_lab_warper_normal"); Texture spec1 = AssetsHelper.Assets.LoadAsset <Texture>("precursor_lab_warper_spec"); Texture illum1 = AssetsHelper.Assets.LoadAsset <Texture>("precursor_lab_warper_illum"); if (renderers.Length > 0) { foreach (Renderer rend in renderers) { if (rend.materials.Length > 0) { foreach (Material tmpMat in rend.materials) { if (string.Compare(tmpMat.name, "precursor_lab_warper_liquid (Instance)", true, CultureInfo.InvariantCulture) != 0 && !tmpMat.name.StartsWith("precursor_lab_warper_tube_", true, CultureInfo.InvariantCulture)) { tmpMat.shader = marmosetUber; if (string.Compare(tmpMat.name, "precursor_lab_warper (Instance)", true, CultureInfo.InvariantCulture) == 0) { tmpMat.SetTexture("_SpecTex", spec1); tmpMat.SetTexture("_BumpMap", normal1); tmpMat.SetTexture("_Illum", illum1); tmpMat.SetFloat("_EmissionLM", 1f); tmpMat.EnableKeyword("MARMO_SPECMAP"); tmpMat.EnableKeyword("MARMO_NORMALMAP"); tmpMat.EnableKeyword("MARMO_EMISSION"); tmpMat.EnableKeyword("_ZWRITE_ON"); } else if (string.Compare(tmpMat.name, "precursor_lab_warper_box (Instance)", true, CultureInfo.InvariantCulture) == 0) { tmpMat.SetTexture("_SpecTex", spec1); tmpMat.SetTexture("_BumpMap", normal1); tmpMat.SetTexture("_Illum", illum1); tmpMat.SetFloat("_EmissionLM", 1f); tmpMat.EnableKeyword("MARMO_SPECMAP"); tmpMat.EnableKeyword("MARMO_NORMALMAP"); tmpMat.EnableKeyword("MARMO_EMISSION"); tmpMat.EnableKeyword("_ZWRITE_ON"); } } } } } } // 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 collider var collider = this.GameObject.AddComponent <BoxCollider>(); collider.size = new Vector3(0.0075f, 0.0075f, 0.038f); collider.center = new Vector3(collider.center.x, collider.center.y, collider.center.z + 0.019f); // 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.AddComponent <SkyApplier>(); applier.renderers = renderers; applier.anchorSky = Skies.Auto; applier.updaterIndex = 0; // Add contructable Constructable constructable = this.GameObject.AddComponent <Constructable>(); constructable.allowedInBase = true; constructable.allowedInSub = true; constructable.allowedOnCeiling = true; constructable.allowedOnWall = true; constructable.allowedOnConstructables = true; constructable.allowedOutside = false; constructable.allowedOnGround = false; #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.6f; constructable.enabled = true; // Add constructable bounds ConstructableBounds bounds = this.GameObject.AddComponent <ConstructableBounds>(); //bounds.bounds.position = new Vector3(bounds.bounds.position.x, bounds.bounds.position.y + 0.032f, bounds.bounds.position.z); // Add warper specimen controller var warperSpecimenController = this.GameObject.AddComponent <WarperSpecimenController>(); // Define unlock conditions if (ConfigSwitcher.AddItemsWhenDiscovered) { SMLHelper.V2.Handlers.KnownTechHandler.SetAnalysisTechEntry(TechType.PrecursorWarper, new TechType[] { this.TechType }); } // Associate recipe to the new TechType SMLHelper.V2.Handlers.CraftDataHandler.SetTechData(this.TechType, this.Recipe); // 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, AssetsHelper.Assets.LoadAsset <Sprite>("warper_icon_1")); this.IsRegistered = true; } }
public void OnProtoDeserialize(ProtobufSerializer serializer) { // Retrieve save file PrefabIdentifier id = GetComponentInParent <PrefabIdentifier>(); if (id == null) { return; } string filePath = Path.Combine(FilesHelper.GetSaveFolderPath(), "custompictureframe_" + id.Id + ".txt"); if (File.Exists(filePath)) { GameObject model = this.gameObject.FindChild("mesh"); PictureFrame pf = this.gameObject.GetComponent <PictureFrame>(); string tmpSize = File.ReadAllText(filePath); string[] sizes = tmpSize.Split("\r\n".ToCharArray(), StringSplitOptions.RemoveEmptyEntries); if (sizes.Length == 10) { // Restore model angles string[] eulerAngles = sizes[0].Split("|".ToCharArray(), StringSplitOptions.RemoveEmptyEntries); if (eulerAngles.Length == 3) { Vector3 savedEulerAngles = new Vector3(OriginEulerAngles.x, OriginEulerAngles.y, OriginEulerAngles.z); float.TryParse(eulerAngles[0], out savedEulerAngles.x); float.TryParse(eulerAngles[1], out savedEulerAngles.y); float.TryParse(eulerAngles[2], out savedEulerAngles.z); model.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], out savedColliderSize.x); float.TryParse(colliderSize[1], out savedColliderSize.y); float.TryParse(colliderSize[2], 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(OriginImageRendererScale.x, OriginImageRendererScale.y, OriginImageRendererScale.z); float.TryParse(imageRendererScale[0], out savedImageRendererScale.x); float.TryParse(imageRendererScale[1], out savedImageRendererScale.y); float.TryParse(imageRendererScale[2], out savedImageRendererScale.z); pf.imageRenderer.transform.localScale = savedImageRendererScale; } // Restore frame border visibility GameObject pictureFrame = model.FindChild("submarine_Picture_Frame"); MeshRenderer frameRenderer = pictureFrame.GetComponent <MeshRenderer>(); frameRenderer.enabled = ((sizes[3].CompareTo("1") == 0) ? true : false); GameObject frameButton = pictureFrame.FindChild("submarine_Picture_Frame_button"); MeshRenderer buttonRenderer = frameButton.GetComponent <MeshRenderer>(); buttonRenderer.enabled = ((sizes[3].CompareTo("1") == 0) ? true : false); GameObject posterMagnet = this.gameObject.FindChild("poster_kitty(Clone)"); GameObject posterMagnetModel = posterMagnet.FindChild("model"); GameObject magnetModel = posterMagnetModel.FindChild("poster_kitty"); MeshRenderer magnetRenderer = magnetModel.GetComponent <MeshRenderer>(); magnetRenderer.enabled = ((sizes[3].CompareTo("2") == 0) ? true : false); // 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], out savedConstructableBoundsExtents.x); float.TryParse(constructableBoundsExtents[1], out savedConstructableBoundsExtents.y); float.TryParse(constructableBoundsExtents[2], 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 = Vector3.zero; float.TryParse(modelScale[0], out updateModelScale.x); float.TryParse(modelScale[1], out updateModelScale.y); float.TryParse(modelScale[2], out updateModelScale.z); model.transform.localScale = updateModelScale; } string[] posterMagnetPosition = sizes[6].Split("|".ToCharArray(), StringSplitOptions.RemoveEmptyEntries); if (posterMagnetPosition.Length == 3) { Vector3 updatePosterMagnetPosition = Vector3.zero; float.TryParse(posterMagnetPosition[0], out updatePosterMagnetPosition.x); float.TryParse(posterMagnetPosition[1], out updatePosterMagnetPosition.y); float.TryParse(posterMagnetPosition[2], out updatePosterMagnetPosition.z); posterMagnet.transform.localPosition = updatePosterMagnetPosition; } string[] posterMagnetModelPosition = sizes[7].Split("|".ToCharArray(), StringSplitOptions.RemoveEmptyEntries); if (posterMagnetModelPosition.Length == 3) { Vector3 updatePosterMagnetModelPosition = Vector3.zero; float.TryParse(posterMagnetModelPosition[0], out updatePosterMagnetModelPosition.x); float.TryParse(posterMagnetModelPosition[1], out updatePosterMagnetModelPosition.y); float.TryParse(posterMagnetModelPosition[2], out updatePosterMagnetModelPosition.z); posterMagnetModel.transform.localPosition = updatePosterMagnetModelPosition; } string[] posterMagnetModelScale = sizes[8].Split("|".ToCharArray(), StringSplitOptions.RemoveEmptyEntries); if (posterMagnetModelScale.Length == 3) { Vector3 updatePosterMagnetModelScale = Vector3.zero; float.TryParse(posterMagnetModelScale[0], out updatePosterMagnetModelScale.x); float.TryParse(posterMagnetModelScale[1], out updatePosterMagnetModelScale.y); float.TryParse(posterMagnetModelScale[2], out updatePosterMagnetModelScale.z); posterMagnetModel.transform.localScale = updatePosterMagnetModelScale; } string[] imageRendererPosition = sizes[9].Split("|".ToCharArray(), StringSplitOptions.RemoveEmptyEntries); if (imageRendererPosition.Length == 3) { Vector3 updateImageRendererPosition = Vector3.zero; float.TryParse(imageRendererPosition[0], out updateImageRendererPosition.x); float.TryParse(imageRendererPosition[1], out updateImageRendererPosition.y); float.TryParse(imageRendererPosition[2], out updateImageRendererPosition.z); pf.imageRenderer.transform.localPosition = updateImageRendererPosition; } // Refresh picture Type PictureFrameType = typeof(PictureFrame); MethodInfo SetStateMethod = PictureFrameType.GetMethod("SetState", BindingFlags.NonPublic | BindingFlags.Instance); SetStateMethod.Invoke(pf, new object[] { PictureFrameEnumHelper.NoneEnumValue }); SetStateMethod.Invoke(pf, new object[] { PictureFrameEnumHelper.FullEnumValue }); } } }