+68
-13
@@ -1,3 +1,5 @@
|
||||
import "dart:math" as math;
|
||||
|
||||
import "package:flutter/material.dart";
|
||||
|
||||
// dart format off
|
||||
@@ -33,7 +35,19 @@ class MainApp extends StatelessWidget {
|
||||
spacing: mapSize / 1,
|
||||
textDirection: TextDirection.ltr,
|
||||
children: [
|
||||
Flexible(child: Map()),
|
||||
Flexible(
|
||||
child: Center(
|
||||
child: FittedBox(
|
||||
fit: BoxFit.contain,
|
||||
child: Stack(
|
||||
children: [
|
||||
Map(),
|
||||
Player(),
|
||||
],
|
||||
),
|
||||
),
|
||||
),
|
||||
),
|
||||
Flexible(child: Background()),
|
||||
],
|
||||
),
|
||||
@@ -42,6 +56,52 @@ class MainApp extends StatelessWidget {
|
||||
}
|
||||
}
|
||||
|
||||
// * Player
|
||||
class Player extends StatefulWidget {
|
||||
const new({super.key});
|
||||
|
||||
@override
|
||||
State<Player> createState() => _PlayerState();
|
||||
}
|
||||
|
||||
class _PlayerState extends State<Player> {
|
||||
double playerAngle = 0;
|
||||
double get playerDeltaX => math.cos(playerAngle) * 5;
|
||||
double get playerDeltaY => math.sin(playerAngle) * 5;
|
||||
|
||||
Offset playerPosition = const Offset(1.5 * mapSize, 1.5 * mapSize);
|
||||
|
||||
@override
|
||||
Widget build(BuildContext context) {
|
||||
return CustomPaint(
|
||||
painter: PlayerPainter(offset: playerPosition),
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
class PlayerPainter extends CustomPainter {
|
||||
final Offset offset;
|
||||
|
||||
const new({
|
||||
required this.offset,
|
||||
});
|
||||
|
||||
@override
|
||||
void paint(Canvas canvas, Size size) {
|
||||
final paintYelow = Paint()..color = Colors.yellow;
|
||||
|
||||
canvas.drawRect(
|
||||
Rect.fromLTWH(offset.dx, offset.dy, 8, 8),
|
||||
paintYelow,
|
||||
);
|
||||
}
|
||||
|
||||
@override
|
||||
bool shouldRepaint(covariant oldDelegate) => false;
|
||||
@override
|
||||
bool shouldRebuildSemantics(covariant oldDelegate) => false;
|
||||
}
|
||||
|
||||
// * Map
|
||||
class Map extends StatelessWidget {
|
||||
const new({super.key});
|
||||
@@ -51,18 +111,13 @@ class Map extends StatelessWidget {
|
||||
const double width = mapX * mapSize / 1;
|
||||
const double height = mapY * mapSize / 1;
|
||||
|
||||
return const Center(
|
||||
child: FittedBox(
|
||||
fit: BoxFit.contain,
|
||||
child: CustomPaint(
|
||||
size: Size(width, height),
|
||||
painter: MapPainter(
|
||||
mapData: map,
|
||||
mapX: mapX,
|
||||
mapY: mapY,
|
||||
tileSize: mapSize / 1,
|
||||
),
|
||||
),
|
||||
return const CustomPaint(
|
||||
size: Size(width, height),
|
||||
painter: MapPainter(
|
||||
mapData: map,
|
||||
mapX: mapX,
|
||||
mapY: mapY,
|
||||
tileSize: mapSize / 1,
|
||||
),
|
||||
);
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user