Instantly invalidate synchronizers for mattery players

This commit is contained in:
DBotThePony 2022-10-21 23:06:37 +07:00
parent af916f39e9
commit 949e529b19
Signed by: DBot
GPG Key ID: DCC23B5715498507
2 changed files with 25 additions and 20 deletions

View File

@ -179,8 +179,6 @@ class MatteryPlayerCapability(val ply: Player) : ICapabilityProvider, INBTSerial
private var shouldPlaySound = false
private val research = IdentityHashMap<AndroidResearchType, AndroidResearch>()
private var invalidateNetworkIn = 10
val isEverAndroid: Boolean get() = isAndroid || willBecomeAndroid
var lastJumpTicks = 14
@ -193,7 +191,20 @@ class MatteryPlayerCapability(val ply: Player) : ICapabilityProvider, INBTSerial
val androidEnergy = AndroidPowerSource(ply, synchronizer, ServerConfig.ANDROID_MAX_ENERGY, ServerConfig.ANDROID_MAX_ENERGY)
fun invalidateNetworkState() {
invalidateNetworkIn = 10
synchronizer.invalidate()
publicSynchronizer.invalidate()
for (instance in research.values) {
instance.invalidateNetwork()
}
for (feature in featureMap.values) {
feature.invalidateNetwork()
}
for (i in 0 until exoSuitMenu.slots.size) {
exoSuitMenu.setRemoteSlotNoCopy(i, ItemStack.EMPTY)
}
}
fun becomeAndroidSoft() {
@ -646,23 +657,6 @@ class MatteryPlayerCapability(val ply: Player) : ICapabilityProvider, INBTSerial
queuedTicks.clear()
if (invalidateNetworkIn > 0 && --invalidateNetworkIn == 0) {
synchronizer.invalidate()
publicSynchronizer.invalidate()
for (instance in research.values) {
instance.invalidateNetwork()
}
for (feature in featureMap.values) {
feature.invalidateNetwork()
}
for (i in 0 until exoSuitMenu.slots.size) {
exoSuitMenu.setRemoteSlotNoCopy(i, ItemStack.EMPTY)
}
}
tickedOnce = true
val payload = synchronizer.collectNetworkPayload()

View File

@ -418,6 +418,10 @@ class FieldSynchronizer(private val callback: Runnable, private val alwaysCallCa
private var mappingVersion = -1
fun invalidateMappings() {
mappingVersion = -1
}
fun markUnused() {
require(this === defaultEndpoint) { "This is not a default endpoint" }
if (unused) return
@ -1023,10 +1027,17 @@ class FieldSynchronizer(private val callback: Runnable, private val alwaysCallCa
}
}
/**
* marks all fields dirty, invalidates mappings for each endpoint
*/
fun invalidate() {
for (field in fields) {
field.markDirty()
}
forEachEndpoint {
it.invalidateMappings()
}
}
fun observe(): Boolean {