From f93750dac5f9e6956ce8bdb66fcfab95a89b8b4c Mon Sep 17 00:00:00 2001 From: Bixilon Date: Sun, 7 Feb 2021 21:20:57 +0100 Subject: [PATCH] send position to server --- .../bixilon/minosoft/data/entities/EntityRotation.kt | 2 ++ .../java/de/bixilon/minosoft/data/entities/Location.kt | 3 +++ .../java/de/bixilon/minosoft/gui/rendering/Camera.kt | 10 +++------- .../de/bixilon/minosoft/gui/rendering/RenderWindow.kt | 10 ++++++++++ .../java/de/bixilon/minosoft/gui/rendering/Renderer.kt | 2 +- 5 files changed, 19 insertions(+), 8 deletions(-) diff --git a/src/main/java/de/bixilon/minosoft/data/entities/EntityRotation.kt b/src/main/java/de/bixilon/minosoft/data/entities/EntityRotation.kt index c2c5ad3e2..fa03bf1c7 100644 --- a/src/main/java/de/bixilon/minosoft/data/entities/EntityRotation.kt +++ b/src/main/java/de/bixilon/minosoft/data/entities/EntityRotation.kt @@ -14,6 +14,8 @@ package de.bixilon.minosoft.data.entities data class EntityRotation(val yaw: Float, val pitch: Float, val headYaw: Float) { + constructor(yaw: Double, pitch: Double) : this(yaw.toFloat(), pitch.toFloat(), yaw.toFloat()) + override fun toString(): String { return "(yaw=$yaw, pitch=$pitch, headYaw=$headYaw)" } diff --git a/src/main/java/de/bixilon/minosoft/data/entities/Location.kt b/src/main/java/de/bixilon/minosoft/data/entities/Location.kt index 6553dbfcc..db660939d 100644 --- a/src/main/java/de/bixilon/minosoft/data/entities/Location.kt +++ b/src/main/java/de/bixilon/minosoft/data/entities/Location.kt @@ -13,10 +13,13 @@ package de.bixilon.minosoft.data.entities import de.bixilon.minosoft.data.world.BlockPosition +import glm_.vec3.Vec3 data class Location(val x: Double, val y: Double, val z: Double) { + constructor(position: Vec3) : this(position.x.toDouble(), position.y.toDouble(), position.z.toDouble()) + override fun toString(): String { return "($x $y $z)" } diff --git a/src/main/java/de/bixilon/minosoft/gui/rendering/Camera.kt b/src/main/java/de/bixilon/minosoft/gui/rendering/Camera.kt index 07aa1d2cf..5b4a7b7af 100644 --- a/src/main/java/de/bixilon/minosoft/gui/rendering/Camera.kt +++ b/src/main/java/de/bixilon/minosoft/gui/rendering/Camera.kt @@ -12,11 +12,11 @@ class Camera(private var fov: Float, private val windowId: Long) { private var mouseSensitivity = 0.1 private var movementSpeed = 7 private var cameraFront = Vec3(0.0f, 0.0f, -1.0f) - private var cameraPosition = Vec3(0.0f, 0.0f, 3.0f) + var cameraPosition = Vec3(0.0f, 0.0f, 0.0f) private var lastMouseX = 0.0 private var lastMouseY = 0.0 - private var yaw = 0.0 - private var pitch = 0.0 + var yaw = 0.0 + var pitch = 0.0 fun mouseCallback(xPos: Double, yPos: Double) { var xOffset = xPos - this.lastMouseX @@ -85,10 +85,6 @@ class Camera(private var fov: Float, private val windowId: Long) { this.fov = fov } - fun setPosition(position: Vec3) { - cameraPosition = position - } - fun setRotation(yaw: Double, pitch: Double) { cameraFront = Vec3((cos(glm.radians(yaw)) * cos(glm.radians(pitch))).toFloat(), sin(glm.radians(pitch)).toFloat(), (sin(glm.radians(yaw)) * cos(glm.radians(pitch))).toFloat()).normalize() } diff --git a/src/main/java/de/bixilon/minosoft/gui/rendering/RenderWindow.kt b/src/main/java/de/bixilon/minosoft/gui/rendering/RenderWindow.kt index 78accb164..ea9ed1b99 100644 --- a/src/main/java/de/bixilon/minosoft/gui/rendering/RenderWindow.kt +++ b/src/main/java/de/bixilon/minosoft/gui/rendering/RenderWindow.kt @@ -1,9 +1,12 @@ package de.bixilon.minosoft.gui.rendering +import de.bixilon.minosoft.data.entities.EntityRotation +import de.bixilon.minosoft.data.entities.Location import de.bixilon.minosoft.data.world.ChunkLocation import de.bixilon.minosoft.gui.rendering.shader.Shader import de.bixilon.minosoft.gui.rendering.textures.TextureArray import de.bixilon.minosoft.protocol.network.Connection +import de.bixilon.minosoft.protocol.packets.serverbound.play.PacketPlayerPositionAndRotationSending import de.bixilon.minosoft.util.CountUpAndDownLatch import org.lwjgl.* import org.lwjgl.glfw.Callbacks @@ -135,6 +138,8 @@ class RenderWindow(private val connection: Connection) { var lastCalcTime = glfwGetTime() var frameTimeLastCalc = 0.0 + var lastPositionChangeTime = 0.0 + while (!glfwWindowShouldClose(windowId)) { glClear(GL_COLOR_BUFFER_BIT or GL_DEPTH_BUFFER_BIT) // clear the framebuffer @@ -171,6 +176,11 @@ class RenderWindow(private val connection: Connection) { } framesLastSecond++ + if (glfwGetTime() - lastPositionChangeTime > 0.05) { + // ToDo: Replace this with proper movement and only send it, when out position changed + connection.sendPacket(PacketPlayerPositionAndRotationSending(Location(camera.cameraPosition), EntityRotation(camera.yaw, camera.pitch), false)) + } + for (renderQueueElement in renderQueue) { renderQueueElement.run() diff --git a/src/main/java/de/bixilon/minosoft/gui/rendering/Renderer.kt b/src/main/java/de/bixilon/minosoft/gui/rendering/Renderer.kt index f630f4a41..40ac0df21 100644 --- a/src/main/java/de/bixilon/minosoft/gui/rendering/Renderer.kt +++ b/src/main/java/de/bixilon/minosoft/gui/rendering/Renderer.kt @@ -64,7 +64,7 @@ class Renderer(private val connection: Connection) { fun teleport(position: Location) { renderWindow.renderQueue.add { - renderWindow.camera.setPosition(Vec3(position.x, position.y, position.z)) + renderWindow.camera.cameraPosition = Vec3(position.x, position.y, position.z) } }