Снова тестим подгрузку брони

This commit is contained in:
DBotThePony 2022-12-30 17:53:19 +07:00
parent e4a2f66b84
commit 4e09fad480
Signed by: DBot
GPG Key ID: DCC23B5715498507
4 changed files with 33 additions and 9 deletions

View File

@ -66,7 +66,7 @@ object Starbound {
if (input[0] == '/')
return input
return "$readingFolder/$input"
return assetStringInterner.intern("$readingFolder/$input")
}
fun readingFolderTransformerNullable(input: String?): String? {
@ -477,8 +477,7 @@ object Starbound {
}
private fun loadItemDefinitions(callback: (String) -> Unit) {
//val files = listOf(".item", ".currency", ".head", ".chest", ".legs")
val files = listOf(".item", ".currency")
val files = listOf(".item", ".currency", ".head", ".chest", ".legs")
for (fs in fileSystems) {
for (listedFile in fs.explore().filter { it.isFile }.filter { f -> files.any { f.name.endsWith(it) } }) {

View File

@ -1,10 +1,15 @@
package ru.dbotthepony.kstarbound.defs.item
import com.google.gson.GsonBuilder
import com.google.gson.TypeAdapter
import com.google.gson.stream.JsonReader
import com.google.gson.stream.JsonToken
import com.google.gson.stream.JsonWriter
import ru.dbotthepony.kstarbound.Starbound
import ru.dbotthepony.kstarbound.io.json.KConcreteTypeAdapter
import ru.dbotthepony.kstarbound.io.json.asJsonObject
import ru.dbotthepony.kstarbound.io.json.asList
import ru.dbotthepony.kstarbound.io.json.ifString
import ru.dbotthepony.kstarbound.registerTypeAdapter
import ru.dbotthepony.kvector.vector.ndouble.Vector2d
@ -244,14 +249,15 @@ data class ItemDefinition(
data class ArmorFrames(
val body: String,
val backSleeve: String,
val frontSleeve: String,
val backSleeve: String?,
val frontSleeve: String?,
)
data class StatusEffect(
val levelFunction: String,
val stat: String,
val baseMultiplier: Double,
val baseMultiplier: Double = 1.0,
val amount: Double = 0.0,
)
companion object {
@ -319,14 +325,16 @@ data class ItemDefinition(
val ARMOR_FRAMES_ADAPTER = KConcreteTypeAdapter.Builder(ArmorFrames::class)
.auto(ArmorFrames::body, transformer = Starbound::readingFolderTransformer)
.auto(ArmorFrames::backSleeve, transformer = Starbound::readingFolderTransformer)
.auto(ArmorFrames::frontSleeve, transformer = Starbound::readingFolderTransformer)
.auto(ArmorFrames::backSleeve, transformer = Starbound::readingFolderTransformerNullable)
.auto(ArmorFrames::frontSleeve, transformer = Starbound::readingFolderTransformerNullable)
.build()
.ifString { ArmorFrames(Starbound.readingFolderTransformer(it), null, null) }
val STATUS_EFFECT_ADAPTER = KConcreteTypeAdapter.Builder(StatusEffect::class)
.auto(StatusEffect::levelFunction)
.auto(StatusEffect::stat)
.auto(StatusEffect::baseMultiplier)
.auto(StatusEffect::amount)
.build()
fun registerGson(gsonBuilder: GsonBuilder) {

View File

@ -2,6 +2,7 @@ package ru.dbotthepony.kstarbound.io.json
import com.google.gson.TypeAdapter
import com.google.gson.stream.JsonReader
import com.google.gson.stream.JsonToken
import com.google.gson.stream.JsonWriter
fun <T> TypeAdapter<T>.transformRead(transformer: (T) -> T): TypeAdapter<T> {
@ -39,3 +40,19 @@ fun <T> TypeAdapter<T>.transform(transformRead: (T) -> T, transformWrite: (T) ->
}
}
}
fun <T> TypeAdapter<T>.ifString(reader: (String) -> T): TypeAdapter<T> {
return object : TypeAdapter<T>() {
override fun write(out: JsonWriter, value: T) {
return this@ifString.write(out, value)
}
override fun read(`in`: JsonReader): T {
if (`in`.peek() == JsonToken.STRING) {
return reader(`in`.nextString())
}
return this@ifString.read(`in`)
}
}
}

View File

@ -360,7 +360,7 @@ class KConcreteTypeAdapter<T : Any> private constructor(
private val types = ArrayList<PackedProperty<T, *>>()
/**
* Принимает ли класс *последним* аргументом JSON объект
* Принимает ли класс *последним* аргументом JSON структуру
*
* На самом деле, JSON "заворачивается" в [ImmutableMap], или [ImmutableList] если указано [asList]/[inputAsList]
*