Пример #1
0
        public void Initialize()
        {
            var settingsDB   = PlayerSettingsDB.Get();
            var modelProxyDB = ModelProxyDB.Get();

            favDecks.SuspendNotifies();

            foreach (var favDeckOb in settingsDB.favDecks)
            {
                var deck = new CardCollectionViewModel()
                {
                    Name = favDeckOb.Name
                };
                foreach (var cardOb in favDeckOb.knownCards)
                {
                    var cardVM = new CardViewModel()
                    {
                        CardModel = modelProxyDB.GetCardProxy(cardOb)
                    };
                    deck.Cards.Add(cardVM);
                }

                var favDeck = new SolvableDeckViewModel()
                {
                    Deck = deck
                };
                favDecks.Add(favDeck);

                favDeck.RefreshSolver(gameModel, favDeckOb);
            }

            favDecks.ResumeNotifies();
        }
Пример #2
0
        public static async void CloudStorageInit()
        {
            cachedApiState = GoogleDriveService.EState.AuthInProgress;
            OnCloudStorageApiUpdate.Invoke(cachedApiState);

            try
            {
                await CloudStorage.InitFileList();
            }
            catch (Exception ex)
            {
                Logger.WriteLine("Exception: " + ex);
            }

            OnCloudStorageApiUpdate.Invoke(CloudStorage.GetState());

            var settingsDB = PlayerSettingsDB.Get();

            settingsDB.cloudToken = CloudStorage.GetAuthToken().refreshToken;

            bool needsSave = await CloudStorageLoad();

            cloudSettingsInitialized = true;

            if (needsSave)
            {
                await CloudStorageSave();
            }
        }
Пример #3
0
        private static async Task <bool> CloudStorageLoad()
        {
            string fileContent = null;

            try
            {
                fileContent = await CloudStorage.DownloadTextFile("FFTriadBuddy-settings.json");

                Logger.WriteLine("Loaded cloud save, API response: " + CloudStorage.GetLastApiResponse());
            }
            catch (Exception ex)
            {
                Logger.WriteLine("Exception: " + ex);
            }

            CloudStorageSendNotifies(CloudSaveState.Loaded);

            bool needsSave = true;

            if (!string.IsNullOrEmpty(fileContent))
            {
                needsSave = PlayerSettingsDB.Get().MergeWithContent(fileContent);
            }

            return(needsSave);
        }
Пример #4
0
        private TriadDeck FindDeckToUseFor(TriadNpc npc)
        {
            PlayerSettingsDB settingsDB = PlayerSettingsDB.Get();

            TriadCard[] cardsCopy = null;
            if (settingsDB.lastDeck.ContainsKey(npc))
            {
                TriadDeck savedDeck = PlayerSettingsDB.Get().lastDeck[npc];
                if (savedDeck != null && savedDeck.knownCards.Count == 5)
                {
                    cardsCopy = savedDeck.knownCards.ToArray();
                }
            }

            if (cardsCopy == null)
            {
                cardsCopy = new TriadCard[5];

                if (PlayerDeck == null)
                {
                    Array.Copy(settingsDB.starterCards, cardsCopy, cardsCopy.Length);
                }
                else
                {
                    Array.Copy(PlayerDeck.knownCards.ToArray(), cardsCopy, cardsCopy.Length);
                }
            }

            return(new TriadDeck(cardsCopy));
        }
Пример #5
0
        private void LoadOwnedCards()
        {
            List <CardModelProxy> removeList = new List <CardModelProxy>();

            removeList.AddRange(ownedCards);

            ownedCards.SuspendNotifies();
            ownedCards.Clear();

            var settingsDB = PlayerSettingsDB.Get();

            foreach (var card in settingsDB.ownedCards)
            {
                var cardProxy = cards.Find(x => x.cardOb.Id == card.Id);
                if (cardProxy != null)
                {
                    cardProxy.IsOwned = true;
                    ownedCards.Add(cardProxy);
                    removeList.Remove(cardProxy);
                }
            }

            foreach (var card in removeList)
            {
                card.IsOwned = false;
            }

            ownedCards.ResumeNotifies();
        }
