//private void EnableChild(BrokenPart target, bool enable) //{ // target.transform.GetChild(0).gameObject.SetActive(enable); //} private static void ToggleChild(BrokenPart target) { for (int i = 0; i < target.transform.childCount; i++) { target.transform.GetChild(i) .gameObject.SetActive(!target.transform.GetChild(i).gameObject.activeInHierarchy); } }
/// <summary> /// Breaks the current part in a specific way, but only if the part can break that way. /// </summary> internal bool BreakSpecific(BrokenPart.BreakType brkTyp) { currentlyBroken |= brkTyp & possibleBreaks; //<currentlyBroken> += the intersection of <possibleBreaks> and <brkTyp> if (Backend.BrokenParts.ContainsKey(part.GetHashCode())) //If already broken... Backend.BrokenParts[part.GetHashCode()].UpdateProblems(currentlyBroken); //Update the break else Backend.regBrokenPart(new BrokenPart(part, currentlyBroken)); //Otherwise, register the new break return (brkTyp & possibleBreaks) > 0; }
public void ChangePart(BrokenPart part, bool fix) { if (part.swapMesh) { ChangeMesh(fix ? part.toMesh : part.origMesh, part); } if (part.swapMaterial) { ChangeMaterial(fix ? part.toMaterial : part.origMaterial, part); } if (part.swapChildState) { ToggleChild(part); } if (part.enableSwapper) { if (fix) { EnableSwapper(part, true); } else { EnableSwapper(part, false); ChangeMaterial(part.origMaterial, part); } } if (fix) { part.transform.GetChild(0).GetComponent <ObjectSpewer>().go = true; } if (parts.Count <= 0) { manager.EndGame(); } }
private void Update() { Ray ray = Camera.main.ScreenPointToRay(Input.mousePosition); RaycastHit hit; if (Physics.Raycast(ray, out hit, viewDistance)) { Debug.DrawLine(ray.origin, hit.point); if (hit.transform.tag == "Interactable") { indexCard.GetComponent <Animator>().SetTrigger("SlideUp"); indexUp = true; indexCard.GetComponentInChildren <Text>().text = hit.transform.name; crosshair.color = crosshairHighlight; if (hamTimer < 0) { if (Input.GetMouseButtonDown(0)) { if (hit.transform.GetComponent <BrokenPart>()) { BrokenPart brokenPart = hit.transform.GetComponent <BrokenPart>(); brokenPart.health -= damage; audioSource.PlayOneShot(hamSounds[Random.Range(0, hamSounds.Length)]); hammerAnim.SetTrigger("Ham"); if (brokenPart.health <= 0 && brokenPart.broken) { hit.transform.parent.GetComponent <MachineController>().ChangePart(brokenPart, true); brokenPart.health = brokenPart.origHealth; brokenPart.broken = false; parts++; fixCount.text = parts + "/" + 4; if (parts == 4) { thisPlayer.SetPlace(1); thisPlayer.mingameWins += 10; manager.EndGame(); } } hamTimer = origHamTimer; } } } else { hamTimer -= Time.deltaTime; } if (!Input.GetMouseButtonDown(1)) { return; } if (hit.transform.name == "Data Point") { thisPlayer.mingamePts++; ptsCount.text = "Data Pts: " + thisPlayer.mingamePts; hit.transform.gameObject.SetActive(false); } } } else { if (indexUp) { indexCard.GetComponent <Animator>().SetTrigger("SlideDown"); indexUp = false; } crosshair.color = crosshairNormal; } }
/// <summary> /// Compares the breaks in each part to see if they're the same. /// </summary> internal bool EquivalentBreaks(BrokenPart BP) { return this.problems == BP.problems; }
internal static void updateBrokenPart(BrokenPart broken) { if (broken.Problems() == 0) BrokenParts.Remove(broken.id); else BrokenParts[broken.id].UpdateProblems(broken.Problems()); }
internal static void regBrokenPart(BrokenPart broken) { BrokenParts.Add(broken.id, broken); }
internal void UpdateProblems(BrokenPart.BreakType updatedProblems) { problems |= updatedProblems; }
private static void EnableSwapper(BrokenPart target, bool enable) { target.GetComponent <MaterialSwapper>().stop = !enable; target.GetComponent <MaterialSwapper>().reset = !enable; }
private static void ChangeMaterial(Material newMaterial, BrokenPart target) { target.GetComponent <MeshRenderer>().sharedMaterial = newMaterial; }
private static void ChangeMesh(Mesh newMesh, BrokenPart target) { target.GetComponent <MeshFilter>().sharedMesh = newMesh; }