diff --git a/extras/EsotericSoftwareSpine/src/main/kotlin/com/rhubarb_lip_sync/rhubarb_for_spine/AnimationFileModel.kt b/extras/EsotericSoftwareSpine/src/main/kotlin/com/rhubarb_lip_sync/rhubarb_for_spine/AnimationFileModel.kt index 630b055..1f5c884 100644 --- a/extras/EsotericSoftwareSpine/src/main/kotlin/com/rhubarb_lip_sync/rhubarb_for_spine/AnimationFileModel.kt +++ b/extras/EsotericSoftwareSpine/src/main/kotlin/com/rhubarb_lip_sync/rhubarb_for_spine/AnimationFileModel.kt @@ -16,41 +16,41 @@ class AnimationFileModel(val parentModel: MainModel, animationFilePath: Path, pr val spineJson = SpineJson(animationFilePath) val slotsProperty = SimpleObjectProperty>() - var slots by slotsProperty - private set + private var slots: ObservableList by slotsProperty val mouthSlotProperty: SimpleStringProperty = SimpleStringProperty().alsoListen { - mouthNaming = if (mouthSlot != null) + val mouthSlot = this.mouthSlot + val mouthNaming = if (mouthSlot != null) MouthNaming.guess(spineJson.getSlotAttachmentNames(mouthSlot)) else null + this.mouthNaming = mouthNaming - mouthShapes = if (mouthSlot != null) { + mouthShapes = if (mouthSlot != null && mouthNaming != null) { val mouthNames = spineJson.getSlotAttachmentNames(mouthSlot) MouthShape.values().filter { mouthNames.contains(mouthNaming.getName(it)) } } else listOf() - mouthSlotError = if (mouthSlot != null) null - else "No slot with mouth drawings specified." + mouthSlotError = if (mouthSlot != null) + null + else + "No slot with mouth drawings specified." } - var mouthSlot by mouthSlotProperty + private var mouthSlot: String? by mouthSlotProperty val mouthSlotErrorProperty = SimpleStringProperty() - var mouthSlotError by mouthSlotErrorProperty - private set + private var mouthSlotError: String? by mouthSlotErrorProperty val mouthNamingProperty = SimpleObjectProperty() - var mouthNaming by mouthNamingProperty - private set + private var mouthNaming: MouthNaming? by mouthNamingProperty val mouthShapesProperty = SimpleObjectProperty>().alsoListen { mouthShapesError = getMouthShapesErrorString() } - var mouthShapes by mouthShapesProperty + var mouthShapes: List by mouthShapesProperty private set val mouthShapesErrorProperty = SimpleStringProperty() - var mouthShapesError by mouthShapesErrorProperty - private set + private var mouthShapesError: String? by mouthShapesErrorProperty val audioFileModelsProperty = SimpleListProperty( spineJson.audioEvents @@ -63,7 +63,7 @@ class AnimationFileModel(val parentModel: MainModel, animationFilePath: Path, pr } .observable() ) - val audioFileModels by audioFileModelsProperty + val audioFileModels: ObservableList by audioFileModelsProperty val busyProperty = SimpleBooleanProperty().apply { bind(object : BooleanBinding() { @@ -90,10 +90,9 @@ class AnimationFileModel(val parentModel: MainModel, animationFilePath: Path, pr } }) } - val valid by validProperty private fun saveAnimation(animationName: String, audioEventName: String, mouthCues: List) { - spineJson.createOrUpdateAnimation(mouthCues, audioEventName, animationName, mouthSlot, mouthNaming) + spineJson.createOrUpdateAnimation(mouthCues, audioEventName, animationName, mouthSlot!!, mouthNaming!!) spineJson.save() } diff --git a/extras/EsotericSoftwareSpine/src/main/kotlin/com/rhubarb_lip_sync/rhubarb_for_spine/AudioFileModel.kt b/extras/EsotericSoftwareSpine/src/main/kotlin/com/rhubarb_lip_sync/rhubarb_for_spine/AudioFileModel.kt index bf46277..e9f41c6 100644 --- a/extras/EsotericSoftwareSpine/src/main/kotlin/com/rhubarb_lip_sync/rhubarb_for_spine/AudioFileModel.kt +++ b/extras/EsotericSoftwareSpine/src/main/kotlin/com/rhubarb_lip_sync/rhubarb_for_spine/AudioFileModel.kt @@ -11,6 +11,7 @@ import javafx.scene.control.Alert import javafx.scene.control.ButtonType import tornadofx.getValue import tornadofx.setValue +import java.nio.file.Path import java.util.concurrent.ExecutorService import java.util.concurrent.Future @@ -20,15 +21,14 @@ class AudioFileModel( private val executor: ExecutorService, private val reportResult: (List) -> Unit ) { - val spineJson = parentModel.spineJson + private val spineJson = parentModel.spineJson - val audioFilePath = spineJson.audioDirectoryPath.resolve(audioEvent.relativeAudioFilePath) + private val audioFilePath: Path = spineJson.audioDirectoryPath.resolve(audioEvent.relativeAudioFilePath) val eventNameProperty = SimpleStringProperty(audioEvent.name) - val eventName by eventNameProperty + val eventName: String by eventNameProperty val displayFilePathProperty = SimpleStringProperty(audioEvent.relativeAudioFilePath) - val displayFilePath by displayFilePathProperty val animationNameProperty = SimpleStringProperty().apply { val mainModel = parentModel.parentModel @@ -45,13 +45,13 @@ class AudioFileModel( } }) } - val animationName by animationNameProperty + val animationName: String by animationNameProperty val dialogProperty = SimpleStringProperty(audioEvent.dialog) - val dialog: String? by dialogProperty + private val dialog: String? by dialogProperty val animationProgressProperty = SimpleObjectProperty(null) - var animationProgress by animationProgressProperty + var animationProgress: Double? by animationProgressProperty private set private val animatedProperty = SimpleBooleanProperty().apply { @@ -92,7 +92,6 @@ class AudioFileModel( } }) } - val audioFileState by audioFileStateProperty val busyProperty = SimpleBooleanProperty().apply { bind(object : BooleanBinding() { @@ -120,7 +119,6 @@ class AudioFileModel( } }) } - val actionLabel by actionLabelProperty fun performAction() { if (future == null) { diff --git a/extras/EsotericSoftwareSpine/src/main/kotlin/com/rhubarb_lip_sync/rhubarb_for_spine/MainModel.kt b/extras/EsotericSoftwareSpine/src/main/kotlin/com/rhubarb_lip_sync/rhubarb_for_spine/MainModel.kt index 82b1686..9010146 100644 --- a/extras/EsotericSoftwareSpine/src/main/kotlin/com/rhubarb_lip_sync/rhubarb_for_spine/MainModel.kt +++ b/extras/EsotericSoftwareSpine/src/main/kotlin/com/rhubarb_lip_sync/rhubarb_for_spine/MainModel.kt @@ -32,21 +32,19 @@ class MainModel(private val executor: ExecutorService) { animationFileModel = AnimationFileModel(this, path, executor) } } - var filePathString by filePathStringProperty val filePathErrorProperty = SimpleStringProperty() - var filePathError by filePathErrorProperty - private set + private var filePathError: String? by filePathErrorProperty val animationFileModelProperty = SimpleObjectProperty() var animationFileModel by animationFileModelProperty private set val animationPrefixProperty = SimpleStringProperty("say_") - var animationPrefix by animationPrefixProperty + var animationPrefix: String by animationPrefixProperty val animationSuffixProperty = SimpleStringProperty("") - var animationSuffix by animationSuffixProperty + var animationSuffix: String by animationSuffixProperty private fun getDefaultPathString() = FX.application.parameters.raw.firstOrNull() } \ No newline at end of file diff --git a/extras/EsotericSoftwareSpine/src/main/kotlin/com/rhubarb_lip_sync/rhubarb_for_spine/MouthNaming.kt b/extras/EsotericSoftwareSpine/src/main/kotlin/com/rhubarb_lip_sync/rhubarb_for_spine/MouthNaming.kt index 8b6416b..c49b55c 100644 --- a/extras/EsotericSoftwareSpine/src/main/kotlin/com/rhubarb_lip_sync/rhubarb_for_spine/MouthNaming.kt +++ b/extras/EsotericSoftwareSpine/src/main/kotlin/com/rhubarb_lip_sync/rhubarb_for_spine/MouthNaming.kt @@ -2,7 +2,7 @@ package com.rhubarb_lip_sync.rhubarb_for_spine import java.util.* -class MouthNaming(val prefix: String, val suffix: String, val mouthShapeCasing: MouthShapeCasing) { +class MouthNaming(private val prefix: String, private val suffix: String, private val mouthShapeCasing: MouthShapeCasing) { companion object { fun guess(mouthNames: List): MouthNaming { diff --git a/extras/EsotericSoftwareSpine/src/main/kotlin/com/rhubarb_lip_sync/rhubarb_for_spine/MouthShape.kt b/extras/EsotericSoftwareSpine/src/main/kotlin/com/rhubarb_lip_sync/rhubarb_for_spine/MouthShape.kt index de6410d..2e4dcd1 100644 --- a/extras/EsotericSoftwareSpine/src/main/kotlin/com/rhubarb_lip_sync/rhubarb_for_spine/MouthShape.kt +++ b/extras/EsotericSoftwareSpine/src/main/kotlin/com/rhubarb_lip_sync/rhubarb_for_spine/MouthShape.kt @@ -10,7 +10,7 @@ enum class MouthShape { get() = !this.isBasic companion object { - val basicShapeCount = 6 + const val basicShapeCount = 6 val basicShapes = MouthShape.values().take(basicShapeCount) diff --git a/extras/EsotericSoftwareSpine/src/main/kotlin/com/rhubarb_lip_sync/rhubarb_for_spine/RhubarbTask.kt b/extras/EsotericSoftwareSpine/src/main/kotlin/com/rhubarb_lip_sync/rhubarb_for_spine/RhubarbTask.kt index 29bb34d..0268003 100644 --- a/extras/EsotericSoftwareSpine/src/main/kotlin/com/rhubarb_lip_sync/rhubarb_for_spine/RhubarbTask.kt +++ b/extras/EsotericSoftwareSpine/src/main/kotlin/com/rhubarb_lip_sync/rhubarb_for_spine/RhubarbTask.kt @@ -24,7 +24,7 @@ class RhubarbTask( throw InterruptedException() } if (!Files.exists(audioFilePath)) { - throw EndUserException("File '$audioFilePath' does not exist."); + throw EndUserException("File '$audioFilePath' does not exist.") } val dialogFile = if (dialog != null) TemporaryTextFile(dialog) else null @@ -60,7 +60,7 @@ class RhubarbTask( } catch (e: EOFException) { throw EndUserException("Rhubarb terminated unexpectedly.") } finally { - process.waitFor(); + process.waitFor() } }} diff --git a/extras/EsotericSoftwareSpine/src/main/kotlin/com/rhubarb_lip_sync/rhubarb_for_spine/SpineJson.kt b/extras/EsotericSoftwareSpine/src/main/kotlin/com/rhubarb_lip_sync/rhubarb_for_spine/SpineJson.kt index f87d028..2fe77b8 100644 --- a/extras/EsotericSoftwareSpine/src/main/kotlin/com/rhubarb_lip_sync/rhubarb_for_spine/SpineJson.kt +++ b/extras/EsotericSoftwareSpine/src/main/kotlin/com/rhubarb_lip_sync/rhubarb_for_spine/SpineJson.kt @@ -6,9 +6,9 @@ import java.nio.charset.StandardCharsets import java.nio.file.Files import java.nio.file.Path -class SpineJson(val filePath: Path) { - val fileDirectoryPath: Path = filePath.parent - val json: JsonObject +class SpineJson(private val filePath: Path) { + private val fileDirectoryPath: Path = filePath.parent + private val json: JsonObject private val skeleton: JsonObject private val defaultSkin: JsonObject @@ -32,7 +32,7 @@ class SpineJson(val filePath: Path) { audioDirectoryPath } - val imagesDirectoryPath: Path get() { + private val imagesDirectoryPath: Path get() { val relativeImagesDirectory = skeleton.string("images") ?: throw EndUserException("JSON file is incomplete: Images path is missing." + "Make sure to check 'Nonessential data' when exporting.") diff --git a/extras/EsotericSoftwareSpine/src/main/kotlin/com/rhubarb_lip_sync/rhubarb_for_spine/tools.kt b/extras/EsotericSoftwareSpine/src/main/kotlin/com/rhubarb_lip_sync/rhubarb_for_spine/tools.kt index b8cacbd..fee86f5 100644 --- a/extras/EsotericSoftwareSpine/src/main/kotlin/com/rhubarb_lip_sync/rhubarb_for_spine/tools.kt +++ b/extras/EsotericSoftwareSpine/src/main/kotlin/com/rhubarb_lip_sync/rhubarb_for_spine/tools.kt @@ -28,7 +28,7 @@ fun > TProperty.alsoListen(listener: (TValu fun getExceptionMessage(action: () -> Unit): String? { try { - action(); + action() } catch (e: Exception) { return e.message }