Skip to content

Commit

Permalink
feat: Possiblity to pass in FilterQuality to tiled layers (#2627)
Browse files Browse the repository at this point in the history
This makes it possible to pass in `FilterQuality` to the
`TiledComponent` and to the layers, since `PaintImage` defaults to
`FilterQuality.none`.
  • Loading branch information
spydon committed Aug 7, 2023
1 parent e852064 commit f3de665
Show file tree
Hide file tree
Showing 9 changed files with 35 additions and 6 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -17,6 +17,7 @@ class GroupLayer extends RenderableLayer<Group> {
required super.parent,
required super.map,
required super.destTileSize,
super.filterQuality,
});

@override
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -20,6 +20,7 @@ class FlameImageLayer extends RenderableLayer<ImageLayer> {
required super.map,
required super.destTileSize,
required Image image,
super.filterQuality,
}) : _image = image {
_initImageRepeat();
}
Expand All @@ -46,6 +47,7 @@ class FlameImageLayer extends RenderableLayer<ImageLayer> {
opacity: opacity,
alignment: Alignment.topLeft,
repeat: _repeat,
filterQuality: filterQuality,
);

canvas.restore();
Expand All @@ -69,13 +71,15 @@ class FlameImageLayer extends RenderableLayer<ImageLayer> {
required CameraComponent? camera,
required TiledMap map,
required Vector2 destTileSize,
FilterQuality? filterQuality,
Images? images,
}) async {
return FlameImageLayer(
layer: layer,
parent: parent,
map: map,
destTileSize: destTileSize,
filterQuality: filterQuality,
image: await (images ?? Flame.images).load(layer.image.source!),
);
}
Expand Down
Original file line number Diff line number Diff line change
@@ -1,3 +1,5 @@
import 'dart:ui';

import 'package:flame/components.dart';
import 'package:flame/extensions.dart';
import 'package:flame_tiled/src/renderable_layers/renderable_layer.dart';
Expand All @@ -11,6 +13,7 @@ class ObjectLayer extends RenderableLayer<ObjectGroup> {
required super.parent,
required super.map,
required super.destTileSize,
super.filterQuality,
});

@override
Expand All @@ -26,12 +29,14 @@ class ObjectLayer extends RenderableLayer<ObjectGroup> {
ObjectGroup layer,
TiledMap map,
Vector2 destTileSize,
FilterQuality? filterQuality,
) async {
return ObjectLayer(
layer: layer,
parent: null,
map: map,
destTileSize: destTileSize,
filterQuality: filterQuality,
);
}

Expand Down
Original file line number Diff line number Diff line change
@@ -1,3 +1,5 @@
import 'dart:ui';

import 'package:flame/cache.dart';
import 'package:flame/components.dart';
import 'package:flame/extensions.dart';
Expand All @@ -19,12 +21,16 @@ abstract class RenderableLayer<T extends Layer> {
/// The parent [Group] layer (if it exists)
final GroupLayer? parent;

/// The [FilterQuality] that should be used by all the layers.
final FilterQuality filterQuality;

RenderableLayer({
required this.layer,
required this.parent,
required this.map,
required this.destTileSize,
});
FilterQuality? filterQuality,
}) : filterQuality = filterQuality ?? FilterQuality.none;

