// length, width, numkeys, gate/no gate, "theme"... i guess public void GenerateTheLevelButton() { Control.isGameOver = false; // camera reference cam = Camera.main; // Maze Algorithm /////////////////////////////////// Maze m = new Maze(cam, Control.mazeWidth, Control.mazeLength, 1); goalPos = m.goalPos; m.GenerateMaze(); //display nodes in debug foreach (Node node in m.allNodes) { //node.StartDebugVis(cam); // add all the nodes from the maze into main todo: good idea? idk allNodes.Add(node); if (Vector3.Distance(node.position, new Vector3(0, 0, 0)) < 0.01) { map.Add(node, true); } else if (Vector3.Distance(node.position, goalPos) < 0.01) { map.Add(node, true); } else { map.Add(node, false); } } //create a graph for later use g = new Graph(m.allNodes); // todo: make it allNodes instead of m.allNodes /////////////////////////////////////////////////// // Finding Hard-Coded Node Faces //////////////////// if (pathFaces.Length == 0) { pathFaces = GameObject.FindGameObjectsWithTag("PathFace"); } for (int i = 0; i < pathFaces.Length; i++) { GameObject face = pathFaces[i]; Vector3 normal = Vector3.Normalize(face.transform.up); // is this always the correct normal? should be Node n = new Node(i, "top", face.transform.position, face.transform.up, face.transform.right); float epsilon = 0.01f; if (normal == new Vector3(0, 1, 0)) { n = new Node(i, "top", face.transform.position, face.transform.up, face.transform.right); } else if (normal == new Vector3(-1, 0, 0)) { n = new Node(i, "negx", face.transform.position, face.transform.up, face.transform.right); } else if (normal == new Vector3(0, 0, -1)) { n = new Node(i, "negz", face.transform.position, face.transform.up, face.transform.right); } else if (normal.x > epsilon || normal.x < -epsilon) { if (normal.y > 0) { n = new Node(i, "diagx", face.transform.position, face.transform.up, face.transform.right); } } else if (normal.z > epsilon || normal.z < -epsilon) { if (normal.y > 0) { n = new Node(i, "diagz", face.transform.position, face.transform.up, face.transform.right); } } allNodes.Add(n); } // assign neighbors to nodes automatically //foreach (Node node in allNodes) //{ // // todo: commetn back in ? // //node.FindGeomNeighbors(allNodes, cam); // //node.FindIllusionNeighbors(allNodes, cam); // //node.StartDebugVis(cam); //} // referencing the character variable todo idk if this should be here ? thePlayer = GameObject.Find("Character"); playerScript = thePlayer.GetComponent <CharController>(); playerScript.AssignFirstCurrNode(allNodes); /////////////////////////////////////////////////// if (Control.hasGates) { MakeGatePlusKey(); // this needs to go first to lay down the gate } MakePrizes(Control.numPrizes); // todo: make some limits on dis (i.e. what is the max prizes, also same concern for ladders) // show the play panel and hide the other panel TogglePanelVisibility("start panel"); TogglePanelVisibility("playing panel"); }
// restart level without changing the maze or ladder distribution public void RestartSameLevel() { Control.isGameOver = false; ErasePathObjects(); Toggle myToggle = GameObject.Find("mouseclick-toggle").GetComponent <Toggle>(); myToggle.isOn = false; // put char back at (0,0,0) thePlayer.transform.position = new Vector3(0, thePlayer.transform.localScale.y * 0.5f, 0); // transform gates so they are at original position if (gateObjX) { Vector3 p = gateObjX.transform.position; gateObjX.transform.position = new Vector3(p.x, 0.5f, p.z); } if (gateObjZ) { Vector3 p = gateObjZ.transform.position; gateObjZ.transform.position = new Vector3(p.x, 0.5f, p.z); } // destroy prizes + key GameObject prizeGeom = GameObject.Find("Prizes"); if (prizeGeom != null) { foreach (Transform child in prizeGeom.transform) { // clear the map foreach (Node n in nodesHadLittlePrizes) { map[n] = false; } nodesHadLittlePrizes.Clear(); Destroy(child.gameObject); } } // destroy & recreate key GameObject keyGeom = GameObject.Find("Key"); if (keyGeom != null) { map[nodeKeyWasOn] = false; nodeKeyWasOn = null; Destroy(keyGeom.gameObject); MakeKey(); } // make more prizes MakePrizes(Control.numPrizes); // restore the gui GameObject gameOver = GameObject.Find("game over notice"); Text text = gameOver.GetComponent <Text>(); text.text = ""; gameOver = GameObject.Find("score"); text = gameOver.GetComponent <Text>(); text.text = "0"; //GameObject.Find("timer").GetComponent<Text>().text = ""; Control.timer = 0; // restart the first node char is on thePlayer = GameObject.Find("Character"); playerScript = thePlayer.GetComponent <CharController>(); playerScript.AssignFirstCurrNode(allNodes); }