style: refactored level into smaller methods
This commit is contained in:
parent
7bf1ead030
commit
d52f60ef92
|
@ -72,13 +72,61 @@ class _LevelState extends State<Level> with SingleTickerProviderStateMixin {
|
||||||
_position = value;
|
_position = value;
|
||||||
}),
|
}),
|
||||||
);
|
);
|
||||||
_durationSubscription = player.onDurationChanged.listen((duration) {
|
|
||||||
|
// listen for new values from player
|
||||||
|
_durationSubscription =
|
||||||
|
player.onDurationChanged.listen((Duration duration) {
|
||||||
setState(() => _duration = duration);
|
setState(() => _duration = duration);
|
||||||
});
|
});
|
||||||
|
|
||||||
|
_positionSubscription =
|
||||||
|
player.onPositionChanged.listen((Duration position) {
|
||||||
|
setState(() => _position = position);
|
||||||
|
for (final note in notes) {
|
||||||
|
_noteHitCheck(note, position);
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
player.onPlayerComplete.listen((void _) {
|
||||||
|
Route route = MaterialPageRoute(
|
||||||
|
builder: (context) => GameOverStats(
|
||||||
|
simfile: widget.simfile,
|
||||||
|
notes: notes,
|
||||||
|
));
|
||||||
|
Navigator.pushReplacement(context, route);
|
||||||
|
});
|
||||||
|
|
||||||
|
// listen for esense button and pause/resume
|
||||||
if (ESenseInput.instance.connected) {
|
if (ESenseInput.instance.connected) {
|
||||||
_buttonSubscription = ESenseInput.instance.buttonEvents().listen((event) {
|
_buttonSubscription = ESenseInput.instance.buttonEvents().listen((event) {
|
||||||
if (!event.pressed) {
|
if (!event.pressed) {
|
||||||
|
_pauseResume();
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
widget.simfile.chartSimplest?.beats.forEach((time, noteData) {
|
||||||
|
int arrowIndex = noteData.indexOf('1');
|
||||||
|
if (arrowIndex < 0 || arrowIndex > 3) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
notes.add(Note(time: time, direction: ArrowDirection.values[arrowIndex]));
|
||||||
|
});
|
||||||
|
|
||||||
|
player.play(DeviceFileSource(widget.simfile.audioPath!));
|
||||||
|
}
|
||||||
|
|
||||||
|
@override
|
||||||
|
void dispose() {
|
||||||
|
_animationController.dispose();
|
||||||
|
_durationSubscription?.cancel();
|
||||||
|
_positionSubscription?.cancel();
|
||||||
|
_buttonSubscription?.cancel();
|
||||||
|
player.dispose();
|
||||||
|
super.dispose();
|
||||||
|
}
|
||||||
|
|
||||||
|
void _pauseResume() {
|
||||||
if (_isPlaying) {
|
if (_isPlaying) {
|
||||||
player.pause();
|
player.pause();
|
||||||
setState(() {
|
setState(() {
|
||||||
|
@ -91,34 +139,11 @@ class _LevelState extends State<Level> with SingleTickerProviderStateMixin {
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
});
|
|
||||||
}
|
|
||||||
|
|
||||||
_positionSubscription = player.onPositionChanged.listen(
|
void _noteHitCheck(Note note, Duration time) {
|
||||||
(p) => setState(() => _position = p),
|
note.position = note.time - time.inMilliseconds / 60000.0;
|
||||||
);
|
|
||||||
|
|
||||||
player.onDurationChanged.listen((Duration d) {
|
|
||||||
// print('Max duration: $d');
|
|
||||||
setState(() => _duration = d);
|
|
||||||
});
|
|
||||||
|
|
||||||
player.onPlayerComplete.listen((void _) {
|
|
||||||
Route route = MaterialPageRoute(
|
|
||||||
builder: (context) => GameOverStats(
|
|
||||||
simfile: widget.simfile,
|
|
||||||
notes: notes,
|
|
||||||
));
|
|
||||||
Navigator.pushReplacement(context, route);
|
|
||||||
});
|
|
||||||
|
|
||||||
player.onPositionChanged.listen((Duration p) {
|
|
||||||
// print('Current position: $p');
|
|
||||||
setState(() => _position = p);
|
|
||||||
for (final note in notes) {
|
|
||||||
note.position = note.time - p.inMilliseconds / 60000.0;
|
|
||||||
if (note.wasHit != null) {
|
if (note.wasHit != null) {
|
||||||
continue;
|
return;
|
||||||
}
|
}
|
||||||
if (note.position.abs() < 0.5 * 1.0 / 60.0) {
|
if (note.position.abs() < 0.5 * 1.0 / 60.0) {
|
||||||
InputDirection esenseDirection =
|
InputDirection esenseDirection =
|
||||||
|
@ -163,25 +188,8 @@ class _LevelState extends State<Level> with SingleTickerProviderStateMixin {
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
});
|
|
||||||
|
|
||||||
widget.simfile.chartSimplest!.beats.forEach((time, noteData) {
|
void _keyboardHandler(event) {
|
||||||
int arrowIndex = noteData.indexOf('1');
|
|
||||||
if (arrowIndex < 0 || arrowIndex > 3) {
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
notes.add(Note(time: time, direction: ArrowDirection.values[arrowIndex]));
|
|
||||||
});
|
|
||||||
|
|
||||||
player.play(DeviceFileSource(widget.simfile.audioPath!));
|
|
||||||
}
|
|
||||||
|
|
||||||
@override
|
|
||||||
Widget build(BuildContext context) {
|
|
||||||
return KeyboardListener(
|
|
||||||
focusNode: _focusNode,
|
|
||||||
autofocus: true,
|
|
||||||
onKeyEvent: (event) {
|
|
||||||
bool isDown = false;
|
bool isDown = false;
|
||||||
if (event is KeyDownEvent) {
|
if (event is KeyDownEvent) {
|
||||||
isDown = true;
|
isDown = true;
|
||||||
|
@ -204,24 +212,19 @@ class _LevelState extends State<Level> with SingleTickerProviderStateMixin {
|
||||||
inputDirection.right = isDown;
|
inputDirection.right = isDown;
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
},
|
}
|
||||||
|
|
||||||
|
@override
|
||||||
|
Widget build(BuildContext context) {
|
||||||
|
return KeyboardListener(
|
||||||
|
focusNode: _focusNode,
|
||||||
|
autofocus: true,
|
||||||
|
onKeyEvent: _keyboardHandler,
|
||||||
child: Scaffold(
|
child: Scaffold(
|
||||||
appBar: AppBar(
|
appBar: AppBar(
|
||||||
leading: IconButton(
|
leading: IconButton(
|
||||||
icon: Icon(_isPlaying ? Icons.pause : Icons.play_arrow),
|
icon: Icon(_isPlaying ? Icons.pause : Icons.play_arrow),
|
||||||
onPressed: () {
|
onPressed: _pauseResume,
|
||||||
if (_isPlaying) {
|
|
||||||
player.pause();
|
|
||||||
setState(() {
|
|
||||||
_isPlaying = false;
|
|
||||||
});
|
|
||||||
} else {
|
|
||||||
player.resume();
|
|
||||||
setState(() {
|
|
||||||
_isPlaying = true;
|
|
||||||
});
|
|
||||||
}
|
|
||||||
},
|
|
||||||
),
|
),
|
||||||
title: Text(widget.simfile.tags['TITLE']!),
|
title: Text(widget.simfile.tags['TITLE']!),
|
||||||
actions: [
|
actions: [
|
||||||
|
@ -273,14 +276,4 @@ class _LevelState extends State<Level> with SingleTickerProviderStateMixin {
|
||||||
])),
|
])),
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
@override
|
|
||||||
void dispose() {
|
|
||||||
_animationController.dispose();
|
|
||||||
_durationSubscription?.cancel();
|
|
||||||
_positionSubscription?.cancel();
|
|
||||||
_buttonSubscription?.cancel();
|
|
||||||
player.dispose();
|
|
||||||
super.dispose();
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in a new issue