Add ObjectLayer and GameMap parameters to MapInitializer

This commit is contained in:
2021-04-07 10:29:36 +02:00
parent 8d709709a8
commit c8f182aef1
4 changed files with 13 additions and 3 deletions

View File

@@ -2,7 +2,9 @@ package com.bartlomiejpluta.base.internal.map;
import com.bartlomiejpluta.base.api.context.Context;
import com.bartlomiejpluta.base.api.map.handler.MapHandler;
import com.bartlomiejpluta.base.api.map.layer.object.ObjectLayer;
import com.bartlomiejpluta.base.api.map.model.GameMap;
public interface MapInitializer {
void run(final Context context, final MapHandler handler);
void run(final Context context, final MapHandler handler, final GameMap map, final ObjectLayer layer);
}

View File

@@ -16,6 +16,8 @@ import java.time.Instant
import java.time.format.DateTimeFormatter
import javax.annotation.processing.Generated
import javax.lang.model.element.Modifier
import com.bartlomiejpluta.base.api.map.layer.`object`.ObjectLayer as EngineObjectLayer
import com.bartlomiejpluta.base.api.map.model.GameMap as EngineGameMap
@Component
class MapObjectsCodeGenerator : CodeGenerator {
@@ -65,6 +67,8 @@ class MapObjectsCodeGenerator : CodeGenerator {
.addParameter(Context::class.java, "context", Modifier.FINAL)
.addParameter(runner, "runner", Modifier.FINAL)
.addParameter(handler, "handler", Modifier.FINAL)
.addParameter(EngineGameMap::class.java, "map", Modifier.FINAL)
.addParameter(EngineObjectLayer::class.java, "layer", Modifier.FINAL)
.addParameter(TypeName.INT, "x", Modifier.FINAL)
.addParameter(TypeName.INT, "y", Modifier.FINAL)
.addCode(it.code)
@@ -77,11 +81,13 @@ class MapObjectsCodeGenerator : CodeGenerator {
.addModifiers(Modifier.PUBLIC, Modifier.FINAL)
.addParameter(Context::class.java, "context", Modifier.FINAL)
.addParameter(MapHandler::class.java, "handler", Modifier.FINAL)
.addParameter(EngineGameMap::class.java, "map", Modifier.FINAL)
.addParameter(EngineObjectLayer::class.java, "layer", Modifier.FINAL)
.addStatement("var customRunner = (\$T) context.getGameRunner()", runner)
.addStatement("var customHandler = (\$T) handler", handler)
layer.objects.forEach {
runMethod.addStatement("_${it.x}x${it.y}(context, customRunner, customHandler, ${it.x}, ${it.y})")
runMethod.addStatement("_${it.x}x${it.y}(context, customRunner, customHandler, map, layer, ${it.x}, ${it.y})")
}
generatedClass

View File

@@ -86,6 +86,8 @@ class ObjectPaintingTrace(
* Following final parameters are available to use:
* x: int - the x coordinate of tile the object has been created on
* y: int - the y coordinate of tile the object has been created on
* layer: ObjectLayer - current object layer
* map: GameMap - current map
* handler: ${className(map.handler)} - current map handler
* runner: ${className(projectContext.project?.runner)} - the game runner of the project
* context: Context - the game context

View File

@@ -98,7 +98,7 @@ public class DefaultMapManager implements MapManager {
var className = format("%s.MapInitializer_%s$$Layer%d", packageName, purifiedUid, layerIndex);
var initializerClass = classLoader.<MapInitializer>loadClass(className);
var initializer = initializerClass.getConstructor().newInstance();
initializer.run(context, handler);
initializer.run(context, handler, map, (ObjectLayer) layer);
}
}
}