/// [load] is a factory method to create [RenderableLayer] by type of [layer].
static Future<RenderableLayer> load({
Expand All @@ -35,6 +41,7 @@ abstract class RenderableLayer<T extends Layer> {
required CameraComponent? camera,
required Map<Tile, TileFrames> animationFrames,
required TiledAtlas atlas,
FilterQuality? filterQuality,
bool? ignoreFlip,
Images? images,
}) async {
Expand All @@ -47,6 +54,7 @@ abstract class RenderableLayer<T extends Layer> {
animationFrames: animationFrames,
atlas: atlas.clone(),
ignoreFlip: ignoreFlip,
filterQuality: filterQuality,
);
} else if (layer is ImageLayer) {
return FlameImageLayer.load(
Expand All @@ -55,13 +63,15 @@ abstract class RenderableLayer<T extends Layer> {
camera: camera,
map: map,
destTileSize: destTileSize,
filterQuality: filterQuality,
images: images,
);
} else if (layer is ObjectGroup) {
return ObjectLayer.load(
layer,
map,
destTileSize,
filterQuality,
);
} else if (layer is Group) {
final groupLayer = layer;
Expand All @@ -70,6 +80,7 @@ abstract class RenderableLayer<T extends Layer> {
parent: parent,
map: map,
destTileSize: destTileSize,
filterQuality: filterQuality,
);
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -18,6 +18,7 @@ class HexagonalTileLayer extends FlameTileLayer {
required super.tiledAtlas,
required super.animationFrames,
required super.ignoreFlip,
super.filterQuality,
});

@override
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -17,6 +17,7 @@ class IsometricTileLayer extends FlameTileLayer {
required super.tiledAtlas,
required super.animationFrames,
required super.ignoreFlip,
super.filterQuality,
});

@override
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -17,6 +17,7 @@ class OrthogonalTileLayer extends FlameTileLayer {
required super.tiledAtlas,
required super.animationFrames,
required super.ignoreFlip,
super.filterQuality,
});

@override
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -17,6 +17,7 @@ class StaggeredTileLayer extends FlameTileLayer {
required super.tiledAtlas,
required super.animationFrames,
required super.ignoreFlip,
super.filterQuality,
});

@override
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -34,7 +34,8 @@ import 'package:meta/meta.dart';
/// {@endtemplate}
@internal
abstract class FlameTileLayer extends RenderableLayer<TileLayer> {
late final _layerPaint = Paint();
late final _layerPaint = Paint()
..color = Color.fromRGBO(255, 255, 255, opacity);
final TiledAtlas tiledAtlas;
late List<List<MutableRSTransform?>> transforms;
final animations = <TileAnimation>[];
Expand All @@ -49,9 +50,8 @@ abstract class FlameTileLayer extends RenderableLayer<TileLayer> {
required this.tiledAtlas,
required this.animationFrames,
required this.ignoreFlip,
}) {
_layerPaint.color = Color.fromRGBO(255, 255, 255, opacity);
}
super.filterQuality,
});

/// {@macro flame_tile_layer}
static FlameTileLayer load({
Expand All @@ -61,10 +61,10 @@ abstract class FlameTileLayer extends RenderableLayer<TileLayer> {
required Vector2 destTileSize,
required Map<Tile, TileFrames> animationFrames,
required TiledAtlas atlas,
FilterQuality? filterQuality,
bool? ignoreFlip,
}) {
ignoreFlip ??= false;

final mapOrientation = map.orientation;
if (mapOrientation == null) {
throw StateError('Map orientation should be present');
Expand All @@ -80,6 +80,7 @@ abstract class FlameTileLayer extends RenderableLayer<TileLayer> {
tiledAtlas: atlas,
animationFrames: animationFrames,
ignoreFlip: ignoreFlip,
filterQuality: filterQuality,
);
case MapOrientation.staggered:
return StaggeredTileLayer(
Expand All @@ -90,6 +91,7 @@ abstract class FlameTileLayer extends RenderableLayer<TileLayer> {
tiledAtlas: atlas,
animationFrames: animationFrames,
ignoreFlip: ignoreFlip,
filterQuality: filterQuality,
);
case MapOrientation.hexagonal:
return HexagonalTileLayer(
Expand All @@ -100,6 +102,7 @@ abstract class FlameTileLayer extends RenderableLayer<TileLayer> {
tiledAtlas: atlas,
animationFrames: animationFrames,
ignoreFlip: ignoreFlip,
filterQuality: filterQuality,
);
case MapOrientation.orthogonal:
return OrthogonalTileLayer(
Expand All @@ -110,6 +113,7 @@ abstract class FlameTileLayer extends RenderableLayer<TileLayer> {
tiledAtlas: atlas,
animationFrames: animationFrames,
ignoreFlip: ignoreFlip,
filterQuality: filterQuality,
);
}
}
Expand Down

0 comments on commit f3de665

Please sign in to comment.