41 lines
1.1 KiB
Dart
41 lines
1.1 KiB
Dart
|
import 'dart:html' as html;
|
||
|
import 'dart:math' as math;
|
||
|
|
||
|
import 'package:rules_of_living/src/Grid.dart';
|
||
|
|
||
|
class Renderer {
|
||
|
bool _dirty = true;
|
||
|
|
||
|
bool _renderEdges = true;
|
||
|
bool get renderEdges => _renderEdges;
|
||
|
void set renderEdges(bool value) {
|
||
|
_renderEdges = value;
|
||
|
_dirty = true;
|
||
|
}
|
||
|
|
||
|
void render(html.CanvasElement canvas, Map<int, bool> map) {
|
||
|
// only renders if any cells changed between renders
|
||
|
if (!_dirty) return;
|
||
|
|
||
|
html.CanvasRenderingContext2D ctx = canvas.getContext('2d');
|
||
|
int brickW = (canvas.width ~/ map.width);
|
||
|
int brickH = (canvas.height ~/ map.height);
|
||
|
ctx.clearRect(0, 0, canvas.width, canvas.height);
|
||
|
for (int i = 0; i < map.length; i++) {
|
||
|
math.Point p = map.toCoordinates(i);
|
||
|
|
||
|
if (_renderEdges) {
|
||
|
ctx.setStrokeColorRgb(100, 100, 100);
|
||
|
ctx.strokeRect(p.x * brickW, p.y * brickH, brickW, brickH);
|
||
|
}
|
||
|
|
||
|
if (map[i] == true)
|
||
|
ctx.setFillColorRgb(155, 155, 255);
|
||
|
else
|
||
|
ctx.setFillColorRgb(0, 0, 0);
|
||
|
ctx.fillRect(p.x * brickW, p.y * brickH, brickW, brickH);
|
||
|
}
|
||
|
_dirty = false;
|
||
|
}
|
||
|
}
|