コード例 #1
0
        private static void InitializeGameData()
        {
            var totalDataToLoad = (double)(LoadingWindowViewModel.Settings.EnemyCount + LoadingWindowViewModel.Settings.ChipCount + LoadingWindowViewModel.Settings.AddOnCount + LoadingWindowViewModel.Settings.InteriorCount + LoadingWindowViewModel.Settings.BackgroundCount);
            var dataLoaded      = 0;

            // Prints multiple NullReferenceExceptions as EnemyBase in ShanghaiEXE has undefined ids caught in the game code
            Constants.BaseEnemyDefinitions = new Dictionary <int, EnemyDefinition>();
            for (int enemyID = 0; enemyID < LoadingWindowViewModel.Settings.EnemyCount; enemyID++)
            {
                Constants.BaseEnemyDefinitions[enemyID] = EnemyDefinition.GetEnemyDefinition(enemyID, 0, 0, 1);
                dataLoaded++;
                Constants.ConstantsLoadProgressEventUpdated?.Invoke(null, new ConstantsLoadProgressEventUpdatedEventArgs("Data: Enemy: ", dataLoaded / totalDataToLoad));
            }

            Constants.ChipDefinitions = new Dictionary <int, ChipDefinition>();
            for (int chipID = 0; chipID < LoadingWindowViewModel.Settings.ChipCount; chipID++)
            {
                var chipDefinition = ChipDefinition.GetChipDefinition(chipID);
                if (chipDefinition != null)
                {
                    Constants.ChipDefinitions[chipID] = chipDefinition;
                }
                dataLoaded++;
                Constants.ConstantsLoadProgressEventUpdated?.Invoke(null, new ConstantsLoadProgressEventUpdatedEventArgs("Data: Chip: ", dataLoaded / totalDataToLoad));
            }

            Constants.AddOnDefinitions = new Dictionary <int, AddOnDefinition>();
            for (int addOnID = 0; addOnID < LoadingWindowViewModel.Settings.AddOnCount; addOnID++)
            {
                var addOnDefiniton = AddOnDefinition.GetAddOnDefinition(addOnID);
                if (addOnDefiniton != null)
                {
                    Constants.AddOnDefinitions[addOnID] = addOnDefiniton;
                }
                dataLoaded++;
                Constants.ConstantsLoadProgressEventUpdated?.Invoke(null, new ConstantsLoadProgressEventUpdatedEventArgs("Data: AddOn: ", dataLoaded / totalDataToLoad));
            }

            Constants.InteriorDefinitions = new Dictionary <int, string>();
            for (int interiorID = 0; interiorID < LoadingWindowViewModel.Settings.InteriorCount; interiorID++)
            {
                var interiorKey = $"Interior.Item{interiorID + 1}";
                if (Constants.TranslationService.CanTranslate(interiorKey))
                {
                    Constants.InteriorDefinitions[interiorID] = Constants.TranslationService.Translate(interiorKey).Text;
                }
                dataLoaded++;
                Constants.ConstantsLoadProgressEventUpdated?.Invoke(null, new ConstantsLoadProgressEventUpdatedEventArgs("Data: Interior: ", dataLoaded / totalDataToLoad));
            }

            Constants.BackgroundDefinitions = new Dictionary <int, BackgroundDefinition>();
            for (int i = 0; i < LoadingWindowViewModel.Settings.BackgroundCount; i++)
            {
                Constants.BackgroundDefinitions[i] = new BackgroundDefinition(BackgroundBase.BackMake(i));
                dataLoaded++;
                Constants.ConstantsLoadProgressEventUpdated?.Invoke(null, new ConstantsLoadProgressEventUpdatedEventArgs("Data: Background: ", dataLoaded / totalDataToLoad));
            }

            CharacterInfo.LoadCharacterInfo(out FloatingCharacters, out NoShadowCharacters);

            var keyItemDoc = new XmlDocument();

            keyItemDoc.Load($"data/data/KeyItems.xml");
            var keyItemDefintions = Constants.LoadKeyItems(keyItemDoc);

            Constants.KeyItemDefinitions = new ObservableConcurrentDictionary <int, KeyItemDefinition>();
            foreach (var kvp in keyItemDefintions)
            {
                Constants.KeyItemDefinitions.Add(kvp.Key, kvp.Value);
            }

            var mailDoc = new XmlDocument();

            mailDoc.Load($"data/data/Mail.xml");
            var mailDefinitions = Constants.LoadMail(mailDoc);

            Constants.MailDefinitions = new ObservableConcurrentDictionary <int, MailDefinition>();
            foreach (var kvp in mailDefinitions)
            {
                Constants.MailDefinitions.Add(kvp.Key, kvp.Value);
            }
        }