| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138 |
- import 'dart:async';
- import 'package:dart_jts/dart_jts.dart';
- import 'package:trackoffical_app/model/game_person_data.dart';
- import 'package:trackoffical_app/service/game/game_instance_guardian.dart';
- import 'package:trackoffical_app/service/game/game_manager_service.dart';
- import '../../../model/game_map.dart';
- import '../../../model/m_position.dart';
- import '../../../service/app.dart';
- import '../layer/layer_controller.dart';
- class GuardianControllerMock extends LayerController {
- var instance = GameInstanceGuardian(underGuardianId: -1);
- final selectedPersonIndex = 0.obs;
- final Rx<int?> lockUnderGuardianToCenterUserId = Rx(null);
- final Rx<MPosition?> guardianPosition = Rx(null);
- final Rx<Offset?> guardianPositionOnMap = Rx(null);
- final isShowGuardian = true.obs;
- final isShowRoute = true.obs;
- StreamSubscription<MPosition>? _subscriptionPosition;
- GamePersonData? get selectedPersonData {
- if (instance.gamePersonData.isEmpty) {
- return null;
- }
- var i = instance.gamePersonData.length - 1;
- if (selectedPersonIndex.value < i) {
- i = selectedPersonIndex.value;
- }
- return instance.gamePersonData[i];
- }
- void setUserById(int userId){
- for(var i=0; i< instance.gamePersonData.length;i++){
- if(instance.gamePersonData[i].userId==userId){
- selectedPersonIndex.value =i;
- break;
- }
- }
- }
- GamePersonData? getUserById(int userId){
- for(var i=0; i< instance.gamePersonData.length;i++){
- if(instance.gamePersonData[i].userId==userId){
- return instance.gamePersonData[i];
- }
- }
- return null;
- }
- void lockUnderGuardianToCenter(GamePersonData person){
- if(lockUnderGuardianToCenterUserId.value!=null){
- lockUnderGuardianToCenterUserId.value=null;
- isEnableUserTouchTranslation=true;
- }else{
- lockUnderGuardianToCenterUserId.value = person.userId;
- isEnableUserTouchTranslation=false;
- }
- }
- void moveScreenCenterToGuardianLocation(){
- final gp = guardianPositionOnMap.value;
- if(gp!= null){
- moveOnMapPointToScreen(gp, mapRotateCenter.value);
- }
- }
- @override
- GameMap? get gameMap => instance.gameMapData;
- @override
- void onMapSizeChange(Size size) {
- super.onMapSizeChange(size);
- mapRotateCenter.value = Offset(size.width / 2, size.height / 2);
- }
- @override
- void onClose() {
- super.onClose();
- guardianPosition.close();
- }
- }
- class GuardianController extends GuardianControllerMock {
- @override
- GameInstanceGuardian get instance {
- final i = GameManagerService.to.instance!;
- if (i is! GameInstanceGuardian) {
- throw RuntimeException('未开始监控');
- }
- return i;
- }
- Timer? _timerUnderGuardianToScreenCenter;
- @override
- void onReady() {
- super.onReady();
- final userId = Get.arguments;
- if(userId is int){
- setUserById(userId);
- }
- final locationStream = App.to.locationStream;
- App.to.locationStart(500.milliseconds, 0);
- _subscriptionPosition?.cancel();
- _subscriptionPosition=locationStream.listen((event) {
- guardianPosition.value=event;
- gameMap?.worldToPixel(event).then((offset){
- guardianPositionOnMap.value= offset;
- });
- });
- // guardianPosition.bindStream(Sensor.locationStream.map((event) => event.toModel()));
- _timerUnderGuardianToScreenCenter = Timer.periodic(200.milliseconds, (timer) {
- final userId = lockUnderGuardianToCenterUserId.value;
- if(userId!= null){
- final user = getUserById(userId);
- if(user!= null){
- var p = user.myPositionOnMap;
- if(p!= null){
- moveOnMapPointToScreen(p, mapRotateCenter.value);
- }
- }
- }
- });
- }
- @override
- void onClose() {
- super.onClose();
- _timerUnderGuardianToScreenCenter?.cancel();
- _subscriptionPosition?.cancel();
- GameManagerService.to.instanceStop();
- App.to.locationStop();
- }
- }
|