// Asteroid Push - A game featuring selfmade spaceships and pompous physics // Copyright (C) 2013 Christian Meyer, Silvan Wegmann // // This program is free software: you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by // the Free Software Foundation, either version 3 of the License, or // (at your option) any later version. // // This program is distributed in the hope that it will be useful, // but WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // GNU General Public License for more details. // // You should have received a copy of the GNU General Public License // along with this program. If not, see <http://www.gnu.org/licenses/>. package org.codecranachan.asteroidpush.base.workshop.tokenboard; import java.util.HashSet; import java.util.Set; import java.util.Vector; import org.codecranachan.asteroidpush.utils.OrthogonalCoordinate; public class Shape { private Set<OrthogonalCoordinate> coordinates; public Shape(String... shape) { Vector<String> code = new Vector<String>(); if (shape.length == 0) { code.add("X"); } for (String line : shape) { code.add(line); } coordinates = convertShape(code); if (coordinates.isEmpty()) throw new IllegalArgumentException("invalid shape strings passed"); } public boolean equals(Object obj) { if (obj == null) return false; if (obj.getClass() != Shape.class) return false; Shape other = (Shape) obj; if (other.coordinates.equals(this.coordinates)) return true; else return false; } public Set<OrthogonalCoordinate> getOccupiedCoordinates() { return coordinates; } private Set<OrthogonalCoordinate> convertShape(Vector<String> shape) { HashSet<OrthogonalCoordinate> converted = new HashSet<OrthogonalCoordinate>(); int y = 0; for (String line : shape) { int x = 0; for (char c : line.toCharArray()) { if (c == 'X') { converted.add(new OrthogonalCoordinate(x, y)); } x++; } y++; } return converted; } }