Esempio n. 1
0
    // 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");
    }
Esempio n. 2
0
    // 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);
    }