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