public LiquidType GetUniqueRandomLiquid(List <LiquidType> used, LiquidAlcohol al) { int steps = 0; while (steps++ < 100) { int idx = UnityEngine.Random.Range(0, used.Count); LiquidType lt = used[idx]; if (GlassLiquid.LiquidTypeToLiquidAlcohol(lt) != al || lt == LiquidType.BeerHead || lt == LiquidType.Beer) { continue; } used.Remove(lt); return(lt); } return(LiquidType.None); }
public void SetUpControls() { int nbLiquids = (int)LiquidType.COUNT; List <SolidType> solids = new List <SolidType>(8); List <LiquidType> liquids = new List <LiquidType>(nbLiquids); for (int i = 0; i < nbLiquids; i++) { liquids.Add((LiquidType)i); } liquids.Remove(LiquidType.None); SetAlcholControl(0, LiquidType.None, SolidType.None); SetAlcholControl(1, LiquidType.None, SolidType.None); SetAlcholControl(2, LiquidType.None, SolidType.None); SetNotAlcholControl(0, LiquidType.None, SolidType.None); SetNotAlcholControl(1, LiquidType.None, SolidType.None); SetNotAlcholControl(2, LiquidType.None, SolidType.None); SetNotAlcholControl(3, LiquidType.None, SolidType.None); for (int measuresIi = 0; measuresIi < Cocktail.Measures.Count; measuresIi++) { CocktailMeasure measure = Cocktail.Measures[measuresIi]; SolidType solid = SolidType.None; // @TODO. Maybe part of measure? LiquidType liquid = LiquidType.None; liquid = measure.LiquidType; if (solid != SolidType.None) { solids.Add(solid); } if (liquid != LiquidType.None) { liquids.Remove(liquid); if (liquid == LiquidType.Beer) { continue; } LiquidAlcohol alcohol = GlassLiquid.LiquidTypeToLiquidAlcohol(liquid); if (alcohol == LiquidAlcohol.Yes) { if (RandomAddAlcholControl(liquid, solid) == false) { if (RandomAddNotAlcholControl(liquid, solid) == false) { Debug.LogError("Cannot fit in ingredients. Recipe too complicated"); } } } else { if (RandomAddNotAlcholControl(liquid, solid) == false) { if (RandomAddAlcholControl(liquid, solid) == false) { Debug.LogError("Cannot fit in ingredients. Recipe too complicated"); } } } } } // Actions for (int i = 0; i < 3; i++) { ControlMarker ctrl = GetAlcholControl(i); if (!(ctrl.Liquid == LiquidType.None && ctrl.Solid == SolidType.None)) { continue; } LiquidType lt = GetUniqueRandomLiquid(liquids, LiquidAlcohol.Yes); SetAlcholControl(i, lt, SolidType.None); } // DPad for (int i = 0; i < 4; i++) { ControlMarker ctrl = GetNotAlcholControl(i); if (!(ctrl.Liquid == LiquidType.None && ctrl.Solid == SolidType.None)) { continue; } LiquidType lt = GetUniqueRandomLiquid(liquids, LiquidAlcohol.No); SetNotAlcholControl(i, lt, SolidType.None); } }