package org.codecranachan.asteroidpush.base.workshop; import org.codecranachan.asteroidpush.base.workshop.assembly.Part; import org.codecranachan.asteroidpush.base.workshop.tokenboard.Placement; import org.codecranachan.asteroidpush.base.workshop.tokenboard.Token; import org.codecranachan.asteroidpush.utils.OrthogonalCoordinate; public class Manipulator { private Blueprint blueprint; private Part selection; private Placement prospectivePlacement; public Manipulator() { this.blueprint = null; this.selection = null; this.prospectivePlacement = new Placement(0, new OrthogonalCoordinate()); } public Part getSelection() { return selection; } public Placement getProspectivePlacement() { return prospectivePlacement; } public void setSelection(Part part) { this.selection = part; } public void clearSelection() { selection = null; } public Blueprint getBlueprint() { return blueprint; } public void setBlueprint(Blueprint blueprint) { this.blueprint = blueprint; } public void rotateSelectionLeft() { prospectivePlacement.rotateAnticlockwise(); } public void rotateSelectionRight() { prospectivePlacement.rotateClockwise(); } public boolean place(OrthogonalCoordinate pivot) { Token token = new Token(selection); token.setPlacement(new Placement(prospectivePlacement.getOrientation(), pivot)); if (blueprint.canPlace(token)) { blueprint.place(token); return true; } else { return false; } } public void erase(OrthogonalCoordinate pivot) { // ignore the return value since we are not keeping the // token that was picked up blueprint.pick(pivot); } public void pick(OrthogonalCoordinate pivot) { Token token = blueprint.pick(pivot); if (token != null) { selection = (Part) token.getData(); prospectivePlacement = token.getPlacement(); } else { selection = null; } } public ManipulatedArea getManipulatedArea() { return new ManipulatedArea(blueprint); } }