Пример #6
0
        private void AssignFavDeckFrom(SolvableDeckViewModel favDeck, DeckViewModel sourceDeck)
        {
            if (sourceDeck.Cards.Count == favDeck.Deck.Cards.Count)
            {
                favDeck.Deck.Cards.SuspendNotifies();
                var cards = new List <TriadCard>();

                for (int idx = 0; idx < sourceDeck.Cards.Count; idx++)
                {
                    var cardProxy = sourceDeck.Cards[idx].CardModel;
                    favDeck.Deck.Cards[idx].CardModel = cardProxy;
                    cards.Add(cardProxy.cardOb);
                }

                favDeck.Deck.Cards.ResumeNotifies();

                int slotIdx   = favDecks.IndexOf(favDeck);
                var namedDeck = new TriadDeckNamed(new TriadDeck(cards))
                {
                    Name = favDeck.Deck.Name
                };
                PlayerSettingsDB.Get().UpdateFavDeck(slotIdx, namedDeck);

                favDeck.RefreshSolver(gameModel, namedDeck);
            }
        }
Пример #7
0
        private void CommandExportFunc(object dummyParam)
        {
            var dialog = new Microsoft.Win32.SaveFileDialog
            {
                FileName         = "export",
                DefaultExt       = ".json",
                Filter           = "Settings|*.json",
                InitialDirectory = defaultPath,
                OverwritePrompt  = true
            };

            var result = dialog.ShowDialog();

            if (result == true)
            {
                try
                {
                    var fileName = dialog.FileName;
                    Logger.WriteLine("Exporting settings to: {0}", fileName);

                    string jsonStr = PlayerSettingsDB.Get().SaveToJson(true);
                    if (File.Exists(fileName))
                    {
                        File.Delete(fileName);
                    }

                    File.WriteAllText(fileName, jsonStr);
                }
                catch (Exception ex)
                {
                    Logger.WriteLine("Failed to export: {0}", ex);
                }
            }
        }
Пример #8
0
        private void CommandImportFunc(object dummyParam)
        {
            var dialog = new Microsoft.Win32.OpenFileDialog
            {
                FileName         = "export",
                DefaultExt       = ".json",
                Filter           = "Settings|*.json",
                InitialDirectory = defaultPath,
                CheckFileExists  = true
            };

            var result = dialog.ShowDialog();

            if (result == true)
            {
                try
                {
                    var fileName = dialog.FileName;
                    Logger.WriteLine("Importing settings from: {0}", fileName);

                    string jsonStr = File.ReadAllText(fileName);

                    var settingsDB = PlayerSettingsDB.Get();
                    settingsDB.LoadFromJson(jsonStr);
                    settingsDB.OnImport();
                }
                catch (Exception ex)
                {
                    Logger.WriteLine("Failed to import: {0}", ex);
                }
            }
        }
Пример #9
0
        public void UpdateOwnedCard(CardModelProxy cardProxy)
        {
            if (!ownedCards.IsNotifySuspended)
            {
                var settingsDB = PlayerSettingsDB.Get();
                var hasChanges = false;

                if (cardProxy.IsOwned && !OwnedCards.Contains(cardProxy))
                {
                    //Logger.WriteLine("Adding owned card: {0}", cardProxy.cardOb.Name.GetCodeName());
                    OwnedCards.Add(cardProxy);
                    settingsDB.ownedCards.Add(cardProxy.cardOb);
                    hasChanges = true;
                }
                else if (!cardProxy.IsOwned && OwnedCards.Contains(cardProxy))
                {
                    //Logger.WriteLine("Removing owned card: {0}", cardProxy.cardOb.Name.GetCodeName());
                    OwnedCards.Remove(cardProxy);
                    settingsDB.ownedCards.Remove(cardProxy.cardOb);
                    hasChanges = true;
                }

                if (hasChanges)
                {
                    settingsDB.MarkDirty();
                    UpdateCompletedNpcs();

                    OnCardOwnerChanged?.Invoke(cardProxy);
                }
            }
        }
Пример #10
0
        private void Window_SizeChanged(object sender, SizeChangedEventArgs e)
        {
            var settingsDB = PlayerSettingsDB.Get();

            settingsDB.lastWidth  = (float)Width;
            settingsDB.lastHeight = (float)Height;
        }
Пример #11
0
        public static void Initialize()
        {
            var settingsDB = PlayerSettingsDB.Get();

            bool loaded = settingsDB.Load();

            if (loaded)
            {
                settingsDB.SaveBackup();
            }
            else
            {
                Logger.WriteLine("Warning: failed to load player settings!");
            }

            if (!string.IsNullOrEmpty(settingsDB.forcedLanguage))
            {
                LocalizationDB.SetCurrentUserLanguage(settingsDB.forcedLanguage);
            }

            if (settingsDB.useXInput)
            {
                XInputStub.StartPolling();
            }

            CloudStorage = new GoogleDriveService(
                GoogleClientIdentifiers.Keys,
                new GoogleOAuth2.Token()
            {
                refreshToken = settingsDB.cloudToken
            });
        }
