public override void ExitSinglemodel([NotNull] SinglemodelContext context)
        {
            var fullpath = path.GetPath();

            path.Pop();
            logger.Trace("Exit singlemodel {0}", fullpath);

            var obj = ObjProps.Get(context.obj());

            var model = new Models.SingleModel(context.ID().GetText(), obj);

            var orderby = ObjOrderByProps.Get(context.obj());

            model.Path = fullpath;
            model.OrderBy.AddRange(orderby);

            //model.Section = CurrentSection;
            if (context.inherits() != null)
            {
                model.Inherits     = true;
                model.InheritsFrom = context.inherits().ID().GetText();
            }
            string obs = "";

            logger.Trace("Single model = {0}{1}{2}",
                         model.Name,
                         context.inherits() != null ? " : " + model.InheritsFrom : "",
                         orderby.Any() ? " / " + orderby.Aggregate(obs, (f, run) => obs += run + ", ") : "");

            GraphElements.Add(model.Path, new GraphElement(model.Path, model));
            SingleModels.Put(context, model);
            base.ExitSinglemodel(context);
        }
Beispiel #2
0
    //подсветить бомбу...
    private void LightBomb(ObjProps obj)
    {
        GameObject light = obj.transform.GetChild(0).gameObject;

        light.SetActive(true);
        light.GetComponent <SpriteRenderer>().color = obj.GetComponent <SpriteRenderer>().color;
    }
Beispiel #3
0
    /// <summary>
    /// Корутина, которая делает задержку при появлении нового объекта
    /// </summary>
    /// <param name="obj"></param>
    /// <returns></returns>
    IEnumerator DestroyObj(ObjProps obj, GameObject _explosion)
    {
        InitObject(obj);
        yield return(new WaitForSeconds(0.5f));

        Destroy(_explosion);
        obj.gameObject.SetActive(true);
    }
Beispiel #4
0
    /// <summary>
    /// Инициализация объекта
    /// </summary>
    /// <param name="obj"></param>
    private void InitObject(ObjProps obj)
    {
        int indexOfComplexity = gameConroller.ReturnIndexOfComplexity();
        int rnd = Random.Range(0, color.Length - indexOfComplexity);

        obj.Id           = rnd;
        obj.sprite.color = color[rnd];
    }
Beispiel #5
0
 /// <summary>
 /// Метод, меняющий местами логическое расположение объектов в массиве
 /// </summary>
 /// <param name="x"></param>
 /// <param name="y"></param>
 private void SwippingInArray(int x, int y)
 {
     for (int i = y; i + 1 < height; i++)
     {
         ObjProps copyObj = allObj[x, i];
         allObj[x, i]     = allObj[x, i + 1];
         allObj[x, i + 1] = copyObj;
     }
 }
Beispiel #6
0
 /// <summary>
 /// Метод, меняющий фактическое местоположение объектов
 /// </summary>
 /// <param name="obj"></param>
 /// <param name="x"></param>
 /// <param name="y"></param>
 private void Move(ObjProps obj, int x, int y)
 {
     for (int i = y; i + 1 < height; i++)
     {
         allObj[x, i + 1].Y = i;
         allObj[x, i + 1].targetPosition = new Vector2(x, i);
         allObj[x, i + 1].isMoving       = true;
     }
     allObj[x, y].Y = height - 1;
     allObj[x, y].targetPosition       = new Vector2(x, height - 1);
     obj.gameObject.transform.position = new Vector3(x, height - 1);
     SwippingInArray(x, y);
 }
        public override void ExitValueObject([NotNull] ValueObjectContext context)
        {
            base.ExitValueObject(context);
            var newObj = new Models.ModelCompositeObject
            {
                Value = ObjProps.Get(context.obj())
            };
            var orderby = ObjOrderByProps.Get(context.obj());

            newObj.OrderBy.AddRange(orderby);

            ValueProps.Put(context, newObj);
        }
        public override void ExitObjEmpty([NotNull] ObjEmptyContext context)
        {
            var obj     = new List <Models.IModelObject>();
            var orderby = new List <string>();

            if (context.orderstatement() != null)
            {
                foreach (var item in context.orderstatement()._orderby)
                {
                    orderby.Add(item.Text);
                }
            }
            ObjOrderByProps.Put(context, orderby);
            ObjProps.Put(context, obj);
            base.ExitObjEmpty(context);
        }
        public override void ExitObjFull([NotNull] ObjFullContext context)
        {
            var obj     = new List <Models.IModelObject>();
            var orderby = new List <string>();

            if (context.orderstatement() != null)
            {
                foreach (var item in context.orderstatement()._orderby)
                {
                    orderby.Add(item.Text);
                }
            }
            foreach (var item in context._pairs)
            {
                var p = PairProps.Get(item);
                obj.Add(p);
            }
            ObjProps.Put(context, obj);
            ObjOrderByProps.Put(context, orderby);
            base.ExitObjFull(context);
        }
