public static void InitializeAll() { SimpleStorage.SetContext(Application.Context); if ((Res.InteractionModes?.Count ?? 0) > 0) { return; // Already done this; okay, cool. } InteractionLibrary.InitializeAll(); MasterSpellLibrary.LoadAll(); MasterFechtbuch.LoadAll(); }
public static void InitMasterFocus() { if (MasterFocus != null) { return; } Log.Debug("Tools", $"Current master spell list: {MasterSpellLibrary.spellNames.Join()}"); MasterFocus = new MemorylessFocus("MasterFocus"); MasterFocus.ZeroOrientation = Quaternion.Identity * 0.9999f; // Makes it no longer "isIdentity" in technical terms. foreach (var spellName in MasterSpellLibrary.spellNames ?? new List <string>()) { MasterFocus.LearnSpell(MasterSpellLibrary.Get(spellName)); } }
public static void InitializeAll() { SimpleStorage.SetContext(Application.Context); if ((Res.InteractionModes?.Count ?? 0) > 0) { return; // Already done this; okay, cool. // TODO: Use a better indicator!!! } InteractionLibrary.InitializeAll(); MasterSpellLibrary.LoadAll(); MasterFechtbuch.LoadAll(); Encounters.Scenario.Current = Encounters.Scenario.Postcard; //Damageable.SetUpStandardHitReactions(); }
protected override void OnCreate(Bundle savedInstanceState) { base.OnCreate(savedInstanceState); // Link the checkboxes and buttons and such SetupButton(Resource.Id.btn_launch_experimental_mode, typeof(Atropos.Machine_Learning.MachineLearningActivity)); SetupButton(Resource.Id.btn_dev_hotbutton, typeof(FunctionalityTestActivity)); SetupButton(Resource.Id.btn_train_spells, typeof(SpellTrainingActivity)); SetupButton(Resource.Id.btn_train_locks, () => { }, null, false); CheckBox solipsismMode = FindViewById <CheckBox>(Resource.Id.chbox_solipsism_mode); solipsismMode.CheckedChange += (o, e) => { Res.SolipsismMode = solipsismMode.Checked; }; CheckBox lefthandedMode = FindViewById <CheckBox>(Resource.Id.chbox_lefthanded_mode); lefthandedMode.CheckedChange += (o, e) => { Res.LefthandedMode = lefthandedMode.Checked; Handedness.Update(); }; CheckBox screenFlipMode = FindViewById <CheckBox>(Resource.Id.chbox_screenflip_mode); screenFlipMode.CheckedChange += (o, e) => { Res.ScreenFlipMode = screenFlipMode.Checked; Handedness.Update(); }; CheckBox allowSpeakers = FindViewById <CheckBox>(Resource.Id.chbox_allow_speakers); allowSpeakers.Click += (o, e) => { Res.AllowSpeakerSounds = allowSpeakers.Checked; Res.Speech_Speakers.SpeakerMode = allowSpeakers.Checked; }; CheckBox allowNfc = FindViewById <CheckBox>(Resource.Id.chbox_use_nfc); allowNfc.Click += (o, e) => { Res.AllowNfc = allowNfc.Checked; }; SetupButton(Resource.Id.btn_export_run_data, () => { }, null, false); SetupButton(Resource.Id.btn_import_run_data, () => { }, null, false); // DELETE USER DATA BUTTON DOES NOT SEEM TO WORK // Note that SetupButton is not used here because we want to be able to read our button's text. There's probably a better way to handle it based on reading the Sender, but meh. Button deleteData = FindViewById <Button>(Resource.Id.btn_delete_user_data); SetTypeface(deleteData, "FTLTLT.TTF"); deleteData.Click += (o, e) => { string confirmationMessage = "CONFIRM - DELETE ALL SPELLS ETC?"; if (deleteData.Text != confirmationMessage) { deleteData.Text = confirmationMessage; System.Threading.Tasks.Task.Delay(1000) .ContinueWith(_ => { deleteData.Text = "Delete Stored Data"; }); return; } RunOnUiThread(() => { Android.Preferences.PreferenceManager.GetDefaultSharedPreferences(Application.Context).Edit().Clear().Apply(); MasterSpellLibrary.LoadAll(); MasterFechtbuch.LoadAll(); //Android.OS.Process.KillProcess(Android.OS.Process.MyPid()); }); }; }
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(); } }; }