Пример #12
0
        public LocalSavesViewModel()
        {
            CommandExport      = new RelayCommand <object>(CommandExportFunc);
            CommandImport      = new RelayCommand <object>(CommandImportFunc);
            CommandViewBackups = new RelayCommand <object>(CommandViewBackupFunc);

            defaultPath = PlayerSettingsDB.Get().GetBackupFolderPath();
        }
Пример #13
0
        public OverlayWindowInteractive()
        {
            InitializeComponent();

            if (PlayerSettingsDB.Get().useXInput)
            {
                XInputStub.StartPolling();
            }
        }
Пример #14
0
        public static void SetUseCloudSaves(bool useCloud)
        {
            GoogleOAuth2.KillPendingAuthorization();

            var settingsDB = PlayerSettingsDB.Get();

            settingsDB.useCloudStorage = useCloud;

            if (useCloud && CloudStorage != null)
            {
                if (!cloudSettingsInitialized)
                {
                    CloudStorageInit();
                }
                else
                {
                    CloudStorageSendNotifies(CloudSaveState.UpToDate);
                }
            }

            lock (cloudSettingsSyncLock)
            {
                cloudSettingsCanSave = useCloud;
            }

            if (cloudSettingsUpdateTask == null)
            {
                cloudSettingsUpdateTask = new Task(async() =>
                {
                    const int intervalMs = 2 * 60 * 1000;
                    while (true)
                    {
                        await Task.Delay(intervalMs);

                        bool canSave = false;
                        lock (cloudSettingsSyncLock)
                        {
                            canSave = cloudSettingsCanSave;
                        }

                        if (canSave)
                        {
                            if (PlayerSettingsDB.Get().isDirty)
                            {
                                await CloudStorageSave();
                            }
                            else
                            {
                                CloudStorageSendNotifies(CloudSaveState.UpToDate);
                            }
                        }
                    }
                });
                cloudSettingsUpdateTask.Start();
            }
        }
Пример #15
0
        private void UpdateCompletedNpcs()
        {
            var settingsDB = PlayerSettingsDB.Get();

            foreach (var npc in npcs)
            {
                var notOwnedReward = npc.npcOb.Rewards.Find(x => !settingsDB.ownedCards.Contains(x));
                npc.IsCompleted = notOwnedReward == null;
                npc.UpdateCachedText();
            }
        }
Пример #16
0
        public TriadGameModel()
        {
            TriadNpc npcOb = TriadNpcDB.Get().npcs.Find(x => x?.Id == PlayerSettingsDB.Get().lastNpcId);

            if (npcOb == null)
            {
                npcOb = TriadNpcDB.Get().Find("Triple Triad master");
            }

            SetNpc(npcOb);
        }
Пример #17
0
        public void Load()
        {
            LoadCards();
            LoadOwnedCards();
            LoadNpc();
            LoadRules();
            LoadTournaments();

            PlayerSettingsDB.Get().OnUpdated += ModelProxyDB_OnUpdated;
            UpdateCompletedNpcs();

            LocalizationDB.OnLanguageChanged += LocalizationDB_OnLanguageChanged;
        }
Пример #18
0
        private void CommandFavRemoveFunc(SolvableDeckViewModel favDeck)
        {
            int slotIdx = favDecks.IndexOf(favDeck);

            if (slotIdx >= 0)
            {
                var result = MessageBox.Show(loc.strings.FavDeckForm_Dynamic_RemoveMsg, loc.strings.App_Title, MessageBoxButton.YesNo, MessageBoxImage.Warning);
                if (result == MessageBoxResult.Yes)
                {
                    PlayerSettingsDB.Get().UpdateFavDeck(slotIdx, null);

                    favDecks.RemoveAt(slotIdx);
                }
            }
        }
Пример #19
0
        public static void Close()
        {
            lock (cloudSettingsSyncLock)
            {
                cloudSettingsCanSave = false;
            }

            var settingsDB = PlayerSettingsDB.Get();

            if (settingsDB.isDirty && settingsDB.useCloudStorage)
            {
                _ = CloudStorageSave();
            }

            settingsDB.Save();
        }
Пример #20
0
        public void SetPlayerDeck(TriadDeck deck, bool notifySetupChange = true)
        {
            Logger.WriteLine("Game.SetPlayerDeck: {0}", deck);
            PlayerDeck = deck;

            if (Npc != null && deck != null)
            {
                PlayerSettingsDB.Get().UpdatePlayerDeckForNpc(Npc, deck);
            }

            OnDeckChanged?.Invoke(deck);
            if (notifySetupChange)
            {
                OnSetupChanged?.Invoke(this);
            }
        }
Пример #21
0
        public void UpdateCachedText(bool sendNotifies = true)
        {
            var newDescRules = "";

            foreach (var rule in npcOb.Rules)
            {
                if (newDescRules.Length > 0)
                {
                    newDescRules += ", ";
                }
                newDescRules += rule.GetLocalizedName();
            }

            if (newDescRules.Length == 0)
            {
                newDescRules = loc.strings.MainForm_Dynamic_RuleListEmpty;
            }

            PlayerSettingsDB settingsDB = PlayerSettingsDB.Get();
            var newDescRewards          = "";

            foreach (var reward in npcOb.Rewards)
            {
                if (!settingsDB.ownedCards.Contains(reward))
                {
                    if (newDescRewards.Length > 0)
                    {
                        newDescRewards += ", ";
                    }
                    newDescRewards += reward.Name.GetLocalized();
                }
            }

            descRules     = newDescRules;
            descReward    = newDescRewards;
            descCompleted = IsCompleted ? loc.strings.MainForm_Dynamic_NpcCompletedColumn : "";

            if (sendNotifies)
            {
                DescRules     = descRules;
                DescReward    = descReward;
                DescCompleted = descCompleted;
            }
        }
Пример #22
0
        public void SetNpc(TriadNpc npc)
        {
            if (npc == Npc)
            {
                return;
            }

            Logger.WriteLine("Game.SetNpc: {0}:{1}", npc?.Id, npc?.Name.GetCodeName());
            Npc = npc;
            OnNpcChanged?.Invoke(npc);

            var useDeck = FindDeckToUseFor(npc);

            SetPlayerDeck(useDeck, notifySetupChange: false);

            UpdateSession();

            PlayerSettingsDB.Get().lastNpcId = npc.Id;
        }
Пример #23
0
        private static async Task CloudStorageSave()
        {
            string fileContent = PlayerSettingsDB.Get().SaveToString();

            if (!string.IsNullOrEmpty(fileContent))
            {
                try
                {
                    await CloudStorage.UploadTextFile("FFTriadBuddy-settings.json", fileContent);

                    Logger.WriteLine("Created cloud save, API response: " + CloudStorage.GetLastApiResponse());
                }
                catch (Exception ex)
                {
                    Logger.WriteLine("Exception: " + ex);
                }

                CloudStorageSendNotifies(CloudSaveState.Saved);
            }
        }
Пример #24
0
        private void Application_Startup(object sender, StartupEventArgs e)
        {
            Logger.Initialize(e.Args);

            bool canStart = false;

            bool updatePending = GithubUpdater.FindAndApplyUpdates();

            if (!updatePending)
            {
                bool hasAssets = LoadAssets();
                if (hasAssets)
                {
                    canStart = true;
                }
                else
                {
                    string appName = Assembly.GetEntryAssembly().GetName().Name;
                    MessageBox.Show("Failed to initialize resources!", appName, MessageBoxButton.OK, MessageBoxImage.Stop);
                }
            }

#if DEBUG
            if (Array.Find(e.Args, x => x == "-runTests") != null)
            {
                TestManager.RunTests();
                canStart = false;
            }
            else if (Array.Find(e.Args, x => x == "-dataConvert") != null)
            {
                var converter = new DataConverter();
                converter.Run();
                canStart = false;
            }
#endif // DEBUG

            if (canStart)
            {
                DialogWindowService.Initialize();
                OverlayWindowService.Initialize();
                AppWindowService.Initialize();

                canSaveSettings = true;

                var window = new MainWindow();

                var settingsDB = PlayerSettingsDB.Get();
                window.FontSize = settingsDB.fontSize;
                window.Topmost  = settingsDB.alwaysOnTop;

                if (settingsDB.lastHeight > window.MinHeight)
                {
                    window.Height = settingsDB.lastHeight;
                }
                if (settingsDB.lastWidth > window.MinWidth)
                {
                    window.Width = settingsDB.lastWidth;
                }

                window.Show();
            }
            else
            {
                Shutdown();
            }
        }