| Index: samples/pop_pop_win/lib/src/stage/square_element.dart
|
| diff --git a/samples/pop_pop_win/lib/src/stage/square_element.dart b/samples/pop_pop_win/lib/src/stage/square_element.dart
|
| new file mode 100644
|
| index 0000000000000000000000000000000000000000..82852af53f63b62d5cc5d265fd361bde94e3f5b2
|
| --- /dev/null
|
| +++ b/samples/pop_pop_win/lib/src/stage/square_element.dart
|
| @@ -0,0 +1,104 @@
|
| +library pop_pop_win.stage.square_element;
|
| +
|
| +import 'package:stagexl/stagexl.dart';
|
| +
|
| +import 'package:pop_pop_win/src/game.dart';
|
| +import 'board_element.dart';
|
| +import 'game_element.dart';
|
| +
|
| +class SquareElement extends Sprite {
|
| + static const int SIZE = 80;
|
| +
|
| + static const List<String> _balloonBits = const [
|
| + 'balloon_pieces_a',
|
| + 'balloon_pieces_b',
|
| + 'balloon_pieces_c',
|
| + 'balloon_pieces_d'
|
| + ];
|
| +
|
| + static const List<String> _numberMap = const [
|
| + "game_board_center",
|
| + "number_one", "number_two",
|
| + "number_three", "number_four",
|
| + "number_five", "number_six",
|
| + "number_seven", "number_eight"
|
| + ];
|
| +
|
| + final int x, y;
|
| + final Bitmap _bitmap = new Bitmap(new BitmapData(SIZE, SIZE, true,
|
| + Color.Transparent));
|
| +
|
| + SquareElement(this.x, this.y) {
|
| + addChild(_bitmap);
|
| +
|
| + onMouseClick.listen(_onClick);
|
| + onMouseRightClick.listen(_onClick);
|
| +
|
| + useHandCursor = true;
|
| + }
|
| +
|
| + void updateState() {
|
| + var textureName;
|
| + switch (squareState) {
|
| + case SquareState.hidden:
|
| + textureName = _getHiddenTexture();
|
| + break;
|
| + case SquareState.flagged:
|
| + textureName = 'balloon_tagged_frozen';
|
| + break;
|
| + case SquareState.revealed:
|
| + textureName = _numberMap[_adjacentCount];
|
| + break;
|
| + case SquareState.bomb:
|
| + textureName = 'crater_b';
|
| + break;
|
| + case SquareState.safe:
|
| + textureName = 'balloon_tagged_bomb';
|
| + break;
|
| + }
|
| +
|
| + useHandCursor = !_game.gameEnded && (squareState == SquareState.hidden ||
|
| + squareState == SquareState.flagged);
|
| +
|
| + _bitmap.bitmapData
|
| + ..clear()
|
| + ..drawPixels(_opaqueAtlas.getBitmapData(textureName),
|
| + new Rectangle(0, 0, SIZE, SIZE), new Point(0, 0));
|
| + }
|
| +
|
| + void _onClick(MouseEvent e) {
|
| + if (!_game.gameEnded) {
|
| + bool alt = (e.type == MouseEvent.RIGHT_CLICK) || e.shiftKey;
|
| + _gameElement.click(x, y, alt);
|
| + }
|
| + }
|
| +
|
| + String toString() => 'Square at [$x, $y]';
|
| +
|
| + String _getHiddenTexture() {
|
| + assert(squareState == SquareState.hidden);
|
| + if (_game.state == GameState.lost) {
|
| + useHandCursor = false;
|
| + final index = (x + y) % _balloonBits.length;
|
| + return _balloonBits[index];
|
| + } else {
|
| + useHandCursor = true;
|
| + return 'balloon';
|
| + }
|
| + }
|
| +
|
| + SquareState get squareState => _game.getSquareState(x, y);
|
| +
|
| + int get _adjacentCount => _game.field.getAdjacentCount(x, y);
|
| +
|
| + BoardElement get _board {
|
| + final BoardElement p = this.parent;
|
| + return p;
|
| + }
|
| +
|
| + GameElement get _gameElement => _board.gameElement;
|
| +
|
| + TextureAtlas get _opaqueAtlas => _board.opaqueAtlas;
|
| +
|
| + Game get _game => _board.game;
|
| +}
|
|
|