示例#1
0
    // Start is called before the first frame update
    void Start()
    {
        i2s    = new IMG2Sprite();
        Stacks = new List <StackConfig>();
        Decks  = new List <List <int> >();
        string folder = Directory.GetCurrentDirectory() + "\\Cards";

        string[] paths = Directory.GetFiles(folder, "*.json");
        foreach (string path in paths)
        {
            StreamReader reader = new StreamReader(path);
            string       config = reader.ReadToEnd();
            StackConfig  stack  = JsonUtility.FromJson <StackConfig>(config);
            Stacks.Add(stack);
            Decks.Add(new List <int>());
        }
        Cards = new List <string>();
        string[] pics = Directory.GetFiles(folder, "card_*.jpg");
        foreach (string pic in pics)
        {
            Match match = Regex.Match(pic, "[0-9]+");
            int   index = int.Parse(match.Groups[0].Value.ToString());
            Cards.Add(pic);
            for (int i = 0; i < Stacks.Count; i++)
            {
                StackConfig stack = Stacks[i];
                if (index >= stack.min && index <= stack.max)
                {
                    Decks[i].Add(Cards.Count - 1);
                }
            }
        }
        Backsides = new List <Sprite>();
        for (int i = 0; i < Stacks.Count; i++)
        {
            Backsides.Add(i2s.LoadNewSprite(folder + "\\" + Stacks[i].backside));
        }
    }
        /// <summary>
        /// Get the output stack for a given output config, input and random instance.
        /// </summary>
        /// <param name="outputConfig">The output config</param>
        /// <param name="input">The input used</param>
        /// <param name="random">The random object that should be used if necessary</param>
        /// <returns>The stack</returns>
        public static int GetOutputStack(OutputConfig outputConfig, Object input, Random random)
        {
            double      chance = random.NextDouble();
            StackConfig stackConfig;

            if (input?.Quality == 4 && chance < outputConfig.IridiumQualityInput.Probability)
            {
                stackConfig = outputConfig.IridiumQualityInput;
            }
            else if (input?.Quality == 2 && chance < outputConfig.GoldQualityInput.Probability)
            {
                stackConfig = outputConfig.GoldQualityInput;
            }
            else if (input?.Quality == 1 && chance < outputConfig.SilverQualityInput.Probability)
            {
                stackConfig = outputConfig.SilverQualityInput;
            }
            else
            {
                stackConfig = new StackConfig(outputConfig.OutputStack, outputConfig.OutputMaxStack);
            }
            return(random.Next(stackConfig.OutputStack, Math.Max(stackConfig.OutputStack, stackConfig.OutputMaxStack + 1)));
        }