Merge branch 'feature/#108-spine-skins'
This commit is contained in:
commit
b967f00c29
|
@ -2,6 +2,8 @@
|
||||||
|
|
||||||
## Unreleased
|
## Unreleased
|
||||||
|
|
||||||
|
* **Added** support for skinning in Rhubarb for Spine ([issue #108](https://github.com/DanielSWolf/rhubarb-lip-sync/issues/108))
|
||||||
|
|
||||||
## Version 1.11.0
|
## Version 1.11.0
|
||||||
|
|
||||||
* **Added** support for more WAVE file features ([issue #101](https://github.com/DanielSWolf/rhubarb-lip-sync/issues/101))
|
* **Added** support for more WAVE file features ([issue #101](https://github.com/DanielSWolf/rhubarb-lip-sync/issues/101))
|
||||||
|
|
|
@ -2,7 +2,7 @@ import org.jetbrains.kotlin.gradle.tasks.KotlinCompile
|
||||||
import java.io.File
|
import java.io.File
|
||||||
|
|
||||||
plugins {
|
plugins {
|
||||||
kotlin("jvm") version "1.3.41"
|
kotlin("jvm") version "1.6.0"
|
||||||
id("org.openjfx.javafxplugin") version "0.0.10"
|
id("org.openjfx.javafxplugin") version "0.0.10"
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -27,12 +27,12 @@ repositories {
|
||||||
}
|
}
|
||||||
|
|
||||||
dependencies {
|
dependencies {
|
||||||
implementation(kotlin("stdlib-jdk8"))
|
implementation("org.jetbrains.kotlin:kotlin-stdlib-jdk8:1.6.0")
|
||||||
implementation("com.beust:klaxon:5.0.1")
|
implementation("com.beust:klaxon:5.5")
|
||||||
implementation("org.apache.commons:commons-lang3:3.9")
|
implementation("org.apache.commons:commons-lang3:3.12.0")
|
||||||
implementation("no.tornado:tornadofx:2.0.0-SNAPSHOT")
|
implementation("no.tornado:tornadofx:2.0.0-SNAPSHOT")
|
||||||
testImplementation("org.junit.jupiter:junit-jupiter:5.5.0")
|
testImplementation("org.junit.jupiter:junit-jupiter:5.8.1")
|
||||||
testCompile("org.assertj:assertj-core:3.11.1")
|
testImplementation("org.assertj:assertj-core:3.21.0")
|
||||||
}
|
}
|
||||||
|
|
||||||
javafx {
|
javafx {
|
||||||
|
|
|
@ -10,7 +10,6 @@ class SpineJson(private val filePath: Path) {
|
||||||
private val fileDirectoryPath: Path = filePath.parent
|
private val fileDirectoryPath: Path = filePath.parent
|
||||||
private val json: JsonObject
|
private val json: JsonObject
|
||||||
private val skeleton: JsonObject
|
private val skeleton: JsonObject
|
||||||
private val defaultSkin: JsonObject
|
|
||||||
|
|
||||||
init {
|
init {
|
||||||
if (!Files.exists(filePath)) {
|
if (!Files.exists(filePath)) {
|
||||||
|
@ -22,12 +21,6 @@ class SpineJson(private val filePath: Path) {
|
||||||
throw EndUserException("Wrong file format. This is not a valid JSON file.")
|
throw EndUserException("Wrong file format. This is not a valid JSON file.")
|
||||||
}
|
}
|
||||||
skeleton = json.obj("skeleton") ?: throw EndUserException("JSON file is corrupted.")
|
skeleton = json.obj("skeleton") ?: throw EndUserException("JSON file is corrupted.")
|
||||||
val skins = json["skins"] ?: throw EndUserException("JSON file doesn't contain skins.")
|
|
||||||
defaultSkin = when (skins) {
|
|
||||||
is JsonObject -> skins.obj("default")
|
|
||||||
is JsonArray<*> -> (skins as JsonArray<JsonObject>).find { it.string("name") == "default" }
|
|
||||||
else -> null
|
|
||||||
} ?: throw EndUserException("JSON file doesn't have a default skin.")
|
|
||||||
|
|
||||||
validateProperties()
|
validateProperties()
|
||||||
}
|
}
|
||||||
|
@ -96,10 +89,21 @@ class SpineJson(private val filePath: Path) {
|
||||||
}
|
}
|
||||||
|
|
||||||
fun getSlotAttachmentNames(slotName: String): List<String> {
|
fun getSlotAttachmentNames(slotName: String): List<String> {
|
||||||
val attachments = defaultSkin.obj(slotName)
|
@Suppress("UNCHECKED_CAST")
|
||||||
?: defaultSkin.obj("attachments")?.obj(slotName)
|
val skins: Collection<JsonObject> = when (val skinsObject = json["skins"]) {
|
||||||
?: JsonObject()
|
is JsonObject -> skinsObject.values as Collection<JsonObject>
|
||||||
return attachments.map { it.key }
|
is JsonArray<*> -> skinsObject as Collection<JsonObject>
|
||||||
|
else -> emptyList()
|
||||||
|
}
|
||||||
|
|
||||||
|
// Get attachment names for all skins
|
||||||
|
return skins
|
||||||
|
.flatMap { skin ->
|
||||||
|
skin.obj(slotName)?.keys?.toList()
|
||||||
|
?: skin.obj("attachments")?.obj(slotName)?.keys?.toList()
|
||||||
|
?: emptyList<String>()
|
||||||
|
}
|
||||||
|
.distinct()
|
||||||
}
|
}
|
||||||
|
|
||||||
val animationNames = observableSet<String>(
|
val animationNames = observableSet<String>(
|
||||||
|
@ -156,4 +160,4 @@ class SpineJson(private val filePath: Path) {
|
||||||
fun save() {
|
fun save() {
|
||||||
Files.write(filePath, listOf(toString()), StandardCharsets.UTF_8)
|
Files.write(filePath, listOf(toString()), StandardCharsets.UTF_8)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue