rendering: dynamic fov

This commit is contained in:
Bixilon 2021-06-02 19:57:16 +02:00 committed by Lukas
parent b4feca0292
commit 92027d93e4
5 changed files with 25 additions and 5 deletions

View File

@ -18,6 +18,7 @@ import com.squareup.moshi.Json
data class CameraGameConfig(
@Json(name = "render_distance") var renderDistance: Int = 10,
var fov: Float = 60f,
@Json(name = "dynamic_fov") var dynamicFov: Boolean = true,
@Json(name = "mouse_sensitivity") var moseSensitivity: Float = 0.1f,
@Json(name = "no_clip_movement") var noCipMovement: Boolean = false,
@Json(name = "disable_movement_sending") var disableMovementSending: Boolean = true, // ToDo: This should get false once the physics are "complete"

View File

@ -96,7 +96,7 @@ abstract class Entity(
val realPosition: Vec3
get() = VecUtil.lerp((System.currentTimeMillis() - lastTickTime) / ProtocolDefinition.TICK_TIMEf, previousPosition, position)
private var lastTickTime = -1L
protected var lastTickTime = -1L
fun forceMove(deltaPosition: Vec3) {
previousPosition = Vec3(position)

View File

@ -37,6 +37,7 @@ import de.bixilon.minosoft.protocol.packets.c2s.play.*
import de.bixilon.minosoft.protocol.protocol.ProtocolDefinition
import de.bixilon.minosoft.util.KUtil.decide
import de.bixilon.minosoft.util.KUtil.synchronizedMapOf
import de.bixilon.minosoft.util.MMath
import glm_.func.cos
import glm_.func.rad
import glm_.func.sin
@ -80,7 +81,7 @@ class LocalPlayerEntity(
private var flyingSpeed: Float = 0.02f
private val movementSpeed: Float
val movementSpeed: Float
get() = getAttributeValue(DefaultStatusEffectAttributeNames.GENERIC_MOVEMENT_SPEED)
private var horizontalCollision = false
@ -93,6 +94,12 @@ class LocalPlayerEntity(
var forwardSpeed = 1.0f
var fallDistance = 0.0f
private var lastFovMultiplier = 1.0f
private var currentFovMultiplier = 1.0f
val fovMultiplier: Float
get() = MMath.lerp((System.currentTimeMillis() - lastTickTime) / ProtocolDefinition.TICK_TIMEf, lastFovMultiplier, currentFovMultiplier)
override val hasGravity: Boolean
get() = !baseAbilities.isFlying
@ -452,5 +459,8 @@ class LocalPlayerEntity(
tickMovement()
sendMovementPackets()
lastFovMultiplier = currentFovMultiplier
currentFovMultiplier = MMath.clamp(1.0f + movementSpeed, 1.0f, 1.5f)
}
}

View File

@ -39,7 +39,6 @@ import glm_.vec3.Vec3
class Camera(
val connection: PlayConnection,
var fov: Float,
val renderWindow: RenderWindow,
) {
private var mouseSensitivity = Minosoft.getConfig().config.game.camera.moseSensitivity
@ -62,7 +61,17 @@ class Camera(
private set
var viewProjectionMatrix = projectionMatrix * viewMatrix
private set
var lastFlyKeyDown = false
val fov: Float
get() {
val fov = Minosoft.config.config.game.camera.fov
if (!Minosoft.config.config.game.camera.dynamicFov) {
return fov
}
return fov * entity.fovMultiplier
}
fun mouseCallback(xPos: Double, yPos: Double) {
var xOffset = xPos - this.lastMouseX

View File

@ -34,7 +34,7 @@ class RenderWindowInputHandler(
val renderWindow: RenderWindow,
) {
val connection: PlayConnection = renderWindow.connection
val camera: Camera = Camera(connection, Minosoft.getConfig().config.game.camera.fov, renderWindow)
val camera: Camera = Camera(connection, renderWindow)
private val keyBindingCallbacks: MutableMap<ResourceLocation, KeyBindingCallbackPair> = mutableMapOf()
private val keysDown: MutableList<KeyCodes> = mutableListOf()