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)); }