Beispiel #10
0
    public void CheckFirstTurn()
    {
        int j = -1;

        // проверка на наличие линий по горизонтали
        for (int y = 0; y < height; y++)
        {
            for (int x = 0; x < width; x++)
            {
                if (x + 2 < width && j < 0 && allObj[x + 1, y].Id == allObj[x, y].Id && allObj[x + 2, y].Id == allObj[x, y].Id)
                {
                    j = allObj[x, y].Id;
                }

                if (j == allObj[x, y].Id)
                {
                    destroyObj.Add(allObj[x, y]);
                }
                else
                {
                    j = -1;
                }
            }
            j = -1;
        }

        j = -1;

        // проверка на наличие линий по вертикали
        for (int y = 0; y < width; y++)
        {
            for (int x = 0; x < height; x++)
            {
                if (x + 2 < height && j < 0 && allObj[y, x + 1].Id == allObj[y, x].Id && allObj[y, x + 2].Id == allObj[y, x].Id)
                {
                    j = allObj[y, x].Id;
                }

                if (j == allObj[y, x].Id)
                {
                    destroyObj.Add(allObj[y, x]);
                }
                else
                {
                    j = -1;
                }
            }
            j = -1;
        }

        if (destroyObj.Count > 0)
        {
            targetForHand = destroyObj[0].transform.position;
            foreach (ObjProps obj in destroyObj)
            {
                LightBomb(obj);
            }
        }
        else
        {
            int      _x   = Random.Range(0, width);
            int      _y   = Random.Range(0, height);
            ObjProps _obj = allObj[_x, _y];
            destroyObj.Add(_obj);
            LightBomb(_obj);
            targetForHand = _obj.transform.position;
        }
    }
Beispiel #11
0
    /// <summary>
    /// Метод проверки на линии
    /// </summary>
    /// <param name="obj"></param>
    public void CheckLines(ObjProps obj)
    {
        if (!isLose && !isPaused && !isChecking)
        {
            isChecking = true;

            if (isFirstTurn)
            {
                foreach (ObjProps _obj in destroyObj)
                {
                    GameObject light = _obj.transform.GetChild(0).gameObject;
                    light.SetActive(false);
                }
                destroyObj.Clear();
                isFirstTurn = false;
                Destroy(handPrefab);
            }

            List <ObjProps> verticalLines   = new List <ObjProps>();
            List <ObjProps> horizontalLines = new List <ObjProps>();

            int _x = obj.X;
            int _y = obj.Y;

            // Проверка совпадений по вертикали, ниже выбранного объекта
            if (_y - 1 >= 0)
            {
                for (int i = _y - 1; i >= 0; i--)
                {
                    if (allObj[_x, i].Id == allObj[_x, _y].Id)
                    {
                        verticalLines.Add(allObj[_x, i]);
                    }
                    else
                    {
                        break;
                    }
                }
                verticalLines.Reverse();
            }

            destroyObj.Add(obj); // Добавление самого объекта в список для уничтожения

            // Проверка совпадений по вертикали, выше выбранного объекта
            if (_y + 1 < height)
            {
                for (int i = _y + 1; i < height; i++)
                {
                    if (allObj[_x, i].Id == allObj[_x, _y].Id)
                    {
                        verticalLines.Add(allObj[_x, i]);
                    }
                    else
                    {
                        break;
                    }
                }
            }

            // Проверка совпадений по горизонтали, левее выбранного объекта
            if (_x - 1 >= 0)
            {
                for (int i = _x - 1; i >= 0; i--)
                {
                    if (allObj[i, _y].Id == allObj[_x, _y].Id)
                    {
                        horizontalLines.Add(allObj[i, _y]);
                    }
                    else
                    {
                        break;
                    }
                }
            }

            // Проверка совпадений по горизонтали, правее выбранного объекта
            if (_x + 1 < width)
            {
                for (int i = _x + 1; i < width; i++)
                {
                    if (allObj[i, _y].Id == allObj[_x, _y].Id)
                    {
                        horizontalLines.Add(allObj[i, _y]);
                    }
                    else
                    {
                        break;
                    }
                }
            }


            // Добавление объектов в основной список для уничтожения (Разделил на 2 списка, т.к. дальше потребуется считать очки)
            if (verticalLines.Count > 1)
            {
                // TODO: Добавить подсчет очков
                foreach (ObjProps item in verticalLines)
                {
                    destroyObj.Add(item);
                }
            }

            if (horizontalLines.Count > 1)
            {
                // TODO: добавить подсчет очков
                foreach (ObjProps item in horizontalLines)
                {
                    destroyObj.Add(item);
                }
            }

            gameConroller.ScoreCount(destroyObj.Count);
            CountTurns(horizontalLines);
            CountTurns(verticalLines);

            verticalLines.Clear();
            horizontalLines.Clear();

            if (destroyObj.Count == 1)
            {
                gameConroller.MinusTurns();
            }

            DeleteObject(destroyObj);
        }
    }