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