예제 #1
0
    private void Awake()
    {
        MLInput.Start();
        spawnMngr    = GetComponent <SpawnManager>();
        audioManager = GameObject.Find("AudioManager").GetComponent <AudioManager>();
        scoreKeeping = GameObject.Find("[Content]/Controller").GetComponent <ScoreKeeping>();
        trailAndBall = spawnMngr.trailAndBall.GetComponent <DisplayTrailAndBall>();
        _control     = MLInput.GetController(MLInput.Hand.Left);

        scoreText.enabled      = false;
        summaryText.enabled    = false;
        statusText.enabled     = false;
        helpText.enabled       = false;
        beamController.enabled = false;
        spawnMngr.enabled      = false;
        menu.SetActive(false);
        canvas.SetActive(false);
        settings.SetActive(false);

        // update setting text to reflect current settings
        pathOn = trailAndBall.trails[0].activeSelf;
        if (GameObject.Find("[Content]/MLSpatialMapper/Original").GetComponent <Renderer>().material.mainTexture == null)
        {
            meshOn = false;
        }
        else
        {
            meshOn = true;
        }


        foreach (SettingType type in Enum.GetValues(typeof(SettingType)))
        {
            SetSettingText(type);
        }

        Playspace.Instance.OnCompleted.AddListener(OnPlayspaceComplete);
        Playspace.Instance.OnCleared.AddListener(OnPlayspaceClear);
        MLInput.OnControllerButtonUp  += OnButtonUp;
        scoreKeeper.ScoreChange       += OnScoreChange;
        beamController.OptionSelected += OnOptionSelected;

        wallStat = WallStat.Empty;
    }
예제 #2
0
    // first select a random plane
    // then randomly select one point on the plane to spawn the ball
    private void RandomSpawn()
    {
        DisplayTrailAndBall spawner = trailAndBall.GetComponent <DisplayTrailAndBall>();

        spawner.survival    = survivalMode;
        spawner.scorekeeper = scorekeeper;

        int startIndex = Random.Range(0, numPlane);
        int endIndex   = startIndex;

        while (startIndex == endIndex)
        {
            endIndex = Random.Range(0, numPlane);
        }

        (Vector3 startLoc, Quaternion startRot) = GetRandomFromPlane(startIndex);
        (Vector3 endLoc, Quaternion endRot)     = GetRandomFromPlane(endIndex);

        // make sure the whole path is not too high (both end higher than 175cm)
        if (startLoc.y - Playspace.Instance.FloorCenter.y > 1.75f &&
            endLoc.y - Playspace.Instance.FloorCenter.y > 1.75f)
        {
            endIndex = startIndex;
            while (startIndex == endIndex)
            {
                endIndex = Random.Range(0, numPlane);
            }
            (endLoc, endRot) = GetRandomFromPlane(endIndex);
        }

        float angle = Quaternion.Angle(startRot, endRot);

        while (angle < angleMin || angle > angleMax)
        {
            endIndex = startIndex;
            while (startIndex == endIndex)
            {
                endIndex = Random.Range(0, numPlane);
            }
            (endLoc, endRot) = GetRandomFromPlane(endIndex);
            angle            = Quaternion.Angle(startRot, endRot);
        }

        Vector3 middleLoc = (startLoc + endLoc) / 2 +
                            new Vector3(Random.Range(-middlePointRange, middlePointRange),
                                        Random.Range(-middlePointRange, middlePointRange),
                                        Random.Range(-middlePointRange, middlePointRange));
        int count = 0;

        while (Vector3.Angle(middleLoc - startLoc, startRot * Vector3.forward) > 90 ||
               Vector3.Angle(middleLoc - endLoc, endRot * Vector3.forward) > 90 ||
               !Playspace.Instance.Inside(middleLoc))   // make sure path go into the space
        {
            middleLoc = (startLoc + endLoc) / 2 +
                        new Vector3(Random.Range(-middlePointRange, middlePointRange),
                                    Random.Range(-middlePointRange, middlePointRange),
                                    Random.Range(-middlePointRange, middlePointRange));
            if (count++ > 50)
            {
                break;
            }
        }

        spawner.setParams(startLoc, endLoc, startRot, endRot, middleLoc);
        spawners.Add(Instantiate(trailAndBall, Vector3.zero, Quaternion.identity));
    }