Instantly invalidate synchronizers for mattery players
This commit is contained in:
parent
af916f39e9
commit
949e529b19
@ -179,8 +179,6 @@ class MatteryPlayerCapability(val ply: Player) : ICapabilityProvider, INBTSerial
|
|||||||
private var shouldPlaySound = false
|
private var shouldPlaySound = false
|
||||||
private val research = IdentityHashMap<AndroidResearchType, AndroidResearch>()
|
private val research = IdentityHashMap<AndroidResearchType, AndroidResearch>()
|
||||||
|
|
||||||
private var invalidateNetworkIn = 10
|
|
||||||
|
|
||||||
val isEverAndroid: Boolean get() = isAndroid || willBecomeAndroid
|
val isEverAndroid: Boolean get() = isAndroid || willBecomeAndroid
|
||||||
var lastJumpTicks = 14
|
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)
|
val androidEnergy = AndroidPowerSource(ply, synchronizer, ServerConfig.ANDROID_MAX_ENERGY, ServerConfig.ANDROID_MAX_ENERGY)
|
||||||
|
|
||||||
fun invalidateNetworkState() {
|
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() {
|
fun becomeAndroidSoft() {
|
||||||
@ -646,23 +657,6 @@ class MatteryPlayerCapability(val ply: Player) : ICapabilityProvider, INBTSerial
|
|||||||
|
|
||||||
queuedTicks.clear()
|
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
|
tickedOnce = true
|
||||||
|
|
||||||
val payload = synchronizer.collectNetworkPayload()
|
val payload = synchronizer.collectNetworkPayload()
|
||||||
|
@ -418,6 +418,10 @@ class FieldSynchronizer(private val callback: Runnable, private val alwaysCallCa
|
|||||||
|
|
||||||
private var mappingVersion = -1
|
private var mappingVersion = -1
|
||||||
|
|
||||||
|
fun invalidateMappings() {
|
||||||
|
mappingVersion = -1
|
||||||
|
}
|
||||||
|
|
||||||
fun markUnused() {
|
fun markUnused() {
|
||||||
require(this === defaultEndpoint) { "This is not a default endpoint" }
|
require(this === defaultEndpoint) { "This is not a default endpoint" }
|
||||||
if (unused) return
|
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() {
|
fun invalidate() {
|
||||||
for (field in fields) {
|
for (field in fields) {
|
||||||
field.markDirty()
|
field.markDirty()
|
||||||
}
|
}
|
||||||
|
|
||||||
|
forEachEndpoint {
|
||||||
|
it.invalidateMappings()
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
fun observe(): Boolean {
|
fun observe(): Boolean {
|
||||||
|
Loading…
Reference in New Issue
Block a user