private ChainBlock GetNewChainBlock(BlockDataDTO data, bool isInitial)
        {
            var block = Instantiate(_config.ChainBlockPrefab, _config.ChainBlockPrefab.transform.position, Quaternion.identity);

            block.Direction = data.Direction;
            block.IsInitial = isInitial;
            block.SetConnectorsState(data.ConnectorsState);
            block.BlocksPanel    = _panel;
            block.FieldManager   = _field;
            block.OnStateChange += OnFieldStateChanged;

            return(block);
        }
        private void LoadCurrentLevel(LevelData data)
        {
            if (_isCreatorMode)
            {
                _levelSaver.SetActive(true);
                var blockData = new BlockDataDTO
                {
                    Direction       = DirectionType.Horizontal,
                    Position        = new Vector2Int(0, 0),
                    ConnectorsState = new Vector2Int(0, 0)
                };

                for (var i = 0; i < 8; ++i)
                {
                    var block = GetNewChainBlock(blockData, false);
                    _panel.AddBlock(block);
                }

                blockData = new BlockDataDTO
                {
                    Direction       = DirectionType.Vertical,
                    Position        = new Vector2Int(0, 0),
                    ConnectorsState = new Vector2Int(0, 0)
                };

                for (var i = 0; i < 8; ++i)
                {
                    var block = GetNewChainBlock(blockData, false);
                    _panel.AddBlock(block);
                }

                return;
            }

            foreach (var blockData in data.InitialBlocks)
            {
                var block = GetNewChainBlock(blockData, true);
                _field.AddInitialBlock(block, blockData.Position);
            }

            foreach (var blockData in data.BlocksOnPanel)
            {
                var block = GetNewChainBlock(blockData, false);
                _panel.AddBlock(block);
            }

            _timer.StartTimer(data.TimeLimit);
        }
Beispiel #3
0
        public HNBlock(int blockIndex, BlockDataDTO bytes)
        {
            _bytes = bytes;

            PageMapOffset = BitConverter.ToUInt16(_bytes.Data, 0);
            PageMap       = new HNPAGEMAP(_bytes.Data, PageMapOffset);
            if (blockIndex == 0)
            {
                Header = new HNHDR(_bytes.Data);
            }
            else if (blockIndex % 128 == 8)
            {
                BitMapPageHeader = new HNBITMAPHDR(ref _bytes.Data);
            }
            else
            {
                PageHeader = new HNPAGEHDR(ref _bytes.Data);
            }
        }
Beispiel #4
0
        public HNBlock(int blockIndex, BlockDataDTO bytes)
        {
            this._bytes = bytes;

            this.PageMapOffset = BitConverter.ToUInt16(this._bytes.Data, 0);
            this.PageMap       = new HNPAGEMAP(this._bytes.Data, this.PageMapOffset);
            if (blockIndex == 0)
            {
                this.Header = new HNHDR(this._bytes.Data);
            }
            else if (blockIndex % 128 == 8)
            {
                this.BitMapPageHeader = new HNBITMAPHDR(ref this._bytes.Data);
            }
            else
            {
                this.PageHeader = new HNPAGEHDR(ref this._bytes.Data);
            }
        }
Beispiel #5
0
        private LevelData CreateLevelData()
        {
            Logger.Print("Creating Data...", "yellow");
            var data = new LevelData();

            data.WinDataHorizontal = new List <BlockDataDTO>();
            data.WinDataVertical   = new List <BlockDataDTO>();
            data.InitialBlocks     = new List <BlockDataDTO>();
            data.BlocksOnPanel     = new List <BlockDataDTO>();

            for (var i = 0; i < _horizontalGrid.Count; ++i)
            {
                for (var j = 0; j < _horizontalGrid[i].Count; ++j)
                {
                    if (_horizontalGrid[i][j].HasBlock)
                    {
                        var blockData = new BlockDataDTO();
                        var block     = _horizontalGrid[i][j].Block;
                        var point     = _horizontalGrid[i][j];
                        blockData.Direction       = DirectionType.Horizontal;
                        blockData.Position        = point.GridPosition;
                        blockData.ConnectorsState = new Vector2Int(block.FirstDirection, block.SecondDirection);
                        data.WinDataHorizontal.Add(blockData);

                        if (block.IsInitial)
                        {
                            data.InitialBlocks.Add(blockData);
                        }
                        else
                        {
                            data.BlocksOnPanel.Add(blockData);
                        }
                    }
                }
            }

            for (var i = 0; i < _verticalGrid.Count; ++i)
            {
                for (var j = 0; j < _verticalGrid[i].Count; ++j)
                {
                    if (_verticalGrid[i][j].HasBlock)
                    {
                        var blockData = new BlockDataDTO();
                        var block     = _verticalGrid[i][j].Block;
                        var point     = _verticalGrid[i][j];
                        blockData.Direction       = DirectionType.Vertical;
                        blockData.Position        = point.GridPosition;
                        blockData.ConnectorsState = new Vector2Int(block.FirstDirection, block.SecondDirection);
                        data.WinDataVertical.Add(blockData);

                        if (block.IsInitial)
                        {
                            data.InitialBlocks.Add(blockData);
                        }
                        else
                        {
                            data.BlocksOnPanel.Add(blockData);
                        }
                    }
                }
            }

            data.BlocksOnPanel = ShuffleList(data.BlocksOnPanel);

            return(data);
        }