// Update is called once per frame void Update() { if (isEnabled && FTSInterface.systemIsReady()) { SampEvent.text = FTSInterface.getCurrentSampleNumber() + "/" + FTSInterface.getCurrentEventsNumber() + " (samp/evt)"; float qualityCh1 = FTSInterface.getQualityCh1(); QualityL.text = qualityCh1.ToString("0.00"); float qualityCh2 = FTSInterface.getQualityCh2(); QualityR.text = qualityCh2.ToString("0.00"); // Judge current quality bool channel1Good = CheckChannel(qualityCh1, 1, QualityIndicatorL); bool channel2Good = CheckChannel(qualityCh2, 2, QualityIndicatorR); if (channel1Good && channel2Good) { curQualityDuration[0] = 0; AdvanceButton.interactable = true; curQualityStatusAllChannels = true; } else { if (curQualityStatusAllChannels) { curQualityDuration[0]++; //allow for brief drop in quality if (curQualityDuration[0] > Config.qualityTimeOut) { AdvanceButton.interactable = false; curQualityStatusAllChannels = false; } } } // Calculate rolling average float channelsAvg = (qualityCh1 + qualityCh2) / 2.0f; avgQualityAllChannels = (channelsAvg + avgQualityAllChannels * avgQualitySamples) / (avgQualitySamples + 1); avgQualitySamples++; //Debug.Log("Q1=" + qualityCh1.ToString() + ", Q2=" + qualityCh2.ToString() + ", QA=" + avgQualityAllChannels.ToString()); } }
// Update is called once per frame void Update() { if (gameObject.activeSelf && FTSInterface.systemIsReady()) { if ((Time.time - startTime) >= duration) { gameObject.SetActive(false); // Log session score and reset for performance sake // menu.logScore((float)alphaLatAvg); // alphaLatAvg = 0; // avgSamples = 1; menu.nextStage(); } TrnSampEvent.text = FTSInterface.getCurrentSampleNumber() + "/" + FTSInterface.getCurrentEventsNumber() + " (samp/evt)"; // Tunnel rotation tunnelContainer.transform.Rotate(0, 0.02f, 0); // AlphaLat to Movement alpha = (float)FTSInterface.getAlpha(); float currentPosZ = ball.transform.position[2]; // Ensure 0=middle of the range and scale by alphaLIM float targetPosZ = (MINZPOS + MAXZPOS) / 2 + -alpha / Config.alphaLimit * (MAXZPOS - MINZPOS); // limit range of Z pos targetPosZ = Mathf.Min(Mathf.Max(targetPosZ, MINZPOS), MAXZPOS); float targetRotX = turningRate * (targetPosZ - currentPosZ) / (2f * Mathf.PI * 0.5f); Vector3 targetPosition = new Vector3(0, 0, targetPosZ); ball.transform.position = Vector3.SmoothDamp(ball.transform.position, targetPosition, ref velocity, smoothTime); ball.transform.Rotate(targetRotX, 0, 0); /* * // AlphaLat Rolling average to Ball Color * alphaLatAvg = (alphaLatAvg * avgSamples + alpha) / (avgSamples + 1); * avgSamples += 1; * //Debug.Log (alphaLatAvg); * * float targetBlend = 0.5f + (alpha - alphaLatAvg)/Config.alphaLimit; * float ballBlend = Mathf.Min(Mathf.Max(targetBlend,0f),1f); * * ballRenderMan.material.SetFloat ("_Blend", ballBlend); * //skinnedMeshRenderMan.SetBlendShapeWeight (0, value * 100f); */ // Badness to Tunnel color float b = (float)FTSInterface.getBadness(); // smooth badness to make it visible for longer if (Config.badnessFilter > 0) { badness = Config.badnessFilter * b + (1 - Config.badnessFilter) * badness; } else { badness = b; } float badColor = Mathf.Max(0, badness - Config.badnessThreshold); // > .5 = bad badColor = Mathf.Min(badColor, Config.badnessLimit) / Config.badnessLimit; // 3 is max badness, linear between for (int i = 0; i < tunnelRenderMans.Length; ++i) { tunnelRenderMans[i].material.SetFloat("_Blend", badColor); } } }