mirror of
https://gitlab.bixilon.de/bixilon/minosoft.git
synced 2025-09-13 17:37:58 -04:00
rendering: dynamic fov
This commit is contained in:
parent
b4feca0292
commit
92027d93e4
@ -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"
|
||||
|
@ -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)
|
||||
|
@ -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)
|
||||
}
|
||||
}
|
||||
|
@ -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
|
||||
|
@ -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()
|
||||
|
Loading…
x
Reference in New Issue
Block a user