[Editor] Make MapInitializer generator implementations accepts additional arguments
This commit is contained in:
@@ -1,9 +1,12 @@
|
|||||||
package com.bartlomiejpluta.base.editor.code.build.generator
|
package com.bartlomiejpluta.base.editor.code.build.generator
|
||||||
|
|
||||||
|
import com.bartlomiejpluta.base.api.context.Context
|
||||||
|
import com.bartlomiejpluta.base.api.context.ContextHolder
|
||||||
import com.bartlomiejpluta.base.editor.map.asset.GameMapAsset
|
import com.bartlomiejpluta.base.editor.map.asset.GameMapAsset
|
||||||
import com.bartlomiejpluta.base.editor.map.model.layer.ObjectLayer
|
import com.bartlomiejpluta.base.editor.map.model.layer.ObjectLayer
|
||||||
import com.bartlomiejpluta.base.editor.map.model.map.GameMap
|
import com.bartlomiejpluta.base.editor.map.model.map.GameMap
|
||||||
import com.bartlomiejpluta.base.editor.project.context.ProjectContext
|
import com.bartlomiejpluta.base.editor.project.context.ProjectContext
|
||||||
|
import com.bartlomiejpluta.base.editor.project.model.Project
|
||||||
import com.bartlomiejpluta.base.internal.map.MapInitializer
|
import com.bartlomiejpluta.base.internal.map.MapInitializer
|
||||||
import com.squareup.javapoet.*
|
import com.squareup.javapoet.*
|
||||||
import org.springframework.beans.factory.annotation.Autowired
|
import org.springframework.beans.factory.annotation.Autowired
|
||||||
@@ -27,11 +30,11 @@ class MapObjectsCodeGenerator : CodeGenerator {
|
|||||||
projectContext.project?.let { project ->
|
projectContext.project?.let { project ->
|
||||||
project.maps
|
project.maps
|
||||||
.map { it to projectContext.loadMap(it.uid) }
|
.map { it to projectContext.loadMap(it.uid) }
|
||||||
.forEach { generateMapInitializer(project.buildGeneratedCodeDirectory, it.first, it.second) }
|
.forEach { generateMapInitializer(project, project.buildGeneratedCodeDirectory, it.first, it.second) }
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private fun generateMapInitializer(directory: File, asset: GameMapAsset, map: GameMap) {
|
private fun generateMapInitializer(project: Project, directory: File, asset: GameMapAsset, map: GameMap) {
|
||||||
val packageName = "com.bartlomiejpluta.base.generated.map"
|
val packageName = "com.bartlomiejpluta.base.generated.map"
|
||||||
val className = ClassName.get(
|
val className = ClassName.get(
|
||||||
packageName,
|
packageName,
|
||||||
@@ -50,6 +53,8 @@ class MapObjectsCodeGenerator : CodeGenerator {
|
|||||||
.addModifiers(Modifier.FINAL, Modifier.PUBLIC)
|
.addModifiers(Modifier.FINAL, Modifier.PUBLIC)
|
||||||
.addAnnotation(annotation)
|
.addAnnotation(annotation)
|
||||||
|
|
||||||
|
val runnerType = className(project.runner)
|
||||||
|
|
||||||
map.layers.forEachIndexed { index, layer ->
|
map.layers.forEachIndexed { index, layer ->
|
||||||
if (layer is ObjectLayer) {
|
if (layer is ObjectLayer) {
|
||||||
layer.objects.forEach {
|
layer.objects.forEach {
|
||||||
@@ -60,6 +65,8 @@ class MapObjectsCodeGenerator : CodeGenerator {
|
|||||||
.addParameter(TypeName.INT, "x", Modifier.FINAL)
|
.addParameter(TypeName.INT, "x", Modifier.FINAL)
|
||||||
.addParameter(TypeName.INT, "y", Modifier.FINAL)
|
.addParameter(TypeName.INT, "y", Modifier.FINAL)
|
||||||
.addParameter(MAP_PIN_TYPE, "here", Modifier.FINAL)
|
.addParameter(MAP_PIN_TYPE, "here", Modifier.FINAL)
|
||||||
|
.addParameter(runnerType, "runner", Modifier.FINAL)
|
||||||
|
.addParameter(Context::class.java, "context", Modifier.FINAL)
|
||||||
.addCode(it.code.replace("\$", "\$\$"))
|
.addCode(it.code.replace("\$", "\$\$"))
|
||||||
.build()
|
.build()
|
||||||
.let(generatedClass::addMethod)
|
.let(generatedClass::addMethod)
|
||||||
@@ -69,12 +76,15 @@ class MapObjectsCodeGenerator : CodeGenerator {
|
|||||||
|
|
||||||
val initializeMethod = MethodSpec.methodBuilder("initialize")
|
val initializeMethod = MethodSpec.methodBuilder("initialize")
|
||||||
.addAnnotation(Override::class.java)
|
.addAnnotation(Override::class.java)
|
||||||
|
.addParameter(Context::class.java, "context", Modifier.FINAL)
|
||||||
.addModifiers(Modifier.PUBLIC, Modifier.FINAL)
|
.addModifiers(Modifier.PUBLIC, Modifier.FINAL)
|
||||||
|
|
||||||
|
initializeMethod.addStatement("var runner = (\$T) context.getGameRunner()", runnerType)
|
||||||
|
|
||||||
map.layers.forEachIndexed { index, layer ->
|
map.layers.forEachIndexed { index, layer ->
|
||||||
if (layer is ObjectLayer) {
|
if (layer is ObjectLayer) {
|
||||||
layer.objects.forEach {
|
layer.objects.forEach {
|
||||||
initializeMethod.addStatement("_layer${index}_${it.x}x${it.y}(map, map.getObjectLayer(${index}), ${it.x}, ${it.y}, \$T.builder().map(\"${map.uid}\").layer($index).x(${it.x}).y(${it.y}).build())", MAP_PIN_TYPE)
|
initializeMethod.addStatement("_layer${index}_${it.x}x${it.y}(map, map.getObjectLayer(${index}), ${it.x}, ${it.y}, \$T.builder().map(\"${map.uid}\").layer($index).x(${it.x}).y(${it.y}).build(), runner, context)", MAP_PIN_TYPE)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -84,13 +84,14 @@ class ObjectPaintingTrace(
|
|||||||
get() = """
|
get() = """
|
||||||
/*
|
/*
|
||||||
* Following final parameters are available to use:
|
* Following final parameters are available to use:
|
||||||
|
* this: ? extends ${className(map.handler)} - an object of ${className(map.handler)}'s generated subclass
|
||||||
|
* so has an access to all members except the private ones
|
||||||
* here: MapPin - the composite object containing current map UID,
|
* here: MapPin - the composite object containing current map UID,
|
||||||
* layer's index and x,y coordinates of the current tile
|
* layer's index and x,y coordinates of the current tile
|
||||||
* x: int - the x coordinate of the current tile
|
* x: int - the x coordinate of the current tile
|
||||||
* y: int - the y coordinate of the current tile
|
* y: int - the y coordinate of the current tile
|
||||||
* layer: ObjectLayer - current object layer
|
* layer: ObjectLayer - current object layer
|
||||||
* map: GameMap - current map
|
* map: GameMap - current map
|
||||||
* handler: ${className(map.handler)} - current map handler
|
|
||||||
* runner: ${className(projectContext.project?.runner)} - the game runner of the project
|
* runner: ${className(projectContext.project?.runner)} - the game runner of the project
|
||||||
* context: Context - the game context
|
* context: Context - the game context
|
||||||
*/
|
*/
|
||||||
|
|||||||
Reference in New Issue
Block a user