render window: remove initialPosition check, check for connection state

This commit is contained in:
Bixilon 2022-01-04 02:28:57 +01:00
parent 794a6da851
commit a4d5b9502d
No known key found for this signature in database
GPG Key ID: 5CAD791931B09AC4
4 changed files with 8 additions and 13 deletions

View File

@ -41,10 +41,10 @@ import de.bixilon.minosoft.gui.rendering.system.window.BaseWindow
import de.bixilon.minosoft.gui.rendering.system.window.GLFWWindow
import de.bixilon.minosoft.gui.rendering.tint.TintManager
import de.bixilon.minosoft.gui.rendering.util.ScreenshotTaker
import de.bixilon.minosoft.modding.event.events.PacketReceiveEvent
import de.bixilon.minosoft.modding.event.events.connection.play.PlayConnectionStateChangeEvent
import de.bixilon.minosoft.modding.event.invoker.CallbackEventInvoker
import de.bixilon.minosoft.protocol.network.connection.play.PlayConnection
import de.bixilon.minosoft.protocol.packets.s2c.play.PositionAndRotationS2CP
import de.bixilon.minosoft.protocol.network.connection.play.PlayConnectionStates
import de.bixilon.minosoft.protocol.protocol.ProtocolDefinition
import de.bixilon.minosoft.util.Stopwatch
import de.bixilon.minosoft.util.logging.Log
@ -92,8 +92,6 @@ class RenderWindow(
var tickCount = 0L
var lastTickTimer = TimeUtil.time
private var initialPositionReceived = false
var renderingState = RenderingStates.RUNNING
private set(value) {
@ -109,14 +107,9 @@ class RenderWindow(
}
init {
connection.registerEvent(CallbackEventInvoker.of<PacketReceiveEvent> {
val packet = it.packet
if (packet !is PositionAndRotationS2CP) {
return@of
}
if (!initialPositionReceived) {
connection.registerEvent(CallbackEventInvoker.of<PlayConnectionStateChangeEvent> {
if (it.state == PlayConnectionStates.PLAYING && latch.count > 0) {
latch.dec()
initialPositionReceived = true
}
})
profile.experimental::fps.profileWatch(this, true, profile) {

View File

@ -19,7 +19,6 @@ import de.bixilon.minosoft.protocol.packets.c2s.play.PositionAndRotationC2SP
import de.bixilon.minosoft.protocol.packets.c2s.play.TeleportConfirmC2SP
import de.bixilon.minosoft.protocol.packets.s2c.PlayS2CPacket
import de.bixilon.minosoft.protocol.protocol.PlayInByteBuffer
import de.bixilon.minosoft.protocol.protocol.ProtocolStates
import de.bixilon.minosoft.protocol.protocol.ProtocolVersions
import de.bixilon.minosoft.util.BitByte
import de.bixilon.minosoft.util.logging.Log
@ -87,7 +86,7 @@ class PositionAndRotationS2CP(buffer: PlayInByteBuffer) : PlayS2CPacket() {
}
connection.sendPacket(PositionAndRotationC2SP(position, rotation, isOnGround))
if (connection.state != PlayConnectionStates.PLAYING && connection.protocolState != ProtocolStates.DISCONNECTED) {
if (connection.state == PlayConnectionStates.SPAWNING) {
connection.state = PlayConnectionStates.PLAYING
}
}

View File

@ -20,6 +20,7 @@ import de.bixilon.minosoft.data.registries.dimension.DimensionProperties
import de.bixilon.minosoft.gui.rendering.util.vec.vec3.Vec3dUtil.EMPTY
import de.bixilon.minosoft.modding.event.events.RespawnEvent
import de.bixilon.minosoft.protocol.network.connection.play.PlayConnection
import de.bixilon.minosoft.protocol.network.connection.play.PlayConnectionStates
import de.bixilon.minosoft.protocol.packets.s2c.PlayS2CPacket
import de.bixilon.minosoft.protocol.protocol.PlayInByteBuffer
import de.bixilon.minosoft.protocol.protocol.ProtocolVersions
@ -90,6 +91,7 @@ class RespawnS2CP(buffer: PlayInByteBuffer) : PlayS2CPacket() {
override fun handle(connection: PlayConnection) {
// clear all chunks
connection.state = PlayConnectionStates.SPAWNING
connection.world.chunks.clear()
connection.world.dimension = dimension
connection.player.isSpawnConfirmed = false

View File

@ -18,6 +18,7 @@ import kotlin.reflect.KProperty
import kotlin.reflect.KProperty0
import kotlin.reflect.KProperty1
@Deprecated("Will be integrated in KUtil")
object DelegateManager {
// [field][<receiver>][reference][listener]
private val listeners: SynchronizedMap<String, SynchronizedMap<WeakReference<Any>, MutableSet<Pair<WeakReference<Any>, DelegateListener<Any>>>>> = synchronizedMapOf()