public void Stop(bool force = false) { try { if (IsPlaying) { _player.Stop(); } } catch (Exception ex) { Log.Error(TAG, $"Error during stop: {ex.Message}"); Log.Debug(TAG, ex.ToString()); } finally { if (_lock != null) { _lock.Release(); _lock = null; } StopForeground(force); StopSelf(_startId); _startId = 0; } }
protected override async void nextStageAction() { try { MasterSpellLibrary.SpellFeedbackSFX.Stop(); await Task.Delay(150); MasterSpellLibrary.SpellProgressSFX.Play(); await Task.Delay(1000); // Give a moment to get ready. //Current.SpellBeingTrained.AddGlyph(new Glyph(AverageAttitude, Stillness.StillnessScore, AverageAttitude.StdDev)); Current.SpellBeingTrained.AddGlyph(new Glyph(AverageAttitude, Stillness.StillnessScore, 0)); Current.CheckGlyphCount(); var EulerAngles = AverageAttitude.Average.ToEulerAngles(); //Log.Debug("SpellTraining", $"Saved glyph at yaw {EulerAngles.X:f2}, pitch {EulerAngles.Y}, and roll {EulerAngles.Z} from zero stance."); //Log.Debug("SpellTraining", $"Saved {((GestureRecognizerStage)CurrentStage).Label} at {EulerAngles:f1} from zero stance. That's {AverageAttitude.Average.AngleTo(lastOrientation):f0} degrees from the last one. Baselines are {Stillness.StillnessScore:f2} for stillness, {AverageAttitude.StdDev:f2} for orientation."); Log.Debug("SpellTraining", $"Saved {((GestureRecognizerStage)CurrentStage).Label} at {EulerAngles:f1} from zero stance. That's {AverageAttitude.Average.AngleTo(lastOrientation):f0} degrees from the last one. Baseline is {Stillness.StillnessScore:f2} for stillness."); CurrentStage = new GlyphTrainingStage($"Glyph {Current.SpellBeingTrained.Glyphs.Count}", Implement, AttitudeProvider); } catch (Exception e) { Log.Error("Glyph training stage progression", e.Message); throw; } }
public Commessa() { //registro il view model e lo inserisco nel binding context dell'activity view InitializeComponent(); vm = (CommessaViewModel)(ServiceLocator.Current.GetInstance(typeof(CommessaViewModel))); vm.Navigation = this.Navigation; vm.filterCommesse = "Tutti"; BindingContext = vm; ((CommessaViewModel)BindingContext).Initialize(this); try { MessagingCenter.Subscribe <string, string>(MessagingCenterEvents.Subscriber, MessagingCenterEvents.AlertError, async(sender, msg) => { if (!string.IsNullOrEmpty(msg)) { await DisplayAlert("Informazione", msg, "OK"); } }); } catch (TargetInvocationException ecx) { Log.Error("AppOfficina", ecx.StackTrace); } catch (Exception ecc) { Log.Error("AppOfficina", ecc.Message); } }
protected void RelayMessage(int ResourceID, string message) { var v = FindViewById <TextView>(ResourceID); if (v == null) { Log.Error("LockOpeningActivity:RelayMessage", $"Unable to find field {ResourceID} so as to pass message << {message} >>"); return; } RunOnUiThread(() => { v.Text = message; v.Visibility = ViewStates.Visible; }); }
/// <summary> /// Emit the provided log event to the sink. /// </summary> /// <param name="logEvent">The log event to write.</param> public void Emit(LogEvent logEvent) { if (logEvent == null) { throw new ArgumentNullException("logEvent"); } var renderSpace = new StringWriter(); _textFormatter.Format(logEvent, renderSpace); var tag = logEvent.Properties.Where(x => x.Key == Constants.SourceContextPropertyName).Select(x => x.Value.ToString("l", null)).FirstOrDefault() ?? ""; switch (logEvent.Level) { case LogEventLevel.Debug: AndroidLog.Debug(tag, renderSpace.ToString()); break; case LogEventLevel.Information: AndroidLog.Info(tag, renderSpace.ToString()); break; case LogEventLevel.Verbose: AndroidLog.Verbose(tag, renderSpace.ToString()); break; case LogEventLevel.Warning: AndroidLog.Warn(tag, renderSpace.ToString()); break; case LogEventLevel.Error: AndroidLog.Error(tag, renderSpace.ToString()); break; case LogEventLevel.Fatal: AndroidLog.Wtf(tag, renderSpace.ToString()); break; default: AndroidLog.WriteLine(LogPriority.Assert, tag, renderSpace.ToString()); break; } }
protected override async void nextStageAction() { try { MasterSpellLibrary.SpellFeedbackSFX.Stop(); await Task.Delay(150); MasterSpellLibrary.SpellProgressSFX.Play(); await Task.Delay(1000); // Give a moment to get ready. //Current.SpellBeingTrained.AddGlyph(new Glyph(AverageAttitude, Stillness.StillnessScore, AverageAttitude.StdDev)); //Current.SpellBeingTrained.AddGlyph(new Glyph(AverageAttitude, Stillness.StillnessScore, 0)); //Current.CheckGlyphCount(); TargetGlyph.Orientation = AverageAttitude; //var EulerAngles = AverageAttitude.Average.ToEulerAngles(); var o = TargetGlyph.Orientation; //Log.Debug("SpellTraining", $"Saved glyph at yaw {EulerAngles.X:f2}, pitch {EulerAngles.Y}, and roll {EulerAngles.Z} from zero stance."); //Log.Debug("SpellTraining", $"Saved {((GestureRecognizerStage)CurrentStage).Label} at {EulerAngles:f1} from zero stance. That's {AverageAttitude.Average.AngleTo(lastOrientation):f0} degrees from the last one. Baselines are {Stillness.StillnessScore:f2} for stillness, {AverageAttitude.StdDev:f2} for orientation."); Log.Debug("SpellTraining", $"Glyph {TargetGlyph.Name} recorded at: {o.X}, {o.Y}, {o.Z}, {o.W}"); GlyphQuaternions += $"{TargetGlyph.Name} {o.X}, {o.Y}, {o.Z}, {o.W}\n"; Res.Storage.Put(GlyphKey, GlyphQuaternions); if (TargetGlyphIndex < Glyph.AllGlyphs.Count - 1) { CurrentStage = new NewGlyphTrainingStage(TargetGlyphIndex + 1, Implement, AttitudeProvider); } else { Log.Debug("SpellTraining", $"Logged orientations:\n{GlyphQuaternions}"); } } catch (Exception e) { Log.Error("Glyph training stage progression", e.Message); throw; } }
private void Play() { if (!IsPlaying) { try { if (_mediaSession == null) { _mediaSession = new RadioStationMediaSession(this); } if (_player == null) { _player = new RadioStationPlayer(this, this); _player.StateChanged += OnPlayerStateChanged; _player.Error += OnPlayerError; } _lock = new RadioStationServiceLock(this); _player.Start(); } catch (Exception ex) { Log.Error(TAG, $"Failed to play: {ex.Message}"); Log.Debug(TAG, ex.ToString()); if (_lock != null) { _lock.Release(); _lock = null; } Error?.Invoke(this, new RadioStationErrorEventArgs(ex)); } } }
private void SetUpSpellButtons() { var layoutpanel = FindViewById <LinearLayout>(Resource.Id.Spell_casting_layoutpane); foreach (var spB in spellButtons) { spB.Visibility = ViewStates.Gone; } spellButtons.Clear(); foreach (string spellName in MasterSpellLibrary.spellNames?.DefaultIfEmpty() ?? new List <string>()) { if (spellName == Spell.None.SpellName) { continue; } var spell = MasterSpellLibrary.Get(spellName); var spellButton = new Button(this); spellButtons.Add(spellButton); spellButton.SetText(spellName + " (Retrain)", TextView.BufferType.Normal); spellButton.SetPadding(20, 20, 20, 20); layoutpanel.AddView(spellButton); spellButton.Click += (o, e) => { if (SpellBeingTrained != null) { return; // Debouncing, basically. } SpellBeingRetrained = spell; SpellBeingTrained = new Spell(spellName); foreach (Button btn in spellButtons) { btn.Visibility = ViewStates.Gone; } setSpellNameButton.Text = "Erase spell"; spellNameTextbox.Text = spellName; spellNameTextbox.Focusable = false; CheckGlyphCount(); Speech.Say($"Retraining {spellName}."); CurrentStage = new Spell_Training_TutorialStage($"Retraining {spellName}", ThePlayersFocus, true); }; } spellNameTextbox = FindViewById <EditText>(Resource.Id.spell_name_textbox); setSpellNameButton = FindViewById <Button>(Resource.Id.Set_spell_name_button); glyphCountDisplay = FindViewById <TextView>(Resource.Id.glyph_count_display); undoGlyphButton = FindViewById <Button>(Resource.Id.undo_glyph_button); inscribeButton = FindViewById <Button>(Resource.Id.inscribe_spell_button); spellNameTextbox.KeyPress += (object sender, View.KeyEventArgs e) => { e.Handled = false; if (e.Event.Action == KeyEventActions.Down && e.KeyCode == Keycode.Enter && spellNameTextbox.Text.Length > 0) { setSpellNameButton.CallOnClick(); } if (spellNameTextbox.Text.Length > 0) { setSpellNameButton.Text = "Train"; } else { setSpellNameButton.Text = "Random"; } }; spellNameTextbox.ClearFocus(); // Not working, dunno why. setSpellNameButton.Click += async(o, e) => { if (SpellBeingRetrained != null) { if (setSpellNameButton.Text == "Erase spell") { setSpellNameButton.Text = "Confirm erasure"; return; } else if (setSpellNameButton.Text == "Confirm erasure") { MasterSpellLibrary.Erase(SpellBeingRetrained.SpellName); ThePlayersFocus.ForgetSpell(SpellBeingRetrained.SpellName); CurrentStage.Deactivate(); await Speech.SayAllOf($"Deleting {SpellBeingRetrained.SpellName} from the master library."); CurrentStage = GestureRecognizerStage.NullStage; //SetUpSpellButtons(); Current.Finish(); return; } } SpellBeingRetrained = null; if (spellNameTextbox.Text.Length == 0) { spellNameTextbox.Text = GenerateRandomSpellName(); } Current.HideKeyboard(); await Task.Delay(100); // Let the screen update. SpellBeingTrained = new Spell(spellNameTextbox.Text); foreach (Button btn in spellButtons) { btn.Visibility = ViewStates.Gone; } //spellNameTextbox.Focusable = false; CheckGlyphCount(); await Speech.SayAllOf($"Training {SpellBeingTrained.SpellName}."); CurrentStage = new Spell_Training_TutorialStage($"Init training for {SpellBeingTrained.SpellName}", ThePlayersFocus, true); }; FindViewById <Button>(Resource.Id.glyph_training_btn).Click += async(o, e) => { var glyphText = Res.Storage.Get(NewGlyphTrainingStage.GlyphKey); if (glyphText != null) { Log.Debug("SpellTraining", "\n" + glyphText); } Current.HideKeyboard(); await Task.Delay(100); // Let the screen update. foreach (Button btn in spellButtons) { btn.Visibility = ViewStates.Gone; } await Speech.SayAllOf($"Training core glyphs."); //CurrentStage = new Spell_Training_TutorialStage($"Init training for {SpellBeingTrained.SpellName}", ThePlayersFocus, true); var provider = new GravityOrientationProvider(); provider.Activate(); Task.Delay(50) .ContinueWith(async _ => await SensorProvider.EnsureIsReady(provider)) .ContinueWith(_ => CurrentStage = new NewGlyphTrainingStage(0, ThePlayersFocus, provider)) .LaunchAsOrphan(); }; undoGlyphButton.Click += async(o, e) => { if (SpellBeingTrained.Glyphs.Count == 0) { foreach (Button btn in spellButtons) { btn.Enabled = true; } spellNameTextbox.Text = ""; spellNameTextbox.Focusable = true; setSpellNameButton.Enabled = true; setSpellNameButton.Text = "Random"; SpellBeingRetrained = null; SpellBeingTrained = null; CurrentStage.Deactivate(); CurrentStage = GestureRecognizerStage.NullStage; SetUpSpellButtons(); await Speech.SayAllOf("Aborting spell training."); } else { SpellBeingTrained.UndoAddGlyph(); await Speech.SayAllOf("Removing most recent glyph."); } CheckGlyphCount(); }; var feedbackSFXbtn = FindViewById <Button>(Resource.Id.spell_feedback_sfx_button); var progressSFXbtn = FindViewById <Button>(Resource.Id.spell_progress_sfx_button); var successSFXbtn = FindViewById <Button>(Resource.Id.spell_success_sfx_button); if (!MasterSpellLibrary.GetSFXReadyTask().Wait(5000)) { Log.Error("Spell training", "Can't prep the buttons (as is, anyway) without our SFX loaded, which doesn't seem to be happening."); } var feedbackSFXoptions = new SimpleCircularList <string>("Magic.Ethereal", "Magic.Aura", "Magic.DeepVenetian", "Magic.InfiniteAubergine", "Magic.Ommm", "Magic.AfricanDrums", "Magic.Rommble", "Magic.MidtonePianesque", "Magic.FemReverbDSharp", "Magic.FemReverbCSharp", "Magic.FemReverbF", "Magic.FemReverbE", "Magic.AlienTheremin", "Magic.TrompingBuzzPulse", "Magic.GrittyDrone", "Magic.Galewinds", "Magic.NanobladeLoop", "Magic.ViolinLoop", "Magic.StrongerThanTheDark", "Magic.MelodicPad"); var progressSFXoptions = new SimpleCircularList <string>(MasterSpellLibrary.SpellSFX.Keys.Where(sfx => !feedbackSFXoptions.Contains(sfx)).DefaultIfEmpty().ToArray()); var successSFXoptions = new SimpleCircularList <string>(MasterSpellLibrary.CastingResults.Keys.ToArray()); while (progressSFXoptions.Next != MasterSpellLibrary.defaultProgressSFXName) { } // Cycle the list to the correct starting point. while (successSFXoptions.Next != "Play " + MasterSpellLibrary.defaultSuccessSFXName) { } // Cycle the list to the correct starting point. inscribeButton.Click += async(o, e) => { if (inscribeButton.Text == "Inscribe Spell") { // Halt ongoing processeses MasterSpellLibrary.SpellFeedbackSFX.Deactivate(); CurrentStage.Deactivate(); CurrentStage = GestureRecognizerStage.NullStage; // Display SFX modification buttons feedbackSFXbtn.Visibility = ViewStates.Visible; progressSFXbtn.Visibility = ViewStates.Visible; successSFXbtn.Visibility = ViewStates.Visible; IEffect sampleSFX = null; Func <SimpleCircularList <string>, Button, string, EventHandler> HandlerFactory = (circList, btn, label) => { return((ob, ev) => { sampleSFX?.Stop(); btn.Text = $"{label} ('{circList.Next}')"; if (MasterSpellLibrary.SpellSFX.ContainsKey(circList.Current.Split(' ').Last())) { sampleSFX = MasterSpellLibrary.SpellSFX[circList.Current.Split(' ').Last()]; sampleSFX.Play(); } else { } }); }; feedbackSFXbtn.Click += HandlerFactory(feedbackSFXoptions, feedbackSFXbtn, "Feedback SFX"); progressSFXbtn.Click += HandlerFactory(progressSFXoptions, progressSFXbtn, "Progress SFX"); successSFXbtn.Click += HandlerFactory(successSFXoptions, successSFXbtn, "Success Func"); inscribeButton.Text = "Finish Inscribing"; } else { feedbackSFXbtn.Visibility = ViewStates.Gone; progressSFXbtn.Visibility = ViewStates.Gone; successSFXbtn.Visibility = ViewStates.Gone; SpellBeingTrained.CastingResult = MasterSpellLibrary.CastingResults[successSFXoptions.Current]; foreach (var glyph in SpellBeingTrained.Glyphs) { glyph.FeedbackSFXName = feedbackSFXoptions.Current; glyph.ProgressSFXName = progressSFXoptions.Current; } MasterSpellLibrary.Inscribe(SpellBeingTrained); ThePlayersFocus.LearnSpell(SpellBeingTrained); //ResetSpell(); if (SpellBeingRetrained == null) { await Speech.SayAllOf($"Adding {SpellBeingTrained.SpellName} to the master library."); } else { await Speech.SayAllOf($"Updating spell listing for {SpellBeingTrained.SpellName}."); } Log.Info("SpellTraining", $"Here's the spell string for copy-and-pasting as a constant: {SpellBeingTrained.ToString()}"); Current.Finish(); } }; }