MindMachine: improve contrast and fix visual flash/pulse rendering
This commit is contained in:
@@ -0,0 +1,30 @@
|
||||
package com.mindmachine.mvp.session
|
||||
|
||||
import com.mindmachine.mvp.domain.VisualPattern
|
||||
import kotlin.math.PI
|
||||
import kotlin.math.sin
|
||||
|
||||
fun computeVisualAlpha(
|
||||
visualPattern: VisualPattern,
|
||||
frameTimeNanos: Long,
|
||||
blinkFrequencyHz: Float,
|
||||
intensityPercent: Int,
|
||||
): Float {
|
||||
val intensity = (intensityPercent.coerceIn(0, 100) / 100f)
|
||||
if (intensity <= 0f) return 0f
|
||||
|
||||
val frequency = blinkFrequencyHz.coerceIn(1f, 20f).toDouble()
|
||||
val timeSeconds = frameTimeNanos / 1_000_000_000.0
|
||||
|
||||
return when (visualPattern) {
|
||||
VisualPattern.FLASH -> {
|
||||
val phase = (timeSeconds * frequency) % 1.0
|
||||
if (phase < 0.5) intensity else 0f
|
||||
}
|
||||
|
||||
VisualPattern.PULSE -> {
|
||||
val pulse = ((sin(2.0 * PI * frequency * timeSeconds) + 1.0) / 2.0).toFloat()
|
||||
(intensity * pulse).coerceIn(0f, intensity)
|
||||
}
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user