summaryrefslogtreecommitdiff
path: root/lib/level.dart
diff options
context:
space:
mode:
Diffstat (limited to 'lib/level.dart')
-rw-r--r--lib/level.dart35
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();
}