Create shared state in EnhancedPlacementContext for memory efficiency
This commit is contained in:
parent
0af5fb7301
commit
bf6fec7753
@ -1,5 +1,6 @@
|
||||
package ru.dbotthepony.mc.otm.worldgen
|
||||
|
||||
import it.unimi.dsi.fastutil.objects.Reference2ObjectOpenHashMap
|
||||
import net.minecraft.core.BlockPos
|
||||
import net.minecraft.util.RandomSource
|
||||
import net.minecraft.world.level.ChunkPos
|
||||
@ -18,15 +19,32 @@ class EnhancedPlacementContext {
|
||||
fun place(context: EnhancedPlacementContext, positions: List<BlockPos>, feature: EnhancedFeature.Configured<*, *>)
|
||||
}
|
||||
|
||||
val level: WorldGenLevel
|
||||
val generator: ChunkGenerator
|
||||
val random: RandomSource
|
||||
val origin: ChunkPos
|
||||
private val placer: Placer
|
||||
val vanillaContext: PlacementContext
|
||||
private data class SharedState(
|
||||
val level: WorldGenLevel,
|
||||
val generator: ChunkGenerator,
|
||||
val random: RandomSource,
|
||||
val origin: ChunkPos,
|
||||
val placer: Placer,
|
||||
val vanillaContext: PlacementContext,
|
||||
)
|
||||
|
||||
private var parent: EnhancedPlacementContext? = null
|
||||
private val variables = HashMap<PlacementVariable<*>, KOptional<*>>()
|
||||
private val state: SharedState
|
||||
|
||||
val level: WorldGenLevel
|
||||
get() = state.level
|
||||
val generator: ChunkGenerator
|
||||
get() = state.generator
|
||||
val random: RandomSource
|
||||
get() = state.random
|
||||
val origin: ChunkPos
|
||||
get() = state.origin
|
||||
private val placer: Placer
|
||||
get() = state.placer
|
||||
val vanillaContext: PlacementContext
|
||||
get() = state.vanillaContext
|
||||
|
||||
private val parent: EnhancedPlacementContext?
|
||||
private val variables = Reference2ObjectOpenHashMap<PlacementVariable<*>, KOptional<*>>(0)
|
||||
|
||||
private fun <T> recursiveGet(index: PlacementVariable<T>): KOptional<T>? {
|
||||
return variables[index] as KOptional<T>? ?: parent?.recursiveGet(index)
|
||||
@ -56,23 +74,21 @@ class EnhancedPlacementContext {
|
||||
origin: ChunkPos,
|
||||
placer: Placer,
|
||||
) {
|
||||
this.level = level
|
||||
this.generator = generator
|
||||
this.random = random
|
||||
this.origin = origin
|
||||
this.placer = placer
|
||||
state = SharedState(
|
||||
level = level,
|
||||
generator = generator,
|
||||
random = random,
|
||||
origin = origin,
|
||||
placer = placer,
|
||||
vanillaContext = PlacementContext(level, generator, Optional.empty())
|
||||
)
|
||||
|
||||
vanillaContext = PlacementContext(level, generator, Optional.empty())
|
||||
parent = null
|
||||
}
|
||||
|
||||
private constructor(parent: EnhancedPlacementContext) {
|
||||
this.level = parent.level
|
||||
this.generator = parent.generator
|
||||
this.random = parent.random
|
||||
this.origin = parent.origin
|
||||
this.placer = parent.placer
|
||||
this.state = parent.state
|
||||
this.parent = parent
|
||||
this.vanillaContext = parent.vanillaContext
|
||||
}
|
||||
|
||||
fun push(): EnhancedPlacementContext {
|
||||
|
Loading…
Reference in New Issue
Block a user