package controller;

import datastruct.Coordinate;
import javafx.beans.property.ReadOnlyLongProperty;
import javafx.scene.paint.Color;
import model.OnChangeListener;

public interface Simulation extends Iterable<Coordinate> {

    int numberOfColumns();
    int numberOfRows();

    void updateToNextGeneration();

    void next(Coordinate coordinate);

    void copy(Coordinate source, Coordinate destination);

    Color getColor(Coordinate coordinate);

    void setChangeListener(Coordinate coordinate, Runnable listener);

    ReadOnlyLongProperty generationNumberProperty();

    void reset();

    void clear();
}