diff options
Diffstat (limited to 'lib/level.dart')
-rw-r--r-- | lib/level.dart | 35 |
1 files changed, 35 insertions, 0 deletions
diff --git a/lib/level.dart b/lib/level.dart index 4f69b67..c57f34c 100644 --- a/lib/level.dart +++ b/lib/level.dart @@ -4,6 +4,7 @@ import 'package:flutter/material.dart'; import 'package:audioplayers/audioplayers.dart'; import 'package:flutter/services.dart'; import 'package:sense_the_rhythm/arrows.dart'; +import 'package:sense_the_rhythm/esense_input.dart'; import 'package:sense_the_rhythm/game_over_stats.dart'; import 'package:sense_the_rhythm/simfile.dart'; @@ -20,6 +21,13 @@ class InputDirection { bool down = false; bool left = false; bool right = false; + + void reset() { + up = false; + down = false; + left = false; + right = false; + } } class _LevelState extends State<Level> with SingleTickerProviderStateMixin { @@ -30,6 +38,7 @@ class _LevelState extends State<Level> with SingleTickerProviderStateMixin { StreamSubscription? _durationSubscription; StreamSubscription? _positionSubscription; + StreamSubscription? _buttonSubscription; final FocusNode _focusNode = FocusNode(); InputDirection inputDirection = InputDirection(); @@ -53,6 +62,7 @@ class _LevelState extends State<Level> with SingleTickerProviderStateMixin { @override void initState() { super.initState(); + ESenseInput.instance.resetAngles(); _animationController = AnimationController( vsync: this, @@ -77,6 +87,22 @@ class _LevelState extends State<Level> with SingleTickerProviderStateMixin { setState(() => _duration = duration); }); + _buttonSubscription = ESenseInput.instance.buttonEvents().listen((event) { + if (!event.pressed) { + if (_isPlaying) { + player.pause(); + setState(() { + _isPlaying = false; + }); + } else { + player.resume(); + setState(() { + _isPlaying = true; + }); + } + } + }); + _positionSubscription = player.onPositionChanged.listen( (p) => setState(() => _position = p), ); @@ -104,6 +130,12 @@ class _LevelState extends State<Level> with SingleTickerProviderStateMixin { continue; } if (note.position.abs() < 0.5 * 1.0 / 60.0) { + InputDirection esenseDirection = + ESenseInput.instance.getInputDirection(note.direction); + inputDirection.up |= esenseDirection.up; + inputDirection.down |= esenseDirection.down; + inputDirection.left |= esenseDirection.left; + inputDirection.right |= esenseDirection.right; bool keypressCorrect = false; switch (note.direction) { case ArrowDirection.up: @@ -124,6 +156,7 @@ class _LevelState extends State<Level> with SingleTickerProviderStateMixin { note.wasHit = true; _animationController.reset(); _animationController.forward(); + inputDirection.reset(); setState(() { hitOrMissMessage = 'Great!'; }); @@ -133,6 +166,7 @@ class _LevelState extends State<Level> with SingleTickerProviderStateMixin { note.wasHit = false; _animationController.reset(); _animationController.forward(); + inputDirection.reset(); setState(() { hitOrMissMessage = 'Missed'; }); @@ -254,6 +288,7 @@ class _LevelState extends State<Level> with SingleTickerProviderStateMixin { _animationController.dispose(); _durationSubscription?.cancel(); _positionSubscription?.cancel(); + _buttonSubscription?.cancel(); player.dispose(); super.dispose(); } |