Skip to content

Commit 081c84f

Browse files
committed
big refactor
1 parent b59ffe8 commit 081c84f

File tree

8 files changed

+71
-97
lines changed

8 files changed

+71
-97
lines changed

src/main/kotlin/com/lambda/interaction/construction/simulation/BuildSimulator.kt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -34,7 +34,7 @@ import kotlinx.coroutines.runBlocking
3434
import kotlinx.coroutines.supervisorScope
3535
import net.minecraft.util.math.Vec3d
3636

37-
object BuildSimulator : SimChecker<PostSimResult>() {
37+
object BuildSimulator : Sim<PostSimResult>() {
3838
context(automatedSafeContext: AutomatedSafeContext)
3939
fun Blueprint.simulate(
4040
pov: Vec3d = automatedSafeContext.player.eyePos

src/main/kotlin/com/lambda/interaction/construction/simulation/ISimInfo.kt

Lines changed: 12 additions & 30 deletions
Original file line numberDiff line numberDiff line change
@@ -22,83 +22,65 @@ import com.lambda.context.AutomatedSafeContext
2222
import com.lambda.interaction.construction.processing.PreProcessingInfo
2323
import com.lambda.interaction.construction.processing.ProcessorRegistry.getProcessingInfo
2424
import com.lambda.interaction.construction.result.BuildResult
25-
import com.lambda.interaction.construction.result.Dependable
26-
import com.lambda.interaction.construction.simulation.checks.RequirementChecker.checkRequirements
25+
import com.lambda.interaction.construction.simulation.checks.BasicChecker.hasBasicRequirements
2726
import com.lambda.interaction.construction.verify.TargetState
2827
import net.minecraft.block.BlockState
2928
import net.minecraft.util.math.BlockPos
3029
import net.minecraft.util.math.Vec3d
3130
import java.util.*
3231

33-
@DslMarker
34-
annotation class SimBuilderDsl
35-
3632
interface ISimInfo : Automated {
3733
val pos: BlockPos
3834
val state: BlockState
3935
val targetState: TargetState
4036
val preProcessing: PreProcessingInfo
4137
val pov: Vec3d
4238
val concurrentResults: MutableSet<BuildResult>
43-
val dependencyStack: Stack<Dependable>
39+
val dependencyStack: Stack<Sim<*>>
4440

4541
companion object {
46-
@SimBuilderDsl
47-
private suspend fun ISimInfo.sim(
48-
dependable: Dependable?,
49-
simBuilder: suspend context(Dependable?) SimBuilder.() -> Unit
50-
) = SimBuilder(this).run { with(dependable) { simBuilder() } }
51-
52-
@SimBuilderDsl
42+
@SimDsl
43+
context(_: BuildSimulator)
5344
suspend fun AutomatedSafeContext.sim(
5445
pos: BlockPos,
5546
state: BlockState,
5647
targetState: TargetState,
5748
pov: Vec3d,
5849
concurrentResults: MutableSet<BuildResult>,
59-
simBuilder: suspend context(Dependable?) SimBuilder.() -> Unit
50+
simBuilder: suspend ISimInfo.() -> Unit
6051
) {
6152
SimInfo(
6253
pos, state, targetState,
6354
targetState.getProcessingInfo(pos) ?: return,
6455
pov, Stack(), concurrentResults, this
65-
).takeIf { it.checkRequirements() }?.sim(null, simBuilder)
56+
).takeIf { it.hasBasicRequirements() }?.run { simBuilder() }
6657
}
6758

68-
@SimBuilderDsl
69-
context(_: AutomatedSafeContext, dependable: Dependable)
59+
@SimDsl
60+
context(_: AutomatedSafeContext, dependent: Sim<*>)
7061
suspend fun ISimInfo.sim(
7162
pos: BlockPos = this.pos,
7263
state: BlockState = this.state,
7364
targetState: TargetState = this.targetState,
7465
pov: Vec3d = this.pov,
75-
simBuilder: suspend context(Dependable?) SimBuilder.() -> Unit
66+
simBuilder: suspend ISimInfo.() -> Unit
7667
) {
7768
SimInfo(
7869
pos, state, targetState,
7970
targetState.getProcessingInfo(pos) ?: return,
8071
pov, dependencyStack, concurrentResults, this
81-
).takeIf { it.checkRequirements() }?.sim(dependable, simBuilder)
72+
).takeIf { it.hasBasicRequirements() }?.run { simBuilder() }
8273
}
83-
84-
@SimBuilderDsl
85-
context(dependable: Dependable)
86-
suspend fun ISimInfo.sim(
87-
simBuilder: suspend context(Dependable?) SimBuilder.() -> Unit
88-
) = sim(dependable, simBuilder)
8974
}
9075
}
9176

92-
@SimBuilderDsl
9377
data class SimInfo(
9478
override val pos: BlockPos,
9579
override val state: BlockState,
9680
override val targetState: TargetState,
9781
override val preProcessing: PreProcessingInfo,
9882
override val pov: Vec3d,
99-
override val dependencyStack: Stack<Dependable>,
83+
override val dependencyStack: Stack<Sim<*>>,
10084
override val concurrentResults: MutableSet<BuildResult>,
10185
private val automated: Automated
102-
) : ISimInfo, Automated by automated
103-
104-
class SimBuilder(simInfo: ISimInfo) : ISimInfo by simInfo
86+
) : ISimInfo, Automated by automated

