/*
 * Author: Jasper Slaff
 * Date: 4/21/17
*/

package demo;

import java.awt.Shape;
import java.awt.geom.Path2D;
import java.util.ArrayList;

public class Oct extends DemoObj{
	
	public Oct(double scale){
		super();
		setVertices(scale);
	}

	@Override
	protected void setVertices(double scale) {
		vertices = new ArrayList<double[]>();
		for(int i = 0; i < 8; i++){
			vertices.add(new double[3]);	
		}
		setVertex(0, -1 * scale, 1 * scale);
		setVertex(1, 0, 1.5 * scale);
		setVertex(2, 1 * scale, 1 * scale);
		setVertex(3, 1.5 * scale, 0);
		setVertex(4, 1 * scale, -1 * scale);
		setVertex(5, 0, -1.5 * scale);
		setVertex(6, -1 * scale, -1 * scale);
		setVertex(7, -1.5 * scale, 0);
		border = initDraw();
	}
	
	private void setVertex(int idx, double x, double y){
		vertices.get(idx)[0] = x + center[0];
		vertices.get(idx)[1] = y + center[1];
		vertices.get(idx)[2] = 1;
	}
	
	private Shape initDraw(){
		Path2D.Double poly = new Path2D.Double();
		poly.moveTo(vertices.get(0)[0], vertices.get(0)[1]);
		for(int i = 1; i < vertices.size(); i++){
			poly.lineTo(vertices.get(i)[0], vertices.get(i)[1]);
		}
		poly.closePath();
		return poly;
	}
	
	public void grow(){
		scale(1);
	}
	
	public void shrink(){
		scale(-1);
	}
	
	public void turnRight(){
		rotate(Math.PI / 16);
	}
	
	public void turnLeft(){
		rotate(-(Math.PI / 16));
	}
	
	public void moveRight(){
		translate("X", 1);
	}
	
	public void moveLeft(){
		translate("X", -1);
	}
	
	public void moveUp(){
		translate("Y", -1);
	}
	
	public void moveDown(){
		translate("Y", 1);
	}

	@Override
	protected Shape getOutline() {
		return border;
	}
	
}
