/// <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)); }