import 'package:trackoffical_app/service/game/plug_sport_wear2.dart'; import 'package:trackoffical_app/utils.dart'; import 'plug_location2.dart'; import 'plug_orientation2.dart'; import 'game_instance.dart'; class GameInstanceOrienteeringAssistant extends GameInstance { void onSwitch(){ if(isStart.value){ isStart.value = false; plugSportWear.stop(); }else{ startAt = DateTime.now(); distance.value=0.meter; pace.value=0.seconds; duration.value=0.seconds; isStart.value=true; plugSportWear.start(); } } void _onRcvLocation(MPosition p){ if(isStart.value){ final last = lastLocation; if(last!= null){ distance.value = distance.value + p.distance(last); pace.value = pacePerKm(distance.value, duration.value); } } lastLocation=p; } @override Future onInit() async{ listenRx(_plugLocation.location, (event) { if(event!= null){ _onRcvLocation(event); } }); addTimer(100.milliseconds, () { if(isStart.value){ duration.value = DateTime.now().difference(startAt); } }); plugs.addAll([ _plugOrientation, _plugLocation, plugSportWear, ]); } var startAt = DateTime.now(); MPosition? lastLocation; Rx get compassRadiansSrc => _plugOrientation.compassRadiansSrc; final distance = 0.meter.obs; final pace = 0.seconds.obs; final duration = 0.seconds.obs; final isStart = false.obs; final _plugOrientation = PlugOrientation(); final _plugLocation = PlugLocation(); final plugSportWear = PlugSportWear(); }