示例#1
0
    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);
    }
示例#2
0
 /// <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);
             }
         }
     }
 }
示例#3
0
    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();
                }
            });
        }
    }
示例#4
0
    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();
                }
            });
        }
    }