Skip to content

Commit

Permalink
configuration framework
Browse files Browse the repository at this point in the history
  • Loading branch information
SpaiR committed Jan 30, 2019
1 parent bfe8bd1 commit 10a97ba
Show file tree
Hide file tree
Showing 8 changed files with 177 additions and 7 deletions.
3 changes: 1 addition & 2 deletions Dockerfile
Original file line number Diff line number Diff line change
Expand Up @@ -9,14 +9,13 @@ WORKDIR /render
COPY --from=build /build/render/build/libs/render.jar .
COPY .revisions .
COPY render/src/main/compress.sh .
RUN chmod +x compress.sh

RUN apk update && \
apk add git pngquant && \
mkdir -p tmp/repo && \
git clone --progress https://github.com/TauCetiStation/TauCetiClassic.git tmp/repo && \
java -Xms1g -Xmx1g -jar render.jar && \
./compress.sh
chmod +x compress.sh && ./compress.sh

FROM oracle/graalvm-ce:1.0.0-rc11 as native
WORKDIR /native
Expand Down
1 change: 1 addition & 0 deletions render/build.gradle.kts
Original file line number Diff line number Diff line change
Expand Up @@ -14,6 +14,7 @@ application {
dependencies {
implementation(kotlin("stdlib-jdk8"))
implementation(group = "io.github.spair", name = "byond-dmm-util", version = "1.0.1")
implementation(group = "com.eclipsesource.minimal-json", name = "minimal-json", version = "0.9.5")
}

tasks {
Expand Down
90 changes: 90 additions & 0 deletions render/src/main/kotlin/io/github/spair/tauwebmap/configuration.kt
Original file line number Diff line number Diff line change
@@ -0,0 +1,90 @@
package io.github.spair.tauwebmap

import com.eclipsesource.json.Json
import com.eclipsesource.json.JsonObject

private const val CONFIG_FILE = "config.json"

private const val MORE_EQUAL_ENTRY = ">="
private const val MORE_ENTRY = ">"
private const val EQUAL_ENTRY = "=="
private const val LESS_ENTRY = "<"
private const val LESS_EQUAL_ENTRY = "<="

val RENDER_CONFIG = mutableMapOf<String, MutableList<String>>()

fun readConfigForRevisions(revisionList: List<String>) {
val configJson = Json.parse(readResource(CONFIG_FILE)).asObject()

configJson.entryForEach(MORE_EQUAL_ENTRY) { config ->
for (revision in revisionList) {
addToRenderConfig(revision, config)
if (config.getRevision() == revision) {
break
}
}
}
configJson.entryForEach(MORE_ENTRY) { config ->
for (revision in revisionList) {
if (config.getRevision() == revision) {
break
}
addToRenderConfig(revision, config)
}
}
configJson.entryForEach(EQUAL_ENTRY) { config ->
for (revision in revisionList) {
if (config.getRevision() == revision) {
addToRenderConfig(revision, config)
}
}
}
configJson.entryForEach(LESS_ENTRY) { config ->
for (revision in revisionList.reversed()) {
if (config.getRevision() == revision) {
break
}
addToRenderConfig(revision, config)
}
}
configJson.entryForEach(LESS_EQUAL_ENTRY) { config ->
for (revision in revisionList.reversed()) {
addToRenderConfig(revision, config)
if (config.getRevision() == revision) {
break
}
}
}
}

private fun addToRenderConfig(revision: String, config: JsonObject) {
if (config.renderExcluded(revision))
return
RENDER_CONFIG.getOrPut(revision) { mutableListOf() }.let { list ->
config.getRender().forEach { renderFileName ->
list.add(renderFileName.asString())
}
}
}

private fun JsonObject.entryForEach(entryName: String, action: (JsonObject) -> (Unit)) {
get(entryName)?.asArray()?.forEach { action(it.asObject()) }
}

private fun JsonObject.getRender() = get("render").asArray()
private fun JsonObject.getRevision() = get("revision").asString()

private fun JsonObject.renderExcluded(revision: String): Boolean {
val exclude = get("render_exclude")?.asArray()
if (exclude != null) {
for (excl in exclude) {
if (revision == excl.asString()) {
return true
}
}
}
return false
}

internal class Resource
fun readResource(path: String) = Resource::class.java.classLoader.getResource(path).readText()
25 changes: 21 additions & 4 deletions render/src/main/kotlin/io/github/spair/tauwebmap/render.kt
Original file line number Diff line number Diff line change
@@ -1,5 +1,6 @@
package io.github.spair.tauwebmap

import io.github.spair.byond.dme.Dme
import io.github.spair.byond.dme.parser.DmeParser
import io.github.spair.byond.dmm.Dmm
import io.github.spair.byond.dmm.drawer.DmmDrawer
Expand Down Expand Up @@ -31,16 +32,28 @@ private val IGNORE_TYPES = arrayOf("/turf/space", "/area", "/obj/effect/landmark
private val ZOOM_FACTORS = mapOf(3 to 8, 4 to 16, 5 to 32)
private val SCALE_FACTORS = mapOf(3 to 0.3, 4 to 0.6, 5 to 1.0)

private var CURRENT_REVISION = ""

fun main() {
val revisionList = mutableListOf<String>()

File(REVISIONS).forEachLine { line ->
val revision = line.split(" ")[1]
if (line.isNotBlank()) {
revisionList.add(line.split(" ")[1])
}
}

readConfigForRevisions(revisionList)

revisionList.forEach { revision ->
ProcessBuilder("git", "checkout", revision).directory(File(REPO_PATH)).start().waitFor()
renderRevision(revision)
}
}

private fun renderRevision(revision: String) {
println("Generating images for $revision:")
CURRENT_REVISION = revision
LAYERS.forEach { layer ->
print(" - $layer...")
renderLayer("data/maps/$revision/$layer", TYPES_TO_RENDER.getValue(layer))
Expand All @@ -57,10 +70,8 @@ private fun renderLayer(layerFolderPath: String, typesToUse: Array<String>) {
}
}

internal class Resource
private fun generateMapImage(typesToUse: Array<String>): BufferedImage {
val dme = DmeParser.parse(File(DME_PATH))
dme.mergeWithJson(Resource::class.java.classLoader.getResourceAsStream("render_config.json"))
val dme = DmeParser.parse(File(DME_PATH)).apply { mergeDmeWithConfigJsons(this) }
val dmmData = DmmReader.readMap(File(DMM_PATH))
val dmm = Dmm(dmmData, dme)

Expand All @@ -71,6 +82,12 @@ private fun generateMapImage(typesToUse: Array<String>): BufferedImage {
}
}

private fun mergeDmeWithConfigJsons(dme: Dme) {
RENDER_CONFIG[CURRENT_REVISION]?.forEach { filePath ->
dme.mergeWithJson(readResource(filePath))
}
}

private fun createSubImages(img: BufferedImage, zoomFolderPath: String, zoomFactor: Int, scaleFactor: Double) {
val imageToCrop: BufferedImage

Expand Down
16 changes: 16 additions & 0 deletions render/src/main/resources/config.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,16 @@
{
">=": [
{
"revision": "887f80dff",
"render": [
"common_render.json"
]
},
{
"revision": "1f995d5f7",
"render": [
"specific_render/from_1f995d5f7.json"
]
}
]
}
47 changes: 47 additions & 0 deletions render/src/main/resources/specific_render/from_1f995d5f7.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,47 @@
{
"definitions": [
{
"type": "/turf/simulated/floor",
"parent": "/turf/simulated",
"subtypes": [],
"vars": {
"plane": -1
}
},{
"type": "/obj/machinery/ai_slipper",
"parent": "/obj/machinery",
"subtypes": [],
"vars": {
"plane": -1
}
},{
"type": "/obj/machinery/hologram/holopad",
"parent": "/obj/machinery/hologram",
"subtypes": [],
"vars": {
"plane": -1
}
},{
"type": "/obj/machinery/igniter",
"parent": "/obj/machinery",
"subtypes": [],
"vars": {
"plane": -1
}
},{
"type": "/obj/structure/lattice",
"parent": "/obj/structure",
"subtypes": [],
"vars": {
"plane": -1
}
},{
"type": "/obj/structure/alien/weeds",
"parent": "/obj/structure/alien",
"subtypes": [],
"vars": {
"plane": -1
}
}
]
}
2 changes: 1 addition & 1 deletion ui/build.gradle
Original file line number Diff line number Diff line change
Expand Up @@ -40,7 +40,7 @@ task copyIndex(type: Copy) {
it.replace('@{version}', "${rootProject.version}-build:$currentTimeStamp")
}
filter {
it.replace('@{revisions}', file("../.revisions").text.replaceAll('\n', ','))
it.replace('@{revisions}', file("../.revisions").text.trim().replaceAll('\n', ','))
}
filter {
it.replace('@{style}', file('src/main/dist/style.min.css').text)
Expand Down

0 comments on commit 10a97ba

Please sign in to comment.