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; }
// 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)); }