Example #1
0
    public static GameStacksMeta Generate(PrefabsManager manager, Difficulty difficulty)
    {
        Debug.Log(string.Format("<color=green>{0}</color>", difficulty));
        StackDifficulty   stackDifficulty = StackDifficulty.Get(difficulty);
        int               size            = Random.Range(stackDifficulty.MinCips, stackDifficulty.MaxChips + 1);
        int               flips           = Random.Range((int)(size / 2), (int)(size * 1.5f));
        GameGeneratorMeta meta            = GenerateGameGeneratorMeta(size, flips, stackDifficulty.AllowCrushable, manager);
        GameStacksMeta    pair            = CreateFromGameGeneratorMeta(meta, manager);

        while (pair.start.Matches(pair.target))
        {
            Debug.Log("<color=red>Need to generate another stack since the target matches the start.</color>");
            meta = GenerateGameGeneratorMeta(size, flips, stackDifficulty.AllowCrushable, manager);
            pair = CreateFromGameGeneratorMeta(meta, manager);
        }

        int nFlipsAlternative = FlipsCalulator.CalculateMinFlips(pair.start, pair.target, 100, pair.nFlips);

        Debug.Log(string.Format("Calculated flips ({0}). Generator flips ({1})", nFlipsAlternative, pair.nFlips));
        if (nFlipsAlternative < pair.nFlips)
        {
            pair.nFlips = nFlipsAlternative;
        }

        return(pair);
    }
    public GameStacks BuildGameStacks(GameStacksMeta metaPair, PrefabsManager prefabsManager)
    {
        Stack startStack = BuildStackFromStackMeta(metaPair.start, prefabsManager);

        startStack.gameObject.tag     = Tags.STACK;
        startStack.transform.position = Vector3.right * 2f;

        Stack targetStack = BuildStackFromStackMeta(metaPair.target, prefabsManager);

        targetStack.gameObject.tag     = Tags.STACK_TARGET;
        targetStack.IsTargetStack      = true;
        targetStack.Meta.isTargetStack = true;
        targetStack.transform.position = Vector3.zero;

        GameObject targetIndicator = prefabsManager.CreateTargetIndicator();

        targetIndicator.transform.SetParent(targetStack.transform);
        targetIndicator.transform.localRotation = Quaternion.Euler(new Vector3(-134.1f, -90f, 90f));
        targetIndicator.transform.localPosition = new Vector3(0, 0, 0);

        return(new GameStacks(targetStack, startStack, metaPair.nFlips));
    }