package org.codecranachan.asteroidpush.base.workshop; import java.util.Vector; import org.codecranachan.asteroidpush.base.workshop.assembly.Part; import org.codecranachan.asteroidpush.base.workshop.tokenboard.Placement; import org.codecranachan.asteroidpush.utils.OrthogonalCoordinate; public class WorkshopCoordinator { private Manipulator manipulator; private PartSelector selector; private BlueprintCollection collection; public WorkshopCoordinator(Manipulator manipulator, PartSelector selector, BlueprintCollection collection) { this.manipulator = manipulator; this.selector = selector; this.collection = collection; manipulator.setBlueprint(collection.getActive()); selector.clearSelection(); } public void createNewBlueprint() { selector.clearSelection(); collection.addBlueprint(new Blueprint()); manipulator.setBlueprint(collection.getActive()); } public void pickSquare(OrthogonalCoordinate coordinate) { if (manipulator.getSelection() == null) { manipulator.pick(coordinate); } else { boolean partPlaced = manipulator.place(coordinate); if (partPlaced) { manipulator.setSelection(selector.getNewPart()); } } } public void clearSquare(OrthogonalCoordinate coordinate) { if (manipulator.getSelection() == null) { manipulator.erase(coordinate); } else { clearSelection(); } } public Blueprint getManipulatedBlueprint() { return manipulator.getBlueprint(); } public ManipulatedArea getManipulatedArea() { return manipulator.getManipulatedArea(); } public Vector<PartFactory> getAvailablePartFactories() { return selector.getPartFactories(); } public void selectPart(int index) { selector.selectByIndex(index); PartFactory factory = selector.getSelected(); if (factory == null) { manipulator.clearSelection(); } else { manipulator.setSelection(factory.createPart()); } } public void clearSelection() { manipulator.clearSelection(); selector.clearSelection(); } public Part getSelectedPart() { return manipulator.getSelection(); } public PartFactory getSelectedPartFactory() { return selector.getSelected(); } public void rotatePartRight() { manipulator.rotateSelectionRight(); } public void rotatePartLeft() { manipulator.rotateSelectionLeft(); } public Placement getPartSelectedPartPlacement() { return manipulator.getProspectivePlacement(); } }