From 4932becb04651d5bd61d1b64288f233f8c0ce925 Mon Sep 17 00:00:00 2001 From: Kurtis Melby Date: Mon, 25 Dec 2023 21:40:09 -0500 Subject: [PATCH] fix: misc clean-up --- .../lib/snowy_moving_platform.dart | 33 ++++++++++--------- examples/standard_platformer/pubspec.lock | 15 ++++----- packages/leap/lib/src/entities/ladder.dart | 5 +++ .../lib/src/entities/moving_platform.dart | 27 +++++++++------ .../collision_detection_behavior.dart | 4 +-- 5 files changed, 48 insertions(+), 36 deletions(-) diff --git a/examples/standard_platformer/lib/snowy_moving_platform.dart b/examples/standard_platformer/lib/snowy_moving_platform.dart index 442c789..f1a9f26 100644 --- a/examples/standard_platformer/lib/snowy_moving_platform.dart +++ b/examples/standard_platformer/lib/snowy_moving_platform.dart @@ -1,15 +1,28 @@ import 'package:flame/components.dart'; import 'package:flame/flame.dart'; +import 'package:flutter/foundation.dart'; import 'package:leap/leap.dart'; import 'package:leap_standard_platformer/main.dart'; import 'package:tiled/tiled.dart'; class SnowyMovingPlatform extends MovingPlatform { - SnowyMovingPlatform(TiledObject tiledObject, this.sprite, double tileSize) - : super.fromTiledObject(tiledObject, tileSize) { + SnowyMovingPlatform(super.tiledObject) : super.fromTiledObject() { width = 16 * 6; height = 16 * 2; priority = 2; + } + + @override + @mustCallSuper + Future onLoad() async { + super.onLoad(); + + final tileset = await Flame.images.load('level_ice_tileset.png'); + final sprite = Sprite( + tileset, + srcPosition: Vector2(97, 64), + srcSize: Vector2(16 * 6, 16 * 2), + ); add( SpriteComponent( @@ -17,28 +30,16 @@ class SnowyMovingPlatform extends MovingPlatform { ), ); } - - final Sprite sprite; } class SnowyMovingPlatformFactory implements TiledObjectHandler { - late final Sprite sprite; - - SnowyMovingPlatformFactory(this.sprite); - @override void handleObject(TiledObject object, Layer layer, LeapMap map) { - final platform = SnowyMovingPlatform(object, sprite, map.tileSize); + final platform = SnowyMovingPlatform(object); map.add(platform); } static Future createFactory() async { - final tileset = await Flame.images.load('level_ice_tileset.png'); - final sprite = Sprite( - tileset, - srcPosition: Vector2(97, 64), - srcSize: Vector2(16 * 6, 16 * 2), - ); - return SnowyMovingPlatformFactory(sprite); + return SnowyMovingPlatformFactory(); } } diff --git a/examples/standard_platformer/pubspec.lock b/examples/standard_platformer/pubspec.lock index 893cae1..531a166 100644 --- a/examples/standard_platformer/pubspec.lock +++ b/examples/standard_platformer/pubspec.lock @@ -125,10 +125,10 @@ packages: dependency: "direct main" description: name: flame - sha256: "4418cf72c53059241a2e9ddf8e783a01ae84caec31d7f6d30a19122b2c602748" + sha256: "8703abbdb3aec264f91823f8af3de4f1a14656326aff0f344d90484be97ee8e7" url: "https://pub.dev" source: hosted - version: "1.11.0" + version: "1.12.0" flame_audio: dependency: "direct main" description: @@ -156,11 +156,10 @@ packages: flame_tiled: dependency: "direct main" description: - name: flame_tiled - sha256: "47f14dc87b92c252fc4b357b194f583817e93b7fb62880da2e7fe5abc3942c3b" - url: "https://pub.dev" - source: hosted - version: "1.18.0" + path: "../../../flame/packages/flame_tiled" + relative: true + source: path + version: "1.18.1" flutter: dependency: "direct main" description: flutter @@ -201,7 +200,7 @@ packages: path: "../../packages/leap" relative: true source: path - version: "0.5.0" + version: "0.5.2" material_color_utilities: dependency: transitive description: diff --git a/packages/leap/lib/src/entities/ladder.dart b/packages/leap/lib/src/entities/ladder.dart index f6cd2ff..97cc855 100644 --- a/packages/leap/lib/src/entities/ladder.dart +++ b/packages/leap/lib/src/entities/ladder.dart @@ -8,6 +8,7 @@ abstract class Ladder extends PhysicalEntity { super.position, super.size, this.topExtraHitbox = 0, + this.tiledObject, }) : super(static: true) { y = y - topExtraHitbox; height = height + topExtraHitbox; @@ -23,6 +24,7 @@ abstract class Ladder extends PhysicalEntity { tiledObject.height, ), topExtraHitbox: topExtraHitbox, + tiledObject: tiledObject, ); // Extra hitbox is to make it easier for the ladder hitbox to @@ -32,6 +34,9 @@ abstract class Ladder extends PhysicalEntity { /// The actual top of the ladder double get logicalTop => top + topExtraHitbox; + + /// [TiledObject] this was built from + final TiledObject? tiledObject; } /// The possible ladder movement states. diff --git a/packages/leap/lib/src/entities/moving_platform.dart b/packages/leap/lib/src/entities/moving_platform.dart index 529b902..37f62fd 100644 --- a/packages/leap/lib/src/entities/moving_platform.dart +++ b/packages/leap/lib/src/entities/moving_platform.dart @@ -1,6 +1,7 @@ import 'dart:developer' as developer; import 'package:flame/extensions.dart'; +import 'package:flutter/foundation.dart'; import 'package:leap/leap.dart'; import 'package:tiled/tiled.dart'; @@ -9,10 +10,11 @@ import 'package:tiled/tiled.dart'; abstract class MovingPlatform extends PhysicalEntity { MovingPlatform({ required Vector2 initialPosition, - required double tileSize, - required this.tilePath, required this.moveSpeed, + required this.tilePath, this.loopMode = MovingPlatformLoopMode.reverseAndLoop, + this.tiledObject, + super.size, // moving platforms should update before other entities so anything // standing on top of it from the previous frame can be properly moved // with the platform. @@ -21,25 +23,22 @@ abstract class MovingPlatform extends PhysicalEntity { tags.add(CommonTags.ground); position = initialPosition; - - // Snap to the closes position on the tile grid - position.x = position.x - position.x % tileSize; - position.y = position.y - position.y % tileSize; - - this.positionPath = _calculatePositionPath(position, tilePath, tileSize); } MovingPlatform.fromTiledObject( TiledObject tiledObject, - double tileSize, ) : this( initialPosition: Vector2(tiledObject.x, tiledObject.y), + size: Vector2(tiledObject.width, tiledObject.height), moveSpeed: _parseMoveSpeed(tiledObject), tilePath: _parseTilePath(tiledObject), loopMode: _parseLoopMode(tiledObject), - tileSize: tileSize, + tiledObject: tiledObject, ); + /// [TiledObject] this was built from + final TiledObject? tiledObject; + /// Move speed in tiles per second final Vector2 moveSpeed; @@ -65,6 +64,14 @@ abstract class MovingPlatform extends PhysicalEntity { bool _stopped = false; @override + @mustCallSuper + void onLoad() { + if (tiledObject != null) {} + this.positionPath = _calculatePositionPath(position, tilePath, tileSize); + } + + @override + @mustCallSuper void update(double dt) { super.update(dt); diff --git a/packages/leap/lib/src/physical_behaviors/collision/collision_detection_behavior.dart b/packages/leap/lib/src/physical_behaviors/collision/collision_detection_behavior.dart index 5e9b411..feefd59 100644 --- a/packages/leap/lib/src/physical_behaviors/collision/collision_detection_behavior.dart +++ b/packages/leap/lib/src/physical_behaviors/collision/collision_detection_behavior.dart @@ -185,7 +185,7 @@ class CollisionDetectionBehavior extends PhysicalBehavior { prevCollisionInfo.downCollision!.gridX >= 0 && prevCollisionInfo.downCollision!.gridY >= 0) { final prevDown = prevCollisionInfo.downCollision!; - if (velocity.x > 0) { + if (velocity.x > 0 && prevDown.gridX < map.groundTiles.length - 1) { // Walking down slope to the right. final nextSlopeYDelta = prevDown.rightTop == 0 ? 1 : 0; final nextSlope = map.groundTiles[prevDown.gridX + 1] @@ -195,7 +195,7 @@ class CollisionDetectionBehavior extends PhysicalBehavior { } else if (nextSlope != null && nextSlope.isSlopeFromRight) { collisionInfo.addDownCollision(nextSlope); } - } else if (velocity.x < 0) { + } else if (velocity.x < 0 && prevDown.gridX >= 1) { // Walking down slope to the left. final nextSlopeYDelta = prevDown.leftTop == 0 ? 1 : 0; final nextSlope = map.groundTiles[prevDown.gridX - 1]