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 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(); }
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()); } }
private void CreateBubblesInShooter() { BubbleCreatorService.CreateShooterBubble(); BubbleCreatorService.CreateSpareBubble(); }