private void Start() { Button newButton; _configMenu = new ConfigurationMenu("МЕНЮ", _prefabCamera, _prefabCube); _configs.Add(new ConfigurationMode1("ПЕРВЫЙ РЕЖИМ", _prefabCamera, _prefabCube)); _configs.Add(new ConfigurationMode2("ВТОРОЙ РЕЖИМ", _prefabCamera, _prefabCube)); _map = _configMenu.CreateMap(); _generator = _configMenu.CreateGenerator(); _factory = _configMenu.CreateFactoryFigure(); _mover = _configMenu.CreateMover(); _vectorDrop = _configMenu.CreateVectorDrop(); _delayDrop = _configMenu.DelayFrameDrop(); _map.SetCamera(_prefabCamera); foreach (var config in _configs) { newButton = Instantiate(_prefabButton, this.transform).GetComponent <Button>(); newButton.GetComponentInChildren <Text>().text = config.Name; newButton.onClick.AddListener(delegate { NewGame(config); }); _buttons.Add(newButton); } newButton = Instantiate(_prefabButton, this.transform).GetComponent <Button>(); newButton.GetComponentInChildren <Text>().text = "ВЫХОД"; newButton.onClick.AddListener(ExitGame); _buttons.Add(newButton); }
/// <summary> Генерация новой фигуры </summary> /// <returns> Возвращает новую фигуру</returns> public IFigure NewFigure(IFactoryFigure factoryArg) { byte randomTemplate = (byte)Random.Range(1, 101); TemplateGroupFigures template = _managerTemplates.GetTemplateByRandom(randomTemplate); Vector3Int sizeTemplate = template.Size; int posX = Random.Range(0, _sizeMap.x - sizeTemplate.x); int posY = _sizeMap.y - sizeTemplate.y; int posZ = Random.Range(0, _sizeMap.z - sizeTemplate.z); IFigure figure = new GroupFigures(template, new Vector3Int(posX, posY, posZ), factoryArg); if (sizeTemplate.x >= _sizeMap.x || sizeTemplate.y >= _sizeMap.y || sizeTemplate.z > _sizeMap.z) { throw new TetrisException("Попытка сгенерировать фигуру, которая больше игрового поля (карты)!"); } return(figure); }
/// <summary> Класс описывает логику игры на SceneGame (Компонент Model). </summary> /// <see> Для получения информации по сущностям перейдите в Scripts/Global/GameConfigurators/AbstractConfigurator.cs </see> public TetrisGame() { AbstractConfigurator configurator = DataConfigs.LoadConfigurator(); if (configurator == null) { throw new TetrisException("Не выбран режим игры!"); } _map = configurator.CreateMap(); _generator = configurator.CreateGenerator(); _factory = configurator.CreateFactoryFigure(); _mover = configurator.CreateMover(); _rotator = configurator.CreateRotator(); _vectorDrop = configurator.CreateVectorDropInt(); _delayDrop = configurator.DelayFrameDrop(); _obstructions = configurator.CreateObstructions(); _stackFigures = configurator.CreateStackFigures(); _figure = _generator.NewFigure(_factory); }
/// <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); } }