public MatchmakingModeEnum GetMatchmakingMode()
        {
            LaunchThread(() => {
                //If any of our objects are no longer valid, we have probably changed sessions
                //In this case we'll just blow everything away and start over
                foreach (NFSObject o in objectList.Values)
                {
                    if (!o.IsValid())
                    {
                        ResetAll();
                        return;
                    }
                }

                NFSObject ProfileOptions;
                if (!TryGetObject("ProfileOptions", out ProfileOptions))
                {
                    return;
                }
                MatchmakingModeEnum matchmakingMode = MatchmakingModeEnum.Unknown; //(MatchmakingModeEnum)ProfileOptions.FieldList["MatchmakingMode"].Field;
                string status;
                switch (matchmakingMode)
                {
                case MatchmakingModeEnum.Public:
                    status = "Public Game"; break;

                case MatchmakingModeEnum.Friends:
                    status = "Friends Game"; break;

                case MatchmakingModeEnum.Private:
                    status = "Private Game"; break;

                case MatchmakingModeEnum.SinglePlayer:
                    status = "Single Player"; break;

                default:     //Unknown
                    status = "Unknown!?"; break;
                }

                //Temporarily show a MatckmakingMode change, will be cleared next pass or by something else
                if (lastMatchmakingMode == matchmakingMode)
                {
                    parent.PopStatus();
                }
                else
                {
                    lastMatchmakingMode = matchmakingMode;
                    parent.SetStatus("Migrating to " + status + "...", true);
                }
            });
            return(lastMatchmakingMode);
        }
        public DifficultyFormWorker(DifficultyForm parent)
        {
            memManager  = new MemoryManager();
            objectList  = new ConcurrentDictionary <string, NFSObject>();
            threadList  = new ConcurrentDictionary <string, Thread>();
            this.parent = parent;

            lastMatchmakingMode = MatchmakingModeEnum.Unknown;

            copPersonalityList = new string[] {
                "AggressorCopPersonality",
                "BruteCopPersonality",
                "BasicCopPersonality",
                "AdvAggressorCopPersonality",
                "ChaserCopPersonality",
                "RacerTutorialCop",
                "CopTutorialCop"
            };

            racerPersonalityList = new string[] {
                "Tier1WeaponRacer",
                "RecklessRacer",
                "Tier2CautiousRacer",
                "Tier1ViolentRacer",
                "Tier1RecklessRacer",
                "Tier1CautiousRacer",
                "RacerTutorialRacer",
                "CleanRacer",
                "Tier2WeaponRacer",
                "Tier1CleanRacer",
                "Tier2ViolentRacer",
                "Tier2RecklessRacer",
                "Tier2CleanRacer",
                "WeaponRacer",
                "CopTutorialRacer",
                "CautiousRacer",
                "ViolentRacer"
            };

            copTypeList = new string[] {
                "Basic",
                "Chaser",
                "Brute",
                "Aggressor",
                "AdvancedAggressor"
            };
        }