package com.spbsu.crawl.bl.map; import java.util.HashMap; import java.util.Map; import java.util.Optional; public class CrawlGameSessionMap { private final Map<String, Layer<TerrainType>> layers = new HashMap<>(); private String currentLevel; public Optional<TerrainType> terrainOnCurrentLevel(int x, int y) { return layers.get(currentLevel).item(x, y); } public void changeLevel(String id) { currentLevel = id; } public void resetPosition() { currentLayer().clear(); } public void tile(final int x, final int y, final TerrainType type) { currentLayer().setItem(x, y, type); } private Layer<TerrainType> currentLayer() { return layers.compute(currentLevel, (level, layer) -> { if (layer == null) { layers.put(level, layer = new Layer<>()); } return layer; }); } }