mirror of
https://github.com/flame-engine/flame.git
synced 2025-11-02 20:13:50 +08:00
feat: Possiblity to pass in FilterQuality to tiled layers (#2627)
This makes it possible to pass in `FilterQuality` to the `TiledComponent` and to the layers, since `PaintImage` defaults to `FilterQuality.none`.
This commit is contained in:
@ -17,6 +17,7 @@ class GroupLayer extends RenderableLayer<Group> {
|
||||
required super.parent,
|
||||
required super.map,
|
||||
required super.destTileSize,
|
||||
super.filterQuality,
|
||||
});
|
||||
|
||||
@override
|
||||
|
||||
@ -20,6 +20,7 @@ class FlameImageLayer extends RenderableLayer<ImageLayer> {
|
||||
required super.map,
|
||||
required super.destTileSize,
|
||||
required Image image,
|
||||
super.filterQuality,
|
||||
}) : _image = image {
|
||||
_initImageRepeat();
|
||||
}
|
||||
@ -46,6 +47,7 @@ class FlameImageLayer extends RenderableLayer<ImageLayer> {
|
||||
opacity: opacity,
|
||||
alignment: Alignment.topLeft,
|
||||
repeat: _repeat,
|
||||
filterQuality: filterQuality,
|
||||
);
|
||||
|
||||
canvas.restore();
|
||||
@ -69,6 +71,7 @@ class FlameImageLayer extends RenderableLayer<ImageLayer> {
|
||||
required CameraComponent? camera,
|
||||
required TiledMap map,
|
||||
required Vector2 destTileSize,
|
||||
FilterQuality? filterQuality,
|
||||
Images? images,
|
||||
}) async {
|
||||
return FlameImageLayer(
|
||||
@ -76,6 +79,7 @@ class FlameImageLayer extends RenderableLayer<ImageLayer> {
|
||||
parent: parent,
|
||||
map: map,
|
||||
destTileSize: destTileSize,
|
||||
filterQuality: filterQuality,
|
||||
image: await (images ?? Flame.images).load(layer.image.source!),
|
||||
);
|
||||
}
|
||||
|
||||
@ -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';
|
||||
@ -11,6 +13,7 @@ class ObjectLayer extends RenderableLayer<ObjectGroup> {
|
||||
required super.parent,
|
||||
required super.map,
|
||||
required super.destTileSize,
|
||||
super.filterQuality,
|
||||
});
|
||||
|
||||
@override
|
||||
@ -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,
|
||||
);
|
||||
}
|
||||
|
||||
|
||||
@ -1,3 +1,5 @@
|
||||
import 'dart:ui';
|
||||
|
||||
import 'package:flame/cache.dart';
|
||||
import 'package:flame/components.dart';
|
||||
import 'package:flame/extensions.dart';
|
||||
@ -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({
|
||||
@ -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 {
|
||||
@ -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(
|
||||
@ -55,6 +63,7 @@ abstract class RenderableLayer<T extends Layer> {
|
||||
camera: camera,
|
||||
map: map,
|
||||
destTileSize: destTileSize,
|
||||
filterQuality: filterQuality,
|
||||
images: images,
|
||||
);
|
||||
} else if (layer is ObjectGroup) {
|
||||
@ -62,6 +71,7 @@ abstract class RenderableLayer<T extends Layer> {
|
||||
layer,
|
||||
map,
|
||||
destTileSize,
|
||||
filterQuality,
|
||||
);
|
||||
} else if (layer is Group) {
|
||||
final groupLayer = layer;
|
||||
@ -70,6 +80,7 @@ abstract class RenderableLayer<T extends Layer> {
|
||||
parent: parent,
|
||||
map: map,
|
||||
destTileSize: destTileSize,
|
||||
filterQuality: filterQuality,
|
||||
);
|
||||
}
|
||||
|
||||
|
||||
@ -18,6 +18,7 @@ class HexagonalTileLayer extends FlameTileLayer {
|
||||
required super.tiledAtlas,
|
||||
required super.animationFrames,
|
||||
required super.ignoreFlip,
|
||||
super.filterQuality,
|
||||
});
|
||||
|
||||
@override
|
||||
|
||||
@ -17,6 +17,7 @@ class IsometricTileLayer extends FlameTileLayer {
|
||||
required super.tiledAtlas,
|
||||
required super.animationFrames,
|
||||
required super.ignoreFlip,
|
||||
super.filterQuality,
|
||||
});
|
||||
|
||||
@override
|
||||
|
||||
@ -17,6 +17,7 @@ class OrthogonalTileLayer extends FlameTileLayer {
|
||||
required super.tiledAtlas,
|
||||
required super.animationFrames,
|
||||
required super.ignoreFlip,
|
||||
super.filterQuality,
|
||||
});
|
||||
|
||||
@override
|
||||
|
||||
@ -17,6 +17,7 @@ class StaggeredTileLayer extends FlameTileLayer {
|
||||
required super.tiledAtlas,
|
||||
required super.animationFrames,
|
||||
required super.ignoreFlip,
|
||||
super.filterQuality,
|
||||
});
|
||||
|
||||
@override
|
||||
|
||||
@ -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>[];
|
||||
@ -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({
|
||||
@ -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');
|
||||
@ -80,6 +80,7 @@ abstract class FlameTileLayer extends RenderableLayer<TileLayer> {
|
||||
tiledAtlas: atlas,
|
||||
animationFrames: animationFrames,
|
||||
ignoreFlip: ignoreFlip,
|
||||
filterQuality: filterQuality,
|
||||
);
|
||||
case MapOrientation.staggered:
|
||||
return StaggeredTileLayer(
|
||||
@ -90,6 +91,7 @@ abstract class FlameTileLayer extends RenderableLayer<TileLayer> {
|
||||
tiledAtlas: atlas,
|
||||
animationFrames: animationFrames,
|
||||
ignoreFlip: ignoreFlip,
|
||||
filterQuality: filterQuality,
|
||||
);
|
||||
case MapOrientation.hexagonal:
|
||||
return HexagonalTileLayer(
|
||||
@ -100,6 +102,7 @@ abstract class FlameTileLayer extends RenderableLayer<TileLayer> {
|
||||
tiledAtlas: atlas,
|
||||
animationFrames: animationFrames,
|
||||
ignoreFlip: ignoreFlip,
|
||||
filterQuality: filterQuality,
|
||||
);
|
||||
case MapOrientation.orthogonal:
|
||||
return OrthogonalTileLayer(
|
||||
@ -110,6 +113,7 @@ abstract class FlameTileLayer extends RenderableLayer<TileLayer> {
|
||||
tiledAtlas: atlas,
|
||||
animationFrames: animationFrames,
|
||||
ignoreFlip: ignoreFlip,
|
||||
filterQuality: filterQuality,
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user