mirror of
https://gitlab.bixilon.de/bixilon/minosoft.git
synced 2025-09-14 09:56:37 -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(
|
data class CameraGameConfig(
|
||||||
@Json(name = "render_distance") var renderDistance: Int = 10,
|
@Json(name = "render_distance") var renderDistance: Int = 10,
|
||||||
var fov: Float = 60f,
|
var fov: Float = 60f,
|
||||||
|
@Json(name = "dynamic_fov") var dynamicFov: Boolean = true,
|
||||||
@Json(name = "mouse_sensitivity") var moseSensitivity: Float = 0.1f,
|
@Json(name = "mouse_sensitivity") var moseSensitivity: Float = 0.1f,
|
||||||
@Json(name = "no_clip_movement") var noCipMovement: Boolean = false,
|
@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"
|
@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
|
val realPosition: Vec3
|
||||||
get() = VecUtil.lerp((System.currentTimeMillis() - lastTickTime) / ProtocolDefinition.TICK_TIMEf, previousPosition, position)
|
get() = VecUtil.lerp((System.currentTimeMillis() - lastTickTime) / ProtocolDefinition.TICK_TIMEf, previousPosition, position)
|
||||||
|
|
||||||
private var lastTickTime = -1L
|
protected var lastTickTime = -1L
|
||||||
|
|
||||||
fun forceMove(deltaPosition: Vec3) {
|
fun forceMove(deltaPosition: Vec3) {
|
||||||
previousPosition = Vec3(position)
|
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.protocol.protocol.ProtocolDefinition
|
||||||
import de.bixilon.minosoft.util.KUtil.decide
|
import de.bixilon.minosoft.util.KUtil.decide
|
||||||
import de.bixilon.minosoft.util.KUtil.synchronizedMapOf
|
import de.bixilon.minosoft.util.KUtil.synchronizedMapOf
|
||||||
|
import de.bixilon.minosoft.util.MMath
|
||||||
import glm_.func.cos
|
import glm_.func.cos
|
||||||
import glm_.func.rad
|
import glm_.func.rad
|
||||||
import glm_.func.sin
|
import glm_.func.sin
|
||||||
@ -80,7 +81,7 @@ class LocalPlayerEntity(
|
|||||||
|
|
||||||
|
|
||||||
private var flyingSpeed: Float = 0.02f
|
private var flyingSpeed: Float = 0.02f
|
||||||
private val movementSpeed: Float
|
val movementSpeed: Float
|
||||||
get() = getAttributeValue(DefaultStatusEffectAttributeNames.GENERIC_MOVEMENT_SPEED)
|
get() = getAttributeValue(DefaultStatusEffectAttributeNames.GENERIC_MOVEMENT_SPEED)
|
||||||
|
|
||||||
private var horizontalCollision = false
|
private var horizontalCollision = false
|
||||||
@ -93,6 +94,12 @@ class LocalPlayerEntity(
|
|||||||
var forwardSpeed = 1.0f
|
var forwardSpeed = 1.0f
|
||||||
var fallDistance = 0.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
|
override val hasGravity: Boolean
|
||||||
get() = !baseAbilities.isFlying
|
get() = !baseAbilities.isFlying
|
||||||
|
|
||||||
@ -452,5 +459,8 @@ class LocalPlayerEntity(
|
|||||||
tickMovement()
|
tickMovement()
|
||||||
|
|
||||||
sendMovementPackets()
|
sendMovementPackets()
|
||||||
|
|
||||||
|
lastFovMultiplier = currentFovMultiplier
|
||||||
|
currentFovMultiplier = MMath.clamp(1.0f + movementSpeed, 1.0f, 1.5f)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -39,7 +39,6 @@ import glm_.vec3.Vec3
|
|||||||
|
|
||||||
class Camera(
|
class Camera(
|
||||||
val connection: PlayConnection,
|
val connection: PlayConnection,
|
||||||
var fov: Float,
|
|
||||||
val renderWindow: RenderWindow,
|
val renderWindow: RenderWindow,
|
||||||
) {
|
) {
|
||||||
private var mouseSensitivity = Minosoft.getConfig().config.game.camera.moseSensitivity
|
private var mouseSensitivity = Minosoft.getConfig().config.game.camera.moseSensitivity
|
||||||
@ -62,7 +61,17 @@ class Camera(
|
|||||||
private set
|
private set
|
||||||
var viewProjectionMatrix = projectionMatrix * viewMatrix
|
var viewProjectionMatrix = projectionMatrix * viewMatrix
|
||||||
private set
|
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) {
|
fun mouseCallback(xPos: Double, yPos: Double) {
|
||||||
var xOffset = xPos - this.lastMouseX
|
var xOffset = xPos - this.lastMouseX
|
||||||
|
@ -34,7 +34,7 @@ class RenderWindowInputHandler(
|
|||||||
val renderWindow: RenderWindow,
|
val renderWindow: RenderWindow,
|
||||||
) {
|
) {
|
||||||
val connection: PlayConnection = renderWindow.connection
|
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 keyBindingCallbacks: MutableMap<ResourceLocation, KeyBindingCallbackPair> = mutableMapOf()
|
||||||
private val keysDown: MutableList<KeyCodes> = mutableListOf()
|
private val keysDown: MutableList<KeyCodes> = mutableListOf()
|
||||||
|
Loading…
x
Reference in New Issue
Block a user