KorGE Plugins
KorGE allows to create compile-time extensions to process resources and to do special stuff
like describing the AndroidManifest.xml
programmatically by just including a library.
ResourceProcessor
plugin
The ResourceProcessor
plugin, allows to process a resource, by generating another file out of it.
It is usually used to reduce dependencies, to simplify what the game has to do for loading a file,
or to group several resources.
For example, when including the korge-swf
library, the swf
vectorial files will be processed
and converted into ani
files, that are simpler and have all the graphics rasterized.
open class SwfResourceProcessor : ResourceProcessor("swf") {
companion object : SwfResourceProcessor()
override val version: Int = AniFile.VERSION
override val outputExtension: String = "ani"
override suspend fun processInternal(inputFile: VfsFile, outputFile: VfsFile) {
val viewsLog = ViewsLog(coroutineContext)
val lib = inputFile.readSWF(viewsLog.views)
val config = lib.swfExportConfig
lib.writeTo(outputFile, config.toAnLibrarySerializerConfig(compression = 1.0))
}
}
To create a plugin of this kind in an external korge library, you have to:
- Create a
src/jvmMain/kotlin
folder and place theResourceProcessor
subclass there (since ResourceProcessor is just defined on korge-jvm). - Create a
src/jvmMain/resources/META-INF/services/com.soywiz.korge.resources.ResourceProcessor
with a line including the fqname of your class. This is usually assisted by IntelliJ IDEA.
Then you have to compile your artifact and use it in another project (since the plugin is loaded from a class loader, you wonβt be able to use it in that same project).
korge {
dependencyMulti("com.your.group:artifact-base-name:artifact-version")
}
KorgePluginExtension
plugin
In some cases, you will need to configure extra stuff like the AndroidManifest.xml
.
class AdmobKorgePluginExtension : KorgePluginExtension(
AdmobKorgePluginExtension::ADMOB_APP_ID
) {
lateinit var ADMOB_APP_ID: String
override fun getAndroidInit(): String? =
"""try { com.google.android.gms.ads.MobileAds.initialize(com.soywiz.korio.android.androidContext(), ${ADMOB_APP_ID.quoted}) } catch (e: Throwable) { e.printStackTrace() }"""
override fun getAndroidManifestApplication(): String? =
"""<meta-data android:name="com.google.android.gms.ads.APPLICATION_ID" android:value=${ADMOB_APP_ID.quoted} >"""
override fun getAndroidDependencies() =
listOf("com.google.android.gms:play-services-ads:16.0.0")
}
To create this kind of plugin, check the ResourcesProcessor plugin section, but you will have to create the following file and include the fqname of your class:
src/jvmMain/resources/META-INF/services/com.soywiz.korge.plugin.KorgePluginExtension