diff --git a/app/src/main/java/org/agp8x/android/games/fillgrid/FillGrid.java b/app/src/main/java/org/agp8x/android/games/fillgrid/FillGrid.java index 2525bff..2a2a8d1 100644 --- a/app/src/main/java/org/agp8x/android/games/fillgrid/FillGrid.java +++ b/app/src/main/java/org/agp8x/android/games/fillgrid/FillGrid.java @@ -2,6 +2,7 @@ package org.agp8x.android.games.fillgrid; import android.support.v7.app.AppCompatActivity; import android.os.Bundle; +import android.util.Pair; import android.widget.RelativeLayout; import org.agp8x.android.games.fillgrid.data.GridBlock; @@ -18,10 +19,14 @@ public class FillGrid extends AppCompatActivity { //GridObject ago = new GridBlock<>(Asdf.A); RelativeLayout layout = (RelativeLayout) findViewById(R.id.mainLayout); + /* Pair fp = new Pair<>(1.0f, 2.0f); + Pair ip = new Pair<>(1, 2); + ip = new Pair<>(fp.first.intValue(), fp.second.intValue());*/ FillGridView gridview = new FillGridView(this); layout.addView(gridview); } - private enum Asdf{ - A,B,C; - } + + /* private enum Asdf { + A, B, C; + }*/ } diff --git a/app/src/main/java/org/agp8x/android/games/fillgrid/FillGridView.java b/app/src/main/java/org/agp8x/android/games/fillgrid/FillGridView.java index d0105ae..80fe5c0 100644 --- a/app/src/main/java/org/agp8x/android/games/fillgrid/FillGridView.java +++ b/app/src/main/java/org/agp8x/android/games/fillgrid/FillGridView.java @@ -9,6 +9,7 @@ import android.view.View; import org.agp8x.android.games.fillgrid.data.GridBlock; import org.agp8x.android.games.fillgrid.data.GridBoard; +import org.agp8x.android.games.fillgrid.data.GridObject; import org.agp8x.android.games.fillgrid.data.GroupCell; import org.agp8x.android.games.fillgrid.data.Offset; @@ -23,11 +24,16 @@ import java.util.Map; public class FillGridView extends View { protected Pair contentSize = null; + protected Pair spawnSize = null; protected GridBoard, GroupCell> board; protected List> blocks; protected Map background; protected GroupGridPainter painter; protected GroupGridPainter bgPainter; + private float divison; + private ArrayList> spawn; + private int spawnCount; + private SpawnPainterGroup spawnPainter; public FillGridView(Context context) { super(context); @@ -54,6 +60,29 @@ public class FillGridView extends View { board = new GridBoard<>(dimensions); blocks = new ArrayList<>(); + + background = new HashMap<>(); + GroupCell bgCell = new GroupCell(-1); + for (int i = 0; i < dimensions.x; i++) { + for (int j = 0; j < dimensions.y; j++) { + background.put(new Offset(i, j), bgCell); + } + } + + CellPaintProvider bgCpp = new CellPaintProviderBackground(); + bgPainter = new GroupGridPainter(dimensions, bgCpp); + + CellPaintProvider cpp = new CellPaintProviderDefault(); + painter = new GroupGridPainter(dimensions, cpp); + + + // TODO: create configuration + spawnCount = 3; + spawnPainter = new SpawnPainterGroup<>(spawnCount); + spawn = new ArrayList<>(spawnCount); + + divison = 0.5625f; // divides *HD-resolutions in a square and a non-square + GridBlock block0 = new GridBlock<>(); block0.getObjects().put(new Offset(0, 0), new GroupCell(0)); blocks.add(block0); @@ -67,21 +96,10 @@ public class FillGridView extends View { block0.getObjects().put(new Offset(0, 2), new GroupCell(2)); blocks.add(block0); - background = new HashMap<>(); - GroupCell bgCell = new GroupCell(-1); - for (int i = 0; i < dimensions.x; i++) { - for (int j = 0; j < dimensions.y; j++) { - background.put(new Offset(i, j), bgCell); - } - } - - CellPaintProvider bgCpp = new CellPaintProviderBackground(); - bgPainter = new GroupGridPainter(dimensions,bgCpp); - - CellPaintProvider cpp = new CellPaintProviderDefault(); - painter = new GroupGridPainter(dimensions, cpp); board.drop(new Offset(4, 4), makeSquare()); - board.drop(new Offset(4,4), makeAngle()); + board.drop(new Offset(4, 4), makeAngle()); + + populateSpawnArea(); } private GridBlock makeSquare() { @@ -90,6 +108,7 @@ public class FillGridView extends View { grid.getObjects().put(new Offset(0, 1), new GroupCell(0)); grid.getObjects().put(new Offset(1, 0), new GroupCell(0)); grid.getObjects().put(new Offset(1, 1), new GroupCell(0)); + blocks.add(grid); return grid; } @@ -100,6 +119,7 @@ public class FillGridView extends View { grid.getObjects().put(new Offset(2, 2), new GroupCell(1)); grid.getObjects().put(new Offset(2, 1), new GroupCell(1)); grid.getObjects().put(new Offset(2, 0), new GroupCell(1)); + blocks.add(grid); return grid; } @@ -107,16 +127,48 @@ public class FillGridView extends View { @Override protected void onDraw(Canvas canvas) { super.onDraw(canvas); - if (contentSize == null) { - //TODO: maybe fix for square? optional? - int paddingTop = getPaddingTop(); - int paddingBottom = getPaddingBottom(); - int paddingLeft = getPaddingLeft(); - int paddingRight = getPaddingRight(); - contentSize = new Pair<>(getHeight() - paddingTop - paddingBottom, getWidth() - paddingLeft - paddingRight); + if (contentSize == null || spawnSize == null) { + calculateAreaSizes(); + System.out.println(contentSize + " :: " + spawnSize); } bgPainter.draw(canvas, background, contentSize); painter.draw(canvas, board.getGrid(), contentSize); + for (int i = 0; i < spawnCount; i++) { + spawnPainter.draw(canvas,i,spawn.get(i),spawnSize); + } + } + + private void calculateAreaSizes() { + int paddingTop = getPaddingTop(); + int paddingBottom = getPaddingBottom(); + int paddingLeft = getPaddingLeft(); + int paddingRight = getPaddingRight(); + int height = getHeight(); + int width = getWidth(); + int contentHeight = height - paddingTop - paddingBottom; + int contentWidth = width - paddingLeft - paddingRight; + int spawnHeight = contentHeight; + int spawnWidth = contentWidth; + if (contentHeight > contentWidth) { + spawnHeight = contentHeight - contentWidth; + contentHeight = contentWidth; + } else { + spawnWidth = contentWidth - contentHeight; + contentWidth = contentHeight; + } + contentSize = new Pair<>(contentHeight, contentWidth); + spawnSize = new Pair<>(spawnHeight, spawnWidth); + } + + private int divideSide(int sideLength) { + return (int) (sideLength * divison); + } + + private void populateSpawnArea() { + for (int i = 0; i < spawnCount; i++) { + GridObject obj = blocks.get((int) (blocks.size() * Math.random())); + spawn.add(i, obj); + } } } diff --git a/app/src/main/java/org/agp8x/android/games/fillgrid/GroupGridPainter.java b/app/src/main/java/org/agp8x/android/games/fillgrid/GroupGridPainter.java index 965c526..4038c21 100644 --- a/app/src/main/java/org/agp8x/android/games/fillgrid/GroupGridPainter.java +++ b/app/src/main/java/org/agp8x/android/games/fillgrid/GroupGridPainter.java @@ -3,6 +3,7 @@ package org.agp8x.android.games.fillgrid; import android.graphics.Canvas; import android.util.Pair; +import org.agp8x.android.games.fillgrid.data.GridObject; import org.agp8x.android.games.fillgrid.data.GroupCell; import org.agp8x.android.games.fillgrid.data.Offset; @@ -21,7 +22,7 @@ public class GroupGridPainter implements GridPainter { public GroupGridPainter(Offset dimensions, CellPaintProvider styleInfo) { this.dimensions = dimensions; this.styleInfo = styleInfo; - radius = 30; + radius = 30;//TODO dynamic radius to fill area margin = radius + radius / 4; } @@ -32,6 +33,6 @@ public class GroupGridPainter implements GridPainter { private void drawCell(Canvas canvas, Offset offset, GroupCell cell, Pair realDimensions) { Pair origin = new Pair<>((offset.x / (float) dimensions.x) * realDimensions.first, (offset.y / (float) dimensions.y) * realDimensions.second); - canvas.drawCircle(origin.second + margin, origin.first + margin, 30, styleInfo.getPaint(cell)); + canvas.drawCircle(origin.second + margin, origin.first + margin, radius, styleInfo.getPaint(cell)); } } diff --git a/app/src/main/java/org/agp8x/android/games/fillgrid/SpawnPainter.java b/app/src/main/java/org/agp8x/android/games/fillgrid/SpawnPainter.java new file mode 100644 index 0000000..5ba776b --- /dev/null +++ b/app/src/main/java/org/agp8x/android/games/fillgrid/SpawnPainter.java @@ -0,0 +1,15 @@ +package org.agp8x.android.games.fillgrid; + +import android.graphics.Canvas; +import android.util.Pair; + +import org.agp8x.android.games.fillgrid.data.Cell; +import org.agp8x.android.games.fillgrid.data.GridObject; + +/** + * Created by clemensk on 09.04.17. + */ + +public interface SpawnPainter { + void draw(Canvas canvas, int index, GridObject gridObject, Pair dimensions); +} diff --git a/app/src/main/java/org/agp8x/android/games/fillgrid/SpawnPainterGroup.java b/app/src/main/java/org/agp8x/android/games/fillgrid/SpawnPainterGroup.java new file mode 100644 index 0000000..718c151 --- /dev/null +++ b/app/src/main/java/org/agp8x/android/games/fillgrid/SpawnPainterGroup.java @@ -0,0 +1,43 @@ +package org.agp8x.android.games.fillgrid; + +import android.graphics.Canvas; +import android.graphics.Paint; +import android.util.Pair; + +import org.agp8x.android.games.fillgrid.data.GridObject; +import org.agp8x.android.games.fillgrid.data.GroupCell; +import org.agp8x.android.games.fillgrid.data.Offset; + +/** + * Created by clemensk on 09.04.17. + */ + +public class SpawnPainterGroup implements SpawnPainter { + private int objCount; + private int radius; + private int margin; + private CellPaintProvider styleInfo; + + public SpawnPainterGroup(int objCount) { + this.objCount = objCount; + radius = 30;//TODO dynamic radius to fill area + margin = radius + radius / 4; + this.styleInfo = new CellPaintProviderBackground(); + } + + @Override + public void draw(Canvas canvas, int index, GridObject gridObject, Pair dimensions) { + System.out.println(dimensions); + int widthS = Math.max(dimensions.first, dimensions.second); + int height = (int) (Math.min(dimensions.first, dimensions.second) * 0.25f) + widthS; + float widthPerObject = widthS / (1f * objCount); + int width = (int) (index * widthPerObject); + + gridObject.getObjects().forEach((offset, groupCell) -> drawCell(canvas, height, width, offset, groupCell)); + //drawCell(canvas, new Pair<>(height, width), null); + } + + private void drawCell(Canvas canvas, int height, int width, Offset offset, C cell) { + canvas.drawCircle(width + margin+ (offset.x*radius*2), height + margin + (offset.y*radius*2), radius, styleInfo.getPaint(cell)); + } +} diff --git a/app/src/main/java/org/agp8x/android/games/fillgrid/data/Coordinate.java b/app/src/main/java/org/agp8x/android/games/fillgrid/data/Coordinate.java deleted file mode 100644 index fecb450..0000000 --- a/app/src/main/java/org/agp8x/android/games/fillgrid/data/Coordinate.java +++ /dev/null @@ -1,57 +0,0 @@ -package org.agp8x.android.games.fillgrid.data; - -/** - * Created by clemensk on 29.03.17. - */ - -public class Coordinate { - private double x; - private double y; - - public Coordinate() { - } - - public Coordinate(double x, double y) { - this.x = x; - this.y = y; - } - - public double getX() { - return x; - } - - public void setX(double x) { - this.x = x; - } - - public double getY() { - return y; - } - - public void setY(double y) { - this.y = y; - } - - @Override - public boolean equals(Object o) { - if (this == o) return true; - if (o == null || getClass() != o.getClass()) return false; - - Coordinate that = (Coordinate) o; - - if (Double.compare(that.x, x) != 0) return false; - return Double.compare(that.y, y) == 0; - - } - - @Override - public int hashCode() { - int result; - long temp; - temp = Double.doubleToLongBits(x); - result = (int) (temp ^ (temp >>> 32)); - temp = Double.doubleToLongBits(y); - result = 31 * result + (int) (temp ^ (temp >>> 32)); - return result; - } -}