From 85cba657801925465bbbbbe61725369e7867d037 Mon Sep 17 00:00:00 2001 From: Erick Zanardo Date: Thu, 10 Mar 2022 20:17:14 -0300 Subject: [PATCH] feat: bonus letter callback --- lib/game/components/bonus_letter.dart | 32 ++++++++++++++++++++++++++- lib/game/pinball_game.dart | 1 + 2 files changed, 32 insertions(+), 1 deletion(-) diff --git a/lib/game/components/bonus_letter.dart b/lib/game/components/bonus_letter.dart index c8735f4f..413eb833 100644 --- a/lib/game/components/bonus_letter.dart +++ b/lib/game/components/bonus_letter.dart @@ -1,9 +1,20 @@ +// ignore_for_file: avoid_renaming_method_parameters + import 'package:flame/components.dart'; +import 'package:flame_bloc/flame_bloc.dart'; import 'package:flame_forge2d/flame_forge2d.dart'; import 'package:flutter/material.dart'; import 'package:pinball/game/game.dart'; -class BonusLetter extends BodyComponent { +/// {@template bonus_letter} +/// A pass through, [BodyType.static] component, part of +/// a word bonus, which will active its letter once a ball +/// pass through it +/// {@endtemplate} +class BonusLetter extends BodyComponent + with BlocComponent { + + /// {@macro bonus_letter} BonusLetter({ required Vector2 position, required String letter, @@ -14,6 +25,7 @@ class BonusLetter extends BodyComponent { paint = _disablePaint; } + /// The area size of this bonus letter static final areaSize = Vector2.all(4); static final _activePaint = Paint()..color = Colors.green; @@ -51,4 +63,22 @@ class BonusLetter extends BodyComponent { return world.createBody(bodyDef)..createFixture(fixtureDef); } + + /// When called, will activate this letter, if still not activated + void activate() { + // TODO + //gameRef.read().add(BonusLetterActivated(_index)); + + paint = _activePaint; + } +} + +/// Handles contact for [Ball] and [BonusLetter], which trigger [BonusLetter] +/// activate method. +class BonusLetterBallContactCallback + extends ContactCallback { + @override + void begin(Ball ball, BonusLetter bonusLetter, Contact contact) { + bonusLetter.activate(); + } } diff --git a/lib/game/pinball_game.dart b/lib/game/pinball_game.dart index 6a864489..2e85c535 100644 --- a/lib/game/pinball_game.dart +++ b/lib/game/pinball_game.dart @@ -44,6 +44,7 @@ class PinballGame extends Forge2DGame unawaited(_addFlippers()); _addBonusLetters(); + addContactCallback(BonusLetterBallContactCallback()); } void _addBonusLetters() {