format room config file changed to xml

This commit is contained in:
MaximZaitsev
2016-09-06 17:52:09 +03:00
parent ed42613479
commit 0bfbc0e50a
6 changed files with 39 additions and 34 deletions
+2 -1
View File
@@ -12,6 +12,7 @@
"devDependencies": { "devDependencies": {
"udev": "^0.3.0", "udev": "^0.3.0",
"commander": "^2.9.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>
+1
View File
@@ -16,6 +16,7 @@ val mainServerPort = 7925
val config = Config() val config = Config()
val fs: dynamic = require("fs") val fs: dynamic = require("fs")
fun main(args: Array<String>) { fun main(args: Array<String>) {
if (!config.loadConfig()) { if (!config.loadConfig()) {
println("incorrect config format!") println("incorrect config format!")
js("process.exit(1)") js("process.exit(1)")
+12 -5
View File
@@ -1,6 +1,7 @@
package room package room
import geometry.Line import geometry.Line
import require
class Room() { class Room() {
@@ -12,12 +13,18 @@ class Room() {
companion object { companion object {
fun roomFromString(roomString: String): Room? { 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() val result = Room()
roomString.split("\n").forEach { wallString -> for (i in 0..(parseInt(wallsArray.length) - 1)) {
if (!wallString.equals("")) { val wall = Wall.wallFromXml(wallsArray[i]) ?: return null
val wall = Wall.wallFromString(wallString) ?: return null result.walls.add(wall)
result.walls.add(wall)
}
} }
return result return result
} }
+15 -23
View File
@@ -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) { class Wall constructor(val line: Line, val xFrom: Int, val xTo: Int, val yFrom: Int, val yTo: Int) {
companion object { companion object {
fun wallFromString(wall: String): Wall? { fun wallFromXml(wall: dynamic): Wall? {
val points = wall.replace(" ", "").split(",") val points = wall.attributes
var xFrom = 0 val startX: Int
var xTo = 0 val endX: Int
var yTo = 0 val endY: Int
var yFrom = 0 val startY: Int
points.forEach { try {
val keyValue = it.split(":") startX = parseInt(points.startX)
if (keyValue.size != 2) { startY = parseInt(points.startY)
return null endX = parseInt(points.endX)
} endY = parseInt(points.endY)
try { } catch (e: NumberFormatException) {
when (keyValue[0]) { return null
"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
}
} }
val line = Line((yFrom - yTo).toDouble(), (xTo - xFrom).toDouble(), (xFrom * yTo - yFrom * xTo).toDouble()) val line = Line((startY - endY).toDouble(), (endX - startX).toDouble(), (startX * endY - startY * endX).toDouble())
return Wall(line, xFrom, xTo, yFrom, yTo) return Wall(line, startX, endX, startY, endY)
} }
} }