mirror of
https://gitlab.bixilon.de/bixilon/minosoft.git
synced 2025-09-10 07:48:29 -04:00
wip improved camera shaking
This commit is contained in:
parent
955442f424
commit
5cebc1a7ef
@ -109,12 +109,12 @@ class MatrixHandler(
|
|||||||
fun draw() {
|
fun draw() {
|
||||||
dynamicFOV += camera.view.view.fovMultiplier
|
dynamicFOV += camera.view.view.fovMultiplier
|
||||||
|
|
||||||
shaking.draw()
|
val update = shaking.update()
|
||||||
val fov = calculateFOV()
|
val fov = calculateFOV()
|
||||||
val view = camera.view.view
|
val view = camera.view.view
|
||||||
val eyePosition = view.eyePosition
|
val eyePosition = view.eyePosition
|
||||||
val front = view.front
|
val front = view.front
|
||||||
if (upToDate && eyePosition == this.eyePosition && front == this.front && fov == previousFOV && shaking.isEmpty) {
|
if (!update && upToDate && eyePosition == this.eyePosition && front == this.front && fov == previousFOV && shaking.isEmpty) {
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
this.eyePosition = eyePosition
|
this.eyePosition = eyePosition
|
||||||
|
@ -20,24 +20,33 @@ import de.bixilon.kutil.avg.FloatAverage
|
|||||||
import de.bixilon.kutil.time.TimeUtil.millis
|
import de.bixilon.kutil.time.TimeUtil.millis
|
||||||
import de.bixilon.minosoft.config.profile.profiles.rendering.camera.shaking.ShakingC
|
import de.bixilon.minosoft.config.profile.profiles.rendering.camera.shaking.ShakingC
|
||||||
import de.bixilon.minosoft.gui.rendering.camera.Camera
|
import de.bixilon.minosoft.gui.rendering.camera.Camera
|
||||||
import de.bixilon.minosoft.gui.rendering.renderer.drawable.Drawable
|
|
||||||
import de.bixilon.minosoft.protocol.protocol.ProtocolDefinition
|
import de.bixilon.minosoft.protocol.protocol.ProtocolDefinition
|
||||||
|
import kotlin.math.PI
|
||||||
import kotlin.math.sin
|
import kotlin.math.sin
|
||||||
|
|
||||||
class CameraShaking(
|
class CameraShaking(
|
||||||
private val camera: Camera,
|
private val camera: Camera,
|
||||||
private val profile: ShakingC,
|
private val profile: ShakingC,
|
||||||
) : Drawable {
|
) {
|
||||||
private var rotation = 0.0f
|
private var rotation = 0.0f
|
||||||
private var strength = FloatAverage(5 * ProtocolDefinition.TICK_TIME * 1_000_000L, 1.0f)
|
private var strength = FloatAverage(5 * ProtocolDefinition.TICK_TIME * 1_000_000L, 1.0f)
|
||||||
private val speed = FloatAverage(5 * ProtocolDefinition.TICK_TIME * 1_000_000L, 0.0f)
|
private val speed = FloatAverage(10 * ProtocolDefinition.TICK_TIME * 1_000_000L, 0.0f)
|
||||||
|
|
||||||
val isEmpty: Boolean get() = rotation == 0.0f
|
val isEmpty: Boolean get() = rotation == 0.0f
|
||||||
|
|
||||||
override fun draw() {
|
fun update(): Boolean {
|
||||||
this.strength += 1.0f
|
this.strength += 1.0f
|
||||||
val strength = this.strength.avg * profile.amplifier // strength affects how far it goes
|
val time = millis()
|
||||||
|
val walking = bobbing(time)
|
||||||
|
val damage = damage(time)
|
||||||
|
|
||||||
|
val previous = this.rotation
|
||||||
|
this.rotation = walking + damage
|
||||||
|
|
||||||
|
return this.rotation != previous
|
||||||
|
}
|
||||||
|
|
||||||
|
private fun bobbing(time: Long): Float {
|
||||||
val physics = camera.context.connection.camera.entity.physics
|
val physics = camera.context.connection.camera.entity.physics
|
||||||
val velocity = physics.velocity.xz.length2().toFloat() // velocity affects how quick it goes
|
val velocity = physics.velocity.xz.length2().toFloat() // velocity affects how quick it goes
|
||||||
if (velocity > 0.003 && physics.onGround) {
|
if (velocity > 0.003 && physics.onGround) {
|
||||||
@ -45,14 +54,31 @@ class CameraShaking(
|
|||||||
} else {
|
} else {
|
||||||
this.speed += 0.0f // TODO: remove this, kutil 1.21
|
this.speed += 0.0f // TODO: remove this, kutil 1.21
|
||||||
}
|
}
|
||||||
val time = (millis() % 100L).toFloat() / 100.0f
|
|
||||||
|
|
||||||
this.rotation = sin(time * minOf(this.speed.avg, 0.5f) / 3.0f) * strength * 0.03f
|
val speed = minOf(this.speed.avg, 0.5f)
|
||||||
|
|
||||||
|
if (speed == 0.0f) return 0.0f
|
||||||
|
|
||||||
|
val intensity = speed * 100
|
||||||
|
val time = sin(millis().toDouble() / 1000.0)
|
||||||
|
val timeIntensity = sin(time / intensity)
|
||||||
|
|
||||||
|
println(timeIntensity)
|
||||||
|
return sin(timeIntensity * PI * 2).toFloat() / 10
|
||||||
|
}
|
||||||
|
|
||||||
|
private fun damage(time: Long): Float {
|
||||||
|
val strength = this.strength.avg * profile.amplifier // strength affects how far it goes
|
||||||
|
|
||||||
|
|
||||||
|
// this.rotation = sin(time * minOf(this.speed.avg, 0.5f) / 3.0f) * strength * 0.03f
|
||||||
|
|
||||||
|
// TODO
|
||||||
|
return 0.0f
|
||||||
}
|
}
|
||||||
|
|
||||||
fun onDamage() {
|
fun onDamage() {
|
||||||
strength += 1000.0f
|
strength += 10.0f
|
||||||
speed += 0.05f
|
|
||||||
}
|
}
|
||||||
|
|
||||||
fun transform(): Mat4? {
|
fun transform(): Mat4? {
|
||||||
|
Loading…
x
Reference in New Issue
Block a user