private void UpdateScrewInfoTightness(GameObject screw, int tightness) { ScrewInfo screwInfo = screw.GetComponent <ScrewInfo>(); if (screwInfo != null) { screwInfo.tightness = tightness; } }
/// <summary> /// makes the part screwable by adding the screw gameObjects to the parent gameObject /// </summary> /// <param name="screws">Screws values needed</param> /// <param name="screwsScale">The scale to apply to the screw when creating it</param> /// <param name="screwArr">The array of screw objects</param> private void MakePartScrewable(Screws screws, Vector3[] screwsScale, Screw[] screwArr) { if (screws != null && screws.screwsPositionsLocal != null && screws.screwsRotationLocal != null && screws.screwsTightness != null && screwsScale != null) { for (int i = 0; i < screwArr.Length; i++) { GameObject screw = GameObject.Instantiate(screwArr[i].model); screw.name = (parentGameObject.name + "_SCREW" + (i + 1)); screw.transform.SetParent(parentGameObject.transform); screw.transform.localPosition = screws.screwsPositionsLocal[i]; screw.transform.localScale = screwsScale[i]; screw.transform.localRotation = new Quaternion { eulerAngles = screws.screwsRotationLocal[i] }; screw.layer = LayerMask.NameToLayer("DontCollide"); screw.SetActive(true); ScrewInfo screwInfo = screw.AddComponent <ScrewInfo>(); screwInfo.tightness = screws.screwsTightness[i]; screwInfo.size = screws.screwsSize[i]; } this.parentGameObjectCollider = this.parentGameObject.GetComponent <Collider>(); } screwableLogic = parentGameObject.AddComponent <ScrewableLogic>(); screwableLogic.SetSavedInformation(screws, screw_material, screw_soundClip, parentGameObject, parentGameObjectCollider, this); if (screws.screwsTightness.All(element => element == screwableLogic.maxTightness)) { //All Screws tight. Make part fixed this.parentGameObjectCollider.enabled = false; partFixed = true; screwableLogic.SetPartFixed(partFixed); } }
private void DetectScrewing(GameObject hitScrew) { if (spannerRatchetGameObject == null) { spannerRatchetGameObject = GameObject.Find("2Spanner"); } if (spannerRatchetGameObject != null) { Component[] comps = spannerRatchetGameObject.GetComponentsInChildren <Transform>(); for (int i = 0; i < comps.Length; i++) { if (comps[i].name == "Spanner") { ratchetInHand = false; break; } else if (comps[i].name == "Ratchet") { ratchetInHand = true; ratchetSwitch = PlayMakerFSM.FindFsmOnGameObject(GameObject.Find("Ratchet"), "Switch").FsmVariables.GetFsmBool("Switch").Value; break; } } } string screwName = hitScrew.name.Substring(hitScrew.name.LastIndexOf("_SCREW")); int index = Convert.ToInt32(screwName.Replace("_SCREW", "")) - 1; int wrenchSize = Mathf.RoundToInt(this._wrenchSize.Value * 10f); if (wrenchSize > 0) { if ((bool)ScrewablePart.showScrewSize.Value) { ScrewInfo screwInfo = hitObject.GetComponent <ScrewInfo>(); try { if (screwInfo != null) { ScrewablePart.GuiInteraction = "Screw size: " + screwInfo.size; } } catch { } } } int screwSize = this.screws.screwsSize[index]; if (wrenchSize == screwSize) { //Highlighting the currently aimed at screw MeshRenderer renderer = hitObject.GetComponentInChildren <MeshRenderer>(); renderer.material.shader = Shader.Find("GUI/Text Shader"); renderer.material.SetColor("_Color", Color.green); screwingTimer += Time.deltaTime; if (Input.GetAxis("Mouse ScrollWheel") > 0f && screwingTimer >= _boltingSpeed.Value) // forward { screwingTimer = 0; if (ratchetInHand) { if (!ratchetSwitch) { ScrewOut(hitScrew, screws, index); } else { ScrewIn(hitScrew, screws, index); } } else { ScrewIn(hitScrew, screws, index); } } else if (Input.GetAxis("Mouse ScrollWheel") < 0f && screwingTimer >= _boltingSpeed.Value) // backwards { screwingTimer = 0; if (ratchetInHand) { if (!ratchetSwitch) { ScrewOut(hitScrew, screws, index); } else { ScrewIn(hitScrew, screws, index); } } else { ScrewOut(hitScrew, screws, index); } } if (this.screws.screwsTightness.All(element => element == maxTightness) && !partFixed) { this.parentGameObjectCollider.enabled = false; partFixed = true; screwablePart.SetPartFixed(true); } else if (!partFixed) { this.parentGameObjectCollider.enabled = true; } } }