diff --git a/src/main/java/model/elements/TerrainHandler.java b/src/main/java/model/elements/TerrainHandler.java new file mode 100644 index 0000000000000000000000000000000000000000..29aac7a157c19ddbe18c98d31213874ba4f781cc --- /dev/null +++ b/src/main/java/model/elements/TerrainHandler.java @@ -0,0 +1,48 @@ +package model.elements; + +import model.ModelElement; +import model.TerrainElement; +import util.Position; + +import java.util.*; + +public class TerrainHandler implements ElementHandler { + private final List<TerrainElement> terrainElements; + private final Class<? extends TerrainElement> terrainType; + private final ModelElement modelElement; + + public TerrainHandler(List<TerrainElement> terrainElements, + Class<? extends TerrainElement> terrainType, + ModelElement modelElement) { + this.terrainElements = terrainElements; + this.terrainType = terrainType; + this.modelElement = modelElement; + } + + @Override + public void addElement(Position position) { + try { + TerrainElement element = terrainType.getConstructor(Position.class).newInstance(position); + terrainElements.add(element); + } catch (Exception e) { + throw new RuntimeException("Failed to create terrain element", e); + } + } + + @Override + public void removeElement(Position position) { + terrainElements.removeIf(element -> element.getPosition().equals(position) && terrainType.isInstance(element)); + } + + @Override + public boolean hasElement(Position position) { + return terrainElements.stream() + .anyMatch(element -> element.getPosition().equals(position) && terrainType.isInstance(element)); + } + + @Override + public ModelElement getModelElement() { + return modelElement; + } +} +