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": {
"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>
+1
View File
@@ -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)")
+12 -5
View File
@@ -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
}
+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) {
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)
}
}