Closed tkshnwesper closed 1 month ago
Game crashes after player releases a ranged projectile.
It is easy to reproduce. I have done so in the Platform minigame example in my fork https://github.com/tkshnwesper/bonfire by adding a simpleAttackRange. Here is the commit https://github.com/tkshnwesper/bonfire/commit/de1956c71d6fa347096dd605dde7f206aff4b703 if you want to see the changes.
simpleAttackRange
It should not have crashed.
Both 3.9.2 and 3.9.0
════════ Exception caught by scheduler library ═════════════════════════════════ The following StateError was thrown during a scheduler callback: Bad state: No element When the exception was thrown, this was the stack: #0 Iterable.reduce (dart:core/iterable.dart:375:7) #1 BlockMovementCollision._getCollisionShapeHitbox (package:bonfire/collision/block_movement_collision.dart:304:30) #2 BlockMovementCollision.onCollision (package:bonfire/collision/block_movement_collision.dart:110:26) #3 FlyingAttackGameObject.onCollision (package:bonfire/objects/flying_attack_game_object.dart:131:11) #4 ShapeHitbox.onCollision (package:flame/src/collisions/hitboxes/shape_hitbox.dart:197:44) #5 StandardCollisionDetection.handleCollision (package:flame/src/collisions/standard_collision_detection.dart:53:13) #6 CollisionDetection.run (package:flame/src/collisions/collision_detection.dart:49:11) #7 CustomQuadTreeCollisionDetection.run (package:bonfire/util/quadtree_collision/custom_quadtree_collision_detection.dart:84:11) #8 CustomHasQuadTreeCollisionDetection.update (package:bonfire/util/quadtree_collision/custom_has_quadtree_collision_detection.dart:88:24) #9 HasTimeScale.update (package:flame/src/components/mixins/has_time_scale.dart:30:11) #10 BonfireGame.update (package:bonfire/base/bonfire_game.dart:195:11) #11 GameRenderBox.gameLoopCallback (package:flame/src/game/game_render_box.dart:121:10) #12 GameLoop._tick (package:flame/src/game/game_loop.dart:46:13) #13 Ticker._tick (package:flutter/src/scheduler/ticker.dart:258:12) #14 SchedulerBinding._invokeFrameCallback (package:flutter/src/scheduler/binding.dart:1392:15) #15 SchedulerBinding.handleBeginFrame.<anonymous closure> (package:flutter/src/scheduler/binding.dart:1235:11) #16 _LinkedHashMapMixin.forEach (dart:collection-patch/compact_hash.dart:633:13) #17 SchedulerBinding.handleBeginFrame (package:flutter/src/scheduler/binding.dart:1233:17) #18 SchedulerBinding._handleBeginFrame (package:flutter/src/scheduler/binding.dart:1150:5) #19 _invoke1 (dart:ui/hooks.dart:328:13) #20 PlatformDispatcher._beginFrame (dart:ui/platform_dispatcher.dart:397:5) #21 _beginFrame (dart:ui/hooks.dart:272:31) This exception was thrown in the context of a scheduler callback. When the scheduler callback was _registered_ (as opposed to when the exception was thrown), this was the stack: #2 SchedulerBinding.scheduleFrameCallback (package:flutter/src/scheduler/binding.dart:606:49) #3 Ticker.scheduleTick (package:flutter/src/scheduler/ticker.dart:274:46) #4 Ticker.start (package:flutter/src/scheduler/ticker.dart:180:7) #5 GameLoop.start (package:flame/src/game/game_loop.dart:54:15) #6 GameRenderBox._attachGame (package:flame/src/game/game_render_box.dart:97:16) #7 GameRenderBox.attach (package:flame/src/game/game_render_box.dart:88:5) #8 RenderObject.adoptChild (package:flutter/src/rendering/object.dart:1841:13) #9 ContainerRenderObjectMixin.insert (package:flutter/src/rendering/object.dart:4255:5) #10 MultiChildRenderObjectElement.insertRenderObjectChild (package:flutter/src/widgets/framework.dart:6843:18) #11 RenderObjectElement.attachRenderObject (package:flutter/src/widgets/framework.dart:6602:35) #12 RenderObjectElement.mount (package:flutter/src/widgets/framework.dart:6467:5) #13 Element.inflateWidget (package:flutter/src/widgets/framework.dart:4340:16) #14 MultiChildRenderObjectElement.inflateWidget (package:flutter/src/widgets/framework.dart:6904:36) #15 MultiChildRenderObjectElement.mount (package:flutter/src/widgets/framework.dart:6916:32) #16 Element.inflateWidget (package:flutter/src/widgets/framework.dart:4340:16) #17 Element.updateChild (package:flutter/src/widgets/framework.dart:3843:20) #18 ComponentElement.performRebuild (package:flutter/src/widgets/framework.dart:5512:16) #19 StatefulElement.performRebuild (package:flutter/src/widgets/framework.dart:5650:11) #20 Element.rebuild (package:flutter/src/widgets/framework.dart:5203:7) #21 BuildOwner.buildScope (package:flutter/src/widgets/framework.dart:2905:19) #22 WidgetsBinding.drawFrame (package:flutter/src/widgets/binding.dart:1136:21) #23 RendererBinding._handlePersistentFrameCallback (package:flutter/src/rendering/binding.dart:443:5) #24 SchedulerBinding._invokeFrameCallback (package:flutter/src/scheduler/binding.dart:1392:15) #25 SchedulerBinding.handleDrawFrame (package:flutter/src/scheduler/binding.dart:1313:9) #26 SchedulerBinding._handleDrawFrame (package:flutter/src/scheduler/binding.dart:1171:5) #27 _invoke (dart:ui/hooks.dart:312:13) #28 PlatformDispatcher._drawFrame (dart:ui/platform_dispatcher.dart:419:5) #29 _drawFrame (dart:ui/hooks.dart:283:31) (elided 2 frames from class _FrameCallbackEntry)
What happened?
Game crashes after player releases a ranged projectile.
Steps to reproduce?
It is easy to reproduce. I have done so in the Platform minigame example in my fork https://github.com/tkshnwesper/bonfire by adding a
simpleAttackRange
. Here is the commit https://github.com/tkshnwesper/bonfire/commit/de1956c71d6fa347096dd605dde7f206aff4b703 if you want to see the changes.What did you expect to happen?
It should not have crashed.
Bonfire version
Both 3.9.2 and 3.9.0
Relevant log output