game_instance_orienteering_assistant.dart 1.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566
  1. import 'package:trackoffical_app/service/game/plug_sport_wear2.dart';
  2. import 'package:trackoffical_app/utils.dart';
  3. import 'plug_location2.dart';
  4. import 'plug_orientation2.dart';
  5. import 'game_instance.dart';
  6. class GameInstanceOrienteeringAssistant extends GameInstance {
  7. void onSwitch(){
  8. if(isStart.value){
  9. isStart.value = false;
  10. plugSportWear.stop();
  11. }else{
  12. startAt = DateTime.now();
  13. distance.value=0.meter;
  14. pace.value=0.seconds;
  15. duration.value=0.seconds;
  16. isStart.value=true;
  17. plugSportWear.start();
  18. }
  19. }
  20. void _onRcvLocation(MPosition p){
  21. if(isStart.value){
  22. final last = lastLocation;
  23. if(last!= null){
  24. distance.value = distance.value + p.distance(last);
  25. pace.value = pacePerKm(distance.value, duration.value);
  26. }
  27. }
  28. lastLocation=p;
  29. }
  30. @override
  31. Future<void> onInit() async{
  32. listenRx(_plugLocation.location, (event) {
  33. if(event!= null){
  34. _onRcvLocation(event);
  35. }
  36. });
  37. addTimer(100.milliseconds, () {
  38. if(isStart.value){
  39. duration.value = DateTime.now().difference(startAt);
  40. }
  41. });
  42. plugs.addAll([
  43. _plugOrientation,
  44. _plugLocation,
  45. plugSportWear,
  46. ]);
  47. }
  48. var startAt = DateTime.now();
  49. MPosition? lastLocation;
  50. Rx<double> get compassRadiansSrc => _plugOrientation.compassRadiansSrc;
  51. final distance = 0.meter.obs;
  52. final pace = 0.seconds.obs;
  53. final duration = 0.seconds.obs;
  54. final isStart = false.obs;
  55. final _plugOrientation = PlugOrientation();
  56. final _plugLocation = PlugLocation();
  57. final plugSportWear = PlugSportWear();
  58. }