package com.bartlomiejpluta.demo.map; import com.bartlomiejpluta.base.api.camera.Camera; import com.bartlomiejpluta.base.api.context.Context; import com.bartlomiejpluta.base.api.icon.Icon; import com.bartlomiejpluta.base.api.input.Input; import com.bartlomiejpluta.base.api.input.Key; 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; import com.bartlomiejpluta.base.api.move.Direction; import com.bartlomiejpluta.base.api.screen.Screen; import com.bartlomiejpluta.base.lib.camera.CameraController; import com.bartlomiejpluta.base.lib.camera.FollowingCameraController; import com.bartlomiejpluta.base.util.world.CharacterSpawner; import com.bartlomiejpluta.base.util.world.Warp; import com.bartlomiejpluta.demo.entity.Chest; import com.bartlomiejpluta.demo.entity.Enemy; import com.bartlomiejpluta.demo.entity.MapObject; import com.bartlomiejpluta.demo.entity.Player; import com.bartlomiejpluta.demo.event.EnemyDiedEvent; import com.bartlomiejpluta.demo.runner.DemoRunner; import lombok.NonNull; public abstract class BaseMapHandler implements MapHandler { protected Screen screen; protected Context context; protected DemoRunner runner; protected Camera camera; protected GameMap map; protected Player player; protected ObjectLayer mainLayer; protected CameraController cameraController; @Override public void onCreate(Context context, GameMap map) { this.context = context; this.screen = context.getScreen(); this.runner = (DemoRunner) context.getGameRunner(); this.camera = context.getCamera(); this.map = map; this.player = runner.getPlayer(); this.cameraController = FollowingCameraController .on(screen, camera, map) .follow(player.getPosition()); } @Override public void input(Input input) { if (context.isPaused()) { return; } if (runner.openedWindows() > 0) { return; } if (input.isKeyPressed(Key.KEY_SPACE)) { player.attack(); } if (input.isKeyPressed(Key.KEY_ENTER)) { player.interact(); } if (input.isKeyPressed(Key.KEY_LEFT_CONTROL)) { if (input.isKeyPressed(Key.KEY_DOWN)) { player.setFaceDirection(Direction.DOWN); } else if (input.isKeyPressed(Key.KEY_UP)) { player.setFaceDirection(Direction.UP); } else if (input.isKeyPressed(Key.KEY_LEFT)) { player.setFaceDirection(Direction.LEFT); } else if (input.isKeyPressed(Key.KEY_RIGHT)) { player.setFaceDirection(Direction.RIGHT); } } else { if (input.isKeyPressed(Key.KEY_DOWN)) { player.getLayer().pushMovement(player.prepareMovement(Direction.DOWN)); } else if (input.isKeyPressed(Key.KEY_UP)) { player.getLayer().pushMovement(player.prepareMovement(Direction.UP)); } else if (input.isKeyPressed(Key.KEY_LEFT)) { player.getLayer().pushMovement(player.prepareMovement(Direction.LEFT)); } else if (input.isKeyPressed(Key.KEY_RIGHT)) { player.getLayer().pushMovement(player.prepareMovement(Direction.RIGHT)); } } } @Override public void update(Context context, GameMap map, float dt) { cameraController.update(); } public Enemy enemy(@NonNull String id) { return new Enemy(id); } public Enemy enemy(ObjectLayer layer, int x, int y, @NonNull String id) { var enemy = new Enemy(id); enemy.setCoordinates(x, y); layer.addEntity(enemy); return enemy; } public Chest chest(ObjectLayer layer, int x, int y, @NonNull String id) { var chest = new Chest(id); chest.setCoordinates(x, y); layer.addEntity(chest); return chest; } public CharacterSpawner spawner(ObjectLayer layer, int x, int y) { var spawner = new CharacterSpawner().trackEntities(EnemyDiedEvent.TYPE); spawner.setCoordinates(x, y); layer.addEntity(spawner); return spawner; } public Icon icon(ObjectLayer layer, int x, int y, String iconSetUid, int row, int column) { var icon = context.createIcon(iconSetUid, row, column); icon.setScale(1f); icon.setZIndex(-1); icon.setCoordinates(x, y); layer.addEntity(icon); return icon; } public Warp warp(ObjectLayer layer, int x, int y, String targetMap, String targetLayer, int targetX, int targetY) { var warp = new Warp(A.maps.get(targetMap).uid, A.maps.getLayer(targetMap, targetLayer), targetX, targetY); warp.setEntity(player); warp.setCoordinates(x, y); layer.addEntity(warp); return warp; } }