protected override async void nextStageAction() { // Did we drop the tumbler (by moving too fast)? if (AngleRateOfChange > Current.LockBeingOpened.MaxRotationRateInLiftingPhase) { Plugin.Vibrate.CrossVibrate.Current.Vibration(10); Current.TumblerLiftingSFX.Stop(); Current.TumblerDroppedSFX.Play(); Current.LockBeingOpened.NumberOfAttempts++; CurrentStage = new LockTumblerFindingStage("Try again from tumbler 0", Kit, Current.LockBeingOpened.Tumblers[0], AttitudeProvider); } else if (tumblerUnderway.NextTumbler != Tumbler.EndOfLock) { int i = Current.LockBeingOpened.Tumblers.IndexOf(tumblerUnderway) + 1; CurrentStage = new LockTumblerFindingStage($"Tumbler {i}", Kit, tumblerUnderway.NextTumbler, AttitudeProvider); } else { await Current.SuccessSFX.PlayToCompletion(useSpeakers : true); Current.LockBeingOpened.AnnounceLockOpened(); await Speech.SayAllOf("Lock is open; well done.", useSpeakerMode : false); Current.Finish(); } }
protected override void BeginFirstTumbler() { RunOnUiThread(() => { FindViewById(Resource.Id.vault_notification).Visibility = ViewStates.Gone; //DialText = FindViewById<TextView>(Resource.Id.vault_dial_text); //DialText.Visibility = ViewStates.Visible; }); var provider = new AngleAxisProvider(UpVector, AxisVector); SensorProvider.EnsureIsReady(provider).Wait(); CurrentStage = new LockTumblerFindingStage("Tumbler 0", ThePlayersToolkit, Current.LockBeingOpened.Tumblers[0], provider); }