@@ -3,8 +3,6 @@ package mapScript
33import mindustry.ctype.ContentType
44import mindustry.game.EventType.Trigger
55import mindustry.gen.Iconc
6- import mindustry.world.Block
7- import mindustry.world.Tile
86import mindustry.world.blocks.environment.Floor
97
108name = " 填海造陆"
@@ -17,60 +15,6 @@ modeIntroduce(
1715""" .trimIndent()
1816)
1917
20- var myTiles = emptyList<IslandTile >()
21- val waterFloor by autoInit {
22- state.rules.tags.get(" @waterFloor" )
23- ?.let { content.getByName(ContentType .block, it) as ? Floor }
24- ? : Blocks .deepwater.asFloor()!!
25- }
26-
27- inner class IslandTile (val tile : Tile ) {
28- val floor: Floor = tile.floor()
29- val overlay: Block = tile.overlay()
30- var discovered = false
31-
32- init {
33- if (overlay != Blocks .spawn && tile.block() == Blocks .air) {
34- tile.setBlock(Blocks .stone)// remove ore
35- tile.setFloor(waterFloor)
36- tile.setAir()
37- } else
38- discovered = true
39- }
40-
41- // use in init stage, no net sync
42- fun discoverInit () {
43- if (discovered) return
44- discovered = true
45- tile.setBlock(Blocks .stone)// remove ore
46- tile.setFloor(floor)
47- tile.setOverlay(overlay)
48- tile.setAir()
49- }
50-
51- fun discover (): Boolean {
52- if (discovered) return false
53- discovered = true
54- tile.setFloorNet(floor, overlay)
55- if (tile.block() == Blocks .air)
56- tile.setAir()
57- if (floor.isDeep)// auto discover
58- repeat(4 ) {
59- val tile = tile.nearby(it) ? : return @repeat
60- discoverQueue.add(myTiles[tile.array()])
61- }
62- return true
63- }
64-
65- fun unDiscover (): Boolean {
66- if (! discovered) return false
67- discovered = false
68- tile.setBlock(Blocks .stone)// remove ore
69- tile.setFloorNet(waterFloor, Blocks .air)
70- tile.setAir()
71- return true
72- }
73- }
7418
7519val blocksToOpen = mapOf (
7620 Blocks .mechanicalPump to 1 ,
@@ -79,18 +23,21 @@ val blocksToOpen = mapOf(
7923)
8024
8125onEnable {
82- myTiles = world.tiles.map(::IslandTile )
26+ IslandTile .waterFloor = state.rules.tags.get(" @waterFloor" )
27+ ?.let { content.getByName(ContentType .block, it) as ? Floor }
28+ ? : Blocks .deepwater.asFloor()!!
29+ IslandTile .tiles = world.tiles.map(::IslandTile )
8330 Groups .build.filter { it.block in blocksToOpen }.forEach {
8431 it.tile.setAir()
8532 it.tile.circle(blocksToOpen[it.block]!! ) { x, y ->
86- myTiles [world.packArray(x, y)].discoverInit()
33+ IslandTile .tiles [world.packArray(x, y)].discoverInit()
8734 }
8835 }
8936}
9037
9138onDisable {
92- discoverQueue.clear()
93- myTiles = emptyList()
39+ IslandTile . discoverQueue.clear()
40+ IslandTile .tiles = emptyList()
9441}
9542
9643listen<EventType .BlockBuildEndEvent > {
@@ -99,31 +46,30 @@ listen<EventType.BlockBuildEndEvent> {
9946 when (val block = tile.block()) {
10047 in blocksToOpen -> {
10148 var any = false
102- tile.getLinkedTiles { if (myTiles [it.array()].discover()) any = true }
49+ tile.getLinkedTiles { if (IslandTile .tiles [it.array()].discover()) any = true }
10350 if (any) {
10451 launch(Dispatchers .game) {
10552 delay(100 )
10653 Call .deconstructFinish(tile, block, null )
10754 }
10855 tile.circle(blocksToOpen[block]!! ) { x, y ->
109- discoverQueue.add(myTiles [world.packArray(x, y)])
56+ IslandTile . discoverQueue.add(IslandTile .tiles [world.packArray(x, y)])
11057 }
11158 }
11259 }
11360
11461 Blocks .shockMine ->
115- if (myTiles [tile.array()].unDiscover())
62+ if (IslandTile .tiles [tile.array()].unDiscover())
11663 launch(Dispatchers .game) {
11764 delay(100 )
11865 Call .deconstructFinish(tile, block, null )
11966 }
12067 }
12168}
12269
123- val discoverQueue = mutableListOf<IslandTile >()
12470listen(Trigger .update) {
12571 repeat(5 ) {
126- val tile = discoverQueue.removeFirstOrNull() ? : return @listen
72+ val tile = IslandTile . discoverQueue.removeFirstOrNull() ? : return @listen
12773 tile.discover()
12874 }
12975}
0 commit comments