OLD | NEW |
| (Empty) |
1 part of pop_pop_win.canvas; | |
2 | |
3 class SquareElement extends Thing { | |
4 static const int _size = 80; | |
5 | |
6 static const List<String> _balloonBits = const['balloon_pieces_a.png', | |
7 'balloon_pieces_b.png', | |
8 'balloon_pieces_c.png', | |
9 'balloon_pieces_d.png']; | |
10 | |
11 static const List<String> _numberMap = const["game_board_center", | |
12 "number_one", "number_two", | |
13 "number_three", "number_four", | |
14 "number_five", "number_six", | |
15 "number_seven", "number_eight"]; | |
16 | |
17 final int x, y; | |
18 | |
19 SquareState _lastDrawingState; | |
20 | |
21 SquareElement(this.x, this.y): super(_size, _size) { | |
22 MouseManager.setClickable(this, true); | |
23 } | |
24 | |
25 void update() { | |
26 if (_lastDrawingState != _squareState) { | |
27 _lastDrawingState = _squareState; | |
28 invalidateDraw(); | |
29 } | |
30 } | |
31 | |
32 void drawOverride(CanvasRenderingContext2D ctx) { | |
33 var textureName; | |
34 switch (_lastDrawingState) { | |
35 case SquareState.hidden: | |
36 textureName = _getHiddenTexture(); | |
37 break; | |
38 case SquareState.flagged: | |
39 textureName = 'balloon_tagged_frozen.png'; | |
40 break; | |
41 case SquareState.revealed: | |
42 final prefix = _numberMap[_adjacentCount]; | |
43 textureName = '$prefix.png'; | |
44 break; | |
45 case SquareState.bomb: | |
46 textureName = 'crater_b.png'; | |
47 break; | |
48 case SquareState.safe: | |
49 textureName = 'balloon_tagged_bomb.png'; | |
50 break; | |
51 } | |
52 | |
53 _textureData.drawTextureKeyAt(ctx, textureName); | |
54 } | |
55 | |
56 String toString() => 'Square at [$x, $y]'; | |
57 | |
58 String _getHiddenTexture() { | |
59 assert(_lastDrawingState == SquareState.hidden); | |
60 if (_game.state == GameState.lost) { | |
61 final index = (x + y) % _balloonBits.length; | |
62 return _balloonBits[index]; | |
63 } else { | |
64 return 'balloon.png'; | |
65 } | |
66 } | |
67 | |
68 SquareState get _squareState => _game.getSquareState(x, y); | |
69 | |
70 int get _adjacentCount => _game.field.getAdjacentCount(x, y); | |
71 | |
72 BoardElement get _board { | |
73 final BoardElement p = this.parent; | |
74 return p; | |
75 } | |
76 | |
77 TextureData get _textureData => _board._textureData; | |
78 | |
79 Game get _game => _board._game; | |
80 } | |
OLD | NEW |