public void SetPuzzleSize(int x, int y, int z) { // Creates and destroys cubes to fit the puzzle size. // clear existing cubes foreach (DanMeyerCube dmc in cubes) { Destroy(dmc.gameObject); } cubes.Clear(); for (int i = 0; i < x; i++) { for (int j = 0; j < y; j++) { for (int k = 0; k < z; k++) { GameObject newCube = (GameObject)Instantiate(danMeyerCubePrefab, transform.position + (transform.right * i + transform.up * j + transform.forward * k) * cubeScale, transform.rotation); DanMeyerCube dmc = newCube.GetComponent <DanMeyerCube>(); dmc.indexedPosition = new Vector3(i, j, k); cubes.Add(dmc); newCube.transform.parent = transform; newCube.transform.localScale = Vector3.one * 0.98f * cubeScale; } } } // // And purge all cubes that were outside, if we shrank // List<Vector3> toRemove = new List<Vector3>(); // if (x < puzzleSize.x || y < puzzleSize.y || z < puzzleSize.z){ // foreach(KeyValuePair<Vector3,DanMeyerCube> kvp in cubes){ // if (kvp.Key.x > x || kvp.Key.y < y || kvp.Key.z < z){ // Destroy(kvp.Value.gameObject); // toRemove.Add(kvp.Key); // } // } // } // foreach(Vector3 rem in toRemove){ // cubes.Remove(rem); // } // puzzleSize = new Vector3(x,y,z); RepositionEditorCameraParent(); sizeX.text = x.ToString(); sizeY.text = y.ToString(); sizeZ.text = z.ToString(); UpdateCountText(); solvingP.transform.localPosition = CenterOfCube() / 2f; // particle system should also be centered // Debug.Log("Sizex:"+sizeX.text); }
void Update() { if (Input.GetMouseButtonUp(0)) { UpdateClickableStateForAllCubes(); } if (Input.GetKeyDown(KeyCode.Escape)) { if (rotating) { MouseLockCursor.ShowCursor(true, "end edit dan meyer cube while rotating"); } lm.EndEditing(); // will disable this object, preventing further updates from happening after the following return; statement return; } if (Input.GetMouseButtonDown(1)) { mouseLook.enabled = true; rotating = true; // mouse look MouseLockCursor.ShowCursor(false, "eidting dan meyer cube"); } if (Input.GetMouseButtonUp(1)) { mouseLook.enabled = false; rotating = false; MouseLockCursor.ShowCursor(true, "eidting dan meyer cube"); } if (rotating) { return; } // RaycastHit[] hits; List <DanMeyerCube> cubesToAffect = new List <DanMeyerCube>(); foreach (RaycastHit hit in Physics.RaycastAll(cam.ScreenPointToRay(Input.mousePosition), 300)) { DanMeyerCube dmc = hit.collider.GetComponent <DanMeyerCube>(); // if (!dmc) { // // maybe they clicked the toggle! // UIBooleanSlider = // } if (dmc) { // we are hovering over a cube while in editing mode. // Hotkeys are SHIFT, ALT, CTRL for columns, x rows, z rows foreach (DanMeyerCube dm2 in lm.cubes) { // columns let's say // get all cubes in this column. if (Input.GetKey(KeyCode.LeftShift) && Input.GetKey(KeyCode.LeftControl) && Input.GetKey(KeyCode.LeftAlt)) { //ALL of them. // if ((int)dm2.indexedPosition.y == (int)dmc.indexedPosition.y (int)dm2.indexedPosition.z == (int)dmc.indexedPosition.z){ cubesToAffect.Add(dm2); LevelBuilder.inst.MakeHighlightFX2(dm2.transform, "dan meyer cube high"); // } } else if (Input.GetKey(KeyCode.LeftShift) && Input.GetKey(KeyCode.LeftControl)) { // HORIZONTAL PLANE if ((int)dm2.indexedPosition.y == (int)dmc.indexedPosition.y) { cubesToAffect.Add(dm2); LevelBuilder.inst.MakeHighlightFX2(dm2.transform, "dan meyer cube high"); } } else if (Input.GetKey(KeyCode.LeftShift) && Input.GetKey(KeyCode.LeftAlt)) { // VERTICAL Z PLANE if ((int)dm2.indexedPosition.z == (int)dmc.indexedPosition.z) { cubesToAffect.Add(dm2); LevelBuilder.inst.MakeHighlightFX2(dm2.transform, "dan meyer cube high"); } } else if (Input.GetKey(KeyCode.LeftControl) && Input.GetKey(KeyCode.LeftAlt)) { // VERTICAL X PLANE if ((int)dm2.indexedPosition.x == (int)dmc.indexedPosition.x) { cubesToAffect.Add(dm2); LevelBuilder.inst.MakeHighlightFX2(dm2.transform, "dan meyer cube high"); } } else if (Input.GetKey(KeyCode.LeftShift)) { // Z ROW ONLY if ((int)dm2.indexedPosition.y == (int)dmc.indexedPosition.y && (int)dm2.indexedPosition.z == (int)dmc.indexedPosition.z) { cubesToAffect.Add(dm2); LevelBuilder.inst.MakeHighlightFX2(dm2.transform, "dan meyer cube high"); } } else if (Input.GetKey(KeyCode.LeftControl)) { // X ROW ONLY if ((int)dm2.indexedPosition.x == (int)dmc.indexedPosition.x && (int)dm2.indexedPosition.y == (int)dmc.indexedPosition.y) { cubesToAffect.Add(dm2); LevelBuilder.inst.MakeHighlightFX2(dm2.transform, "dan meyer cube high"); } } else if (Input.GetKey(KeyCode.LeftAlt)) { // COLUMN ONLY if ((int)dm2.indexedPosition.x == (int)dmc.indexedPosition.x && (int)dm2.indexedPosition.z == (int)dmc.indexedPosition.z) { cubesToAffect.Add(dm2); LevelBuilder.inst.MakeHighlightFX2(dm2.transform, "dan meyer cube high"); } } } if (cubesToAffect.Count == 0) { // no hotkeys pressed so we didn't add the "focus" cube under the mouse cursor. cubesToAffect.Add(dmc); LevelBuilder.inst.MakeHighlightFX2(dmc.transform, "dan meyer cube high"); } if (Input.GetMouseButtonDown(0)) { // Debug.Log("<color=#00f>Affecting</color>Affecting:"+cubesToAffect.Count+"cubes."); bool active = !slider.GetSliderValue(); // cache this value for .000001s savings. By the way slider value == true is DESTROY in this setup. foreach (DanMeyerCube dm3 in cubesToAffect) { if (active) { dm3.TurnCubeOff(active); // note we are comparing ONLY the active value of the exact hovering cube, so all column/row cubes are set to the SAME bool value, not "flipped" } else { dm3.TurnCubeOn(active); } } lm.UpdateCountText(); } break; // the foreach doesn't continue after this. } } }