src/main/kotlin/com/lambda/interaction/construction/result/Dependable.kt renamed to src/main/kotlin/com/lambda/interaction/construction/simulation/Results.kt

Lines changed: 17 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -15,10 +15,23 @@
1515
* along with this program. If not, see <http://www.gnu.org/licenses/>.
1616
*/
1717

18-
package com.lambda.interaction.construction.result
18+
package com.lambda.interaction.construction.simulation
1919

20-
import com.lambda.interaction.construction.simulation.ISimInfo
20+
import com.lambda.interaction.construction.result.BuildResult
21+
import com.lambda.interaction.construction.result.results.GenericResult
2122

22-
interface Dependable : ISimInfo {
23-
fun asDependent(buildResult: BuildResult): BuildResult
23+
@SimDsl
24+
interface Results<T : BuildResult> {
25+
fun ISimInfo.result(result: GenericResult) = addResult(result)
26+
fun ISimInfo.result(result: T) = addResult(result)
27+
28+
private fun ISimInfo.addResult(result: BuildResult) {
29+
concurrentResults.add(
30+
dependencyStack
31+
.asReversed()
32+
.fold(result) { acc, dependable ->
33+
with(dependable) { dependentUpon(acc) }
34+
}
35+
)
36+
}
2437
}

src/main/kotlin/com/lambda/interaction/construction/simulation/SimChecker.kt renamed to src/main/kotlin/com/lambda/interaction/construction/simulation/Sim.kt

Lines changed: 11 additions & 25 deletions
Original file line numberDiff line numberDiff line change
@@ -20,7 +20,6 @@ package com.lambda.interaction.construction.simulation
2020
import com.lambda.context.AutomationConfig.maxSimDependencies
2121
import com.lambda.interaction.construction.processing.PreProcessingInfo
2222
import com.lambda.interaction.construction.result.BuildResult
23-
import com.lambda.interaction.construction.result.Dependable
2423
import com.lambda.interaction.construction.result.results.GenericResult
2524
import com.lambda.interaction.request.rotating.Rotation.Companion.rotationTo
2625
import com.lambda.interaction.request.rotating.visibilty.VisibilityChecker.CheckedHit
@@ -40,32 +39,19 @@ import net.minecraft.util.shape.VoxelShape
4039
import kotlin.math.pow
4140

4241
@DslMarker
43-
annotation class SimCheckerDsl
44-
45-
@SimCheckerDsl
46-
abstract class SimChecker<T : BuildResult> {
47-
protected suspend fun ISimInfo.withDependable(dependable: Dependable?, block: suspend () -> Unit) {
48-
if (dependable == null) dependencyStack.clear()
49-
else {
50-
if (dependencyStack.size >= maxSimDependencies) return
51-
dependencyStack.push(dependable)
52-
}
53-
block()
54-
if (dependable != null) dependencyStack.pop()
55-
}
42+
annotation class SimDsl
5643

57-
fun ISimInfo.result(result: GenericResult) = addResult(result)
58-
fun ISimInfo.result(result: T) = addResult(result)
44+
@SimDsl
45+
abstract class Sim<T : BuildResult> : Results<T> {
46+
@SimDsl
47+
open fun dependentUpon(buildResult: BuildResult): BuildResult = buildResult
5948

60-
private fun ISimInfo.addResult(result: BuildResult) {
61-
if (this@SimChecker is BuildSimulator) concurrentResults.add(result)
62-
else concurrentResults.add(
63-
dependencyStack
64-
.asReversed()
65-
.fold(result) { acc, dependable ->
66-
with(dependable) { asDependent(acc) }
67-
}
68-
)
49+
protected suspend fun ISimInfo.withDependent(dependent: Sim<*>, block: suspend () -> Unit) {
50+
// +1 because the build sim counts as a dependent
51+
if (dependencyStack.size >= maxSimDependencies + 1) return
52+
dependencyStack.push(dependent)
53+
block()
54+
dependencyStack.pop()
6955
}
7056

7157
suspend fun ISimInfo.scanShape(

src/main/kotlin/com/lambda/interaction/construction/simulation/checks/RequirementChecker.kt renamed to src/main/kotlin/com/lambda/interaction/construction/simulation/checks/BasicChecker.kt

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -20,18 +20,18 @@ package com.lambda.interaction.construction.simulation.checks
2020
import com.lambda.context.AutomatedSafeContext
2121
import com.lambda.interaction.construction.result.results.GenericResult
2222
import com.lambda.interaction.construction.result.results.PreSimResult
23-
import com.lambda.interaction.construction.simulation.SimBuilderDsl
24-
import com.lambda.interaction.construction.simulation.SimChecker
23+
import com.lambda.interaction.construction.simulation.Results
24+
import com.lambda.interaction.construction.simulation.SimDsl
2525
import com.lambda.interaction.construction.simulation.SimInfo
2626
import com.lambda.interaction.construction.verify.TargetState
2727
import com.lambda.util.player.gamemode
2828
import com.lambda.util.world.WorldUtils.isLoaded
2929
import net.minecraft.block.OperatorBlock
3030

31-
object RequirementChecker : SimChecker<PreSimResult>() {
32-
@SimBuilderDsl
31+
object BasicChecker : Results<PreSimResult> {
32+
@SimDsl
3333
context(automatedSafeContext: AutomatedSafeContext)
34-
fun SimInfo.checkRequirements(): Boolean = with(automatedSafeContext) {
34+
fun SimInfo.hasBasicRequirements(): Boolean = with(automatedSafeContext) {
3535
// the chunk is not loaded
3636
if (!isLoaded(pos)) {
3737
result(PreSimResult.ChunkNotLoaded(pos))

src/main/kotlin/com/lambda/interaction/construction/simulation/checks/BreakSim.kt

Lines changed: 8 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -20,14 +20,12 @@ package com.lambda.interaction.construction.simulation.checks
2020
import com.lambda.context.AutomatedSafeContext
2121
import com.lambda.interaction.construction.context.BreakContext
2222
import com.lambda.interaction.construction.result.BuildResult
23-
import com.lambda.interaction.construction.result.Dependable
2423
import com.lambda.interaction.construction.result.results.BreakResult
2524
import com.lambda.interaction.construction.result.results.GenericResult
2625
import com.lambda.interaction.construction.simulation.ISimInfo
2726
import com.lambda.interaction.construction.simulation.ISimInfo.Companion.sim
28-
import com.lambda.interaction.construction.simulation.SimBuilder
29-
import com.lambda.interaction.construction.simulation.SimBuilderDsl
30-
import com.lambda.interaction.construction.simulation.SimChecker
27+
import com.lambda.interaction.construction.simulation.Sim
28+
import com.lambda.interaction.construction.simulation.SimDsl
3129
import com.lambda.interaction.construction.simulation.checks.PlaceSim.Companion.simPlacement
3230
import com.lambda.interaction.construction.verify.TargetState
3331
import com.lambda.interaction.material.ContainerSelection.Companion.selectContainer
@@ -67,18 +65,18 @@ import net.minecraft.util.math.Direction
6765
import kotlin.jvm.optionals.getOrNull
6866

6967
class BreakSim private constructor(simInfo: ISimInfo)
70-
: SimChecker<BreakResult>(), Dependable,
68+
: Sim<BreakResult>(),
7169
ISimInfo by simInfo
7270
{
73-
override fun asDependent(buildResult: BuildResult) =
71+
override fun dependentUpon(buildResult: BuildResult) =
7472
BreakResult.Dependency(pos, buildResult)
7573

7674
companion object {
77-
@SimBuilderDsl
78-
context(automatedSafeContext: AutomatedSafeContext, dependable: Dependable?)
79-
suspend fun SimBuilder.simBreak() =
75+
@SimDsl
76+
context(automatedSafeContext: AutomatedSafeContext, dependent: Sim<*>)
77+
suspend fun ISimInfo.simBreak() =
8078
BreakSim(this).run {
81-
withDependable(dependable) {
79+
withDependent(dependent) {
8280
automatedSafeContext.simBreaks()
8381
}
8482
}

src/main/kotlin/com/lambda/interaction/construction/simulation/checks/PlaceSim.kt

Lines changed: 8 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -20,14 +20,12 @@ package com.lambda.interaction.construction.simulation.checks
2020
import com.lambda.context.AutomatedSafeContext
2121
import com.lambda.interaction.construction.context.PlaceContext
2222
import com.lambda.interaction.construction.result.BuildResult
23-
import com.lambda.interaction.construction.result.Dependable
2423
import com.lambda.interaction.construction.result.results.GenericResult
2524
import com.lambda.interaction.construction.result.results.PlaceResult
2625
import com.lambda.interaction.construction.simulation.ISimInfo
2726
import com.lambda.interaction.construction.simulation.ISimInfo.Companion.sim
28-
import com.lambda.interaction.construction.simulation.SimBuilder
29-
import com.lambda.interaction.construction.simulation.SimBuilderDsl
30-
import com.lambda.interaction.construction.simulation.SimChecker
27+
import com.lambda.interaction.construction.simulation.Sim
28+
import com.lambda.interaction.construction.simulation.SimDsl
3129
import com.lambda.interaction.construction.simulation.checks.BreakSim.Companion.simBreak
3230
import com.lambda.interaction.construction.simulation.checks.PlaceSim.RotatePlaceTest.Companion.rotatePlaceTest
3331
import com.lambda.interaction.construction.verify.TargetState
@@ -70,18 +68,18 @@ import net.minecraft.util.math.Direction
7068
import net.minecraft.util.shape.VoxelShapes
7169

7270
class PlaceSim private constructor(simInfo: ISimInfo)
73-
: SimChecker<PlaceResult>(), Dependable,
71+
: Sim<PlaceResult>(),
7472
ISimInfo by simInfo
7573
{
76-
override fun asDependent(buildResult: BuildResult) =
74+
override fun dependentUpon(buildResult: BuildResult) =
7775
PlaceResult.Dependency(pos, buildResult)
7876

7977
companion object {
80-
context(automatedSafeContext: AutomatedSafeContext, dependable: Dependable?)
81-
@SimBuilderDsl
82-
suspend fun SimBuilder.simPlacement() =
78+
context(automatedSafeContext: AutomatedSafeContext, dependent: Sim<*>)
79+
@SimDsl
80+
suspend fun ISimInfo.simPlacement() =
8381
PlaceSim(this).run {
84-
withDependable(dependable) {
82+
withDependent(dependent) {
8583
automatedSafeContext.simPlacements()
8684
}
8785
}

src/main/kotlin/com/lambda/interaction/construction/simulation/checks/PostProcessingSim.kt

Lines changed: 9 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -20,14 +20,11 @@ package com.lambda.interaction.construction.simulation.checks
2020
import com.lambda.context.AutomatedSafeContext
2121
import com.lambda.interaction.construction.context.InteractionContext
2222
import com.lambda.interaction.construction.result.BuildResult
23-
import com.lambda.interaction.construction.result.Dependable
2423
import com.lambda.interaction.construction.result.results.GenericResult
2524
import com.lambda.interaction.construction.result.results.InteractResult
2625
import com.lambda.interaction.construction.simulation.ISimInfo
27-
import com.lambda.interaction.construction.simulation.ISimInfo.Companion.sim
28-
import com.lambda.interaction.construction.simulation.SimBuilder
29-
import com.lambda.interaction.construction.simulation.SimBuilderDsl
30-
import com.lambda.interaction.construction.simulation.SimChecker
26+
import com.lambda.interaction.construction.simulation.Sim
27+
import com.lambda.interaction.construction.simulation.SimDsl
3128
import com.lambda.interaction.construction.simulation.checks.PlaceSim.Companion.simPlacement
3229
import com.lambda.interaction.construction.verify.TargetState
3330
import com.lambda.interaction.material.ContainerSelection.Companion.selectContainer
@@ -46,18 +43,18 @@ import net.minecraft.state.property.Properties
4643
import net.minecraft.util.math.Direction
4744

4845
class PostProcessingSim private constructor(simInfo: ISimInfo)
49-
: SimChecker<InteractResult>(), Dependable,
46+
: Sim<InteractResult>(),
5047
ISimInfo by simInfo
5148
{
52-
override fun asDependent(buildResult: BuildResult) =
49+
override fun dependentUpon(buildResult: BuildResult) =
5350
InteractResult.Dependency(pos, buildResult)
5451

5552
companion object {
56-
context(automatedSafeContext: AutomatedSafeContext, dependable: Dependable?)
57-
@SimBuilderDsl
58-
suspend fun SimBuilder.simPostProcessing() =
53+
context(automatedSafeContext: AutomatedSafeContext, dependent: Sim<*>)
54+
@SimDsl
55+
suspend fun ISimInfo.simPostProcessing() =
5956
PostProcessingSim(this).run {
60-
withDependable(dependable) {
57+
withDependent(dependent) {
6158
automatedSafeContext.simPostProcessing()
6259
}
6360
}
@@ -99,7 +96,7 @@ class PostProcessingSim private constructor(simInfo: ISimInfo)
9996
simInteraction(expectedState)
10097
}
10198

102-
Properties.SLAB_TYPE -> sim { simPlacement() }
99+
Properties.SLAB_TYPE -> simPlacement()
103100
}
104101
}
105102
}

0 commit comments

Comments
 (0)