summaryrefslogtreecommitdiff
path: root/lib
diff options
context:
space:
mode:
Diffstat (limited to 'lib')
-rw-r--r--lib/arrows.dart57
-rw-r--r--lib/main.dart2
-rw-r--r--lib/models/arrow_direction.dart12
-rw-r--r--lib/models/input_direction.dart13
-rw-r--r--lib/models/note.dart10
-rw-r--r--lib/screens/game_over.dart (renamed from lib/game_over_stats.dart)6
-rw-r--r--lib/screens/level.dart (renamed from lib/level.dart)55
-rw-r--r--lib/screens/level_selection.dart (renamed from lib/level_selection.dart)9
-rw-r--r--lib/utils/esense_input.dart (renamed from lib/esense_input.dart)4
-rw-r--r--lib/utils/simfile.dart (renamed from lib/simfile.dart)1
-rw-r--r--lib/widgets/arrow.dart18
-rw-r--r--lib/widgets/arrows.dart24
-rw-r--r--lib/widgets/esense_connect_dialog.dart (renamed from lib/esense_connect_dialog.dart)0
13 files changed, 110 insertions, 101 deletions
diff --git a/lib/arrows.dart b/lib/arrows.dart
deleted file mode 100644
index ff53e02..0000000
--- a/lib/arrows.dart
+++ /dev/null
@@ -1,57 +0,0 @@
-import 'package:flutter/material.dart';
-
-enum ArrowDirection {
- left(Icons.arrow_back),
- down(Icons.arrow_downward),
- up(Icons.arrow_upward),
- right(Icons.arrow_forward);
-
- const ArrowDirection(this.icon);
-
- final IconData icon;
-}
-
-class Note {
- final double time;
- final ArrowDirection direction;
- double position = 0;
- bool? wasHit;
-
- Note({required this.time, required this.direction});
-}
-
-class Arrows extends StatelessWidget {
- final List<Note> notes;
- final double position;
-
- const Arrows({super.key, required this.notes, required this.position});
-
- @override
- Widget build(BuildContext context) {
- return Stack(
- children: notes.map((note) {
- double position = note.position * 10000; // * 20 * MediaQuery.of(context).size.height;
-
- return Arrow(
- position: position,
- direction: note.direction,
- );
- }).toList());
- }
-}
-
-class Arrow extends StatelessWidget {
- final double position;
- final ArrowDirection direction;
-
- const Arrow({super.key, required this.position, required this.direction});
-
- @override
- Widget build(BuildContext context) {
- return Positioned(
- left: MediaQuery.of(context).size.width / 2 - 50, // Center the arrow
- bottom: position + 50,
- child: Icon(size: 100, color: Colors.redAccent.shade400, direction.icon),
- );
- }
-}
diff --git a/lib/main.dart b/lib/main.dart
index eb01d44..85443bb 100644
--- a/lib/main.dart
+++ b/lib/main.dart
@@ -1,6 +1,6 @@
import 'package:flutter/material.dart';
-import 'level_selection.dart';
+import 'package:sense_the_rhythm/screens/level_selection.dart';
void main() {
runApp(const MyApp());
diff --git a/lib/models/arrow_direction.dart b/lib/models/arrow_direction.dart
new file mode 100644
index 0000000..5f0298b
--- /dev/null
+++ b/lib/models/arrow_direction.dart
@@ -0,0 +1,12 @@
+import 'package:flutter/material.dart';
+
+enum ArrowDirection {
+ left(Icons.arrow_back),
+ down(Icons.arrow_downward),
+ up(Icons.arrow_upward),
+ right(Icons.arrow_forward);
+
+ const ArrowDirection(this.icon);
+
+ final IconData icon;
+}
diff --git a/lib/models/input_direction.dart b/lib/models/input_direction.dart
new file mode 100644
index 0000000..08096c7
--- /dev/null
+++ b/lib/models/input_direction.dart
@@ -0,0 +1,13 @@
+class InputDirection {
+ bool up = false;
+ bool down = false;
+ bool left = false;
+ bool right = false;
+
+ void reset() {
+ up = false;
+ down = false;
+ left = false;
+ right = false;
+ }
+}
diff --git a/lib/models/note.dart b/lib/models/note.dart
new file mode 100644
index 0000000..bcc6ac6
--- /dev/null
+++ b/lib/models/note.dart
@@ -0,0 +1,10 @@
+import 'package:sense_the_rhythm/models/arrow_direction.dart';
+
+class Note {
+ final double time;
+ final ArrowDirection direction;
+ double position = 0;
+ bool? wasHit;
+
+ Note({required this.time, required this.direction});
+}
diff --git a/lib/game_over_stats.dart b/lib/screens/game_over.dart
index 0e73024..76ea2fb 100644
--- a/lib/game_over_stats.dart
+++ b/lib/screens/game_over.dart
@@ -1,7 +1,7 @@
import 'package:flutter/material.dart';
-import 'package:sense_the_rhythm/arrows.dart';
-import 'package:sense_the_rhythm/level.dart';
-import 'package:sense_the_rhythm/simfile.dart';
+import 'package:sense_the_rhythm/models/note.dart';
+import 'package:sense_the_rhythm/utils/simfile.dart';
+import 'package:sense_the_rhythm/screens/level.dart';
class GameOverStats extends StatelessWidget {
const GameOverStats({super.key, required this.simfile, required this.notes});
diff --git a/lib/level.dart b/lib/screens/level.dart
index c57f34c..16c7d11 100644
--- a/lib/level.dart
+++ b/lib/screens/level.dart
@@ -3,10 +3,13 @@ import 'dart:async';
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';
+import 'package:sense_the_rhythm/models/arrow_direction.dart';
+import 'package:sense_the_rhythm/models/input_direction.dart';
+import 'package:sense_the_rhythm/models/note.dart';
+import 'package:sense_the_rhythm/utils/esense_input.dart';
+import 'package:sense_the_rhythm/utils/simfile.dart';
+import 'package:sense_the_rhythm/widgets/arrows.dart';
+import 'package:sense_the_rhythm/screens/game_over.dart';
class Level extends StatefulWidget {
const Level(this.simfile, {super.key});
@@ -16,20 +19,6 @@ class Level extends StatefulWidget {
State<Level> createState() => _LevelState();
}
-class InputDirection {
- bool up = false;
- 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 {
final player = AudioPlayer();
bool _isPlaying = true;
@@ -87,21 +76,23 @@ 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;
- });
+ if (ESenseInput.instance.connected) {
+ _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),
diff --git a/lib/level_selection.dart b/lib/screens/level_selection.dart
index 3d3a95a..1b5d0d1 100644
--- a/lib/level_selection.dart
+++ b/lib/screens/level_selection.dart
@@ -3,12 +3,11 @@ import 'dart:io';
import 'package:file_picker/file_picker.dart';
import 'package:flutter/material.dart';
import 'package:permission_handler/permission_handler.dart';
-import 'package:sense_the_rhythm/esense_connect_dialog.dart';
-import 'package:sense_the_rhythm/esense_input.dart';
-import 'package:sense_the_rhythm/simfile.dart';
import 'package:shared_preferences/shared_preferences.dart';
-
-import 'level.dart';
+import 'package:sense_the_rhythm/utils/esense_input.dart';
+import 'package:sense_the_rhythm/utils/simfile.dart';
+import 'package:sense_the_rhythm/widgets/esense_connect_dialog.dart';
+import 'package:sense_the_rhythm/screens/level.dart';
class LevelSelection extends StatefulWidget {
const LevelSelection({super.key});
diff --git a/lib/esense_input.dart b/lib/utils/esense_input.dart
index c8fc22a..d909c0d 100644
--- a/lib/esense_input.dart
+++ b/lib/utils/esense_input.dart
@@ -4,8 +4,8 @@ import 'dart:io';
import 'package:esense_flutter/esense.dart';
import 'package:flutter/material.dart';
import 'package:permission_handler/permission_handler.dart';
-import 'package:sense_the_rhythm/arrows.dart';
-import 'package:sense_the_rhythm/level.dart';
+import 'package:sense_the_rhythm/models/arrow_direction.dart';
+import 'package:sense_the_rhythm/models/input_direction.dart';
class ESenseInput {
static final instance = ESenseInput._();
diff --git a/lib/simfile.dart b/lib/utils/simfile.dart
index 7bdf5c0..0af734f 100644
--- a/lib/simfile.dart
+++ b/lib/utils/simfile.dart
@@ -1,4 +1,3 @@
-import 'dart:ffi';
import 'dart:io';
enum Difficulty { Beginner, Easy, Medium, Hard, Challenge, Edit }
diff --git a/lib/widgets/arrow.dart b/lib/widgets/arrow.dart
new file mode 100644
index 0000000..1ad0ec4
--- /dev/null
+++ b/lib/widgets/arrow.dart
@@ -0,0 +1,18 @@
+import 'package:flutter/material.dart';
+import 'package:sense_the_rhythm/models/arrow_direction.dart';
+
+class Arrow extends StatelessWidget {
+ final double position;
+ final ArrowDirection direction;
+
+ const Arrow({super.key, required this.position, required this.direction});
+
+ @override
+ Widget build(BuildContext context) {
+ return Positioned(
+ left: MediaQuery.of(context).size.width / 2 - 50, // Center the arrow
+ bottom: position + 50,
+ child: Icon(size: 100, color: Colors.redAccent.shade400, direction.icon),
+ );
+ }
+}
diff --git a/lib/widgets/arrows.dart b/lib/widgets/arrows.dart
new file mode 100644
index 0000000..cf04e59
--- /dev/null
+++ b/lib/widgets/arrows.dart
@@ -0,0 +1,24 @@
+import 'package:flutter/material.dart';
+import 'package:sense_the_rhythm/models/note.dart';
+import 'package:sense_the_rhythm/widgets/arrow.dart';
+
+class Arrows extends StatelessWidget {
+ final List<Note> notes;
+ final double position;
+
+ const Arrows({super.key, required this.notes, required this.position});
+
+ @override
+ Widget build(BuildContext context) {
+ return Stack(
+ children: notes.map((note) {
+ double position =
+ note.position * 10000; // * 20 * MediaQuery.of(context).size.height;
+
+ return Arrow(
+ position: position,
+ direction: note.direction,
+ );
+ }).toList());
+ }
+}
diff --git a/lib/esense_connect_dialog.dart b/lib/widgets/esense_connect_dialog.dart
index b598174..b598174 100644
--- a/lib/esense_connect_dialog.dart
+++ b/lib/widgets/esense_connect_dialog.dart