1717
1818package com.lambda.graphics.renderer.esp
1919
20+ import com.lambda.event.events.RenderEvent
2021import com.lambda.event.events.TickEvent
2122import com.lambda.event.events.WorldEvent
2223import com.lambda.event.events.onStaticRender
2324import com.lambda.event.listener.SafeListener.Companion.listen
24- import com.lambda.event.listener.SafeListener.Companion.listenConcurrently
2525import com.lambda.module.modules.client.StyleEditor
2626import com.lambda.util.world.FastVector
2727import com.lambda.util.world.fastVectorOf
@@ -37,9 +37,7 @@ class ChunkedESP private constructor(
3737) {
3838 private val rendererMap = ConcurrentHashMap <Long , EspChunk >()
3939 private val WorldChunk .renderer
40- get() = rendererMap.getOrPut(pos.toLong()) {
41- EspChunk (this , this @ChunkedESP)
42- }
40+ get() = rendererMap.getOrPut(pos.toLong()) { EspChunk (this , this @ChunkedESP) }
4341
4442 private val uploadQueue = ConcurrentLinkedDeque < () -> Unit > ()
4543 private val rebuildQueue = ConcurrentLinkedDeque <EspChunk >()
@@ -52,38 +50,29 @@ class ChunkedESP private constructor(
5250 }
5351
5452 init {
55- listenConcurrently<WorldEvent .BlockUpdate .Client > { event ->
56- world.getWorldChunk(event.pos).renderer.notifyChunks()
57- }
58-
59- listenConcurrently<WorldEvent .ChunkEvent .Load > { event ->
60- event.chunk.renderer.notifyChunks()
61- }
53+ listen<WorldEvent .BlockUpdate .Client > { world.getWorldChunk(it.pos).renderer.notifyChunks() }
54+ listen<WorldEvent .ChunkEvent .Load > { it.chunk.renderer.notifyChunks() }
55+ listen<WorldEvent .ChunkEvent .Unload > { rendererMap.remove(it.chunk.pos.toLong())?.notifyChunks() }
6256
63- listenConcurrently<WorldEvent .ChunkEvent .Unload > { event ->
64- rendererMap.remove(event.chunk.pos.toLong())?.notifyChunks()
65- }
66-
67- owner.onStaticRender { builder ->
57+ owner.onStaticRender {
6858 if (++ ticks % StyleEditor .updateFrequency == 0 ) {
6959 val polls = minOf(StyleEditor .rebuildsPerTick, rebuildQueue.size)
7060
71- repeat(polls) {
72- rebuildQueue.poll()?.rebuild(builder)
73- }
61+ repeat(polls) { rebuildQueue.poll()?.rebuild() }
62+
7463 ticks = 0
7564 }
7665 }
7766
78- owner.listen<TickEvent . Pre > {
67+ owner.listen<RenderEvent . Upload > {
7968 if (uploadQueue.isEmpty()) return @listen
8069
8170 val polls = minOf(StyleEditor .uploadsPerTick, uploadQueue.size)
8271
83- repeat(polls) {
84- uploadQueue.poll()?.invoke()
85- }
72+ repeat(polls) { uploadQueue.poll()?.invoke() }
8673 }
74+
75+ owner.listen<RenderEvent .Render > { rendererMap.values.forEach { it.renderer.render() } }
8776 }
8877
8978 companion object {
@@ -93,29 +82,35 @@ class ChunkedESP private constructor(
9382 }
9483
9584 private class EspChunk (val chunk : WorldChunk , val owner : ChunkedESP ) {
96- val neighbors = listOf (1 to 0 , 0 to 1 , - 1 to 0 , 0 to - 1 ).map { ChunkPos (chunk.pos.x + it.first, chunk.pos.z + it.second) }
85+ var renderer = Treed (static = true )
86+ private val builder: ShapeBuilder
87+ get() = ShapeBuilder (renderer.faceBuilder, renderer.edgeBuilder)
88+
89+ val neighbors = listOf (1 to 0 , 0 to 1 , - 1 to 0 , 0 to - 1 )
90+ .map { ChunkPos (chunk.pos.x + it.first, chunk.pos.z + it.second) }
9791
9892 fun notifyChunks () {
9993 neighbors.forEach {
10094 owner.rendererMap[it.toLong()]?.let {
101- owner.rebuildQueue.apply {
102- if (! contains(it)) add(it)
103- }
95+ if (! owner.rebuildQueue.contains(it))
96+ owner.rebuildQueue.add(it)
10497 }
10598 }
10699 }
107100
108- fun rebuild (builder : ShapeBuilder ) =
109- iterateChunk { owner.update(builder, chunk.world, it) }
101+ fun rebuild () {
102+ renderer = Treed (static = true )
103+
104+ chunkIterator { owner.update(builder, chunk.world, it) }
110105
111- inline fun iterateChunk (crossinline block : (FastVector ) -> Unit ) = chunk.apply {
112- for (x in pos.startX.. pos.endX) {
113- for (z in pos.startZ.. pos.endZ) {
114- for (y in bottomY.. height) {
106+ owner.uploadQueue.add { renderer.upload() }
107+ }
108+
109+ inline fun chunkIterator (crossinline block : (FastVector ) -> Unit ) {
110+ for (x in chunk.pos.startX.. chunk.pos.endX)
111+ for (z in chunk.pos.startZ.. chunk.pos.endZ)
112+ for (y in chunk.bottomY.. chunk.height)
115113 block(fastVectorOf(x, y, z))
116- }
117- }
118- }
119114 }
120115 }
121116}
0 commit comments