|
|
@ -1,12 +1,10 @@
|
|
|
|
package technology.zim
|
|
|
|
package technology.zim
|
|
|
|
|
|
|
|
|
|
|
|
import technology.zim.data.Directions
|
|
|
|
|
|
|
|
import technology.zim.data.Tile
|
|
|
|
import technology.zim.data.Tile
|
|
|
|
import technology.zim.data.TileProperties
|
|
|
|
import technology.zim.data.TileProperties
|
|
|
|
import technology.zim.data.WorldData
|
|
|
|
import technology.zim.data.WorldData
|
|
|
|
import java.util.*
|
|
|
|
import java.util.*
|
|
|
|
import technology.zim.data.Directions.*
|
|
|
|
import technology.zim.data.Directions.*
|
|
|
|
import technology.zim.data.TileNavigatedArray
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
//Singleton object containing a set of tiles
|
|
|
|
//Singleton object containing a set of tiles
|
|
|
|
//Has helper functions included
|
|
|
|
//Has helper functions included
|
|
|
@ -21,7 +19,7 @@ import technology.zim.data.TileNavigatedArray
|
|
|
|
|
|
|
|
|
|
|
|
object World {
|
|
|
|
object World {
|
|
|
|
//Default size should be 10
|
|
|
|
//Default size should be 10
|
|
|
|
val tiles = TileNavigatedArray<TileProperties>()
|
|
|
|
val tiles = WorldData(ArrayList<ArrayList<TileProperties>>())
|
|
|
|
var sizeX = 10 //Default size
|
|
|
|
var sizeX = 10 //Default size
|
|
|
|
var sizeY = 10
|
|
|
|
var sizeY = 10
|
|
|
|
const val ANSI_RESET = "\u001B[0m"
|
|
|
|
const val ANSI_RESET = "\u001B[0m"
|
|
|
@ -36,11 +34,11 @@ object World {
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
fun update(tile: Tile, to: TileProperties) {
|
|
|
|
fun update(tile: Tile, to: TileProperties) {
|
|
|
|
tiles.set(tile, to)
|
|
|
|
tiles.value[tile.x()][tile.y()] = to
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
fun get(tile: Tile): TileProperties {
|
|
|
|
fun get(tile: Tile): TileProperties {
|
|
|
|
return tiles.get(tile)?: TileProperties(0)
|
|
|
|
return tiles.value[tile.x()][tile.y()]
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
//Returns a coordinate pair
|
|
|
|
//Returns a coordinate pair
|
|
|
@ -51,29 +49,20 @@ object World {
|
|
|
|
fun setSize(x: Int, y: Int) {
|
|
|
|
fun setSize(x: Int, y: Int) {
|
|
|
|
sizeX = x
|
|
|
|
sizeX = x
|
|
|
|
sizeY = y
|
|
|
|
sizeY = y
|
|
|
|
tiles.resize(x, y)
|
|
|
|
tiles.setSize(x, y)
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
//Accepts a list of directions, removes those directions from every TileProperties in WorldData
|
|
|
|
//TODO: https://en.wikipedia.org/wiki/Box-drawing_characters
|
|
|
|
fun scrubDirections(rem: List<Directions>) {
|
|
|
|
//^ make the maze look like a maze
|
|
|
|
var mask = rem.fold(0) { sum, element -> sum + element.dir}
|
|
|
|
|
|
|
|
mask = mask.inv()
|
|
|
|
|
|
|
|
tiles.forEachIndexed {
|
|
|
|
|
|
|
|
index, tile ->
|
|
|
|
|
|
|
|
tiles[index] = TileProperties((tile?:TileProperties(0)).connections and(mask))
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
override fun toString(): String {
|
|
|
|
override fun toString(): String {
|
|
|
|
|
|
|
|
|
|
|
|
val str = StringBuilder()
|
|
|
|
val str = StringBuilder()
|
|
|
|
var inPath = false
|
|
|
|
var inPath = false
|
|
|
|
var checked = false
|
|
|
|
var checked = false
|
|
|
|
//Reading left to right, top to bottom - can do a simple for each on the rows
|
|
|
|
//Reading left to right, top to bottom - can do a simple for each on the rows
|
|
|
|
for (y in 0..sizeY - 1) {
|
|
|
|
for (y in 0..tiles.value[0].size - 1) {
|
|
|
|
//Upper line: Print each tile, print right-hand connections
|
|
|
|
//Upper line: Print each tile, print right-hand connections
|
|
|
|
for (x in 0..sizeX - 1) {
|
|
|
|
for (x in 0..tiles.value[0].size - 1) {
|
|
|
|
if(get(Tile(x, y)).connections and(INPATH.dir) != 0)
|
|
|
|
if(get(Tile(x, y)).connections and(INPATH.dir) != 0)
|
|
|
|
inPath = true
|
|
|
|
inPath = true
|
|
|
|
else if (get(Tile(x, y)).connections and(FRONTIER.dir) != 0)
|
|
|
|
else if (get(Tile(x, y)).connections and(FRONTIER.dir) != 0)
|
|
|
|