public void UpdateTestConfigToGenConfig(MachineTestConfig testConfig, MachineSeedGenConfig genConfig)
    {
        genConfig._initLucky  = testConfig._initLucky;
        genConfig._initCredit = testConfig._initCredit;
        genConfig._spinCount  = testConfig._spinCount;
        genConfig._betMode    = testConfig._betMode;

        genConfig._spinCount     = testConfig._spinCount;
        genConfig._betMode       = testConfig._betMode;
        genConfig._betAmount     = testConfig._betAmount;
        genConfig._betPercentage = testConfig._betPercentage;
        genConfig._minBetAmountInPercentageMode = testConfig._minBetAmountInPercentageMode;
        genConfig._stopCredit = testConfig._stopCredit;

        genConfig._userCount             = testConfig._userCount;
        genConfig._seedMode              = testConfig._seedMode;
        genConfig._startSeedForFixedMode = testConfig._startSeedForFixedMode;

        genConfig._isPayProtectionEnable = testConfig._isPayProtectionEnable;

//		int index = ListUtility.Find(testConfig._selectMachines, (bool s) => {
//			return true;
//		});
//
//		if(index >= 0 && index < testConfig._allMachines.Length)
//		{
//			genConfig._machineName = testConfig._allMachines[index];
//		}
//		else
//		{
//			Debug.LogError("Find no machine name");
//		}
    }
    void OutputPrintMachineResult(MachineTestMachineResult machineResult, MachineSeedGenConfig genConfig)
    {
        if (genConfig._isOutputUserResult)
        {
            string machineDir = Path.Combine(_outputUserResultDir, machineResult.MachineName) + "/";
            if (Directory.Exists(machineDir))
            {
                DirectoryInfo info = new DirectoryInfo(machineDir);
                foreach (FileInfo file in info.GetFiles())
                {
                    file.Delete();
                }
            }

            Directory.CreateDirectory(machineDir);

            for (int i = 0; i < machineResult.UserResults.Count; i++)
            {
                MachineTestUserResult userResult = machineResult.UserResults[i];

                MachineTestUserResultPrinter userPrinter = new MachineTestUserResultPrinter(userResult);
                userPrinter.WriteResult(machineDir, MachineTestPrintFileNameMode.Seed);
            }
        }
    }
    void ShowLimitationConfig(MachineSeedGenConfig genConfig)
    {
        EditorGUILayout.LabelField("----- limitation config -----");

        for (int i = 0; i < genConfig._limitConfigs.Count; i++)
        {
            MachineSeedLimitationConfig limitConfig = genConfig._limitConfigs[i];

            GUILayout.BeginHorizontal();

            limitConfig._type = (MachineSeedLimitationType)EditorGUILayout.EnumPopup(limitConfig._type, GUILayout.ExpandWidth(false), GUILayout.MinWidth(70));

            if (limitConfig._type == MachineSeedLimitationType.Bankcrupt)
            {
                EditorGUILayout.LabelField("StartSpinCount", GUILayout.MaxWidth(100));
                limitConfig._startSpinCount = EditorGUILayout.IntField(limitConfig._startSpinCount);

                EditorGUILayout.LabelField("EndSpinCount", GUILayout.MaxWidth(100));
                limitConfig._endSpinCount = EditorGUILayout.IntField(limitConfig._endSpinCount);
            }
            else if (limitConfig._type == MachineSeedLimitationType.CreditRange)
            {
                EditorGUILayout.LabelField("SpinCount", GUILayout.MaxWidth(70));
                limitConfig._spinCount = EditorGUILayout.IntField(limitConfig._spinCount);

                EditorGUILayout.LabelField("MinCredit", GUILayout.MaxWidth(70));
                limitConfig._minCredit = EditorGUILayout.LongField(limitConfig._minCredit);

                EditorGUILayout.LabelField("MaxCredit", GUILayout.MaxWidth(70));
                limitConfig._maxCredit = EditorGUILayout.LongField(limitConfig._maxCredit);
            }
            else
            {
                Debug.Assert(false);
            }

            if (GUILayout.Button("-", GUILayout.Width(20)))
            {
                genConfig._limitConfigs.RemoveAt(i);
            }

            if (GUILayout.Button("+", GUILayout.Width(20)))
            {
                genConfig._limitConfigs.Insert(i + 1, new MachineSeedLimitationConfig());
            }

            GUILayout.EndHorizontal();
        }

        if (GUILayout.Button("+", GUILayout.Width(20)))
        {
            genConfig._limitConfigs.Add(new MachineSeedLimitationConfig());
        }
    }
    public void Run(MachineSeedGenConfig genConfig, MachineTestConfig testConfig)
    {
        _testEngine.Init(testConfig);
        MachineTestMachineResult machineResult = _testEngine.RunSingleMachine(genConfig._machineName);
        List <uint> seedList = FilterMachineSeeds(machineResult, genConfig._limitConfigs);

        OutputPrintMachineResult(machineResult, genConfig);
        OutputMachineSeeds(genConfig, seedList);

        Debug.Log("Seed generator engine done");
    }
    static void InitConfig()
    {
        _genConfig = AssetDatabase.LoadAssetAtPath <MachineSeedGenConfig>(_configFilePath);
        if (_genConfig == null)
        {
            _genConfig = new MachineSeedGenConfig();
            AssetDatabase.CreateAsset(_genConfig, _configFilePath);
        }

        _testConfig = new MachineTestConfig();

        _engine.UpdateGenConfigToTestConfig(_genConfig, _testConfig, true);
    }
    void OutputMachineSeeds(MachineSeedGenConfig genConfig, List <uint> seedList)
    {
        if (genConfig._isOutputSeeds)
        {
            string[] seedArray = new string[seedList.Count];
            for (int i = 0; i < seedList.Count; i++)
            {
                seedArray[i] = seedList[i].ToString();
            }

            string content = string.Join(MachineSeedConfig.SeedFileDelimitor.ToString(), seedArray);

            string fileName = MachineSeedConfig.GetSeedFileName(genConfig._machineName, true);
            string filePath = Path.Combine(_outputSeedsDir, fileName);

            FileStreamUtility.DeleteFile(filePath);
            StreamWriter writer = FileStreamUtility.CreateFileStream(filePath);
            FileStreamUtility.WriteFile(writer, content);
            FileStreamUtility.CloseFile(writer);
        }
    }
    public void UpdateGenConfigToTestConfig(MachineSeedGenConfig genConfig, MachineTestConfig testConfig, bool isCheckMachineName)
    {
        testConfig._initLucky  = genConfig._initLucky;
        testConfig._initCredit = genConfig._initCredit;
        testConfig._spinCount  = genConfig._spinCount;
        testConfig._betMode    = genConfig._betMode;

        testConfig._spinCount     = genConfig._spinCount;
        testConfig._betMode       = genConfig._betMode;
        testConfig._betAmount     = genConfig._betAmount;
        testConfig._betPercentage = genConfig._betPercentage;
        testConfig._minBetAmountInPercentageMode = genConfig._minBetAmountInPercentageMode;
        testConfig._stopCredit = genConfig._stopCredit;

        testConfig._userCount             = genConfig._userCount;
        testConfig._seedMode              = genConfig._seedMode;
        testConfig._startSeedForFixedMode = genConfig._startSeedForFixedMode;

        testConfig._isPayProtectionEnable = genConfig._isPayProtectionEnable;

        if (isCheckMachineName)
        {
            if (testConfig._allMachines.Contains(genConfig._machineName))
            {
                int index = ListUtility.Find(testConfig._allMachines, (string name) => {
                    return(name == genConfig._machineName);
                });

                Debug.Assert(index >= 0 && index < testConfig._allMachines.Length);

                testConfig._selectMachines[index] = true;
            }
            else
            {
                Debug.LogError("machineName is wrong: " + genConfig._machineName);
            }
        }
    }
 void ShowOtherConfig(MachineSeedGenConfig genConfig)
 {
     genConfig._isOutputUserResult = EditorGUILayout.Toggle("IsOutputUserResult", genConfig._isOutputUserResult);
     genConfig._isOutputSeeds      = EditorGUILayout.Toggle("IsOutputSeeds", genConfig._isOutputSeeds);
 }