Example #1
0
        /// <summary> Класс представляет группу объектов (Фигуру) </summary>
        /// <param name="templateArg"> Шаблон группы объектов (фигуры) </param>
        /// <param name="positionArg"> Координата группы ( левый, нижний, ближний к нам край) </param>
        /// <remarks>
        /// Группа объектов хранит версию шаблона по которой была создана (может быть так, что группы объектов будут созданы по 1 шаблону, но разных версий)
        /// Несмотря на то, что можно сделать GroupFigures элементом другого GroupFigures, пока что это поддерживается лишь частично
        /// </remarks>
        public GroupFigures(TemplateGroupFigures templateArg, Vector3Int positionArg, IFactoryFigure factoryArg)
        {
            Vector3Int        positionResult = Vector3Int.zero;
            Vector3Int        positionGroup  = Converter.VectorMove(positionArg);
            List <Vector3Int> template;
            IFigure           figure;

            if (templateArg == null)
            {
                throw new TetrisException("Попытка создать фигуру без шаблона!");
            }

            _template        = templateArg;
            _templateVersion = _template.Version;
            _positionFact    = positionArg;

            _figures       = new List <IFigure>();
            _isObstruction = false;
            template       = _template.Template;
            foreach (var positionItem in template)
            {
                positionResult.x = positionGroup.x + positionItem.x;
                positionResult.y = positionGroup.y + positionItem.y;
                positionResult.z = positionGroup.z + positionItem.z;
                figure           = factoryArg.Create(positionResult);
                if (figure.Size.x > 1 || figure.Size.y > 1 || figure.Size.z > 1)
                {
                    throw new TetrisException("Возможность работать с группой объектов внутри другой группы объектов, реализована лишь частично!");
                }
                _figures.Add(figure);
            }
        }
        public override IFigureGenerator CreateGenerator()
        {
            TemplateFigureManager manager = new TemplateFigureManager();

            TemplateGroupFigures figure1 = new TemplateGroupFigures(1, new Vector3Int(2, 2, 1), 10);

            figure1.AddItem(new Vector3Int(0, 0, 0));
            figure1.AddItem(new Vector3Int(0, 1, 0));
            figure1.AddItem(new Vector3Int(1, 0, 0));
            figure1.AddItem(new Vector3Int(1, 1, 0));

            TemplateGroupFigures figure2 = new TemplateGroupFigures(2, new Vector3Int(3, 2, 1), 15);

            figure2.AddItem(new Vector3Int(1, 0, 0));
            figure2.AddItem(new Vector3Int(2, 0, 0));
            figure2.AddItem(new Vector3Int(0, 1, 0));
            figure2.AddItem(new Vector3Int(1, 1, 0));

            TemplateGroupFigures figure3 = new TemplateGroupFigures(3, new Vector3Int(3, 2, 1), 15);

            figure3.AddItem(new Vector3Int(0, 0, 0));
            figure3.AddItem(new Vector3Int(1, 0, 0));
            figure3.AddItem(new Vector3Int(1, 1, 0));
            figure3.AddItem(new Vector3Int(2, 1, 0));

            TemplateGroupFigures figure4 = new TemplateGroupFigures(4, new Vector3Int(3, 2, 1), 15);

            figure4.AddItem(new Vector3Int(0, 0, 0));
            figure4.AddItem(new Vector3Int(1, 0, 0));
            figure4.AddItem(new Vector3Int(2, 0, 0));
            figure4.AddItem(new Vector3Int(2, 1, 0));

            TemplateGroupFigures figure5 = new TemplateGroupFigures(5, new Vector3Int(3, 2, 1), 15);

            figure5.AddItem(new Vector3Int(0, 0, 0));
            figure5.AddItem(new Vector3Int(1, 0, 0));
            figure5.AddItem(new Vector3Int(2, 0, 0));
            figure5.AddItem(new Vector3Int(0, 1, 0));

            TemplateGroupFigures figure6 = new TemplateGroupFigures(6, new Vector3Int(4, 1, 1), 10);

            figure6.AddItem(new Vector3Int(0, 0, 0));
            figure6.AddItem(new Vector3Int(1, 0, 0));
            figure6.AddItem(new Vector3Int(2, 0, 0));
            figure6.AddItem(new Vector3Int(3, 0, 0));

            TemplateGroupFigures figure7 = new TemplateGroupFigures(7, new Vector3Int(3, 2, 1), 20);

            figure7.AddItem(new Vector3Int(0, 0, 0));
            figure7.AddItem(new Vector3Int(1, 0, 0));
            figure7.AddItem(new Vector3Int(2, 0, 0));
            figure7.AddItem(new Vector3Int(1, 1, 0));

            manager.AddTemplate(figure1).AddTemplate(figure2).AddTemplate(figure3).AddTemplate(figure4)
            .AddTemplate(figure5).AddTemplate(figure6).AddTemplate(figure7);

            return(new Tetris.Generator.Generator(_map.Size, manager));
        }