Skip to content
Draft
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
15 changes: 15 additions & 0 deletions examples/lib/stories/rendering/text_example.dart
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
import 'dart:async';

import 'package:flame/components.dart';
import 'package:flame/effects.dart';
import 'package:flame/game.dart';
import 'package:flame/palette.dart';
import 'package:flame/text.dart';
Expand Down Expand Up @@ -82,6 +83,20 @@ class TextExample extends FlameGame {
margins: EdgeInsets.fromLTRB(10, 10, 10, 10),
),
),
TextComponent(
text: 'I fade in and fade out',
anchor: Anchor.topRight,
position: Vector2(size.x - 50, 20),
children: [
SequenceEffect(
[
OpacityEffect.fadeIn(LinearEffectController(1.5)),
OpacityEffect.fadeOut(LinearEffectController(1.5)),
],
infinite: true,
),
],
),
],
);
}
Expand Down
14 changes: 13 additions & 1 deletion packages/flame/lib/src/components/text_component.dart
Original file line number Diff line number Diff line change
@@ -1,11 +1,13 @@
import 'dart:ui';

import 'package:flame/components.dart';
import 'package:flame/effects.dart';
import 'package:flame/text.dart';
import 'package:flutter/painting.dart';
import 'package:meta/meta.dart';

class TextComponent<T extends TextRenderer> extends PositionComponent {
class TextComponent<T extends TextRenderer> extends PositionComponent
implements OpacityProvider {
TextComponent({
String? text,
T? textRenderer,
Expand Down Expand Up @@ -52,4 +54,14 @@ class TextComponent<T extends TextRenderer> extends PositionComponent {
void render(Canvas canvas) {
_textElement.draw(canvas);
}

@override
set opacity(double opacity) {
textRenderer = textRenderer.copyWithOpacity(opacity) as T;
}

@override
double get opacity {
return textRenderer.opacity;
}
}
10 changes: 10 additions & 0 deletions packages/flame/lib/src/text/renderers/sprite_font_renderer.dart
Original file line number Diff line number Diff line change
Expand Up @@ -56,4 +56,14 @@ class SpriteFontRenderer extends TextRenderer {
),
);
}

@override
TextRenderer copyWithOpacity(double opacity) {
// TODO(erickzanardo): Implement this, keeping as noop for now
return this;
}

@override
// TODO(erickzanardo): Implement this, keeping as noop for now
double get opacity => 1;
}
14 changes: 14 additions & 0 deletions packages/flame/lib/src/text/renderers/text_paint.dart
Original file line number Diff line number Diff line change
Expand Up @@ -54,6 +54,17 @@ class TextPaint extends TextRenderer {
return _textPainterCache.getValue(text)!;
}

@override
TextRenderer copyWithOpacity(double opacity) {
return copyWith(
(style) {
return style.copyWith(
color: style.color?.withValues(alpha: opacity),
);
},
);
}

TextPaint copyWith(
TextStyle Function(TextStyle) transform, {
TextDirection? textDirection,
Expand Down Expand Up @@ -96,4 +107,7 @@ class TextPaint extends TextRenderer {
}
return null;
}

@override
double get opacity => style.color?.a ?? 0;
}
4 changes: 4 additions & 0 deletions packages/flame/lib/src/text/renderers/text_renderer.dart
Original file line number Diff line number Diff line change
Expand Up @@ -11,6 +11,10 @@ abstract class TextRenderer {
return format(text).metrics;
}

TextRenderer copyWithOpacity(double opacity);

double get opacity;

void render(
Canvas canvas,
String text,
Expand Down
Loading