public override bool Use(Cell selected, GameManager gameManager) { Cell cell = selected; Figurine oldFigurine = cell.Selected; IReadOnlyList <Cell> cells = SearchFigurines(selected, gameManager.Cells); if (cells.Count > 0) { cells = cells.Where(x => (x.Selected.Data != selected.Selected)).ToList(); if (cells.Count > 0) { FigurineData[] datas = cells.OrderBy(x => - x.Selected.Data.Significance).Select(x => x.Selected.Data).ToArray(); for (int indexData = 0; indexData < datas.Length; indexData++) { FigurineData data = datas[indexData]; for (int indexInteraction = 0; indexInteraction < conditionForExecutions.Length; indexInteraction++) { FigurineInteractions conditionForExecution = conditionForExecutions[indexInteraction]; if (data.Interactions.Contains(conditionForExecution) == true) { Figurine figurine = Figurine.Create(prefab, cell.GetComponent <RectTransform>(), data) as Figurine; cell.Selected = figurine; if (conditionForExecution.CheckingUse(selected, gameManager) == true) { figurine.GetComponent <ControlDrag>().Interaction = false; for (int index = 0; index < data.Interactions.Length; index++) { FigurineInteractions interaction = data.Interactions[index]; if (interaction.ActivateOnDrop == true) { interaction.Use(selected, gameManager); } } oldFigurine.Destroy(); return(true); } else { Destroy(figurine.gameObject); cell.Selected = oldFigurine; } } } } } } notCompleted.Use(selected, gameManager); return(true); }
/// <summary> /// Обновить ячейку (Обновляеться на дочерний объект child) /// </summary> /// <param name="selected">Ячейка где находиться фигурка</param> /// <param name="gameManager"></param> /// <param name="prefab"></param> protected void UpgradeFigurine(Cell selected, GameManager gameManager, Figurine prefab) { if (selected.Selected.Data.Child != null) { Cell cell = selected; Figurine figurine = Figurine.Create(prefab, cell.GetComponent <RectTransform>(), selected.Selected.Data.Child) as Figurine; cell.Selected = figurine; figurine.GetComponent <ControlDrag>().Interaction = false; for (int index = 0; index < figurine.Data.Interactions.Length; index++) { FigurineInteractions interaction = figurine.Data.Interactions[index]; if (interaction.ActivateOnDrop == true) { interaction.Use(selected, gameManager); } } } }
private void InteractionsFigure(Cell selected) { Dictionary <Figurine, Cell> figurineAndLocation = new Dictionary <Figurine, Cell>(); foreach (KeyValuePair <Vector2, Cell> location in this.cells) { if (location.Value.Selected != null) { figurineAndLocation.Add(location.Value.Selected, location.Value); } } if (figurineAndLocation.Count > 0) { List <Figurine> figurines = figurineAndLocation.Keys.ToList(); for (int index = 0; index < figurines.Count; index++) { int numberRandom = Random.Range(0, figurines.Count); Figurine temp = figurines[numberRandom]; figurines[numberRandom] = figurines[index]; figurines[index] = temp; } if (selected.Selected != null) { int indexSelected = figurines.IndexOf(selected.Selected); Figurine temp = figurines[0]; figurines[0] = selected.Selected; figurines[indexSelected] = temp; } List <Figurine> blackList = new List <Figurine>(); Dictionary <FigurineInteractions, List <Figurine> > repeatedly = new Dictionary <FigurineInteractions, List <Figurine> >(); for (int index = 0; index < figurines.Count; index++) { Figurine figurine = figurines[index]; if (figurine != null && blackList.Contains(figurine) == false && figurine.Interaction == true) { blackList.Add(figurine); FigurineData data = figurine.Data; for (int indexInteraction = 0; indexInteraction < data.Interactions.Length; indexInteraction++) { FigurineInteractions figurineInteraction = data.Interactions[indexInteraction]; if (figurine == selected.Selected && figurineInteraction.ActivateOnDrop != true) { figurine.InteractionsColmlited.Add(figurineInteraction); continue; } if (figurineInteraction.Use(figurineAndLocation[figurine], this) == false) { if (repeatedly.ContainsKey(figurineInteraction) == false) { repeatedly.Add(figurineInteraction, new List <Figurine>()); } repeatedly[figurineInteraction].Add(figurine); } else { figurine.InteractionsColmlited.Add(figurineInteraction); } } } } //foreach (KeyValuePair<Vector2, Cell> location in this.cells) //{ // Figurine figurine = location.Value.Selected; // if (figurine != null && blackList.Contains(figurine) == false) // { // blackList.Add(figurine); // FigurineData data = figurine.Data; // for (int index = 0; index < data.Interactions.Length; index++) // { // FigurineInteractions figurineInteraction = data.Interactions[index]; // if (figurineInteraction.Use(location.Value, this.cells) == false) // { // if (repeatedly.ContainsKey(figurineInteraction) == false) // { // repeatedly.Add(figurineInteraction, new List<Cell>()); // } // repeatedly[figurineInteraction].Add(location.Value); // } // else // { // figurine.Interaction = false; // } // } // } //} int checkIndex = 0; List <FigurineInteractions> figurineInteractions = repeatedly.Keys.ToList(); while (repeatedly.Count > 0) { FigurineInteractions figurineInteraction = figurineInteractions[checkIndex]; List <Figurine> figurinesRepeatedly = repeatedly[figurineInteraction]; figurineAndLocation.Clear(); foreach (KeyValuePair <Vector2, Cell> location in this.cells) { if (location.Value.Selected != null) { figurineAndLocation.Add(location.Value.Selected, location.Value); } } for (int index = 0; index < figurinesRepeatedly.Count; index++) { Figurine figurine = figurinesRepeatedly[index]; if (figurine != null) { if (figurineAndLocation.ContainsKey(figurine) == true && figurineInteraction.Use(figurineAndLocation[figurine], this) == true) { repeatedly[figurineInteraction].Remove(figurine); figurine.InteractionsColmlited.Add(figurineInteraction); if (repeatedly[figurineInteraction].Count == 0) { repeatedly.Remove(figurineInteraction); } } else { repeatedly[figurineInteraction].Remove(figurine); if (repeatedly[figurineInteraction].Count == 0) { repeatedly.Remove(figurineInteraction); } } } } checkIndex++; if (checkIndex >= repeatedly.Count) { checkIndex = 0; } } figurines.ForEach(x => { if (x != null) { x.InteractionsColmlited.Clear(); } }); } }
public void InteractionsFigure(Cell selected) { Dictionary <Figurine, Cell> figurineAndLocation = GetFigurines(); if (figurineAndLocation.Count > 0) { List <Figurine> figurines = figurineAndLocation.Keys.ToList(); for (int index = 0; index < figurines.Count; index++) { int numberRandom = Random.Range(0, figurines.Count); Swap(index, numberRandom, ref figurines); } if (selected.Selected != null) { int indexSelected = figurines.IndexOf(selected.Selected); Swap(0, indexSelected, ref figurines); } List <Figurine> blackList = new List <Figurine>(); Dictionary <FigurineInteractions, List <Figurine> > repeatedly = new Dictionary <FigurineInteractions, List <Figurine> >(); for (int index = 0; index < figurines.Count; index++) { Figurine figurine = figurines[index]; if (figurine != null && blackList.Contains(figurine) == false && figurine.Interaction == true) { blackList.Add(figurine); FigurineData data = figurine.Data; for (int indexInteraction = 0; indexInteraction < data.Interactions.Length; indexInteraction++) { FigurineInteractions figurineInteraction = data.Interactions[indexInteraction]; if (figurine == selected.Selected && figurineInteraction.ActivateOnDrop != true) { figurine.InteractionsColmlited.Add(figurineInteraction); continue; } if (figurineInteraction.Use(figurineAndLocation[figurine], this) == false) { if (repeatedly.ContainsKey(figurineInteraction) == false) { repeatedly.Add(figurineInteraction, new List <Figurine>()); } repeatedly[figurineInteraction].Add(figurine); } else { figurine.InteractionsColmlited.Add(figurineInteraction); } } } } int checkIndex = 0; List <FigurineInteractions> figurineInteractions = repeatedly.Keys.ToList(); while (repeatedly.Count > 0) { FigurineInteractions figurineInteraction = figurineInteractions[checkIndex]; List <Figurine> figurinesRepeatedly = repeatedly[figurineInteraction]; figurineAndLocation = GetFigurines(); for (int index = 0; index < figurinesRepeatedly.Count; index++) { Figurine figurine = figurinesRepeatedly[index]; if (figurine != null) { if (figurineAndLocation.ContainsKey(figurine) == true && figurineInteraction.Use(figurineAndLocation[figurine], this) == true) { repeatedly[figurineInteraction].Remove(figurine); figurine.InteractionsColmlited.Add(figurineInteraction); if (repeatedly[figurineInteraction].Count == 0) { repeatedly.Remove(figurineInteraction); } } else { repeatedly[figurineInteraction].Remove(figurine); if (repeatedly[figurineInteraction].Count == 0) { repeatedly.Remove(figurineInteraction); } } } } checkIndex++; if (checkIndex >= repeatedly.Count) { checkIndex = 0; } } figurines.ForEach(x => { if (x != null) { x.InteractionsColmlited.Clear(); } }); } }