public void InitializeWithSettings(StimulusSettings settings) { stimulusSettings = settings; var apertureRadius = Mathf.Tan(stimulusSettings.apertureRadiusDegrees * Mathf.PI / 180) * stimulusSettings.stimDepthMeters; var approxMeterPerDegree = Mathf.Tan(1.0f * Mathf.PI / 180.0f) * stimulusSettings.stimDepthMeters; numDots = Mathf.RoundToInt(Mathf.Pow(apertureRadius / approxMeterPerDegree, 2.0f) * Mathf.PI * stimulusSettings.density); if (settings.buddyDotsEnabled && numDots % 2 != 0) { numDots += 1; } _shaderData?.ClearBuffers(); _shaderData = new DotShaderData(dotMesh, numDots); var dotSpeed = stimulusSettings.speed * (Mathf.PI / 180) * stimulusSettings.stimDepthMeters; if (settings.buddyDotsEnabled) { GenerateDotsWithBuddy(apertureRadius, dotSpeed); } else { GenerateDots(apertureRadius, dotSpeed); } }
public Dot(Vector2 velocity, Vector3 startingPosition, StimulusSettings settings) { _velocity = velocity; _currentPosition = startingPosition; Position = _currentPosition; _settings = settings; _elapsedTime = 0; var dotSize = settings.dotSizeArcMinutes * Mathf.PI / (60 * 180) * settings.stimDepthMeters; _apertureRadius = Mathf.Tan(settings.apertureRadiusDegrees * Mathf.PI / 180) * settings.stimDepthMeters; _sqrApertureRadius = _apertureRadius * _apertureRadius; scale = dotSize; // In case first update puts dot outside circle var randomPosition = Random.insideUnitCircle * _apertureRadius; _oldPosition = new Vector3(randomPosition.x, 0, randomPosition.y); }
private void InitializeStimuli() { _innerStimulusSettings = innerStimulus.GetComponent <DotManager>().GetSettings(); _outerStimulusSettings = outerStimulus.GetComponent <DotManager>().GetSettings(); _innerStimulusSettings.stimDepthMeters = sessionSettings.stimulusDepth - sessionSettings.stimulusSpacing; _outerStimulusSettings.stimDepthMeters = sessionSettings.stimulusDepth; _innerStimulusSettings.apertureRadiusDegrees = sessionSettings.innerStimulusRadius; _outerStimulusSettings.apertureRadiusDegrees = sessionSettings.outerStimulusRadius; _innerStimulusSettings.density = sessionSettings.stimulusDensity; _outerStimulusSettings.density = sessionSettings.stimulusDensity; _innerStimulusSettings.minDotLifetime = sessionSettings.minDotLifetime; _outerStimulusSettings.minDotLifetime = sessionSettings.minDotLifetime; _innerStimulusSettings.maxDotLifetime = sessionSettings.maxDotLifetime; _outerStimulusSettings.maxDotLifetime = sessionSettings.maxDotLifetime; _innerStimulusSettings.dotSizeArcMinutes = sessionSettings.dotSize; _outerStimulusSettings.dotSizeArcMinutes = sessionSettings.dotSize; _innerStimulusSettings.noiseDotPercentage = sessionSettings.innerStimulusNoisePercentage; _outerStimulusSettings.noiseDotPercentage = sessionSettings.outerStimulusNoisePercentage; _innerStimulusSettings.buddyDotsEnabled = sessionSettings.buddyDotsEnabled; _outerStimulusSettings.buddyDotsEnabled = sessionSettings.buddyDotsEnabled; innerStimulus.GetComponent <DotManager>().InitializeWithSettings(_innerStimulusSettings); outerStimulus.GetComponent <DotManager>().InitializeWithSettings(_outerStimulusSettings); }