99 lines
2.8 KiB
Dart
99 lines
2.8 KiB
Dart
import 'package:flame/components.dart';
|
|
import 'package:flame_lua_runtime/runtime/display/runtime_viewport.dart';
|
|
import 'package:flutter_test/flutter_test.dart';
|
|
|
|
void main() {
|
|
group('RuntimeViewport', () {
|
|
test('fits design size inside screen with letterboxing', () {
|
|
final transform = RuntimeViewport.compute(
|
|
screenSize: Vector2(1280, 720),
|
|
config: const RuntimeViewportConfig(
|
|
designWidth: 720,
|
|
designHeight: 720,
|
|
),
|
|
);
|
|
|
|
expect(transform.x, 280);
|
|
expect(transform.y, 0);
|
|
expect(transform.width, 720);
|
|
expect(transform.height, 720);
|
|
expect(transform.scaleX, 1);
|
|
expect(transform.scaleY, 1);
|
|
});
|
|
|
|
test('fills screen by preserving aspect ratio and cropping', () {
|
|
final transform = RuntimeViewport.compute(
|
|
screenSize: Vector2(1280, 720),
|
|
config: const RuntimeViewportConfig(
|
|
designWidth: 720,
|
|
designHeight: 720,
|
|
scaleMode: RuntimeScaleMode.fill,
|
|
),
|
|
);
|
|
|
|
expect(transform.x, 0);
|
|
expect(transform.y, -280);
|
|
expect(transform.width, 1280);
|
|
expect(transform.height, 1280);
|
|
expect(transform.scaleX, closeTo(1.777777, 0.00001));
|
|
expect(transform.scaleY, closeTo(1.777777, 0.00001));
|
|
});
|
|
|
|
test('stretches design independently on both axes', () {
|
|
final transform = RuntimeViewport.compute(
|
|
screenSize: Vector2(1440, 720),
|
|
config: const RuntimeViewportConfig(
|
|
designWidth: 720,
|
|
designHeight: 720,
|
|
scaleMode: RuntimeScaleMode.stretch,
|
|
),
|
|
);
|
|
|
|
expect(transform.x, 0);
|
|
expect(transform.y, 0);
|
|
expect(transform.width, 1440);
|
|
expect(transform.height, 720);
|
|
expect(transform.scaleX, 2);
|
|
expect(transform.scaleY, 1);
|
|
});
|
|
|
|
test('centers design without scaling', () {
|
|
final transform = RuntimeViewport.compute(
|
|
screenSize: Vector2(1000, 800),
|
|
config: const RuntimeViewportConfig(
|
|
designWidth: 720,
|
|
designHeight: 720,
|
|
scaleMode: RuntimeScaleMode.none,
|
|
),
|
|
);
|
|
|
|
expect(transform.x, 140);
|
|
expect(transform.y, 40);
|
|
expect(transform.width, 720);
|
|
expect(transform.height, 720);
|
|
expect(transform.scaleX, 1);
|
|
expect(transform.scaleY, 1);
|
|
});
|
|
|
|
test('applies transform to root component', () {
|
|
final root = PositionComponent();
|
|
RuntimeViewport.apply(
|
|
root,
|
|
const RuntimeViewportTransform(
|
|
x: 10,
|
|
y: 20,
|
|
width: 300,
|
|
height: 400,
|
|
scaleX: 2,
|
|
scaleY: 3,
|
|
scaleMode: RuntimeScaleMode.stretch,
|
|
),
|
|
);
|
|
|
|
expect(root.position, Vector2(10, 20));
|
|
expect(root.size, Vector2(300, 400));
|
|
expect(root.scale, Vector2(2, 3));
|
|
});
|
|
});
|
|
}
|