// Path: app/src/main/java/hu/supercluster/gameoflife/game/cellularautomaton/CellularAutomaton.java
// public interface CellularAutomaton<T extends Cell> extends Parcelable, Paintable {
//     int getSizeX();
//     int getSizeY();
//     int getDefaultCellState();
//     void reset();
//     void randomFill(Fill fill);
//     void step();
//     void step(int count);
//     Grid<T> getCurrentState();
//     void setState(Grid<T> grid);
//     Rule<T> getRule();
//     void setRule(Rule<T> rule);
// }
// 
// Path: app/src/main/java/hu/supercluster/gameoflife/game/event/PaintWithBrush.java
// public class PaintWithBrush {
//     public final int x;
//     public final int y;
// 
//     public PaintWithBrush(int x, int y) {
//         this.x = x;
//         this.y = y;
//     }
// }
// 
// Path: app/src/main/java/hu/supercluster/gameoflife/game/manager/GameParams.java
// public class GameParams {
//     private final int screenOrientation;
//     private final Point displaySize;
//     private int gridSizeX;
//     private int gridSizeY;
//     private final int cellSizeInPixels;
//     private final Fill fill;
//     private final CellColors cellColors;
//     private final int fps;
//     private final boolean startPaused;
// 
//     public GameParams(int screenOrientation, Point displaySize, int cellSizeInPixels, Fill fill, CellColors cellColors, int fps, boolean startPaused) {
//         this.screenOrientation = screenOrientation;
//         this.displaySize = displaySize;
//         gridSizeX = displaySize.x / cellSizeInPixels;
//         gridSizeY = displaySize.y / cellSizeInPixels;
//         this.cellSizeInPixels = cellSizeInPixels;
//         this.fill = fill;
//         this.cellColors = cellColors;
//         this.fps = fps;
//         this.startPaused = startPaused;
//     }
// 
//     public int getScreenOrientation() {
//         return screenOrientation;
//     }
// 
//     public Point getDisplaySize() {
//         return displaySize;
//     }
// 
//     public int getGridSizeX() {
//         return gridSizeX;
//     }
// 
//     public int getGridSizeY() {
//         return gridSizeY;
//     }
// 
//     public int getCellSizeInPixels() {
//         return cellSizeInPixels;
//     }
// 
//     public Fill getFill() {
//         return fill;
//     }
// 
//     public CellColors getCellColors() {
//         return cellColors;
//     }
// 
//     public int getFps() {
//         return fps;
//     }
// 
//     public boolean startPaused() {
//         return startPaused;
//     }
// }
// 
// Path: app/src/main/java/hu/supercluster/gameoflife/util/EventBus.java
// public class EventBus extends Bus {
//     private static EventBus instance;
// 
//     private EventBus() {
//         super(ThreadEnforcer.ANY);
//     }
// 
//     public static EventBus getInstance() {
//         if (instance == null) {
//             instance = new EventBus();
//         }
// 
//         return instance;
//     }
// 
//     @Override
//     public void unregister(Object object) {
//         try {
//             super.unregister(object);
// 
//         } catch (IllegalArgumentException e) {
//             e.printStackTrace();
//         }
//     }
// }


import android.content.Context;
import android.util.AttributeSet;
import android.view.MotionEvent;
import android.view.SurfaceHolder;
import android.view.SurfaceView;
import hu.supercluster.gameoflife.game.cellularautomaton.CellularAutomaton;
import hu.supercluster.gameoflife.game.event.PaintWithBrush;
import hu.supercluster.gameoflife.game.manager.GameParams;
import hu.supercluster.gameoflife.util.EventBus;
import hugo.weaving.DebugLog;
package hu.supercluster.gameoflife.app.view;



