public CompassPage()
        {
            InitializeComponent();
            compass = CrossCompass.Current;

            label.VerticalOptions = LayoutOptions.CenterAndExpand;
            label.HorizontalOptions = LayoutOptions.CenterAndExpand;

            buttonStart.Clicked += (sender, args) =>
            {
                compass.CompassChanged += Compass_CompassChanged;
                compass.Start();

                buttonStart.IsEnabled = false;
                buttonStop.IsEnabled = true;

            };

            buttonStop.Clicked += (sender, args) =>
            {
                if (compass != null)
                {
                    compass.Stop();

                    Device.BeginInvokeOnMainThread(() =>
                        {
                            buttonStart.IsEnabled = true;
                            buttonStop.IsEnabled = false;
                        });
                }

            };

        }
        public TrackingViewModel(ICompass compass, IGeoCoordinateWatcher geoWatcher)
        {
            _compass = compass;
            _compass.CurrentValueChanged += OnCompassValueChanged;

            _geoWatcher = geoWatcher;
            _geoWatcher.PositionChanged += OnPositionChanged;

            StartTrackingCommand = new RelayCommand(StartTracking);
            Reset();
        }
Exemple #3
0
        public MainPageViewModel(ICompass compass)
        {
            if (compass == null)
            {
                throw new ArgumentNullException(nameof(compass));
            }
            _compass = compass;
            _compass.CompassReadingChangedEvent += async (e, cr) =>
            {
                await CoreApplication.MainView.CoreWindow.Dispatcher.RunAsync(CoreDispatcherPriority.Normal, () => { CompassReading = cr; });
            };

            _startContinuousMeasurementsCommand = DelegateCommand.FromAsyncHandler(
                async () =>
                {
                    await _compass.SetModeAsync(MagnetometerMeasurementMode.Continuous);
                    UpdateCommands();
                },
                () =>
                {
                    return _compass.MeasurementMode != MagnetometerMeasurementMode.Continuous;
                });

            _takeSingleMeasurementCommand = DelegateCommand.FromAsyncHandler(
                async () =>
                {
                    await _compass.SetModeAsync(MagnetometerMeasurementMode.Single);
                    UpdateCommands();
                },
                () =>
                {
                    return _compass.MeasurementMode != MagnetometerMeasurementMode.Continuous;
                });

            _stopCompassCommand = new DelegateCommand(
                async () =>
                {
                    await _compass.SetModeAsync(MagnetometerMeasurementMode.Idle);
                    UpdateCommands();
                },
                () =>
                {
                    return _compass.MeasurementMode == MagnetometerMeasurementMode.Continuous;
                });
        }
Exemple #4
0
 public CompassViewModel(ICompass compass)
 => this.compass = compass;
