private void CreateBubblesInGrid()
        {
            var       boardSize        = _contexts.game.boardSize.Value;
            const int firstRowsCount   = 6;
            const int ceilingRowsCount = 4;
            var       ceilingCoords    = new HashSet <AxialCoord>();

            for (var r = 0; r < boardSize.y; r++)
            {
                var rOffset = r >> 1;
                for (var q = -rOffset; q < boardSize.x - rOffset; q++)
                {
                    if (boardSize.y - r <= firstRowsCount)
                    {
                        var axialCoord = new AxialCoord {
                            Q = q, R = r
                        };
                        BubbleCreatorService.CreateBoardBubble(axialCoord,
                                                               BubbleCreatorService.GenerateRandomBubbleNumber());
                    }

                    if (boardSize.y - r <= ceilingRowsCount)
                    {
                        ceilingCoords.Add(new AxialCoord {
                            Q = q, R = r
                        });
                    }
                }
            }

            _contexts.game.SetCeilingCoords(ceilingCoords);
        }
Пример #2
0
        private void UpdateGhostBubble(bool valid, Vector3 endPoint)
        {
            var ghostBubble = _contexts.game.GetGroup(GameMatcher.Ghost).GetSingleEntity();

            if (ghostBubble == null)
            {
                ghostBubble = BubbleCreatorService.CreateGhostBubble(new AxialCoord {
                    Q = 0, R = 0
                });
            }

            if (!valid)
            {
                ghostBubble.isDestroyed = true;
                return;
            }

            var hex = HexHelperService.PointToHex(endPoint);
            var neighbourAxialCoord = HexHelperService.FindNearestNeighbour(hex, endPoint);

            if (ghostBubble.axialCoord.Value.Q != hex.Q || ghostBubble.axialCoord.Value.R != hex.R)
            {
                ghostBubble.ReplaceAxialCoord(neighbourAxialCoord);
            }
        }
        protected override void Execute(List <GameEntity> entities)
        {
            var spareBubble = _contexts.game.GetGroup(GameMatcher.SpareBubble).GetSingleEntity();

            spareBubble.isSpareBubble    = false;
            spareBubble.isWillBeShotNext = true;
            spareBubble.isMoveToShooter  = true;
            BubbleCreatorService.CreateSpareBubble();
        }
Пример #4
0
        private void StartMerge(AxialCoord mergeSpot, List <AxialCoord> rest)
        {
            foreach (var axialCoord in rest)
            {
                var indices  = HexHelperService.GetArrayIndices(axialCoord);
                var bubble   = _hexMap[indices.x, indices.y];
                var bubbleId = bubble.id.Value;

                bubble.AddMergeTo(mergeSpot,
                                  () =>
                {
                    var b = _contexts.game.GetEntityWithId(bubbleId);
                    if (b == null)
                    {
                        return;
                    }
                    b.isDestroyed = true;
                });
            }

            var masterIndices = HexHelperService.GetArrayIndices(mergeSpot);
            var master        = _hexMap[masterIndices.x, masterIndices.y];
            var masterId      = master.id.Value;

            master.AddMergeTo(mergeSpot,
                              () =>
            {
                var b = _contexts.game.GetEntityWithId(masterId);
                if (b == null)
                {
                    return;
                }
                b.isDestroyed = true;

                var bubbleNumber = b.bubbleNumber.Value;
                var exponent     = (int)Math.Log(bubbleNumber, 2);
                bubbleNumber     = (int)Mathf.Pow(2, exponent + rest.Count);
                bubbleNumber     = Mathf.Min(2048, bubbleNumber);

                var nb          = BubbleCreatorService.CreateBoardBubble(mergeSpot, bubbleNumber);
                nb.isMergeDirty = true;
            });
        }
Пример #5
0
        private void FillRow(int r, int width, GameEntity[,] hexMap)
        {
            var rOffset = r / 2;

            for (var q = -rOffset; q < width - rOffset; q++)
            {
                var axialCoord = new AxialCoord {
                    Q = q, R = r
                };

                var indices = HexHelperService.GetArrayIndices(axialCoord);

                if (hexMap[indices.x, indices.y] != null)
                {
                    continue;
                }

                BubbleCreatorService.CreateBoardBubble(axialCoord,
                                                       BubbleCreatorService.GenerateRandomBubbleNumber());
            }
        }
 private void CreateBubblesInShooter()
 {
     BubbleCreatorService.CreateShooterBubble();
     BubbleCreatorService.CreateSpareBubble();
 }