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;
 | 
			
		||||
          }),
 | 
			
		||||
        );
 | 
			
		||||
    _durationSubscription = player.onDurationChanged.listen((duration) {
 | 
			
		||||
 | 
			
		||||
    // listen for new values from player
 | 
			
		||||
    _durationSubscription =
 | 
			
		||||
        player.onDurationChanged.listen((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) {
 | 
			
		||||
      _buttonSubscription = ESenseInput.instance.buttonEvents().listen((event) {
 | 
			
		||||
        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) {
 | 
			
		||||
      player.pause();
 | 
			
		||||
      setState(() {
 | 
			
		||||
| 
						 | 
				
			
			@ -91,34 +139,11 @@ class _LevelState extends State<Level> with SingleTickerProviderStateMixin {
 | 
			
		|||
      });
 | 
			
		||||
    }
 | 
			
		||||
  }
 | 
			
		||||
      });
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    _positionSubscription = player.onPositionChanged.listen(
 | 
			
		||||
      (p) => setState(() => _position = p),
 | 
			
		||||
    );
 | 
			
		||||
 | 
			
		||||
    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;
 | 
			
		||||
  void _noteHitCheck(Note note, Duration time) {
 | 
			
		||||
    note.position = note.time - time.inMilliseconds / 60000.0;
 | 
			
		||||
    if (note.wasHit != null) {
 | 
			
		||||
          continue;
 | 
			
		||||
      return;
 | 
			
		||||
    }
 | 
			
		||||
    if (note.position.abs() < 0.5 * 1.0 / 60.0) {
 | 
			
		||||
      InputDirection esenseDirection =
 | 
			
		||||
| 
						 | 
				
			
			@ -163,25 +188,8 @@ class _LevelState extends State<Level> with SingleTickerProviderStateMixin {
 | 
			
		|||
      });
 | 
			
		||||
    }
 | 
			
		||||
  }
 | 
			
		||||
    });
 | 
			
		||||
 | 
			
		||||
    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
 | 
			
		||||
  Widget build(BuildContext context) {
 | 
			
		||||
    return KeyboardListener(
 | 
			
		||||
      focusNode: _focusNode,
 | 
			
		||||
      autofocus: true,
 | 
			
		||||
      onKeyEvent: (event) {
 | 
			
		||||
  void _keyboardHandler(event) {
 | 
			
		||||
    bool isDown = false;
 | 
			
		||||
    if (event is KeyDownEvent) {
 | 
			
		||||
      isDown = true;
 | 
			
		||||
| 
						 | 
				
			
			@ -204,24 +212,19 @@ class _LevelState extends State<Level> with SingleTickerProviderStateMixin {
 | 
			
		|||
        inputDirection.right = isDown;
 | 
			
		||||
        break;
 | 
			
		||||
    }
 | 
			
		||||
      },
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  @override
 | 
			
		||||
  Widget build(BuildContext context) {
 | 
			
		||||
    return KeyboardListener(
 | 
			
		||||
      focusNode: _focusNode,
 | 
			
		||||
      autofocus: true,
 | 
			
		||||
      onKeyEvent: _keyboardHandler,
 | 
			
		||||
      child: Scaffold(
 | 
			
		||||
          appBar: AppBar(
 | 
			
		||||
            leading: IconButton(
 | 
			
		||||
              icon: Icon(_isPlaying ? Icons.pause : Icons.play_arrow),
 | 
			
		||||
              onPressed: () {
 | 
			
		||||
                if (_isPlaying) {
 | 
			
		||||
                  player.pause();
 | 
			
		||||
                  setState(() {
 | 
			
		||||
                    _isPlaying = false;
 | 
			
		||||
                  });
 | 
			
		||||
                } else {
 | 
			
		||||
                  player.resume();
 | 
			
		||||
                  setState(() {
 | 
			
		||||
                    _isPlaying = true;
 | 
			
		||||
                  });
 | 
			
		||||
                }
 | 
			
		||||
              },
 | 
			
		||||
              onPressed: _pauseResume,
 | 
			
		||||
            ),
 | 
			
		||||
            title: Text(widget.simfile.tags['TITLE']!),
 | 
			
		||||
            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