Exemple #5
0
        public void Initialize()
        {
            m_liveSessionListeners = new HashSet <object>();

            IStepTracker stepTracker = null;

#if IOS_NATIVE
            if (Application.isMobilePlatform)
            {
                m_logger.Debug("Initializing iOS Native");

                m_categoryOptions = IOSAudioSessionCategoryOptions.None;

                if (MixWithOthers)
                {
                    m_categoryOptions = IOSAudioSessionCategoryOptions.MixWithOthers;
                }

                m_currentCategory = DefaultAudioCategory;

                if (EnableBackgroundAudio)
                {
                    IOSAudioSession.Instance.SetCategory(m_currentCategory, m_categoryOptions);

                    IOSAudioSession.Instance.RemoteCommandReceived += (sender, args) =>
                    {
                        if (args.Command == IOSAudioRemoteCommand.Pause)
                        {
                            SuspendLiveSession();
                        }
                    };
                }

                if (UseNativeDownloader)
                {
                    FileDownloader.SetFactory(new IOSFileDownloaderFactory());
                }

                AppDataPath = IOSFileDownloader.AppDataPath;

                Accelerometer   = IOSMotionManager.Instance.GetAccelerometer();
                LocationManager = IOSLocationManager.Instance;
                SystemCompass   = new IOSCompass();

                if (EnableBeacons)
                {
                    BeaconManager = IOSBeaconManager.Instance;
                }

                if (EnableNotifications)
                {
                    LocalNotificationManager =
                        new IOSLocalNotificationManager(IOSLocalNotificationTypes.Badge | IOSLocalNotificationTypes.Sound);
                }
            }
#endif
#if ANDROID_NATIVE
            if (Application.isMobilePlatform)
            {
                m_logger.Debug("Initializing Android Native");

                JavaClass  activityClass = new JavaClass("com.unity3d.player.UnityPlayer");
                JavaObject mainActivity  = activityClass.GetStaticFieldValue <JavaObject>("currentActivity", "android.app.Activity");

                AndroidApplicationManager.Instance.Initialize(mainActivity);

                LocationManager = new AndroidLocationManager();

                if (EnableBeacons)
                {
                    BeaconManager = new AndroidBeaconManager();
                }

                if (EnableNotifications)
                {
                    LocalNotificationManager = new AndroidLocalNotificationManager(StorageManager.GetFilePath("platform", "androidNotificationManager.json"));
                }
            }
#endif

            if (BeaconManager == null && EnableBeacons)
            {
                BeaconManager = UnityBeaconManager.Instance;
            }

            if (Accelerometer == null)
            {
                Accelerometer = gameObject.AddComponent <UnityAccelerometer>();
            }

            if (LocationManager == null)
            {
                LocationManager = gameObject.AddComponent <UnityLocationManager>();
            }

            LocationManager.EnableBackgroundUpdates = EnableBackgroundLocation;

            if (SystemCompass == null)
            {
                SystemCompass = gameObject.AddComponent <UnityCompass>();
            }

            if (LocalNotificationManager == null)
            {
                LocalNotificationManager = new DummyLocalNotificationManager();
            }

            if (EnableNotifications && EnableBackgroundNotifications)
            {
                BackgroundNotifier.Instance.Initialize();
            }

            var nrCompass = new NoiseDampeningCompass(SystemCompass);

#if UNITY_ANDROID
            // Android compass tends to be much more jittery--apply a higher dampening
            // factor
            nrCompass.DampeningFactor = 0.25;
#endif

            NoiseReducedCompass = nrCompass;

            if (Application.isMobilePlatform)
            {
                var accTracker = new AccelerometerStepTracker(Accelerometer);

                stepTracker = accTracker;

                Accelerometer.Start();
                accTracker.Start();
            }
            else
            {
                stepTracker = gameObject.AddComponent <DebugStepTracker>();
            }

            Pedometer = new Pedometer(stepTracker);

            m_logger.Debug("Setting compass type={0}", CompassType);

            switch (CompassType)
            {
            case CompassType.System:
                Compass = SystemCompass;
                break;

            case CompassType.NoiseReduced:
                Compass = NoiseReducedCompass;
                break;

            case CompassType.LocationTracker:
                LocationTrackerCompass = new Motive.AR.LocationServices.LocationTrackerCompass();
                Compass = LocationTrackerCompass;
                break;

            case CompassType.Hybrid:
            default:
                var hybrid = new HybridCompass(NoiseReducedCompass);
                LocationTrackerCompass = hybrid.TrackerCompass;
                Compass = hybrid;
                break;
            }

            AudioChannel           = CreateAudioPlayerChannel();
            ForegroundAudioChannel = gameObject.AddComponent <UnityAudioPlayerChannel>();

            Pedometer.Stepped += (sender, args) =>
            {
                if (ScriptEngine.Instance.UserInteractionEventManager != null)
                {
                    ScriptEngine.Instance.UserInteractionEventManager.AddEvent("step");
                }
            };

            if (ScreenSleepBehavior == ScreenSleepBehavior.AlwaysOn)
            {
                Screen.sleepTimeout = SleepTimeout.NeverSleep;
            }
        }
        public static void Initialize(ILocationManager locationManager, IBeaconManager beaconManager, ICompass compass)
        {
            // This code bootstraps the Motive script engine. First, give the script engine
            // a path that it can use for storing state.
            var smPath = StorageManager.GetGameStorageManager().GetManager("scriptManager");

            ScriptEngine.Instance.Initialize(smPath);

            // This intializes the Alternate Reality and Location Based features.
            ARComponents.Instance.Initialize(smPath, locationManager, beaconManager, compass, null);

            // This tells the JSON reader how to deserialize various object types based on
            // the "type" field.
            JsonTypeRegistry.Instance.RegisterType("motive.core.scriptDirectoryItem", typeof(ScriptDirectoryItem));
            JsonTypeRegistry.Instance.RegisterType("motive.core.appVersionCondition", typeof(AppVersionCondition));

            JsonTypeRegistry.Instance.RegisterType("motive.ui.notification", typeof(Notification));

            JsonTypeRegistry.Instance.RegisterType("motive.ui.interfaceUpdate", typeof(InterfaceUpdate));
            JsonTypeRegistry.Instance.RegisterType("motive.ui.interfaceDirector", typeof(InterfaceDirector));
            JsonTypeRegistry.Instance.RegisterType("motive.ui.objectInspector", typeof(ObjectInspector));
            JsonTypeRegistry.Instance.RegisterType("motive.ui.uiModeSwitchCommand", typeof(UIModeSwitchCommand));

            JsonTypeRegistry.Instance.RegisterType("motive.3d.worldObjectEffectPlayer", typeof(WorldObjectEffectPlayer));
            JsonTypeRegistry.Instance.RegisterType("motive.3d.relativeWorldPosition", typeof(RelativeWorldPosition));
            JsonTypeRegistry.Instance.RegisterType("motive.3d.fixedWorldPosition", typeof(FixedWorldPosition));
            JsonTypeRegistry.Instance.RegisterType("motive.3d.worldObjectProximityCondition", typeof(WorldObjectProximityCondition));

            JsonTypeRegistry.Instance.RegisterType("motive.unity.animation", typeof(UnityAnimation));

            JsonTypeRegistry.Instance.RegisterType("motive.gaming.character", typeof(Character));
            JsonTypeRegistry.Instance.RegisterType("motive.gaming.collectible", typeof(Collectible));
            JsonTypeRegistry.Instance.RegisterType("motive.gaming.assignment", typeof(Assignment));
            JsonTypeRegistry.Instance.RegisterType("motive.gaming.taskObjectiveCompleteCondition", typeof(TaskObjectiveCompleteCondition));
            JsonTypeRegistry.Instance.RegisterType("motive.gaming.objectiveActivator", typeof(ObjectiveActivator));
            JsonTypeRegistry.Instance.RegisterType("motive.gaming.objectiveCompleter", typeof(ObjectiveCompleter));
            JsonTypeRegistry.Instance.RegisterType("motive.gaming.playerTask", typeof(PlayerTask));
            JsonTypeRegistry.Instance.RegisterType("motive.gaming.characterTask", typeof(CharacterTask));
            JsonTypeRegistry.Instance.RegisterType("motive.gaming.playableContent", typeof(PlayableContent));
            JsonTypeRegistry.Instance.RegisterType("motive.gaming.playableContentBatch", typeof(PlayableContentBatch));
            JsonTypeRegistry.Instance.RegisterType("motive.gaming.characterMessage", typeof(CharacterMessage));
            JsonTypeRegistry.Instance.RegisterType("motive.gaming.screenMessage", typeof(ScreenMessage));
            JsonTypeRegistry.Instance.RegisterType("motive.gaming.inventoryCollectibles", typeof(InventoryCollectibles));
            JsonTypeRegistry.Instance.RegisterType("motive.gaming.inventoryCollectibleLimit", typeof(InventoryCollectibleLimit));
            JsonTypeRegistry.Instance.RegisterType("motive.gaming.playerReward", typeof(PlayerReward));
            JsonTypeRegistry.Instance.RegisterType("motive.gaming.walletCurrency", typeof(WalletCurrency));
            JsonTypeRegistry.Instance.RegisterType("motive.gaming.walletCurrencyLimit", typeof(WalletCurrencyLimit));
            JsonTypeRegistry.Instance.RegisterType("motive.gaming.savePoint", typeof(SavePoint));
            JsonTypeRegistry.Instance.RegisterType("motive.gaming.interfaceAction", typeof(InterfaceAction));

            JsonTypeRegistry.Instance.RegisterType("motive.gaming.recipe", typeof(Recipe));
            JsonTypeRegistry.Instance.RegisterType("motive.gaming.recipeActivator", typeof(RecipeActivator));
            JsonTypeRegistry.Instance.RegisterType("motive.gaming.recipeDeactivator", typeof(RecipeDeactivator));
            JsonTypeRegistry.Instance.RegisterType("motive.gaming.recipeActivatedCondition", typeof(RecipeActivatedCondition));

            JsonTypeRegistry.Instance.RegisterType("motive.gaming.inventoryCondition", typeof(InventoryCondition));
            JsonTypeRegistry.Instance.RegisterType("motive.gaming.walletCondition", typeof(WalletCondition));

            JsonTypeRegistry.Instance.RegisterType("motive.gaming.canCraftCollectibleCondition", typeof(CanCraftCollectibleCondition));
            JsonTypeRegistry.Instance.RegisterType("motive.gaming.canExecuteRecipeCondition", typeof(CanExecuteRecipeCondition));
            JsonTypeRegistry.Instance.RegisterType("motive.gaming.canCompleteTaskCondition", typeof(CanCompleteTaskCondition));
            JsonTypeRegistry.Instance.RegisterType("motive.gaming.canCompleteObjectiveTaskCondition", typeof(CanCompleteObjectiveTaskCondition));
            JsonTypeRegistry.Instance.RegisterType("motive.gaming.quizBase", typeof(QuizBase));
            JsonTypeRegistry.Instance.RegisterType("motive.gaming.multipleChoiceQuiz", typeof(MultipleChoiceQuiz));
            JsonTypeRegistry.Instance.RegisterType("motive.gaming.freeResponseQuiz", typeof(FreeResponseQuiz));
            JsonTypeRegistry.Instance.RegisterType("motive.gaming.quizResponseBase", typeof(QuizResponseBase));
            JsonTypeRegistry.Instance.RegisterType("motive.gaming.multipleChoiceResponse", typeof(MultipleChoiceQuizResponse));
            JsonTypeRegistry.Instance.RegisterType("motive.gaming.freeResponseAnswerBase", typeof(FreeResponseAnswerBase));
            JsonTypeRegistry.Instance.RegisterType("motive.gaming.strictMatchAnswer", typeof(StrictMatchAnswer));
            JsonTypeRegistry.Instance.RegisterType("motive.gaming.textMustContainAnswer", typeof(TextMustContainAnswer));

            JsonTypeRegistry.Instance.RegisterType("motive.ar.beaconTask", typeof(BeaconTask));
            JsonTypeRegistry.Instance.RegisterType("motive.ar.locationTask", typeof(LocationTask));
            JsonTypeRegistry.Instance.RegisterType("motive.ar.visualMarkerTask", typeof(VisualMarkerTask));
            JsonTypeRegistry.Instance.RegisterType("motive.ar.locationMarker", typeof(LocationMarker));
            JsonTypeRegistry.Instance.RegisterType("motive.ar.location3dAsset", typeof(Location3DAsset));
            JsonTypeRegistry.Instance.RegisterType("motive.ar.arCatcherMinigame", typeof(ARCatcherMinigame));
            JsonTypeRegistry.Instance.RegisterType("motive.ar.mapZoomCommand", typeof(MapZoomCommand));
            JsonTypeRegistry.Instance.RegisterType("motive.ar.storyTagLocationTypes", typeof(StoryTagLocationType));
            JsonTypeRegistry.Instance.RegisterType("motive.ar.mapZoomCommand", typeof(MapZoomCommand));

            JsonTypeRegistry.Instance.RegisterType("motive.ar.arLocationCollectionMechanic", typeof(ARLocationCollectionMechanic));
            JsonTypeRegistry.Instance.RegisterType("motive.ar.mapLocationCollectionMechanic", typeof(MapLocationCollectionMechanic));

            JsonTypeRegistry.Instance.RegisterType("motive.attractions.locationAttraction", typeof(LocationAttraction));
            JsonTypeRegistry.Instance.RegisterType("motive.attractions.locationAttractionActivator", typeof(LocationAttractionActivator));
            JsonTypeRegistry.Instance.RegisterType("motive.attractions.locationAttractionInteractible", typeof(LocationAttractionInteractible));
            JsonTypeRegistry.Instance.RegisterType("motive.attractions.locationAttractionContent", typeof(LocationAttractionContent));

            JsonTypeRegistry.Instance.RegisterType("motive.google.polyAsset", typeof(PolyAsset));

            // The Script Resource Processors take the resources from the script processor and
            // direct them to the game components that know what to do with them.
            ScriptEngine.Instance.RegisterScriptResourceProcessor("motive.core.scriptLauncher", new ScriptLauncherProcessor());

            ScriptEngine.Instance.RegisterScriptResourceProcessor("motive.ui.objectInspector", new ObjectInspectorProcessor());
            ScriptEngine.Instance.RegisterScriptResourceProcessor("motive.ui.interfaceUpdate", new InterfaceUpdateProcessor());
            ScriptEngine.Instance.RegisterScriptResourceProcessor("motive.ui.interfaceDirector", new InterfaceDirectorProcessor());

            ScriptEngine.Instance.RegisterScriptResourceProcessor("motive.gaming.assignment", new AssignmentProcessor());
            ScriptEngine.Instance.RegisterScriptResourceProcessor("motive.gaming.objectiveActivator", new ObjectiveActivatorProcessor());
            ScriptEngine.Instance.RegisterScriptResourceProcessor("motive.gaming.objectiveCompleter", new ObjectiveCompleterProcessor());
            ScriptEngine.Instance.RegisterScriptResourceProcessor("motive.gaming.playerTask", new PlayerTaskProcessor());
            ScriptEngine.Instance.RegisterScriptResourceProcessor("motive.gaming.characterTask", new CharacterTaskProcessor());
            ScriptEngine.Instance.RegisterScriptResourceProcessor("motive.gaming.inventoryCollectibles", new InventoryCollectiblesProcessor());
            ScriptEngine.Instance.RegisterScriptResourceProcessor("motive.gaming.inventoryCollectibleLimit", new InventoryCollectibleLimitProcessor());
            ScriptEngine.Instance.RegisterScriptResourceProcessor("motive.gaming.walletCurrency", new WalletCurrencyProcessor());
            ScriptEngine.Instance.RegisterScriptResourceProcessor("motive.gaming.walletCurrencyLimit", new WalletCurrencyLimitProcessor());
            ScriptEngine.Instance.RegisterScriptResourceProcessor("motive.gaming.playableContent", new PlayableContentProcessor());
            ScriptEngine.Instance.RegisterScriptResourceProcessor("motive.gaming.playableContentBatch", new PlayableContentBatchProcessor());
            ScriptEngine.Instance.RegisterScriptResourceProcessor("motive.gaming.playerReward", new PlayerRewardProcessor());
            ScriptEngine.Instance.RegisterScriptResourceProcessor("motive.gaming.savePoint", new SavePointProcessor());
            ScriptEngine.Instance.RegisterScriptResourceProcessor("motive.gaming.recipeActivator", new RecipeActivatorProcessor());
            ScriptEngine.Instance.RegisterScriptResourceProcessor("motive.gaming.recipeDeactivator", new RecipeDeactivatorProcessor());
            ScriptEngine.Instance.RegisterScriptResourceProcessor("motive.gaming.interfaceAction", new InterfaceActionProcessor());

            ScriptEngine.Instance.RegisterScriptResourceProcessor("motive.ar.locationTask", new LocationTaskProcessor());
            ScriptEngine.Instance.RegisterScriptResourceProcessor("motive.ar.locationMarker", new LocationMarkerProcessor());
            ScriptEngine.Instance.RegisterScriptResourceProcessor("motive.ar.location3dAsset", new Location3DAssetProcessor());
            ScriptEngine.Instance.RegisterScriptResourceProcessor("motive.ar.locativeAudioContent", new LocativeAudioContentProcessor());

            ScriptEngine.Instance.RegisterScriptResourceProcessor("motive.3d.worldObjectEffectPlayer", new WorldObjectEffectPlayerProcessor());

            ScriptEngine.Instance.RegisterScriptResourceProcessor("motive.attractions.locationAttractionActivator", new LocationAttractionActivatorProcessor());
            ScriptEngine.Instance.RegisterScriptResourceProcessor("motive.attractions.locationAttractionInteractible", new LocationAttractionInteractibleProcessor());
            ScriptEngine.Instance.RegisterScriptResourceProcessor("motive.attractions.locationAttractionContent", new LocationAttractionContentProcessor());

            // Condition monitors track system state and can be used by conditions in the Motive
            // authoring tool.
            ScriptEngine.Instance.RegisterConditionMonitor(new RecipeActivatedConditionMonitor());
            ScriptEngine.Instance.RegisterConditionMonitor(new AppVersionConditionMonitor());
            ScriptEngine.Instance.RegisterConditionMonitor(new TaskObjectiveCompleteConditionMonitor());
            ScriptEngine.Instance.RegisterConditionMonitor(new InventoryConditionMonitor());
            ScriptEngine.Instance.RegisterConditionMonitor(new WalletConditionMonitor());
            ScriptEngine.Instance.RegisterConditionMonitor(new CanCraftCollectibleConditionMonitor());
            ScriptEngine.Instance.RegisterConditionMonitor(new CanExecuteRecipeConditionMonitor());
            ScriptEngine.Instance.RegisterConditionMonitor(new CanCompleteTaskConditionMonitor());
            ScriptEngine.Instance.RegisterConditionMonitor(new CanCompleteObjectiveTaskConditionMonitor());
            ScriptEngine.Instance.RegisterConditionMonitor(WorldObjectProximityConditionMonitor.Instance);
        }
Exemple #7
0
 /// <summary>
 /// Initializes a new instance of the <see cref="Compass"/> class.
 /// </summary>
 public Compass()
 {
     nativeCompass = MXContainer.Resolve <ICompass>();
 }
 public CompassViewModel(ICompass compass, IUserDialogs dialogs)
 {
     this.compass = compass;
     this.dialogs = dialogs;
 }