public class AutomatonView extends SurfaceView implements SurfaceHolder.Callback {
    private CellularAutomaton automaton;
// Path: app/src/main/java/hu/supercluster/gameoflife/game/cellularautomaton/CellularAutomaton.java
// public interface CellularAutomaton<T extends Cell> extends Parcelable, Paintable {
//     int getSizeX();
//     int getSizeY();
//     int getDefaultCellState();
//     void reset();
//     void randomFill(Fill fill);
//     void step();
//     void step(int count);
//     Grid<T> getCurrentState();
//     void setState(Grid<T> grid);
//     Rule<T> getRule();
//     void setRule(Rule<T> rule);
// }
// 
// Path: app/src/main/java/hu/supercluster/gameoflife/game/event/PaintWithBrush.java
// public class PaintWithBrush {
//     public final int x;
//     public final int y;
// 
//     public PaintWithBrush(int x, int y) {
//         this.x = x;
//         this.y = y;
//     }
// }
// 
// Path: app/src/main/java/hu/supercluster/gameoflife/game/manager/GameParams.java
// public class GameParams {
//     private final int screenOrientation;
//     private final Point displaySize;
//     private int gridSizeX;
//     private int gridSizeY;
//     private final int cellSizeInPixels;
//     private final Fill fill;
//     private final CellColors cellColors;
//     private final int fps;
//     private final boolean startPaused;
// 
//     public GameParams(int screenOrientation, Point displaySize, int cellSizeInPixels, Fill fill, CellColors cellColors, int fps, boolean startPaused) {
//         this.screenOrientation = screenOrientation;
//         this.displaySize = displaySize;
//         gridSizeX = displaySize.x / cellSizeInPixels;
//         gridSizeY = displaySize.y / cellSizeInPixels;
//         this.cellSizeInPixels = cellSizeInPixels;
//         this.fill = fill;
//         this.cellColors = cellColors;
//         this.fps = fps;
//         this.startPaused = startPaused;
//     }
// 
//     public int getScreenOrientation() {
//         return screenOrientation;
//     }
// 
//     public Point getDisplaySize() {
//         return displaySize;
//     }
// 
//     public int getGridSizeX() {
//         return gridSizeX;
//     }
// 
//     public int getGridSizeY() {
//         return gridSizeY;
//     }
// 
//     public int getCellSizeInPixels() {
//         return cellSizeInPixels;
//     }
// 
//     public Fill getFill() {
//         return fill;
//     }
// 
//     public CellColors getCellColors() {
//         return cellColors;
//     }
// 
//     public int getFps() {
//         return fps;
//     }
// 
//     public boolean startPaused() {
//         return startPaused;
//     }
// }
// 
// Path: app/src/main/java/hu/supercluster/gameoflife/util/EventBus.java
// public class EventBus extends Bus {
//     private static EventBus instance;
// 
//     private EventBus() {
//         super(ThreadEnforcer.ANY);
//     }
// 
//     public static EventBus getInstance() {
//         if (instance == null) {
//             instance = new EventBus();
//         }
// 
//         return instance;
//     }
// 
//     @Override
//     public void unregister(Object object) {
//         try {
//             super.unregister(object);
// 
//         } catch (IllegalArgumentException e) {
//             e.printStackTrace();
//         }
//     }
// }


// Path: app/src/main/java/hu/supercluster/gameoflife/app/view/AutomatonView.java
import android.content.Context;
import android.util.AttributeSet;
import android.view.MotionEvent;
import android.view.SurfaceHolder;
import android.view.SurfaceView;
import hu.supercluster.gameoflife.game.cellularautomaton.CellularAutomaton;
import hu.supercluster.gameoflife.game.event.PaintWithBrush;
import hu.supercluster.gameoflife.game.manager.GameParams;
import hu.supercluster.gameoflife.util.EventBus;
import hugo.weaving.DebugLog;

package hu.supercluster.gameoflife.app.view;



public class AutomatonView extends SurfaceView implements SurfaceHolder.Callback {
    private CellularAutomaton automaton;
    private GameParams params;