format room config file changed to xml
This commit is contained in:
@@ -12,6 +12,7 @@
|
||||
"devDependencies": {
|
||||
"udev": "^0.3.0",
|
||||
"commander": "^2.9.0",
|
||||
"protobufjs": "^5.0.1"
|
||||
"protobufjs": "^5.0.1",
|
||||
"xml-parser": "^1.2.1"
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1,5 +0,0 @@
|
||||
xFrom: 200, yFrom: 300, xTo: -150, yTo: 300
|
||||
xFrom: -150, yFrom: 300, xTo: -150, yTo: -45
|
||||
xFrom: -150, yFrom: -45, xTo: 200, yTo: -45
|
||||
xFrom: 200, yFrom: -45, xTo: 200, yTo: 300
|
||||
|
||||
@@ -0,0 +1,9 @@
|
||||
<room>
|
||||
<walls>
|
||||
<wall startX="200" startY="300" endX="-150" endY="300"/>
|
||||
<wall startX="-150" startY="300" endX="-150" endY="-45"/>
|
||||
<wall startX="-150" startY="-45" endX="200" endY="-45"/>
|
||||
<wall startX="200" startY="-45" endX="200" endY="300"/>
|
||||
</walls>
|
||||
</room>
|
||||
|
||||
@@ -16,6 +16,7 @@ val mainServerPort = 7925
|
||||
val config = Config()
|
||||
val fs: dynamic = require("fs")
|
||||
fun main(args: Array<String>) {
|
||||
|
||||
if (!config.loadConfig()) {
|
||||
println("incorrect config format!")
|
||||
js("process.exit(1)")
|
||||
|
||||
@@ -1,6 +1,7 @@
|
||||
package room
|
||||
|
||||
import geometry.Line
|
||||
import require
|
||||
|
||||
class Room() {
|
||||
|
||||
@@ -12,12 +13,18 @@ class Room() {
|
||||
|
||||
companion object {
|
||||
fun roomFromString(roomString: String): Room? {
|
||||
val xmlParser = require("xml-parser")
|
||||
val xmlObject = xmlParser(roomString)
|
||||
val wallsArray: dynamic
|
||||
try {
|
||||
wallsArray = xmlObject.root.children[0].children
|
||||
} catch (e: Exception) {
|
||||
return null
|
||||
}
|
||||
val result = Room()
|
||||
roomString.split("\n").forEach { wallString ->
|
||||
if (!wallString.equals("")) {
|
||||
val wall = Wall.wallFromString(wallString) ?: return null
|
||||
result.walls.add(wall)
|
||||
}
|
||||
for (i in 0..(parseInt(wallsArray.length) - 1)) {
|
||||
val wall = Wall.wallFromXml(wallsArray[i]) ?: return null
|
||||
result.walls.add(wall)
|
||||
}
|
||||
return result
|
||||
}
|
||||
|
||||
@@ -5,30 +5,22 @@ import geometry.Line
|
||||
class Wall constructor(val line: Line, val xFrom: Int, val xTo: Int, val yFrom: Int, val yTo: Int) {
|
||||
|
||||
companion object {
|
||||
fun wallFromString(wall: String): Wall? {
|
||||
val points = wall.replace(" ", "").split(",")
|
||||
var xFrom = 0
|
||||
var xTo = 0
|
||||
var yTo = 0
|
||||
var yFrom = 0
|
||||
points.forEach {
|
||||
val keyValue = it.split(":")
|
||||
if (keyValue.size != 2) {
|
||||
return null
|
||||
}
|
||||
try {
|
||||
when (keyValue[0]) {
|
||||
"xFrom" -> xFrom = parseInt(keyValue[1])
|
||||
"yFrom" -> yFrom = parseInt(keyValue[1])
|
||||
"xTo" -> xTo = parseInt(keyValue[1])
|
||||
"yTo" -> yTo = parseInt(keyValue[1])
|
||||
}
|
||||
} catch (e: Exception) {
|
||||
return null
|
||||
}
|
||||
fun wallFromXml(wall: dynamic): Wall? {
|
||||
val points = wall.attributes
|
||||
val startX: Int
|
||||
val endX: Int
|
||||
val endY: Int
|
||||
val startY: Int
|
||||
try {
|
||||
startX = parseInt(points.startX)
|
||||
startY = parseInt(points.startY)
|
||||
endX = parseInt(points.endX)
|
||||
endY = parseInt(points.endY)
|
||||
} catch (e: NumberFormatException) {
|
||||
return null
|
||||
}
|
||||
val line = Line((yFrom - yTo).toDouble(), (xTo - xFrom).toDouble(), (xFrom * yTo - yFrom * xTo).toDouble())
|
||||
return Wall(line, xFrom, xTo, yFrom, yTo)
|
||||
val line = Line((startY - endY).toDouble(), (endX - startX).toDouble(), (startX * endY - startY * endX).toDouble())
|
||||
return Wall(line, startX, endX, startY, endY)
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user