From 2e93aee1f983f4b28f16caebf10a99540e5672ca Mon Sep 17 00:00:00 2001 From: Rafael Almeida Barbosa Date: Sun, 21 Apr 2024 01:07:25 -0300 Subject: [PATCH 1/9] put files example --- example/assets/images/spritefusion/map.json | 400 ++++++++++++++++++ .../images/spritefusion/spritesheet.png | Bin 0 -> 1660 bytes 2 files changed, 400 insertions(+) create mode 100644 example/assets/images/spritefusion/map.json create mode 100644 example/assets/images/spritefusion/spritesheet.png diff --git a/example/assets/images/spritefusion/map.json b/example/assets/images/spritefusion/map.json new file mode 100644 index 000000000..f3021f2db --- /dev/null +++ b/example/assets/images/spritefusion/map.json @@ -0,0 +1,400 @@ +{ + "tileSize": 16, + "mapWidth": 7, + "mapHeight": 8, + "layers": [ + { + "name": "DECORATION", + "tiles": [ + { + "id": "0", + "x": 2, + "y": 5 + }, + { + "id": "0", + "x": 5, + "y": 5 + }, + { + "id": "1", + "x": 4, + "y": 3 + }, + { + "id": "1", + "x": 1, + "y": 3 + } + ], + "collider": false + }, + { + "name": "WALLS", + "tiles": [ + { + "id": "2", + "x": 1, + "y": 0 + }, + { + "id": "3", + "x": 1, + "y": 1 + }, + { + "id": "2", + "x": 2, + "y": 0 + }, + { + "id": "2", + "x": 3, + "y": 0 + }, + { + "id": "3", + "x": 3, + "y": 1 + }, + { + "id": "2", + "x": 4, + "y": 0 + }, + { + "id": "3", + "x": 4, + "y": 1 + }, + { + "id": "2", + "x": 5, + "y": 0 + }, + { + "id": "4", + "x": 2, + "y": 1 + }, + { + "id": "4", + "x": 5, + "y": 1 + }, + { + "id": "5", + "x": 0, + "y": 1 + }, + { + "id": "6", + "x": 0, + "y": 2 + }, + { + "id": "6", + "x": 0, + "y": 3 + }, + { + "id": "6", + "x": 0, + "y": 4 + }, + { + "id": "6", + "x": 0, + "y": 5 + }, + { + "id": "7", + "x": 6, + "y": 2 + }, + { + "id": "7", + "x": 6, + "y": 3 + }, + { + "id": "7", + "x": 6, + "y": 4 + }, + { + "id": "7", + "x": 6, + "y": 5 + }, + { + "id": "8", + "x": 6, + "y": 1 + }, + { + "id": "9", + "x": 0, + "y": 0 + }, + { + "id": "10", + "x": 6, + "y": 0 + }, + { + "id": "11", + "x": 0, + "y": 7 + }, + { + "id": "11", + "x": 1, + "y": 7 + }, + { + "id": "11", + "x": 2, + "y": 7 + }, + { + "id": "11", + "x": 3, + "y": 7 + }, + { + "id": "11", + "x": 4, + "y": 7 + }, + { + "id": "11", + "x": 5, + "y": 7 + }, + { + "id": "11", + "x": 6, + "y": 7 + }, + { + "id": "12", + "x": 0, + "y": 6 + }, + { + "id": "13", + "x": 6, + "y": 6 + }, + { + "id": "14", + "x": 1, + "y": 6 + }, + { + "id": "14", + "x": 2, + "y": 6 + }, + { + "id": "14", + "x": 3, + "y": 6 + }, + { + "id": "14", + "x": 4, + "y": 6 + }, + { + "id": "14", + "x": 5, + "y": 6 + } + ], + "collider": false + }, + { + "name": "GOUND", + "tiles": [ + { + "id": "15", + "x": 0, + "y": 2 + }, + { + "id": "15", + "x": 0, + "y": 3 + }, + { + "id": "15", + "x": 0, + "y": 4 + }, + { + "id": "15", + "x": 0, + "y": 5 + }, + { + "id": "15", + "x": 0, + "y": 6 + }, + { + "id": "15", + "x": 1, + "y": 6 + }, + { + "id": "15", + "x": 1, + "y": 3 + }, + { + "id": "15", + "x": 1, + "y": 2 + }, + { + "id": "15", + "x": 2, + "y": 2 + }, + { + "id": "15", + "x": 3, + "y": 2 + }, + { + "id": "15", + "x": 3, + "y": 5 + }, + { + "id": "15", + "x": 2, + "y": 3 + }, + { + "id": "15", + "x": 2, + "y": 6 + }, + { + "id": "15", + "x": 4, + "y": 2 + }, + { + "id": "15", + "x": 5, + "y": 2 + }, + { + "id": "15", + "x": 6, + "y": 2 + }, + { + "id": "15", + "x": 6, + "y": 3 + }, + { + "id": "15", + "x": 6, + "y": 4 + }, + { + "id": "15", + "x": 6, + "y": 5 + }, + { + "id": "15", + "x": 6, + "y": 6 + }, + { + "id": "15", + "x": 5, + "y": 5 + }, + { + "id": "15", + "x": 5, + "y": 4 + }, + { + "id": "16", + "x": 4, + "y": 5 + }, + { + "id": "16", + "x": 4, + "y": 4 + }, + { + "id": "16", + "x": 4, + "y": 3 + }, + { + "id": "16", + "x": 3, + "y": 3 + }, + { + "id": "16", + "x": 3, + "y": 4 + }, + { + "id": "16", + "x": 2, + "y": 4 + }, + { + "id": "16", + "x": 1, + "y": 4 + }, + { + "id": "16", + "x": 1, + "y": 5 + }, + { + "id": "16", + "x": 2, + "y": 5 + }, + { + "id": "16", + "x": 3, + "y": 6 + }, + { + "id": "16", + "x": 4, + "y": 6 + }, + { + "id": "16", + "x": 5, + "y": 6 + }, + { + "id": "16", + "x": 5, + "y": 3 + } + ], + "collider": false + } + ] +} \ No newline at end of file diff --git a/example/assets/images/spritefusion/spritesheet.png b/example/assets/images/spritefusion/spritesheet.png new file mode 100644 index 0000000000000000000000000000000000000000..a9fe48546ea6d107c19156d28390d11e438c898e GIT binary patch literal 1660 zcmV-?27~#DP)Px*Hc3Q5RCr$PTu+EjQ53%;WnrO^KUtX~MOnzkY)D}zN=C_olv3EppGcyR4b#k$ zg%lc;9ZHeLMixTJ)XYl$#Oy4ThR(}*o$q|-{`<~-?|bi?_ibk0efQ7#^SkGqd(Qp7 zzW)CHzvlmE<+|oTElxy)m>8e}=(Q z8&2vP5AQA?9?aK2IdZpUE!!NlosZYb#3l@o6<@0l8mW?Fh*GI06w6xRt;D0Vui5^Y^rRC9$OZi&c51cYZ z0)Vg8w{2iUZUJJH4}AduZzn&;4$J$)_#yz{QaD;Tt|V-Kx@wPkIr+|9`29Yo^X!~8 z+5fZ+$HO=-RQgW(p97Bzut)&#wORlG%#43{ZC0#a-?pozcU1vE#|RV#0sy9GKQm+F zi}JSvE52vX6aXpLtb_}|9e@A;1}S>snZJ`<0JOP2)MBKv0I(kV_!wU<`R9XED>DG_ z4*=lfx;bs_Au#~bL}{aKT?GKT08qx*=B*inF9vs*(+3ab=H2#=S^!i$WegP~DFuL# z3II}|DuK}EhiTv4Qwt63cnJXa=KpAG_r(A_UXWZ*R{=nSK)QRmZ@0Yz2I=mjN~h9- zK71#@8jr_bB@F^yN~Wh6Ti`f6Z6L^9C_pK2%x4>!W z$}zChQve2Yfa;hJ?%EVCz$WZi06>3w3}N z-cta&0AQG&0$e~q#bc0}!Ue zhyk{Iywg@Y080>>2asY5DF=Y-R>A`Kc82smMJ<3PQf@wcZualo*tQfDSh$ez8Qz8D z0em?C-x1N3%a<&Gbl&HQH7u+(03g*g31}JsaK*Y5=_=yb03s!VFbE7;OB!Ef5ZG1? zJh69IUJOFNj2S*|&N1M#S&L4_g9V^bG@bkSnd|22#iIr)WIWQwXL#4`PpxAB3IG(O z&0k7+@1oEes#NJdfUn+Z60c+~DG!_8pjE(_PGZ4DdT|(8) zQ5H`{SO5(GvLF!i0HJ5+vV;|?RLlc}(9dfIxJFqg8=y7yS{eXk765&S@9d1nrPK_B zDmo+&AeCBu@j%^=fyn>>0(J=y-*ZK1qu7)H;B$rC2dH}xr~yDnd4MXq04<2h;;Cve zK;{CZ7{KOFrKE{g_$kKo?*zoe15zF!1x>a&w1p#SUf);aT>NA)0Qy1SJvJKvY_)n^ z80!4o)Vhem8b7}qAeDt-9!|F}o}p_?E`ag_eT$@@-)qp^hlstO(NYWW)vggF5`ujI z03mYa`2fI`Ak6`DN&w&r#)}v9FZKxmK#}xQ07yLB_~yWgRX)s{BnFVIf>hte}N!~pfzp^AeB04nj-e{kah>aRl;2MqvJ z;;a8)6#$x3Km!2vZ~fL^g!SeizY+#)bn^ZFrWjOj0Q>|0DXVh5;!O(x0000 Date: Sun, 21 Apr 2024 02:17:09 -0300 Subject: [PATCH 2/9] improvements in the struture to support other map origin --- .../lib/pages/collision/collision_page.dart | 2 +- example/lib/pages/enemy/enemy_page.dart | 2 +- example/lib/pages/forces/forces_page.dart | 2 +- example/lib/pages/home/home_page.dart | 7 ++ .../pages/input/drag/drag_gesture_page.dart | 2 +- .../pages/input/keyboard/keyboard_page.dart | 2 +- .../pages/input/mouse/mouse_input_page.dart | 2 +- .../move_camera_mouse/move_camera_page.dart | 2 +- .../lib/pages/input/tap/tap_gesture_page.dart | 2 +- example/lib/pages/lighting/lighting_page.dart | 2 +- .../map/spritefusion/spritefusion_page.dart | 21 ++++ .../pages/map/tiled/tiled_network_page.dart | 2 +- example/lib/pages/map/tiled/tiled_page.dart | 2 +- .../lib/pages/mini_games/lpc/lpc_game.dart | 2 +- .../multi_scenario/maps/map_biome_1.dart | 2 +- .../multi_scenario/maps/map_biome_2.dart | 2 +- .../mini_games/platform/platform_game.dart | 2 +- .../simple_example/simple_example_game.dart | 2 +- .../mini_games/tiled_map/game_tiled_map.dart | 2 +- .../top_down_game/top_down_game.dart | 2 +- .../bonfire/bonfire_parallax_page.dart | 2 +- .../pages/parallax/bonfire/parallax_page.dart | 2 +- .../pages/parallax/flame/parallax_page.dart | 2 +- .../pages/path_finding/path_finding_page.dart | 2 +- .../player/platform/platform_player_page.dart | 2 +- .../player/rotation/rotation_player_page.dart | 2 +- .../player/simple/simple_player_page.dart | 2 +- example/pubspec.yaml | 1 + lib/bonfire.dart | 21 ++-- lib/map/base/tile_layer_component.dart | 10 +- .../builder/spritefusion_world_builder.dart | 38 ++++++ .../spritefusion/model/spritefucion_map.dart | 110 ++++++++++++++++++ .../model/spritefusion_layer.dart | 13 +++ .../reader/spritefusion_asset_reader.dart | 28 +++++ .../world_map_by_spritefusion.dart | 27 +++++ .../tiled/builder/tiled_world_builder.dart | 6 +- .../cache_provider/tiled_cache_provider.dart | 0 .../tiled_memory_cache_provider.dart | 2 +- .../model/tiled_data_object_collision.dart | 0 .../tiled/model/tiled_item_tile_set.dart | 0 .../tiled/model/tiled_object_properties.dart | 0 .../tiled/model/tiled_world_data.dart | 0 .../tiled/reader/tiled_asset_reader.dart | 5 +- .../tiled/reader/tiled_network_reader.dart | 4 +- .../tiled/world_map_by_tiled.dart} | 5 +- lib/map/util/world_map_reader.dart | 42 +++++++ lib/tiled/reader/tiled_reader.dart | 28 ----- 47 files changed, 344 insertions(+), 74 deletions(-) create mode 100644 example/lib/pages/map/spritefusion/spritefusion_page.dart create mode 100644 lib/map/spritefusion/builder/spritefusion_world_builder.dart create mode 100644 lib/map/spritefusion/model/spritefucion_map.dart create mode 100644 lib/map/spritefusion/model/spritefusion_layer.dart create mode 100644 lib/map/spritefusion/reader/spritefusion_asset_reader.dart create mode 100644 lib/map/spritefusion/world_map_by_spritefusion.dart rename lib/{ => map}/tiled/builder/tiled_world_builder.dart (99%) rename lib/{ => map}/tiled/cache_provider/tiled_cache_provider.dart (100%) rename lib/{ => map}/tiled/cache_provider/tiled_memory_cache_provider.dart (90%) rename lib/{ => map}/tiled/model/tiled_data_object_collision.dart (100%) rename lib/{ => map}/tiled/model/tiled_item_tile_set.dart (100%) rename lib/{ => map}/tiled/model/tiled_object_properties.dart (100%) rename lib/{ => map}/tiled/model/tiled_world_data.dart (100%) rename lib/{ => map}/tiled/reader/tiled_asset_reader.dart (85%) rename lib/{ => map}/tiled/reader/tiled_network_reader.dart (97%) rename lib/{tiled/map_world_by_tiled.dart => map/tiled/world_map_by_tiled.dart} (82%) create mode 100644 lib/map/util/world_map_reader.dart delete mode 100644 lib/tiled/reader/tiled_reader.dart diff --git a/example/lib/pages/collision/collision_page.dart b/example/lib/pages/collision/collision_page.dart index 172dddab8..9ef57e33b 100644 --- a/example/lib/pages/collision/collision_page.dart +++ b/example/lib/pages/collision/collision_page.dart @@ -10,7 +10,7 @@ class CollisionPage extends StatelessWidget { const tileSize = 16.0; return BonfireWidget( map: WorldMapByTiled( - TiledReader.asset('tiled/collision.json'), + WorldMapReader.fromAsset('tiled/collision.json'), ), components: [AddCollisionComponent()], cameraConfig: CameraConfig( diff --git a/example/lib/pages/enemy/enemy_page.dart b/example/lib/pages/enemy/enemy_page.dart index 2a94b5247..bfb548df2 100644 --- a/example/lib/pages/enemy/enemy_page.dart +++ b/example/lib/pages/enemy/enemy_page.dart @@ -12,7 +12,7 @@ class EnemyPage extends StatelessWidget { const tileSize = 16.0; return BonfireWidget( map: WorldMapByTiled( - TiledReader.asset('tiled/punnyworld/simple_map.tmj'), + WorldMapReader.fromAsset('tiled/punnyworld/simple_map.tmj'), objectsBuilder: { 'range': (properties) => RageEnemy(position: properties.position), 'melee': (properties) => MeleeEnemy(position: properties.position), diff --git a/example/lib/pages/forces/forces_page.dart b/example/lib/pages/forces/forces_page.dart index 4a2f33e5f..16daf8518 100644 --- a/example/lib/pages/forces/forces_page.dart +++ b/example/lib/pages/forces/forces_page.dart @@ -11,7 +11,7 @@ class ForcesPage extends StatelessWidget { const tileSize = 16.0; return BonfireWidget( map: WorldMapByTiled( - TiledReader.asset('platform/simple_map_gem.tmj'), + WorldMapReader.fromAsset('platform/simple_map_gem.tmj'), objectsBuilder: { 'gem_acceleration': (prop) => ForcesGem( position: prop.position, diff --git a/example/lib/pages/home/home_page.dart b/example/lib/pages/home/home_page.dart index 6383dc7d4..c0738d3c9 100644 --- a/example/lib/pages/home/home_page.dart +++ b/example/lib/pages/home/home_page.dart @@ -10,6 +10,7 @@ import 'package:example/pages/input/mouse/mouse_input_page.dart'; import 'package:example/pages/input/move_camera_mouse/move_camera_page.dart'; import 'package:example/pages/input/tap/tap_gesture_page.dart'; import 'package:example/pages/lighting/lighting_page.dart'; +import 'package:example/pages/map/spritefusion/spritefusion_page.dart'; import 'package:example/pages/map/terrain_builder/terrain_builder_page.dart'; import 'package:example/pages/map/tiled/tiled_network_page.dart'; import 'package:example/pages/map/tiled/tiled_page.dart'; @@ -124,6 +125,12 @@ class _HomePageState extends State { codeUrl: 'https://github.com/RafaelBarbosatec/bonfire/blob/develop/example/lib/pages/map/tiled', ), + ItemDrawer( + name: 'Using Spritefusion', + builder: (_) => const SpritefusionPage(), + codeUrl: + 'https://github.com/RafaelBarbosatec/bonfire/blob/develop/example/lib/pages/map/spritefusion', + ), ItemDrawer( name: 'Using matrix', builder: (_) => const TerrainBuilderPage(), diff --git a/example/lib/pages/input/drag/drag_gesture_page.dart b/example/lib/pages/input/drag/drag_gesture_page.dart index 895b6e468..b59e0edff 100644 --- a/example/lib/pages/input/drag/drag_gesture_page.dart +++ b/example/lib/pages/input/drag/drag_gesture_page.dart @@ -10,7 +10,7 @@ class DragGesturePage extends StatelessWidget { const tileSize = 16.0; return BonfireWidget( map: WorldMapByTiled( - TiledReader.asset('tiled/tiled_example.tmj'), + WorldMapReader.fromAsset('tiled/tiled_example.tmj'), ), cameraConfig: CameraConfig( zoom: getZoomFromMaxVisibleTile(context, tileSize, 30), diff --git a/example/lib/pages/input/keyboard/keyboard_page.dart b/example/lib/pages/input/keyboard/keyboard_page.dart index 46fa292e5..52d404372 100644 --- a/example/lib/pages/input/keyboard/keyboard_page.dart +++ b/example/lib/pages/input/keyboard/keyboard_page.dart @@ -10,7 +10,7 @@ class KeyboardPage extends StatelessWidget { const tileSize = 16.0; return BonfireWidget( map: WorldMapByTiled( - TiledReader.asset('tiled/tiled_example.tmj'), + WorldMapReader.fromAsset('tiled/tiled_example.tmj'), ), cameraConfig: CameraConfig( zoom: getZoomFromMaxVisibleTile(context, tileSize, 30), diff --git a/example/lib/pages/input/mouse/mouse_input_page.dart b/example/lib/pages/input/mouse/mouse_input_page.dart index 77bc9931b..b682a05b7 100644 --- a/example/lib/pages/input/mouse/mouse_input_page.dart +++ b/example/lib/pages/input/mouse/mouse_input_page.dart @@ -10,7 +10,7 @@ class MouseInputPage extends StatelessWidget { const tileSize = 16.0; return BonfireWidget( map: WorldMapByTiled( - TiledReader.asset('tiled/tiled_example.tmj'), + WorldMapReader.fromAsset('tiled/tiled_example.tmj'), ), cameraConfig: CameraConfig( zoom: getZoomFromMaxVisibleTile(context, tileSize, 30), diff --git a/example/lib/pages/input/move_camera_mouse/move_camera_page.dart b/example/lib/pages/input/move_camera_mouse/move_camera_page.dart index d6c0473a5..1d2b91032 100644 --- a/example/lib/pages/input/move_camera_mouse/move_camera_page.dart +++ b/example/lib/pages/input/move_camera_mouse/move_camera_page.dart @@ -10,7 +10,7 @@ class MoveCameraPage extends StatelessWidget { const tileSize = 16.0; return BonfireWidget( map: WorldMapByTiled( - TiledReader.asset('tiled/tiled_example.tmj'), + WorldMapReader.fromAsset('tiled/tiled_example.tmj'), ), cameraConfig: CameraConfig( zoom: getZoomFromMaxVisibleTile(context, tileSize, 30), diff --git a/example/lib/pages/input/tap/tap_gesture_page.dart b/example/lib/pages/input/tap/tap_gesture_page.dart index c0548a986..9570a30e6 100644 --- a/example/lib/pages/input/tap/tap_gesture_page.dart +++ b/example/lib/pages/input/tap/tap_gesture_page.dart @@ -10,7 +10,7 @@ class TapGesturePage extends StatelessWidget { const tileSize = 16.0; return BonfireWidget( map: WorldMapByTiled( - TiledReader.asset('tiled/tiled_example.tmj'), + WorldMapReader.fromAsset('tiled/tiled_example.tmj'), ), cameraConfig: CameraConfig( zoom: getZoomFromMaxVisibleTile(context, tileSize, 30), diff --git a/example/lib/pages/lighting/lighting_page.dart b/example/lib/pages/lighting/lighting_page.dart index 76facd749..972620065 100644 --- a/example/lib/pages/lighting/lighting_page.dart +++ b/example/lib/pages/lighting/lighting_page.dart @@ -10,7 +10,7 @@ class LightingPage extends StatelessWidget { const tileSize = 16.0; return BonfireWidget( map: WorldMapByTiled( - TiledReader.asset('tiled/tiled_example.tmj'), + WorldMapReader.fromAsset('tiled/tiled_example.tmj'), objectsBuilder: { 'torch': (prop) => SimpleTorch(prop.position), }, diff --git a/example/lib/pages/map/spritefusion/spritefusion_page.dart b/example/lib/pages/map/spritefusion/spritefusion_page.dart new file mode 100644 index 000000000..ad29d15a1 --- /dev/null +++ b/example/lib/pages/map/spritefusion/spritefusion_page.dart @@ -0,0 +1,21 @@ +import 'package:bonfire/bonfire.dart'; +import 'package:flutter/material.dart'; + +class SpritefusionPage extends StatelessWidget { + const SpritefusionPage({Key? key}) : super(key: key); + + @override + Widget build(BuildContext context) { + const tileSize = 16.0; + return BonfireWidget( + joystick: Joystick(directional: JoystickDirectional()), + map: WorldMapBySpritefusion( + WorldMapReader.fromAsset('spritefusion/map.json'), + ), + cameraConfig: CameraConfig( + zoom: getZoomFromMaxVisibleTile(context, tileSize, 20), + initPosition: Vector2(tileSize * 5, tileSize * 5), + ), + ); + } +} diff --git a/example/lib/pages/map/tiled/tiled_network_page.dart b/example/lib/pages/map/tiled/tiled_network_page.dart index f836d10c5..9c1e2db9b 100644 --- a/example/lib/pages/map/tiled/tiled_network_page.dart +++ b/example/lib/pages/map/tiled/tiled_network_page.dart @@ -44,7 +44,7 @@ class _TiledNetworkPageState extends State child: BonfireWidget( joystick: Joystick(directional: JoystickDirectional()), map: WorldMapByTiled( - TiledReader.network( + WorldMapReader.fromNetwork( Uri.parse( 'http://rafaelbarbosatec.github.io/tiled/my_map.json', ), diff --git a/example/lib/pages/map/tiled/tiled_page.dart b/example/lib/pages/map/tiled/tiled_page.dart index f305ff54c..22dd4d9ad 100644 --- a/example/lib/pages/map/tiled/tiled_page.dart +++ b/example/lib/pages/map/tiled/tiled_page.dart @@ -11,7 +11,7 @@ class TiledPage extends StatelessWidget { return BonfireWidget( joystick: Joystick(directional: JoystickDirectional()), map: WorldMapByTiled( - TiledReader.asset('tiled/tiled_example.tmj'), + WorldMapReader.fromAsset('tiled/tiled_example.tmj'), objectsBuilder: { 'spikes': (props) => Spikes( props.position, diff --git a/example/lib/pages/mini_games/lpc/lpc_game.dart b/example/lib/pages/mini_games/lpc/lpc_game.dart index 27192cd87..c6cebc65a 100644 --- a/example/lib/pages/mini_games/lpc/lpc_game.dart +++ b/example/lib/pages/mini_games/lpc/lpc_game.dart @@ -29,7 +29,7 @@ class LPCGame extends StatelessWidget { directional: JoystickDirectional(), ), map: WorldMapByTiled( - TiledReader.asset('tiled/mapa2.json'), + WorldMapReader.fromAsset('tiled/mapa2.json'), forceTileSize: Vector2(32, 32), ), cameraConfig: CameraConfig(zoom: 2), diff --git a/example/lib/pages/mini_games/multi_scenario/maps/map_biome_1.dart b/example/lib/pages/mini_games/multi_scenario/maps/map_biome_1.dart index 545ecba69..9702f2493 100644 --- a/example/lib/pages/mini_games/multi_scenario/maps/map_biome_1.dart +++ b/example/lib/pages/mini_games/multi_scenario/maps/map_biome_1.dart @@ -26,7 +26,7 @@ class MapBiome1 extends StatelessWidget { initDirection: showInEnum.direction, ), map: WorldMapByTiled( - TiledReader.asset(MultiScenarioAssets.mapBiome1), + WorldMapReader.fromAsset(MultiScenarioAssets.mapBiome1), forceTileSize: Vector2.all(defaultTileSize), objectsBuilder: { 'sensorLeft': (p) => ExitMapSensor( diff --git a/example/lib/pages/mini_games/multi_scenario/maps/map_biome_2.dart b/example/lib/pages/mini_games/multi_scenario/maps/map_biome_2.dart index 987b3067b..dfb46dd43 100644 --- a/example/lib/pages/mini_games/multi_scenario/maps/map_biome_2.dart +++ b/example/lib/pages/mini_games/multi_scenario/maps/map_biome_2.dart @@ -28,7 +28,7 @@ class MapBiome2 extends StatelessWidget { initDirection: showInEnum.direction, ), map: WorldMapByTiled( - TiledReader.asset(MultiScenarioAssets.mapBiome2), + WorldMapReader.fromAsset(MultiScenarioAssets.mapBiome2), forceTileSize: Vector2.all(defaultTileSize), objectsBuilder: { 'sensorLeft': (p) => ExitMapSensor( diff --git a/example/lib/pages/mini_games/platform/platform_game.dart b/example/lib/pages/mini_games/platform/platform_game.dart index 80e5a22bf..4cd9ecb32 100644 --- a/example/lib/pages/mini_games/platform/platform_game.dart +++ b/example/lib/pages/mini_games/platform/platform_game.dart @@ -20,7 +20,7 @@ class _PlatformGameState extends State { return BonfireWidget( key: _gameKey, map: WorldMapByTiled( - TiledReader.asset('platform/platform_map.tmj'), + WorldMapReader.fromAsset('platform/platform_map.tmj'), objectsBuilder: { 'frog': (properties) => FrogEnemy( position: properties.position, diff --git a/example/lib/pages/mini_games/simple_example/simple_example_game.dart b/example/lib/pages/mini_games/simple_example/simple_example_game.dart index e2eb80a95..cc15d0a0a 100644 --- a/example/lib/pages/mini_games/simple_example/simple_example_game.dart +++ b/example/lib/pages/mini_games/simple_example/simple_example_game.dart @@ -26,7 +26,7 @@ class SimpleExampleGame extends StatelessWidget { directional: JoystickDirectional(), ), map: WorldMapByTiled( - TiledReader.asset('tiled/mapa2.json'), + WorldMapReader.fromAsset('tiled/mapa2.json'), forceTileSize: Vector2.all(32), objectsBuilder: { 'goblin': (properties) => MyEnemy(properties.position), diff --git a/example/lib/pages/mini_games/tiled_map/game_tiled_map.dart b/example/lib/pages/mini_games/tiled_map/game_tiled_map.dart index c460d007b..ceeae1326 100644 --- a/example/lib/pages/mini_games/tiled_map/game_tiled_map.dart +++ b/example/lib/pages/mini_games/tiled_map/game_tiled_map.dart @@ -66,7 +66,7 @@ class GameTiledMap extends StatelessWidget { ), interface: KnightInterface(), map: WorldMapByTiled( - TiledReader.asset('tiled/mapa$map.json'), + WorldMapReader.fromAsset('tiled/mapa$map.json'), forceTileSize: Vector2(DungeonMap.tileSize, DungeonMap.tileSize), objectsBuilder: { 'goblin': (properties) => Goblin(properties.position), diff --git a/example/lib/pages/mini_games/top_down_game/top_down_game.dart b/example/lib/pages/mini_games/top_down_game/top_down_game.dart index 5a93b581c..61f562744 100644 --- a/example/lib/pages/mini_games/top_down_game/top_down_game.dart +++ b/example/lib/pages/mini_games/top_down_game/top_down_game.dart @@ -23,7 +23,7 @@ class TopDownGame extends StatelessWidget { Widget build(BuildContext context) { return BonfireWidget( map: WorldMapByTiled( - TiledReader.asset('tiled/top_down/map.json'), + WorldMapReader.fromAsset('tiled/top_down/map.json'), objectsBuilder: { 'enemy': (prop) => ZombieEnemy(prop.position), 'armchair': (prop) => ArmchairDecoration(prop.position), diff --git a/example/lib/pages/parallax/bonfire/bonfire_parallax_page.dart b/example/lib/pages/parallax/bonfire/bonfire_parallax_page.dart index e21b7814d..4f1b6b4c3 100644 --- a/example/lib/pages/parallax/bonfire/bonfire_parallax_page.dart +++ b/example/lib/pages/parallax/bonfire/bonfire_parallax_page.dart @@ -19,7 +19,7 @@ class BonfireParallaxPage extends StatelessWidget { ], ), map: WorldMapByTiled( - TiledReader.asset('platform/parallax_map.tmj'), + WorldMapReader.fromAsset('platform/parallax_map.tmj'), ), background: BonfireParallaxBackground(), globalForces: [GravityForce2D()], diff --git a/example/lib/pages/parallax/bonfire/parallax_page.dart b/example/lib/pages/parallax/bonfire/parallax_page.dart index 773812bd6..1918d5436 100644 --- a/example/lib/pages/parallax/bonfire/parallax_page.dart +++ b/example/lib/pages/parallax/bonfire/parallax_page.dart @@ -13,7 +13,7 @@ class ParallaxPage extends StatelessWidget { directional: JoystickDirectional(), ), map: WorldMapByTiled( - TiledReader.asset('platform/parallax_map.tmj'), + WorldMapReader.fromAsset('platform/parallax_map.tmj'), ), background: ParallaxBackground(), globalForces: [GravityForce2D()], diff --git a/example/lib/pages/parallax/flame/parallax_page.dart b/example/lib/pages/parallax/flame/parallax_page.dart index fe55c6b86..e53ac6f93 100644 --- a/example/lib/pages/parallax/flame/parallax_page.dart +++ b/example/lib/pages/parallax/flame/parallax_page.dart @@ -19,7 +19,7 @@ class ParallaxPage extends StatelessWidget { ], ), map: WorldMapByTiled( - TiledReader.asset('platform/parallax_map.tmj'), + WorldMapReader.fromAsset('platform/parallax_map.tmj'), ), background: ParallaxBackground(), globalForces: [GravityForce2D()], diff --git a/example/lib/pages/path_finding/path_finding_page.dart b/example/lib/pages/path_finding/path_finding_page.dart index d12b663e7..544440727 100644 --- a/example/lib/pages/path_finding/path_finding_page.dart +++ b/example/lib/pages/path_finding/path_finding_page.dart @@ -10,7 +10,7 @@ class PathFindingPage extends StatelessWidget { const tileSize = 16.0; return BonfireWidget( map: WorldMapByTiled( - TiledReader.asset('tiled/punnyworld/pathfinding_map.tmj'), + WorldMapReader.fromAsset('tiled/punnyworld/pathfinding_map.tmj'), ), player: HumanPathFinding( position: Vector2(tileSize * 3, tileSize * 3), diff --git a/example/lib/pages/player/platform/platform_player_page.dart b/example/lib/pages/player/platform/platform_player_page.dart index b0bfa7b35..597b7f390 100644 --- a/example/lib/pages/player/platform/platform_player_page.dart +++ b/example/lib/pages/player/platform/platform_player_page.dart @@ -11,7 +11,7 @@ class PlatformPlayerPage extends StatelessWidget { const tileSize = 16.0; return BonfireWidget( map: WorldMapByTiled( - TiledReader.asset('platform/simple_map.tmj'), + WorldMapReader.fromAsset('platform/simple_map.tmj'), ), keyboardConfig: KeyboardConfig( acceptedKeys: [ diff --git a/example/lib/pages/player/rotation/rotation_player_page.dart b/example/lib/pages/player/rotation/rotation_player_page.dart index 56dbc991d..88aa2a9b1 100644 --- a/example/lib/pages/player/rotation/rotation_player_page.dart +++ b/example/lib/pages/player/rotation/rotation_player_page.dart @@ -10,7 +10,7 @@ class RotationPlayerPage extends StatelessWidget { const tileSize = 16.0; return BonfireWidget( map: WorldMapByTiled( - TiledReader.asset('tiled/simple_topdown/simple.tmj'), + WorldMapReader.fromAsset('tiled/simple_topdown/simple.tmj'), ), joystick: Joystick( directional: JoystickDirectional(), diff --git a/example/lib/pages/player/simple/simple_player_page.dart b/example/lib/pages/player/simple/simple_player_page.dart index 18ae15a12..46f9ef841 100644 --- a/example/lib/pages/player/simple/simple_player_page.dart +++ b/example/lib/pages/player/simple/simple_player_page.dart @@ -10,7 +10,7 @@ class SimplePlayerPage extends StatelessWidget { const tileSize = 16.0; return BonfireWidget( map: WorldMapByTiled( - TiledReader.asset('tiled/punnyworld/simple_map.tmj'), + WorldMapReader.fromAsset('tiled/punnyworld/simple_map.tmj'), ), joystick: Joystick( directional: JoystickDirectional(), diff --git a/example/pubspec.yaml b/example/pubspec.yaml index e654b0a11..1880e64f5 100644 --- a/example/pubspec.yaml +++ b/example/pubspec.yaml @@ -68,3 +68,4 @@ flutter: - assets/images/lpc/head/ - assets/images/lpc/gloves/ - assets/images/multi_scenario/tile/ + - assets/images/spritefusion/ diff --git a/lib/bonfire.dart b/lib/bonfire.dart index d36bdf110..9ab410a47 100644 --- a/lib/bonfire.dart +++ b/lib/bonfire.dart @@ -16,22 +16,28 @@ export 'package:bonfire/game_interface/interface_component.dart'; export 'package:bonfire/game_interface/text_interface_component.dart'; export 'package:bonfire/input/gestures/move_camera_using_gestures.dart'; export 'package:bonfire/input/input.dart'; +export 'package:bonfire/input/player_controller.dart'; export 'package:bonfire/joystick/joystick.dart'; export 'package:bonfire/joystick/joystick_action.dart'; -export 'package:bonfire/input/player_controller.dart'; export 'package:bonfire/joystick/joystick_directional.dart'; export 'package:bonfire/lighting/lighting.dart'; export 'package:bonfire/lighting/lighting_config.dart'; export 'package:bonfire/lighting/lighting_type.dart'; export 'package:bonfire/map/base/game_map.dart'; -export 'package:bonfire/map/base/tile_component.dart'; export 'package:bonfire/map/base/tile.dart'; +export 'package:bonfire/map/base/tile_component.dart'; export 'package:bonfire/map/base/tile_with_collision.dart'; export 'package:bonfire/map/matrix_map/matrix_map_generator.dart'; +export 'package:bonfire/map/spritefusion/world_map_by_spritefusion.dart'; +export 'package:bonfire/map/tiled/cache_provider/tiled_cache_provider.dart'; +export 'package:bonfire/map/tiled/model/tiled_object_properties.dart'; +export 'package:bonfire/map/util/world_map_reader.dart'; +export 'package:bonfire/map/tiled/world_map_by_tiled.dart'; export 'package:bonfire/map/world_map.dart'; export 'package:bonfire/mixins/attackable.dart'; export 'package:bonfire/mixins/automatic_random_movement.dart'; export 'package:bonfire/mixins/bouncing_object.dart'; +export 'package:bonfire/mixins/flip_render.dart'; export 'package:bonfire/mixins/follower.dart'; export 'package:bonfire/mixins/interval_checker.dart'; export 'package:bonfire/mixins/jumper.dart'; @@ -48,7 +54,6 @@ export 'package:bonfire/mixins/use_barlife.dart'; export 'package:bonfire/mixins/use_sprite.dart'; export 'package:bonfire/mixins/use_sprite_animation.dart'; export 'package:bonfire/mixins/vision.dart'; -export 'package:bonfire/mixins/flip_render.dart'; export 'package:bonfire/npc/ally/ally.dart'; export 'package:bonfire/npc/enemy/enemy.dart'; export 'package:bonfire/npc/npc.dart'; @@ -56,12 +61,9 @@ export 'package:bonfire/objects/animated_follower_game_object.dart'; export 'package:bonfire/objects/animated_game_object.dart'; export 'package:bonfire/objects/flying_attack_game_object.dart'; export 'package:bonfire/objects/game_object.dart'; +export 'package:bonfire/parallax/camera_parallax_componet.dart'; export 'package:bonfire/player/player.dart'; export 'package:bonfire/scene_builder/scene_builder.dart'; -export 'package:bonfire/tiled/cache_provider/tiled_cache_provider.dart'; -export 'package:bonfire/tiled/map_world_by_tiled.dart'; -export 'package:bonfire/tiled/model/tiled_object_properties.dart'; -export 'package:bonfire/tiled/reader/tiled_reader.dart'; export 'package:bonfire/util/barlife_component.dart'; export 'package:bonfire/util/bonfire_game_ref.dart'; export 'package:bonfire/util/bonfire_util.dart'; @@ -82,16 +84,15 @@ export 'package:bonfire/util/value_generator_component.dart'; export 'package:bonfire/widgets/bonfire_widget.dart'; export 'package:bonfire/widgets/mini_map/mini_map.dart'; export 'package:bonfire/widgets/typewriter/typewriter.dart'; -export 'package:bonfire/parallax/camera_parallax_componet.dart'; +export 'package:flame/cache.dart'; export 'package:flame/collisions.dart'; export 'package:flame/components.dart' hide JoystickComponent, HasGameRef; export 'package:flame/effects.dart'; -export 'package:flame/parallax.dart'; export 'package:flame/flame.dart'; export 'package:flame/geometry.dart'; export 'package:flame/image_composition.dart'; +export 'package:flame/parallax.dart'; export 'package:flame/particles.dart'; export 'package:flame/sprite.dart'; -export 'package:flame/cache.dart'; export 'package:flame/text.dart'; export 'package:flame/widgets.dart' hide NineTileBox; diff --git a/lib/map/base/tile_layer_component.dart b/lib/map/base/tile_layer_component.dart index 29518f525..1fc7f66ff 100644 --- a/lib/map/base/tile_layer_component.dart +++ b/lib/map/base/tile_layer_component.dart @@ -1,8 +1,9 @@ import 'dart:math'; import 'package:bonfire/bonfire.dart'; +import 'package:bonfire/map/spritefusion/model/spritefusion_layer.dart'; +import 'package:bonfire/map/tiled/builder/tiled_world_builder.dart'; import 'package:bonfire/map/util/map_assets_manager.dart'; -import 'package:bonfire/tiled/builder/tiled_world_builder.dart'; import 'package:bonfire/util/quadtree.dart' as tree; class TileLayerComponent extends PositionComponent with HasPaint { @@ -207,4 +208,11 @@ class TileLayerComponent extends PositionComponent with HasPaint { priority: e.priority, ); } + factory TileLayerComponent.fromSpritefusionLayer(SpritefusionLayer e) { + return TileLayerComponent( + id: e.id ?? 0, + tiles: e.tiles, + name: e.name, + ); + } } diff --git a/lib/map/spritefusion/builder/spritefusion_world_builder.dart b/lib/map/spritefusion/builder/spritefusion_world_builder.dart new file mode 100644 index 000000000..e5528da24 --- /dev/null +++ b/lib/map/spritefusion/builder/spritefusion_world_builder.dart @@ -0,0 +1,38 @@ +import 'package:bonfire/bonfire.dart'; +import 'package:bonfire/map/spritefusion/model/spritefucion_map.dart'; +import 'package:bonfire/map/spritefusion/model/spritefusion_layer.dart'; +import 'package:flutter/material.dart'; + +class SpritefusionWorldBuilder { + final ValueChanged? onError; + final WorldMapReader reader; + final double sizeToUpdate; + final List _layers = []; + + SpritefusionWorldBuilder( + this.reader, { + required this.onError, + this.sizeToUpdate = 0, + }); + + Future build() async { + try { + final tiledMap = await reader.readMap(); + print(tiledMap.layers.length); + // await _load(_tiledMap!); + } catch (e) { + onError?.call(e); + // ignore: avoid_print + print('(SpritefusionWorldBuilder) Error: $e'); + } + + return Future.value( + WorldMap( + _layers + .map((e) => TileLayerComponent.fromSpritefusionLayer(e)) + .toList(), + tileSizeToUpdate: sizeToUpdate, + ), + ); + } +} diff --git a/lib/map/spritefusion/model/spritefucion_map.dart b/lib/map/spritefusion/model/spritefucion_map.dart new file mode 100644 index 000000000..54959b02c --- /dev/null +++ b/lib/map/spritefusion/model/spritefucion_map.dart @@ -0,0 +1,110 @@ +// ignore_for_file: public_member_api_docs, sort_constructors_first +import 'dart:convert'; + +class SpritefusionMap { + final double tileSize; + final double mapWidth; + final double mapHeight; + final List layers; + + SpritefusionMap({ + required this.tileSize, + required this.mapWidth, + required this.mapHeight, + required this.layers, + }); + + Map toMap() { + return { + 'tileSize': tileSize, + 'mapWidth': mapWidth, + 'mapHeight': mapHeight, + 'layers': layers.map((x) => x.toMap()).toList(), + }; + } + + factory SpritefusionMap.fromMap(Map map) { + return SpritefusionMap( + tileSize: double.parse(map['tileSize'].toString()), + mapWidth: double.parse(map['mapWidth'].toString()), + mapHeight: double.parse(map['mapHeight'].toString()), + layers: List.from( + (map['layers'] as List).map( + (x) => SpritefusionMapLayer.fromMap(x as Map), + ), + ), + ); + } + + String toJson() => json.encode(toMap()); + + factory SpritefusionMap.fromJson(String source) => + SpritefusionMap.fromMap(json.decode(source) as Map); +} + +class SpritefusionMapLayer { + final String name; + final List tiles; + + SpritefusionMapLayer({ + required this.name, + required this.tiles, + }); + + Map toMap() { + return { + 'name': name, + 'tiles': tiles.map((x) => x.toMap()).toList(), + }; + } + + factory SpritefusionMapLayer.fromMap(Map map) { + return SpritefusionMapLayer( + name: map['name'] as String, + tiles: List.from( + (map['tiles'] as List).map( + (x) => SpritefusionMapLayerTile.fromMap(x as Map), + ), + ), + ); + } + + String toJson() => json.encode(toMap()); + + factory SpritefusionMapLayer.fromJson(String source) => + SpritefusionMapLayer.fromMap(json.decode(source) as Map); +} + +class SpritefusionMapLayerTile { + final String id; + final int x; + final int y; + + SpritefusionMapLayerTile({ + required this.id, + required this.x, + required this.y, + }); + + Map toMap() { + return { + 'id': id, + 'x': x, + 'y': y, + }; + } + + factory SpritefusionMapLayerTile.fromMap(Map map) { + return SpritefusionMapLayerTile( + id: map['id'] as String, + x: int.parse(map['x'].toString()), + y: int.parse(map['y'].toString()), + ); + } + + String toJson() => json.encode(toMap()); + + factory SpritefusionMapLayerTile.fromJson(String source) => + SpritefusionMapLayerTile.fromMap( + json.decode(source) as Map); +} diff --git a/lib/map/spritefusion/model/spritefusion_layer.dart b/lib/map/spritefusion/model/spritefusion_layer.dart new file mode 100644 index 000000000..4e1b9dce9 --- /dev/null +++ b/lib/map/spritefusion/model/spritefusion_layer.dart @@ -0,0 +1,13 @@ +import 'package:bonfire/map/base/tile.dart'; + +class SpritefusionLayer { + final int? id; + final String? name; + final List tiles; + + SpritefusionLayer({ + required this.id, + required this.name, + required this.tiles, + }); +} diff --git a/lib/map/spritefusion/reader/spritefusion_asset_reader.dart b/lib/map/spritefusion/reader/spritefusion_asset_reader.dart new file mode 100644 index 000000000..ad68376ff --- /dev/null +++ b/lib/map/spritefusion/reader/spritefusion_asset_reader.dart @@ -0,0 +1,28 @@ +import 'package:bonfire/map/spritefusion/model/spritefucion_map.dart'; +import 'package:bonfire/map/util/world_map_reader.dart'; +import 'package:flutter/services.dart'; + +class SpritefusionAssetReader extends WorldMapReader { + static const _assetPrefixKey = 'assets/images/'; + final String asset; + String _path = ''; + + @override + late String basePath; + + SpritefusionAssetReader({ + required this.asset, + }) { + var assetKey = asset.startsWith(_assetPrefixKey) + ? asset.substring(_assetPrefixKey.length) + : asset; + basePath = assetKey.replaceAll(assetKey.split('/').last, ''); + _path = '$_assetPrefixKey$assetKey'; + } + + @override + Future readMap() async { + String data = await rootBundle.loadString(_path); + return SpritefusionMap.fromJson(data); + } +} diff --git a/lib/map/spritefusion/world_map_by_spritefusion.dart b/lib/map/spritefusion/world_map_by_spritefusion.dart new file mode 100644 index 000000000..03f290c68 --- /dev/null +++ b/lib/map/spritefusion/world_map_by_spritefusion.dart @@ -0,0 +1,27 @@ +import 'package:bonfire/bonfire.dart'; +import 'package:bonfire/map/spritefusion/builder/spritefusion_world_builder.dart'; +import 'package:bonfire/map/spritefusion/model/spritefucion_map.dart'; +import 'package:flutter/widgets.dart'; + +class WorldMapBySpritefusion extends WorldMap { + late SpritefusionWorldBuilder _builder; + WorldMapBySpritefusion( + WorldMapReader reader, { + ValueChanged? onError, + double sizeToUpdate = 0, + }) : super(const []) { + this.sizeToUpdate = sizeToUpdate; + _builder = SpritefusionWorldBuilder( + reader, + onError: onError, + sizeToUpdate: sizeToUpdate, + ); + } + + @override + Future onLoad() async { + final map = await _builder.build(); + layers = map.layers; + return super.onLoad(); + } +} diff --git a/lib/tiled/builder/tiled_world_builder.dart b/lib/map/tiled/builder/tiled_world_builder.dart similarity index 99% rename from lib/tiled/builder/tiled_world_builder.dart rename to lib/map/tiled/builder/tiled_world_builder.dart index ad9340619..7930d27bc 100644 --- a/lib/tiled/builder/tiled_world_builder.dart +++ b/lib/map/tiled/builder/tiled_world_builder.dart @@ -5,7 +5,7 @@ import 'dart:ui'; import 'package:bonfire/background/background_image_game.dart'; import 'package:bonfire/bonfire.dart' hide TileComponent; -import 'package:bonfire/tiled/model/tiled_world_data.dart'; +import 'package:bonfire/map/tiled/model/tiled_world_data.dart'; import 'package:bonfire/util/collision_game_component.dart'; import 'package:bonfire/util/text_game_component.dart'; import 'package:flutter/foundation.dart'; @@ -37,7 +37,7 @@ class TiledWorldBuilder { final Vector2? forceTileSize; final ValueChanged? onError; - late TiledReader reader; + final WorldMapReader reader; final double sizeToUpdate; final List _layers = []; final List _components = []; @@ -83,7 +83,7 @@ class TiledWorldBuilder { } catch (e) { onError?.call(e); // ignore: avoid_print - print('(TiledWorldMap) Error: $e'); + print('(TiledWorldBuilder) Error: $e'); } return Future.value( diff --git a/lib/tiled/cache_provider/tiled_cache_provider.dart b/lib/map/tiled/cache_provider/tiled_cache_provider.dart similarity index 100% rename from lib/tiled/cache_provider/tiled_cache_provider.dart rename to lib/map/tiled/cache_provider/tiled_cache_provider.dart diff --git a/lib/tiled/cache_provider/tiled_memory_cache_provider.dart b/lib/map/tiled/cache_provider/tiled_memory_cache_provider.dart similarity index 90% rename from lib/tiled/cache_provider/tiled_memory_cache_provider.dart rename to lib/map/tiled/cache_provider/tiled_memory_cache_provider.dart index 86a1bf3d7..110dde4c2 100644 --- a/lib/tiled/cache_provider/tiled_memory_cache_provider.dart +++ b/lib/map/tiled/cache_provider/tiled_memory_cache_provider.dart @@ -1,4 +1,4 @@ -import 'package:bonfire/tiled/cache_provider/tiled_cache_provider.dart'; +import 'package:bonfire/map/tiled/cache_provider/tiled_cache_provider.dart'; class TiledMemoryCacheProvider extends TiledCacheProvider { static final TiledMemoryCacheProvider _singleton = diff --git a/lib/tiled/model/tiled_data_object_collision.dart b/lib/map/tiled/model/tiled_data_object_collision.dart similarity index 100% rename from lib/tiled/model/tiled_data_object_collision.dart rename to lib/map/tiled/model/tiled_data_object_collision.dart diff --git a/lib/tiled/model/tiled_item_tile_set.dart b/lib/map/tiled/model/tiled_item_tile_set.dart similarity index 100% rename from lib/tiled/model/tiled_item_tile_set.dart rename to lib/map/tiled/model/tiled_item_tile_set.dart diff --git a/lib/tiled/model/tiled_object_properties.dart b/lib/map/tiled/model/tiled_object_properties.dart similarity index 100% rename from lib/tiled/model/tiled_object_properties.dart rename to lib/map/tiled/model/tiled_object_properties.dart diff --git a/lib/tiled/model/tiled_world_data.dart b/lib/map/tiled/model/tiled_world_data.dart similarity index 100% rename from lib/tiled/model/tiled_world_data.dart rename to lib/map/tiled/model/tiled_world_data.dart diff --git a/lib/tiled/reader/tiled_asset_reader.dart b/lib/map/tiled/reader/tiled_asset_reader.dart similarity index 85% rename from lib/tiled/reader/tiled_asset_reader.dart rename to lib/map/tiled/reader/tiled_asset_reader.dart index 9d731fc9e..73b09cfc0 100644 --- a/lib/tiled/reader/tiled_asset_reader.dart +++ b/lib/map/tiled/reader/tiled_asset_reader.dart @@ -1,8 +1,9 @@ -import 'package:bonfire/tiled/reader/tiled_reader.dart'; + +import 'package:bonfire/map/util/world_map_reader.dart'; import 'package:tiledjsonreader/map/tiled_map.dart'; import 'package:tiledjsonreader/tiledjsonreader.dart'; -class TiledAssetReader extends TiledReader { +class TiledAssetReader extends WorldMapReader { // ignore: constant_identifier_names static const _ASSET_KEY_PREFIX = 'assets/images/'; final String asset; diff --git a/lib/tiled/reader/tiled_network_reader.dart b/lib/map/tiled/reader/tiled_network_reader.dart similarity index 97% rename from lib/tiled/reader/tiled_network_reader.dart rename to lib/map/tiled/reader/tiled_network_reader.dart index 905a87478..bc4eb8fe7 100644 --- a/lib/tiled/reader/tiled_network_reader.dart +++ b/lib/map/tiled/reader/tiled_network_reader.dart @@ -2,7 +2,7 @@ import 'dart:async'; import 'dart:convert'; import 'package:bonfire/bonfire.dart'; -import 'package:bonfire/tiled/cache_provider/tiled_memory_cache_provider.dart'; +import 'package:bonfire/map/tiled/cache_provider/tiled_memory_cache_provider.dart'; import 'package:http/http.dart' as http; import 'package:tiledjsonreader/map/layer/image_layer.dart'; import 'package:tiledjsonreader/map/layer/map_layer.dart'; @@ -10,7 +10,7 @@ import 'package:tiledjsonreader/map/tile_set_detail.dart'; import 'package:tiledjsonreader/map/tiled_map.dart'; import 'package:tiledjsonreader/tile_set/tile_set_item.dart'; -class TiledNetworkReader extends TiledReader { +class TiledNetworkReader extends WorldMapReader { // ignore: constant_identifier_names static const ORIENTATION_SUPPORTED = 'orthogonal'; static const _keyImgBase64 = 'base64'; diff --git a/lib/tiled/map_world_by_tiled.dart b/lib/map/tiled/world_map_by_tiled.dart similarity index 82% rename from lib/tiled/map_world_by_tiled.dart rename to lib/map/tiled/world_map_by_tiled.dart index fc5b928cc..1c5c4089c 100644 --- a/lib/tiled/map_world_by_tiled.dart +++ b/lib/map/tiled/world_map_by_tiled.dart @@ -1,11 +1,12 @@ import 'package:bonfire/bonfire.dart'; -import 'package:bonfire/tiled/builder/tiled_world_builder.dart'; +import 'package:bonfire/map/tiled/builder/tiled_world_builder.dart'; import 'package:flutter/widgets.dart'; +import 'package:tiledjsonreader/map/tiled_map.dart'; class WorldMapByTiled extends WorldMap { late TiledWorldBuilder _builder; WorldMapByTiled( - TiledReader reader, { + WorldMapReader reader, { Vector2? forceTileSize, ValueChanged? onError, double sizeToUpdate = 0, diff --git a/lib/map/util/world_map_reader.dart b/lib/map/util/world_map_reader.dart new file mode 100644 index 000000000..c70edd4a4 --- /dev/null +++ b/lib/map/util/world_map_reader.dart @@ -0,0 +1,42 @@ +import 'dart:async'; + +import 'package:bonfire/bonfire.dart'; +import 'package:bonfire/map/spritefusion/model/spritefucion_map.dart'; +import 'package:bonfire/map/spritefusion/reader/spritefusion_asset_reader.dart'; +import 'package:bonfire/map/tiled/reader/tiled_asset_reader.dart'; +import 'package:bonfire/map/tiled/reader/tiled_network_reader.dart'; +import 'package:tiledjsonreader/map/tiled_map.dart'; + +abstract class WorldMapReader { + Future readMap(); + + String get basePath; + + static WorldMapReader fromAsset(String asset) { + switch (T) { + case TiledMap: + return TiledAssetReader(asset: asset) as WorldMapReader; + case SpritefusionMap: + return SpritefusionAssetReader(asset: asset) as WorldMapReader; + default: + throw Exception('There is not a WorldMapReader.asset to $T'); + } + } + + static WorldMapReader fromNetwork( + Uri uri, { + TiledCacheProvider? cacheProvider, + Map? headers, + }) { + switch (T) { + case TiledMap: + return TiledNetworkReader( + uri: uri, + cacheProvider: cacheProvider, + headers: headers, + ) as WorldMapReader; + default: + throw Exception('There is not a WorldMapReader.network to $T'); + } + } +} diff --git a/lib/tiled/reader/tiled_reader.dart b/lib/tiled/reader/tiled_reader.dart deleted file mode 100644 index 444f34d35..000000000 --- a/lib/tiled/reader/tiled_reader.dart +++ /dev/null @@ -1,28 +0,0 @@ -import 'dart:async'; - -import 'package:bonfire/tiled/cache_provider/tiled_cache_provider.dart'; -import 'package:bonfire/tiled/reader/tiled_asset_reader.dart'; -import 'package:bonfire/tiled/reader/tiled_network_reader.dart'; -import 'package:tiledjsonreader/map/tiled_map.dart'; - -abstract class TiledReader { - Future readMap(); - - String get basePath; - - static TiledReader asset(String asset) { - return TiledAssetReader(asset: asset); - } - - static TiledReader network( - Uri uri, { - TiledCacheProvider? cacheProvider, - Map? headers, - }) { - return TiledNetworkReader( - uri: uri, - cacheProvider: cacheProvider, - headers: headers, - ); - } -} From 1e5adca20ec5bc7baf52963a0b2c14843e64f85f Mon Sep 17 00:00:00 2001 From: Rafael Almeida Barbosa Date: Sun, 21 Apr 2024 02:19:13 -0300 Subject: [PATCH 3/9] improvements in the struture to support other map origin --- lib/map/spritefusion/model/spritefucion_map.dart | 2 ++ 1 file changed, 2 insertions(+) diff --git a/lib/map/spritefusion/model/spritefucion_map.dart b/lib/map/spritefusion/model/spritefucion_map.dart index 54959b02c..0ad6066ef 100644 --- a/lib/map/spritefusion/model/spritefucion_map.dart +++ b/lib/map/spritefusion/model/spritefucion_map.dart @@ -86,6 +86,8 @@ class SpritefusionMapLayerTile { required this.y, }); + int get idInt => int.parse(id); + Map toMap() { return { 'id': id, From afbd0a922d2574ce0231323f54ecec51b9aa75a3 Mon Sep 17 00:00:00 2001 From: Rafael Almeida Barbosa Date: Mon, 22 Apr 2024 10:16:32 -0300 Subject: [PATCH 4/9] refactor worldmap --- example/.metadata | 12 ++-- .../mini_games/manual_map/dungeon_map.dart | 3 +- lib/map/base/game_map.dart | 7 +- lib/map/base/layer.dart | 30 ++++++++ lib/map/base/tile_layer_component.dart | 23 ------- lib/map/empty_map.dart | 3 +- lib/map/matrix_map/matrix_map_generator.dart | 7 +- .../builder/spritefusion_world_builder.dart | 17 ++--- .../model/spritefusion_layer.dart | 13 ---- .../tiled/builder/tiled_world_builder.dart | 69 +++---------------- lib/map/util/layer_mapper.dart | 18 +++++ lib/map/util/map_layer_mapper.dart | 39 +++++++++++ lib/map/world_map.dart | 34 +++++---- 13 files changed, 141 insertions(+), 134 deletions(-) create mode 100644 lib/map/base/layer.dart delete mode 100644 lib/map/spritefusion/model/spritefusion_layer.dart create mode 100644 lib/map/util/layer_mapper.dart create mode 100644 lib/map/util/map_layer_mapper.dart diff --git a/example/.metadata b/example/.metadata index 4ac126a28..de8274eb2 100644 --- a/example/.metadata +++ b/example/.metadata @@ -4,7 +4,7 @@ # This file should be version controlled and should not be manually edited. version: - revision: "41456452f29d64e8deb623a3c927524bcf9f111b" + revision: "7482962148e8d758338d8a28f589f317e1e42ba4" channel: "stable" project_type: app @@ -13,11 +13,11 @@ project_type: app migration: platforms: - platform: root - create_revision: 41456452f29d64e8deb623a3c927524bcf9f111b - base_revision: 41456452f29d64e8deb623a3c927524bcf9f111b - - platform: linux - create_revision: 41456452f29d64e8deb623a3c927524bcf9f111b - base_revision: 41456452f29d64e8deb623a3c927524bcf9f111b + create_revision: 7482962148e8d758338d8a28f589f317e1e42ba4 + base_revision: 7482962148e8d758338d8a28f589f317e1e42ba4 + - platform: macos + create_revision: 7482962148e8d758338d8a28f589f317e1e42ba4 + base_revision: 7482962148e8d758338d8a28f589f317e1e42ba4 # User provided section diff --git a/example/lib/pages/mini_games/manual_map/dungeon_map.dart b/example/lib/pages/mini_games/manual_map/dungeon_map.dart index 53210073b..bf235c7cd 100644 --- a/example/lib/pages/mini_games/manual_map/dungeon_map.dart +++ b/example/lib/pages/mini_games/manual_map/dungeon_map.dart @@ -1,6 +1,7 @@ import 'dart:math'; import 'package:bonfire/bonfire.dart'; +import 'package:bonfire/map/base/layer.dart'; import 'package:example/shared/decoration/barrel_dragable.dart'; import 'package:example/shared/decoration/chest.dart'; import 'package:example/shared/decoration/spikes.dart'; @@ -115,7 +116,7 @@ class DungeonMap { }); }); - return WorldMap([TileLayerComponent(id: 0, tiles: tileList)]); + return WorldMap([LayerModel(id: 0, tiles: tileList)]); } static List decorations() { diff --git a/lib/map/base/game_map.dart b/lib/map/base/game_map.dart index f6a38a13e..754a47067 100644 --- a/lib/map/base/game_map.dart +++ b/lib/map/base/game_map.dart @@ -1,9 +1,10 @@ import 'package:bonfire/bonfire.dart'; +import 'package:bonfire/map/base/layer.dart'; export 'package:bonfire/map/base/tile_layer_component.dart'; abstract class GameMap extends GameComponent { - List layers; + List layers; double sizeToUpdate; double tileSize = 0.0; @@ -25,8 +26,8 @@ abstract class GameMap extends GameComponent { } void removeLayer(int id); - Future addLayer(TileLayerComponent layer); - Future updateLayers(List layers); + Future addLayer(LayerModel layer); + Future updateLayers(List layers); @override int get priority => LayerPriority.MAP; diff --git a/lib/map/base/layer.dart b/lib/map/base/layer.dart new file mode 100644 index 000000000..99960c07d --- /dev/null +++ b/lib/map/base/layer.dart @@ -0,0 +1,30 @@ +import 'package:bonfire/bonfire.dart'; + +class LayerModel { + final int? id; + final String? name; + final String? layerClass; + final bool visible; + final Vector2 position; + final Vector2 offset; + final double opacity; + final Map? properties; + final int priority; + List tiles = []; + + + LayerModel({ + required this.id, + required this.tiles, + this.name, + this.layerClass, + this.visible = true, + Vector2? position, + Vector2? offset, + this.opacity = 1, + this.properties, + this.priority = 0, + }) : position = position ?? Vector2.zero(), + offset = offset ?? Vector2.zero(); + +} diff --git a/lib/map/base/tile_layer_component.dart b/lib/map/base/tile_layer_component.dart index 1fc7f66ff..9aed54e01 100644 --- a/lib/map/base/tile_layer_component.dart +++ b/lib/map/base/tile_layer_component.dart @@ -1,8 +1,6 @@ import 'dart:math'; import 'package:bonfire/bonfire.dart'; -import 'package:bonfire/map/spritefusion/model/spritefusion_layer.dart'; -import 'package:bonfire/map/tiled/builder/tiled_world_builder.dart'; import 'package:bonfire/map/util/map_assets_manager.dart'; import 'package:bonfire/util/quadtree.dart' as tree; @@ -194,25 +192,4 @@ class TileLayerComponent extends PositionComponent with HasPaint { Iterable getRendered() { return children.query(); } - - factory TileLayerComponent.fromTileModel(LayerModel e) { - return TileLayerComponent( - id: e.id ?? 0, - visible: e.visible, - tiles: e.tiles, - position: e.position, - layerClass: e.layerClass, - name: e.name, - opacity: e.opacity, - properties: e.properties, - priority: e.priority, - ); - } - factory TileLayerComponent.fromSpritefusionLayer(SpritefusionLayer e) { - return TileLayerComponent( - id: e.id ?? 0, - tiles: e.tiles, - name: e.name, - ); - } } diff --git a/lib/map/empty_map.dart b/lib/map/empty_map.dart index ded0b8148..c89114b37 100644 --- a/lib/map/empty_map.dart +++ b/lib/map/empty_map.dart @@ -1,10 +1,11 @@ import 'package:bonfire/bonfire.dart'; +import 'package:bonfire/map/base/layer.dart'; class EmptyWorldMap extends WorldMap { EmptyWorldMap({double tileSizeToUpdate = 0, Vector2? size}) : super( [ - TileLayerComponent( + LayerModel( id: 0, tiles: [ if (size != null) diff --git a/lib/map/matrix_map/matrix_map_generator.dart b/lib/map/matrix_map/matrix_map_generator.dart index d2e6d0d5a..992999bee 100644 --- a/lib/map/matrix_map/matrix_map_generator.dart +++ b/lib/map/matrix_map/matrix_map_generator.dart @@ -1,4 +1,5 @@ import 'package:bonfire/bonfire.dart'; +import 'package:bonfire/map/base/layer.dart'; export 'map_terrain.dart'; export 'matrix_layer.dart'; @@ -70,19 +71,19 @@ class MatrixMapGenerator { required List layers, required TileModelBuilder builder, }) { - List tileLayers = []; + List tileLayers = []; int index = 0; for (var layer in layers) { if (layer.axisInverted) { tileLayers.add( - TileLayerComponent( + LayerModel( id: index, tiles: _buildInverted(layer.matrix, builder), ), ); } else { tileLayers.add( - TileLayerComponent( + LayerModel( id: index, tiles: _buildNormal(layer.matrix, builder), ), diff --git a/lib/map/spritefusion/builder/spritefusion_world_builder.dart b/lib/map/spritefusion/builder/spritefusion_world_builder.dart index e5528da24..0debc04f1 100644 --- a/lib/map/spritefusion/builder/spritefusion_world_builder.dart +++ b/lib/map/spritefusion/builder/spritefusion_world_builder.dart @@ -1,13 +1,13 @@ import 'package:bonfire/bonfire.dart'; +import 'package:bonfire/map/base/layer.dart'; import 'package:bonfire/map/spritefusion/model/spritefucion_map.dart'; -import 'package:bonfire/map/spritefusion/model/spritefusion_layer.dart'; import 'package:flutter/material.dart'; class SpritefusionWorldBuilder { final ValueChanged? onError; final WorldMapReader reader; final double sizeToUpdate; - final List _layers = []; + final List _layers = []; SpritefusionWorldBuilder( this.reader, { @@ -17,9 +17,8 @@ class SpritefusionWorldBuilder { Future build() async { try { - final tiledMap = await reader.readMap(); - print(tiledMap.layers.length); - // await _load(_tiledMap!); + final map = await reader.readMap(); + await _load(map); } catch (e) { onError?.call(e); // ignore: avoid_print @@ -28,11 +27,13 @@ class SpritefusionWorldBuilder { return Future.value( WorldMap( - _layers - .map((e) => TileLayerComponent.fromSpritefusionLayer(e)) - .toList(), + _layers, tileSizeToUpdate: sizeToUpdate, ), ); } + + Future _load(SpritefusionMap map) async{ + + } } diff --git a/lib/map/spritefusion/model/spritefusion_layer.dart b/lib/map/spritefusion/model/spritefusion_layer.dart deleted file mode 100644 index 4e1b9dce9..000000000 --- a/lib/map/spritefusion/model/spritefusion_layer.dart +++ /dev/null @@ -1,13 +0,0 @@ -import 'package:bonfire/map/base/tile.dart'; - -class SpritefusionLayer { - final int? id; - final String? name; - final List tiles; - - SpritefusionLayer({ - required this.id, - required this.name, - required this.tiles, - }); -} diff --git a/lib/map/tiled/builder/tiled_world_builder.dart b/lib/map/tiled/builder/tiled_world_builder.dart index 7930d27bc..2b6a588e1 100644 --- a/lib/map/tiled/builder/tiled_world_builder.dart +++ b/lib/map/tiled/builder/tiled_world_builder.dart @@ -5,7 +5,9 @@ import 'dart:ui'; import 'package:bonfire/background/background_image_game.dart'; import 'package:bonfire/bonfire.dart' hide TileComponent; +import 'package:bonfire/map/base/layer.dart'; import 'package:bonfire/map/tiled/model/tiled_world_data.dart'; +import 'package:bonfire/map/util/map_layer_mapper.dart'; import 'package:bonfire/util/collision_game_component.dart'; import 'package:bonfire/util/text_game_component.dart'; import 'package:flutter/foundation.dart'; @@ -89,7 +91,7 @@ class TiledWorldBuilder { return Future.value( TiledWorldData( map: WorldMap( - _layers.map((e) => TileLayerComponent.fromTileModel(e)).toList(), + _layers, tileSizeToUpdate: sizeToUpdate, ), components: _components, @@ -107,7 +109,7 @@ class TiledWorldBuilder { if (layer.visible != true) return; if (layer is tiled.TileLayer) { - _layers.add(LayerModel.fromMapLayer(layer, countTileLayer)); + _layers.add(MapLayerMapper.toLayer(layer, countTileLayer)); await _addTileLayer(layer); countTileLayer++; } @@ -410,7 +412,8 @@ class TiledWorldBuilder { position: Vector2(x, y), size: Vector2(collision.size.x, collision.size.y), collisions: [collision], - properties: _extractOtherProperties(element.properties), + properties: + MapLayerMapper.extractOtherProperties(element.properties), )..angle = rotation, ); } else if (_objectsBuilder[element.name] != null) { @@ -420,7 +423,7 @@ class TiledWorldBuilder { Vector2(width, height), element.typeOrClass, rotation, - _extractOtherProperties(element.properties), + MapLayerMapper.extractOtherProperties(element.properties), element.name, element.id, collision, @@ -447,7 +450,7 @@ class TiledWorldBuilder { List tileSetObjectList = tileSetItemList.first.objectGroup?.objects ?? []; - Map properties = _extractOtherProperties( + Map properties = MapLayerMapper.extractOtherProperties( tileSetItemList.first.properties, ); @@ -628,59 +631,3 @@ class TiledWorldBuilder { ); } } - -class LayerModel { - final int? id; - final String? name; - final String? layerClass; - final bool visible; - final Vector2 position; - final Vector2 offset; - final double opacity; - final Map? properties; - final int priority; - List tiles = []; - - LayerModel({ - required this.id, - required this.name, - required this.layerClass, - required this.visible, - required this.position, - required this.offset, - required this.opacity, - required this.properties, - required this.priority, - }); - - factory LayerModel.fromMapLayer(MapLayer layer, int priority) { - return LayerModel( - id: layer.id, - layerClass: layer.layerClass, - name: layer.name, - opacity: layer.opacity ?? 1, - visible: layer.visible ?? true, - priority: priority, - position: Vector2( - layer.x ?? 0, - layer.y ?? 0, - ), - offset: Vector2( - layer.offsetX ?? 0, - layer.offsetY ?? 0, - ), - properties: _extractOtherProperties(layer.properties), - ); - } -} - -Map _extractOtherProperties(List? properties) { - final map = {}; - - for (var element in properties ?? const []) { - if (element.value != null && element.name != null) { - map[element.name!] = element.value; - } - } - return map; -} diff --git a/lib/map/util/layer_mapper.dart b/lib/map/util/layer_mapper.dart new file mode 100644 index 000000000..76c6ed790 --- /dev/null +++ b/lib/map/util/layer_mapper.dart @@ -0,0 +1,18 @@ +import 'package:bonfire/map/base/layer.dart'; +import 'package:bonfire/map/base/tile_layer_component.dart'; + +abstract class LayerMapper{ + static TileLayerComponent toLayerComponent(LayerModel layer){ + return TileLayerComponent( + id: layer.id ?? 0, + tiles: layer.tiles, + position: layer.position, + visible: layer.visible, + name: layer.name, + layerClass: layer.layerClass, + opacity: layer.opacity, + properties: layer.properties, + priority: layer.priority, + ); + } +} \ No newline at end of file diff --git a/lib/map/util/map_layer_mapper.dart b/lib/map/util/map_layer_mapper.dart new file mode 100644 index 000000000..aa1873ad0 --- /dev/null +++ b/lib/map/util/map_layer_mapper.dart @@ -0,0 +1,39 @@ +import 'package:bonfire/bonfire.dart'; +import 'package:bonfire/map/base/layer.dart'; +import 'package:tiledjsonreader/map/layer/map_layer.dart'; +import 'package:tiledjsonreader/map/layer/objects.dart'; + +abstract class MapLayerMapper { + static toLayer(MapLayer layer, int priority) { + return LayerModel( + id: layer.id, + layerClass: layer.layerClass, + name: layer.name, + opacity: layer.opacity ?? 1, + visible: layer.visible ?? true, + priority: priority, + position: Vector2( + layer.x ?? 0, + layer.y ?? 0, + ), + offset: Vector2( + layer.offsetX ?? 0, + layer.offsetY ?? 0, + ), + properties: extractOtherProperties(layer.properties), + tiles: [], + ); + } + + static Map extractOtherProperties( + List? properties) { + final map = {}; + + for (var element in properties ?? const []) { + if (element.value != null && element.name != null) { + map[element.name!] = element.value; + } + } + return map; + } +} diff --git a/lib/map/world_map.dart b/lib/map/world_map.dart index 61c51bff3..f4add3a17 100644 --- a/lib/map/world_map.dart +++ b/lib/map/world_map.dart @@ -1,7 +1,9 @@ import 'dart:async'; import 'package:bonfire/bonfire.dart'; +import 'package:bonfire/map/base/layer.dart'; import 'package:bonfire/map/empty_map.dart'; +import 'package:bonfire/map/util/layer_mapper.dart'; import 'package:bonfire/util/extensions/position_component_ext.dart'; import 'package:bonfire/util/quadtree.dart' as tree; @@ -21,7 +23,7 @@ class WorldMap extends GameMap { } WorldMap( - List layers, { + List layers, { double tileSizeToUpdate = 0, }) : super( layers, @@ -39,7 +41,7 @@ class WorldMap extends GameMap { void _searchTilesToRender() async { final rectCamera = gameRef.camera.cameraRectWithSpacing; - for (var layer in layers) { + for (var layer in layersComponent) { await layer.onMoveCamera(rectCamera); } _buildingTiles = false; @@ -48,6 +50,9 @@ class WorldMap extends GameMap { List _renderedTiles = []; + Iterable get layersComponent => + children.whereType(); + @override List getRenderedTiles() { if (_needUpdateRenderedTiles) { @@ -73,7 +78,7 @@ class WorldMap extends GameMap { @override void refreshMap() { - for (var element in layers) { + for (var element in layersComponent) { element.refresh(); } } @@ -84,11 +89,10 @@ class WorldMap extends GameMap { lastCameraWindow = Vector2.zero(); lastMinorZoom = gameRef.camera.zoom; _calculatePositionAndSize(); - for (var layer in layers) { + for (var layer in layersComponent) { layer.initLayer(size, sizeScreen); } } - if (sizeToUpdate == 0) { sizeToUpdate = (tileSize * 4).ceilToDouble(); } @@ -96,15 +100,15 @@ class WorldMap extends GameMap { } void _calculatePositionAndSize() { - if (layers.isNotEmpty) { - tileSize = layers.first.tileSize; + if (layersComponent.isNotEmpty) { + tileSize = layersComponent.first.tileSize; double x = 0; double y = 0; - double w = layers.first.size.x; - double h = layers.first.size.y; + double w = layersComponent.first.size.x; + double h = layersComponent.first.size.y; - for (var layer in layers) { + for (var layer in layersComponent) { if (layer.left < x) x = layer.left; if (layer.top < y) y = layer.top; @@ -133,8 +137,8 @@ class WorldMap extends GameMap { @override Future onLoad() async { await super.onLoad(); + await addAll(layers.map(LayerMapper.toLayerComponent)); _confMap(gameRef.size, calculateSize: true); - await addAll(layers); _searchTilesToRender(); } @@ -161,17 +165,17 @@ class WorldMap extends GameMap { } @override - Future updateLayers(List layers) async { + Future updateLayers(List layers) async { this.layers = layers; removeAll(children); - await addAll(this.layers); + await addAll(layers.map(LayerMapper.toLayerComponent)); _confMap(gameRef.size, calculateSize: true); } @override - Future addLayer(TileLayerComponent layer) async { - await layer.loadAssets(); + Future addLayer(LayerModel layer) async { layers.add(layer); + add(LayerMapper.toLayerComponent(layer)); _confMap(lastSizeScreen!, calculateSize: true); refreshMap(); } From 91e244c60f9b8e9cf77ad266aa8f9ee579d602ea Mon Sep 17 00:00:00 2001 From: Rafael Almeida Barbosa Date: Mon, 22 Apr 2024 10:17:05 -0300 Subject: [PATCH 5/9] refactor worldmap --- example/lib/pages/mini_games/manual_map/dungeon_map.dart | 2 +- lib/map/base/game_map.dart | 6 +++--- lib/map/base/layer.dart | 6 ++---- lib/map/empty_map.dart | 2 +- lib/map/matrix_map/matrix_map_generator.dart | 6 +++--- .../spritefusion/builder/spritefusion_world_builder.dart | 6 ++---- lib/map/tiled/builder/tiled_world_builder.dart | 2 +- lib/map/util/layer_mapper.dart | 6 +++--- lib/map/util/map_layer_mapper.dart | 2 +- lib/map/world_map.dart | 6 +++--- 10 files changed, 20 insertions(+), 24 deletions(-) diff --git a/example/lib/pages/mini_games/manual_map/dungeon_map.dart b/example/lib/pages/mini_games/manual_map/dungeon_map.dart index bf235c7cd..5fc75f142 100644 --- a/example/lib/pages/mini_games/manual_map/dungeon_map.dart +++ b/example/lib/pages/mini_games/manual_map/dungeon_map.dart @@ -116,7 +116,7 @@ class DungeonMap { }); }); - return WorldMap([LayerModel(id: 0, tiles: tileList)]); + return WorldMap([Layer(id: 0, tiles: tileList)]); } static List decorations() { diff --git a/lib/map/base/game_map.dart b/lib/map/base/game_map.dart index 754a47067..c83e63b65 100644 --- a/lib/map/base/game_map.dart +++ b/lib/map/base/game_map.dart @@ -4,7 +4,7 @@ import 'package:bonfire/map/base/layer.dart'; export 'package:bonfire/map/base/tile_layer_component.dart'; abstract class GameMap extends GameComponent { - List layers; + List layers; double sizeToUpdate; double tileSize = 0.0; @@ -26,8 +26,8 @@ abstract class GameMap extends GameComponent { } void removeLayer(int id); - Future addLayer(LayerModel layer); - Future updateLayers(List layers); + Future addLayer(Layer layer); + Future updateLayers(List layers); @override int get priority => LayerPriority.MAP; diff --git a/lib/map/base/layer.dart b/lib/map/base/layer.dart index 99960c07d..94eaffc07 100644 --- a/lib/map/base/layer.dart +++ b/lib/map/base/layer.dart @@ -1,6 +1,6 @@ import 'package:bonfire/bonfire.dart'; -class LayerModel { +class Layer { final int? id; final String? name; final String? layerClass; @@ -12,8 +12,7 @@ class LayerModel { final int priority; List tiles = []; - - LayerModel({ + Layer({ required this.id, required this.tiles, this.name, @@ -26,5 +25,4 @@ class LayerModel { this.priority = 0, }) : position = position ?? Vector2.zero(), offset = offset ?? Vector2.zero(); - } diff --git a/lib/map/empty_map.dart b/lib/map/empty_map.dart index c89114b37..dd27c8b99 100644 --- a/lib/map/empty_map.dart +++ b/lib/map/empty_map.dart @@ -5,7 +5,7 @@ class EmptyWorldMap extends WorldMap { EmptyWorldMap({double tileSizeToUpdate = 0, Vector2? size}) : super( [ - LayerModel( + Layer( id: 0, tiles: [ if (size != null) diff --git a/lib/map/matrix_map/matrix_map_generator.dart b/lib/map/matrix_map/matrix_map_generator.dart index 992999bee..93c2ced44 100644 --- a/lib/map/matrix_map/matrix_map_generator.dart +++ b/lib/map/matrix_map/matrix_map_generator.dart @@ -71,19 +71,19 @@ class MatrixMapGenerator { required List layers, required TileModelBuilder builder, }) { - List tileLayers = []; + List tileLayers = []; int index = 0; for (var layer in layers) { if (layer.axisInverted) { tileLayers.add( - LayerModel( + Layer( id: index, tiles: _buildInverted(layer.matrix, builder), ), ); } else { tileLayers.add( - LayerModel( + Layer( id: index, tiles: _buildNormal(layer.matrix, builder), ), diff --git a/lib/map/spritefusion/builder/spritefusion_world_builder.dart b/lib/map/spritefusion/builder/spritefusion_world_builder.dart index 0debc04f1..3cb40a848 100644 --- a/lib/map/spritefusion/builder/spritefusion_world_builder.dart +++ b/lib/map/spritefusion/builder/spritefusion_world_builder.dart @@ -7,7 +7,7 @@ class SpritefusionWorldBuilder { final ValueChanged? onError; final WorldMapReader reader; final double sizeToUpdate; - final List _layers = []; + final List _layers = []; SpritefusionWorldBuilder( this.reader, { @@ -32,8 +32,6 @@ class SpritefusionWorldBuilder { ), ); } - - Future _load(SpritefusionMap map) async{ - } + Future _load(SpritefusionMap map) async {} } diff --git a/lib/map/tiled/builder/tiled_world_builder.dart b/lib/map/tiled/builder/tiled_world_builder.dart index 2b6a588e1..e8389eba4 100644 --- a/lib/map/tiled/builder/tiled_world_builder.dart +++ b/lib/map/tiled/builder/tiled_world_builder.dart @@ -41,7 +41,7 @@ class TiledWorldBuilder { final ValueChanged? onError; final WorldMapReader reader; final double sizeToUpdate; - final List _layers = []; + final List _layers = []; final List _components = []; String? _basePath; TiledMap? _tiledMap; diff --git a/lib/map/util/layer_mapper.dart b/lib/map/util/layer_mapper.dart index 76c6ed790..f70a811fc 100644 --- a/lib/map/util/layer_mapper.dart +++ b/lib/map/util/layer_mapper.dart @@ -1,8 +1,8 @@ import 'package:bonfire/map/base/layer.dart'; import 'package:bonfire/map/base/tile_layer_component.dart'; -abstract class LayerMapper{ - static TileLayerComponent toLayerComponent(LayerModel layer){ +abstract class LayerMapper { + static TileLayerComponent toLayerComponent(Layer layer) { return TileLayerComponent( id: layer.id ?? 0, tiles: layer.tiles, @@ -15,4 +15,4 @@ abstract class LayerMapper{ priority: layer.priority, ); } -} \ No newline at end of file +} diff --git a/lib/map/util/map_layer_mapper.dart b/lib/map/util/map_layer_mapper.dart index aa1873ad0..79f064d8a 100644 --- a/lib/map/util/map_layer_mapper.dart +++ b/lib/map/util/map_layer_mapper.dart @@ -5,7 +5,7 @@ import 'package:tiledjsonreader/map/layer/objects.dart'; abstract class MapLayerMapper { static toLayer(MapLayer layer, int priority) { - return LayerModel( + return Layer( id: layer.id, layerClass: layer.layerClass, name: layer.name, diff --git a/lib/map/world_map.dart b/lib/map/world_map.dart index f4add3a17..e8856d27d 100644 --- a/lib/map/world_map.dart +++ b/lib/map/world_map.dart @@ -23,7 +23,7 @@ class WorldMap extends GameMap { } WorldMap( - List layers, { + List layers, { double tileSizeToUpdate = 0, }) : super( layers, @@ -165,7 +165,7 @@ class WorldMap extends GameMap { } @override - Future updateLayers(List layers) async { + Future updateLayers(List layers) async { this.layers = layers; removeAll(children); await addAll(layers.map(LayerMapper.toLayerComponent)); @@ -173,7 +173,7 @@ class WorldMap extends GameMap { } @override - Future addLayer(LayerModel layer) async { + Future addLayer(Layer layer) async { layers.add(layer); add(LayerMapper.toLayerComponent(layer)); _confMap(lastSizeScreen!, calculateSize: true); From 0b0b2665c5d845d496cbe7246198a3d2d8fabd6e Mon Sep 17 00:00:00 2001 From: Rafael Almeida Barbosa Date: Mon, 22 Apr 2024 11:35:02 -0300 Subject: [PATCH 6/9] finish spritefusion support fromAsset --- example/assets/images/spritefusion/map.json | 2 +- .../builder/spritefusion_world_builder.dart | 52 ++++++++++++++++++- .../spritefusion/model/spritefucion_map.dart | 5 ++ .../reader/spritefusion_asset_reader.dart | 3 +- 4 files changed, 59 insertions(+), 3 deletions(-) diff --git a/example/assets/images/spritefusion/map.json b/example/assets/images/spritefusion/map.json index f3021f2db..c18b9f5e5 100644 --- a/example/assets/images/spritefusion/map.json +++ b/example/assets/images/spritefusion/map.json @@ -213,7 +213,7 @@ "y": 6 } ], - "collider": false + "collider": true }, { "name": "GOUND", diff --git a/lib/map/spritefusion/builder/spritefusion_world_builder.dart b/lib/map/spritefusion/builder/spritefusion_world_builder.dart index 3cb40a848..6e41fe813 100644 --- a/lib/map/spritefusion/builder/spritefusion_world_builder.dart +++ b/lib/map/spritefusion/builder/spritefusion_world_builder.dart @@ -1,6 +1,7 @@ import 'package:bonfire/bonfire.dart'; import 'package:bonfire/map/base/layer.dart'; import 'package:bonfire/map/spritefusion/model/spritefucion_map.dart'; +import 'package:bonfire/map/util/map_assets_manager.dart'; import 'package:flutter/material.dart'; class SpritefusionWorldBuilder { @@ -33,5 +34,54 @@ class SpritefusionWorldBuilder { ); } - Future _load(SpritefusionMap map) async {} + Future _load(SpritefusionMap map) async { + int index = 0; + final spritesheet = await MapAssetsManager.loadImage(map.imgPath); + final maxRow = spritesheet.width / map.tileSize; + for (var layer in map.layers.reversed) { + List tiles = _loadTiles( + layer.tiles, + map.tileSize, + map.imgPath, + maxRow, + layer.collider, + ); + _layers.add( + Layer( + id: index, + tiles: tiles, + priority: index, + ), + ); + index++; + } + } + + List _loadTiles( + List tiles, + double tileSize, + String imgPath, + double maxRow, + bool collider, + ) { + final size = Vector2.all(tileSize); + return tiles.map( + (tile) { + int row = tile.idInt ~/ maxRow; + int col = (tile.idInt % maxRow).toInt(); + return Tile( + x: tile.x.toDouble(), + y: tile.y.toDouble(), + width: tileSize, + height: tileSize, + sprite: TileSprite( + path: imgPath, + position: Vector2(col.toDouble(), row.toDouble()), + size: size, + ), + collisions: collider ? [RectangleHitbox(size: size)] : null, + ); + }, + ).toList(); + } } diff --git a/lib/map/spritefusion/model/spritefucion_map.dart b/lib/map/spritefusion/model/spritefucion_map.dart index 0ad6066ef..1726a9b97 100644 --- a/lib/map/spritefusion/model/spritefucion_map.dart +++ b/lib/map/spritefusion/model/spritefucion_map.dart @@ -6,6 +6,7 @@ class SpritefusionMap { final double mapWidth; final double mapHeight; final List layers; + String imgPath = ''; SpritefusionMap({ required this.tileSize, @@ -44,16 +45,19 @@ class SpritefusionMap { class SpritefusionMapLayer { final String name; + final bool collider; final List tiles; SpritefusionMapLayer({ required this.name, required this.tiles, + this.collider = false }); Map toMap() { return { 'name': name, + 'collider': collider, 'tiles': tiles.map((x) => x.toMap()).toList(), }; } @@ -61,6 +65,7 @@ class SpritefusionMapLayer { factory SpritefusionMapLayer.fromMap(Map map) { return SpritefusionMapLayer( name: map['name'] as String, + collider: map['collider'] ?? false, tiles: List.from( (map['tiles'] as List).map( (x) => SpritefusionMapLayerTile.fromMap(x as Map), diff --git a/lib/map/spritefusion/reader/spritefusion_asset_reader.dart b/lib/map/spritefusion/reader/spritefusion_asset_reader.dart index ad68376ff..f259ce1d6 100644 --- a/lib/map/spritefusion/reader/spritefusion_asset_reader.dart +++ b/lib/map/spritefusion/reader/spritefusion_asset_reader.dart @@ -23,6 +23,7 @@ class SpritefusionAssetReader extends WorldMapReader { @override Future readMap() async { String data = await rootBundle.loadString(_path); - return SpritefusionMap.fromJson(data); + return SpritefusionMap.fromJson(data) + ..imgPath = '${basePath}spritesheet.png'; } } From 825cd4bceb777bf30b3babe4ce22db4beb3c604c Mon Sep 17 00:00:00 2001 From: Rafael Almeida Barbosa Date: Mon, 22 Apr 2024 13:43:59 -0300 Subject: [PATCH 7/9] adds SpritefusionNetworkReader --- .../spritefusion/model/spritefucion_map.dart | 17 ++++--- .../reader/spritefusion_network_reader.dart | 51 +++++++++++++++++++ .../tiled/reader/tiled_network_reader.dart | 17 ++----- lib/map/util/server_image_loader.dart | 30 +++++++++++ 4 files changed, 94 insertions(+), 21 deletions(-) create mode 100644 lib/map/spritefusion/reader/spritefusion_network_reader.dart create mode 100644 lib/map/util/server_image_loader.dart diff --git a/lib/map/spritefusion/model/spritefucion_map.dart b/lib/map/spritefusion/model/spritefucion_map.dart index 1726a9b97..0baa8c6d0 100644 --- a/lib/map/spritefusion/model/spritefucion_map.dart +++ b/lib/map/spritefusion/model/spritefucion_map.dart @@ -6,13 +6,14 @@ class SpritefusionMap { final double mapWidth; final double mapHeight; final List layers; - String imgPath = ''; + String imgPath; SpritefusionMap({ required this.tileSize, required this.mapWidth, required this.mapHeight, required this.layers, + this.imgPath = '', }); Map toMap() { @@ -20,6 +21,7 @@ class SpritefusionMap { 'tileSize': tileSize, 'mapWidth': mapWidth, 'mapHeight': mapHeight, + 'imgPath':imgPath, 'layers': layers.map((x) => x.toMap()).toList(), }; } @@ -29,6 +31,7 @@ class SpritefusionMap { tileSize: double.parse(map['tileSize'].toString()), mapWidth: double.parse(map['mapWidth'].toString()), mapHeight: double.parse(map['mapHeight'].toString()), + imgPath: map['imgPath'] ?? '', layers: List.from( (map['layers'] as List).map( (x) => SpritefusionMapLayer.fromMap(x as Map), @@ -39,8 +42,9 @@ class SpritefusionMap { String toJson() => json.encode(toMap()); - factory SpritefusionMap.fromJson(String source) => - SpritefusionMap.fromMap(json.decode(source) as Map); + factory SpritefusionMap.fromJson(String source) => SpritefusionMap.fromMap( + json.decode(source) as Map, + ); } class SpritefusionMapLayer { @@ -48,11 +52,8 @@ class SpritefusionMapLayer { final bool collider; final List tiles; - SpritefusionMapLayer({ - required this.name, - required this.tiles, - this.collider = false - }); + SpritefusionMapLayer( + {required this.name, required this.tiles, this.collider = false}); Map toMap() { return { diff --git a/lib/map/spritefusion/reader/spritefusion_network_reader.dart b/lib/map/spritefusion/reader/spritefusion_network_reader.dart new file mode 100644 index 000000000..c72d83377 --- /dev/null +++ b/lib/map/spritefusion/reader/spritefusion_network_reader.dart @@ -0,0 +1,51 @@ +import 'dart:convert'; + +import 'package:bonfire/map/spritefusion/model/spritefucion_map.dart'; +import 'package:bonfire/map/tiled/cache_provider/tiled_cache_provider.dart'; +import 'package:bonfire/map/tiled/cache_provider/tiled_memory_cache_provider.dart'; +import 'package:bonfire/map/util/server_image_loader.dart'; +import 'package:bonfire/map/util/world_map_reader.dart'; +import 'package:http/http.dart' as http; + +class SpritefusionNetworkReader extends WorldMapReader { + final Uri uri; + final TiledCacheProvider cache; + final Map? headers; + + late ServerImageLoader _imageLoader; + + @override + late String basePath; + + SpritefusionNetworkReader({ + required this.uri, + TiledCacheProvider? cacheProvider, + this.headers, + }) : cache = cacheProvider ?? TiledMemoryCacheProvider() { + _imageLoader = ServerImageLoader(cache: cache); + String url = uri.toString(); + basePath = url.replaceAll(url.split('/').last, ''); + } + + @override + Future readMap() async { + final map = await _fetchMap(); + await _imageLoader.load(map.imgPath); + return map; + } + + Future _fetchMap() async { + final uriKey = uri.toString(); + bool containCache = await cache.containsKey(uriKey); + if (containCache) { + final map = await cache.get(uriKey); + return SpritefusionMap.fromMap(map); + } else { + final mapResponse = await http.get(uri, headers: headers); + final map = jsonDecode(mapResponse.body); + map['imgPath'] = '${basePath}spritesheet.png'; + cache.put(uriKey, map); + return SpritefusionMap.fromJson(map); + } + } +} diff --git a/lib/map/tiled/reader/tiled_network_reader.dart b/lib/map/tiled/reader/tiled_network_reader.dart index bc4eb8fe7..4d243b149 100644 --- a/lib/map/tiled/reader/tiled_network_reader.dart +++ b/lib/map/tiled/reader/tiled_network_reader.dart @@ -3,6 +3,7 @@ import 'dart:convert'; import 'package:bonfire/bonfire.dart'; import 'package:bonfire/map/tiled/cache_provider/tiled_memory_cache_provider.dart'; +import 'package:bonfire/map/util/server_image_loader.dart'; import 'package:http/http.dart' as http; import 'package:tiledjsonreader/map/layer/image_layer.dart'; import 'package:tiledjsonreader/map/layer/map_layer.dart'; @@ -13,18 +14,19 @@ import 'package:tiledjsonreader/tile_set/tile_set_item.dart'; class TiledNetworkReader extends WorldMapReader { // ignore: constant_identifier_names static const ORIENTATION_SUPPORTED = 'orthogonal'; - static const _keyImgBase64 = 'base64'; final Uri uri; final TiledCacheProvider cache; final Map? headers; @override late String basePath; + late ServerImageLoader _imageLoader; TiledNetworkReader({ required this.uri, TiledCacheProvider? cacheProvider, this.headers, }) : cache = cacheProvider ?? TiledMemoryCacheProvider() { + _imageLoader = ServerImageLoader(cache: cache); String url = uri.toString(); basePath = url.replaceAll(url.split('/').last, ''); } @@ -143,17 +145,6 @@ class TiledNetworkReader extends WorldMapReader { } Future _loadImage(String url) async { - if (!Flame.images.containsKey(url)) { - bool containCache = await cache.containsKey(url); - if (containCache) { - String base64 = (await cache.get(url))[_keyImgBase64]; - await Flame.images.fromBase64(url, base64); - } else { - final response = await http.get(Uri.parse(url), headers: headers); - String img64 = base64Encode(response.bodyBytes); - cache.put(url, {_keyImgBase64: img64}); - await Flame.images.fromBase64(url, img64); - } - } + await _imageLoader.load(url); } } diff --git a/lib/map/util/server_image_loader.dart b/lib/map/util/server_image_loader.dart new file mode 100644 index 000000000..f5ad477cd --- /dev/null +++ b/lib/map/util/server_image_loader.dart @@ -0,0 +1,30 @@ +import 'dart:convert'; + +import 'package:bonfire/bonfire.dart'; +import 'package:http/http.dart' as http; + +class ServerImageLoader { + static const _keyImgBase64 = 'base64'; + final TiledCacheProvider cache; + final Map? headers; + + ServerImageLoader({ + required this.cache, + this.headers, + }); + Future load(String url) async { + if (!Flame.images.containsKey(url)) { + bool containCache = await cache.containsKey(url); + if (containCache) { + String base64 = (await cache.get(url))[_keyImgBase64]; + return Flame.images.fromBase64(url, base64); + } else { + final response = await http.get(Uri.parse(url), headers: headers); + String img64 = base64Encode(response.bodyBytes); + cache.put(url, {_keyImgBase64: img64}); + return Flame.images.fromBase64(url, img64); + } + } + return Flame.images.load(url); + } +} From 94478cc05129858f54611033242454b01c4e71c5 Mon Sep 17 00:00:00 2001 From: Rafael Almeida Barbosa Date: Mon, 22 Apr 2024 19:23:17 -0300 Subject: [PATCH 8/9] update chengelog --- CHANGELOG.md | 7 ++++++- lib/map/util/world_map_reader.dart | 7 +++++++ 2 files changed, 13 insertions(+), 1 deletion(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 52ced1d91..94fb0e5f2 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,10 +1,15 @@ # NEXT - `GameMap` Improvements. Now you can access the layers Breaking Changes: - - `WorldMap` expect `List` instead of `List`; + - `WorldMap` expect `List` instead of `List`; - `MatrixMapGenerator.generate` now expect `List layers` instead og `List> matrix`; - `TileModel` renamed to `Tile`; - `TileModelSprite` renamed to `TileSprite`. +- Adds support to load map built by [SpriteFusion](https://www.spritefusion.com/). Use `WorldMapBySpritefusion`. + Breaking Changes: + - Renamed `TiledReader` to `WorldMapReader`. + - Renamed `TiledReader.asset` to `WorldMapReader.fromAsset`. + - Renamed `TiledReader.network` to `WorldMapReader.fromNetwork`. # 3.7.1 - Fix keyboard param. [#500](https://github.com/RafaelBarbosatec/bonfire/pull/500). Thanks [jakobodman123](https://github.com/jakobodman123) diff --git a/lib/map/util/world_map_reader.dart b/lib/map/util/world_map_reader.dart index c70edd4a4..b97da5211 100644 --- a/lib/map/util/world_map_reader.dart +++ b/lib/map/util/world_map_reader.dart @@ -3,6 +3,7 @@ import 'dart:async'; import 'package:bonfire/bonfire.dart'; import 'package:bonfire/map/spritefusion/model/spritefucion_map.dart'; import 'package:bonfire/map/spritefusion/reader/spritefusion_asset_reader.dart'; +import 'package:bonfire/map/spritefusion/reader/spritefusion_network_reader.dart'; import 'package:bonfire/map/tiled/reader/tiled_asset_reader.dart'; import 'package:bonfire/map/tiled/reader/tiled_network_reader.dart'; import 'package:tiledjsonreader/map/tiled_map.dart'; @@ -35,6 +36,12 @@ abstract class WorldMapReader { cacheProvider: cacheProvider, headers: headers, ) as WorldMapReader; + case SpritefusionMap: + return SpritefusionNetworkReader( + uri: uri, + cacheProvider: cacheProvider, + headers: headers, + ) as WorldMapReader; default: throw Exception('There is not a WorldMapReader.network to $T'); } From fc5f037989dfae17d66889645a67e51d37270e95 Mon Sep 17 00:00:00 2001 From: Rafael Almeida Barbosa Date: Mon, 22 Apr 2024 19:29:01 -0300 Subject: [PATCH 9/9] format --- lib/map/spritefusion/model/spritefucion_map.dart | 4 ++-- lib/map/tiled/reader/tiled_asset_reader.dart | 1 - lib/mixins/sensor.dart | 7 ++++++- 3 files changed, 8 insertions(+), 4 deletions(-) diff --git a/lib/map/spritefusion/model/spritefucion_map.dart b/lib/map/spritefusion/model/spritefucion_map.dart index 0baa8c6d0..8ba1f4202 100644 --- a/lib/map/spritefusion/model/spritefucion_map.dart +++ b/lib/map/spritefusion/model/spritefucion_map.dart @@ -6,7 +6,7 @@ class SpritefusionMap { final double mapWidth; final double mapHeight; final List layers; - String imgPath; + String imgPath; SpritefusionMap({ required this.tileSize, @@ -21,7 +21,7 @@ class SpritefusionMap { 'tileSize': tileSize, 'mapWidth': mapWidth, 'mapHeight': mapHeight, - 'imgPath':imgPath, + 'imgPath': imgPath, 'layers': layers.map((x) => x.toMap()).toList(), }; } diff --git a/lib/map/tiled/reader/tiled_asset_reader.dart b/lib/map/tiled/reader/tiled_asset_reader.dart index 73b09cfc0..5d99a3d21 100644 --- a/lib/map/tiled/reader/tiled_asset_reader.dart +++ b/lib/map/tiled/reader/tiled_asset_reader.dart @@ -1,4 +1,3 @@ - import 'package:bonfire/map/util/world_map_reader.dart'; import 'package:tiledjsonreader/map/tiled_map.dart'; import 'package:tiledjsonreader/tiledjsonreader.dart'; diff --git a/lib/mixins/sensor.dart b/lib/mixins/sensor.dart index 03e2ae200..19286f981 100644 --- a/lib/mixins/sensor.dart +++ b/lib/mixins/sensor.dart @@ -23,7 +23,12 @@ mixin Sensor on GameComponent { void update(double dt) { super.update(dt); if (componentIncontact != null && sensorEnabled) { - if (checkInterval(_sensorIntervalKey, _intervalCallback, dt)) { + if (checkInterval( + _sensorIntervalKey, + _intervalCallback, + dt, + firstCheckIsTrue: true, + )) { onContact(componentIncontact! as T); } }