From 602780b11f22be3cdd1410c74c0ffd15eee2aba6 Mon Sep 17 00:00:00 2001 From: Kurtis Melby Date: Sat, 24 Aug 2024 12:32:47 -0500 Subject: [PATCH] feat: adding more options to has_animation_group --- examples/standard_platformer/pubspec.lock | 2 +- .../animation_velocity_flip_behavior.dart | 12 ++++---- .../entities/behaviors/physical_behavior.dart | 1 + .../entities/mixins/has_animation_group.dart | 28 ++++++++++++++++++- .../src/entities/mixins/has_walk_speed.dart | 8 +++--- packages/leap/pubspec.lock | 4 +-- pubspec.yaml | 2 +- 7 files changed, 43 insertions(+), 14 deletions(-) diff --git a/examples/standard_platformer/pubspec.lock b/examples/standard_platformer/pubspec.lock index 9167dcf..8e81c93 100644 --- a/examples/standard_platformer/pubspec.lock +++ b/examples/standard_platformer/pubspec.lock @@ -192,7 +192,7 @@ packages: path: "../../packages/leap" relative: true source: path - version: "0.6.1" + version: "0.7.0" lints: dependency: transitive description: diff --git a/packages/leap/lib/src/entities/behaviors/animation_velocity_flip_behavior.dart b/packages/leap/lib/src/entities/behaviors/animation_velocity_flip_behavior.dart index a20cdc9..6427015 100644 --- a/packages/leap/lib/src/entities/behaviors/animation_velocity_flip_behavior.dart +++ b/packages/leap/lib/src/entities/behaviors/animation_velocity_flip_behavior.dart @@ -6,15 +6,17 @@ class AnimationVelocityFlipBehavior extends PhysicalBehavior { @override void update(double dt) { - final animationFacesLeft = parent.animationFacesLeft; + final spriteFacesLeft = parent.spriteFacesLeft; final animationGroup = parent.animationGroup; // Update sprite for direction - if ((!animationFacesLeft && velocity.x < 0) || - (animationFacesLeft && velocity.x > 0)) { + final lookDirection = parent.spriteLookDirection; + if ((!spriteFacesLeft && lookDirection == SpriteLookDirection.left) || + (spriteFacesLeft && lookDirection == SpriteLookDirection.right)) { animationGroup.scale.x = -animationGroup.scale.x.abs(); - } else if ((!animationFacesLeft && velocity.x > 0) || - (animationFacesLeft && velocity.x < 0)) { + } else if ((!spriteFacesLeft && + lookDirection == SpriteLookDirection.right) || + (spriteFacesLeft && lookDirection == SpriteLookDirection.left)) { animationGroup.scale.x = animationGroup.scale.x.abs(); } } diff --git a/packages/leap/lib/src/entities/behaviors/physical_behavior.dart b/packages/leap/lib/src/entities/behaviors/physical_behavior.dart index aabd652..7d6bc13 100644 --- a/packages/leap/lib/src/entities/behaviors/physical_behavior.dart +++ b/packages/leap/lib/src/entities/behaviors/physical_behavior.dart @@ -13,6 +13,7 @@ abstract class PhysicalBehavior extends Behavior { CollisionInfo get collisionInfo => parent.collisionInfo; CollisionInfo get prevCollisionInfo => parent.prevCollisionInfo; + LeapGame get leapGame => parent.leapGame; LeapMap get leapMap => parent.leapMap; LeapWorld get leapWorld => parent.leapWorld; diff --git a/packages/leap/lib/src/entities/mixins/has_animation_group.dart b/packages/leap/lib/src/entities/mixins/has_animation_group.dart index b361c9d..835df3d 100644 --- a/packages/leap/lib/src/entities/mixins/has_animation_group.dart +++ b/packages/leap/lib/src/entities/mixins/has_animation_group.dart @@ -4,5 +4,31 @@ import 'package:leap/src/entities/physical_entity.dart'; mixin HasAnimationGroup on PhysicalEntity { AnchoredAnimationGroup get animationGroup; - bool animationFacesLeft = false; + /// Whether or not the sprite sheet is looking left + bool spriteFacesLeft = false; + + SpriteLookDirection? forceSpriteLookDirection; + + /// Whether or not the animation should currently be looking left + SpriteLookDirection get spriteLookDirection { + if (forceSpriteLookDirection != null) { + return forceSpriteLookDirection!; + } + + if (velocity.x == 0) { + return SpriteLookDirection.previous; + } else if (velocity.x < 0) { + return SpriteLookDirection.left; + } else { + return SpriteLookDirection.right; + } + } +} + +enum SpriteLookDirection { + left, + right, + + /// [previous] indicates leaving the sprite as is + previous } diff --git a/packages/leap/lib/src/entities/mixins/has_walk_speed.dart b/packages/leap/lib/src/entities/mixins/has_walk_speed.dart index c557f15..1ed7529 100644 --- a/packages/leap/lib/src/entities/mixins/has_walk_speed.dart +++ b/packages/leap/lib/src/entities/mixins/has_walk_speed.dart @@ -1,13 +1,13 @@ mixin HasWalkSpeed { - // Wether or not this is currently facing left + /// Wether or not this is currently facing left bool faceLeft = false; - // Wether or not walk speed should be applied + /// Wether or not walk speed should be applied bool isWalking = false; - // Base value for setting [walkSpeed] + /// Base value for setting [walkSpeed] double baseWalkSpeed = 10; - // How many units to walk per second. + /// How many units to walk per second. double walkSpeed = 10; } diff --git a/packages/leap/pubspec.lock b/packages/leap/pubspec.lock index 21c8b9f..98c208f 100644 --- a/packages/leap/pubspec.lock +++ b/packages/leap/pubspec.lock @@ -268,10 +268,10 @@ packages: dependency: transitive description: name: vm_service - sha256: f652077d0bdf60abe4c1f6377448e8655008eef28f128bc023f7b5e8dfeb48fc + sha256: "5c5f338a667b4c644744b661f309fb8080bb94b18a7e91ef1dbd343bed00ed6d" url: "https://pub.dev" source: hosted - version: "14.2.4" + version: "14.2.5" xml: dependency: transitive description: diff --git a/pubspec.yaml b/pubspec.yaml index 20e9058..0df609a 100644 --- a/pubspec.yaml +++ b/pubspec.yaml @@ -3,5 +3,5 @@ name: leap_workspace environment: sdk: '>=2.18.0 <3.0.0' dev_dependencies: - melos: ^3.1.1 + melos: ^6.1.0