diff --git a/lib/main.dart b/lib/main.dart index 1fafa6c..cc96d21 100644 --- a/lib/main.dart +++ b/lib/main.dart @@ -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 createState() => _PlayerState(); +} + +class _PlayerState extends State { + 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, ), ); }