private static void CreatePuzzleRotorCombo(GameEntity puzzleCombo, Color puzzleColor, Vector2Int pos)
 {
     puzzleCombo.AddPuzzleCombo(PuzzleComboType.PuzzleRotor);
     puzzleCombo.AddGridPosition(pos);
     puzzleCombo.AddColor(puzzleColor);
     puzzleCombo.isActivated = true;
     puzzleCombo.AddComboType(ComboType.PuzzleCombo);
 }
    public static int CreatePositiveItem(PositiveItem itemType, Vector2Int pos, Color color = Color.Blue)
    {
        var contexts        = Contexts.sharedInstance;
        var posItem         = contexts.game.CreateEntity();
        var itemTypeInBoard = ItemTypeInBoard.Tnt;

        if (itemType == PositiveItem.Rotor)
        {
            var axis = Random.Range(0, 2);
            itemTypeInBoard = axis == 0 ? ItemTypeInBoard.RotorHorizontal : ItemTypeInBoard.RotorVertical;
        }

        else if (itemType == PositiveItem.Tnt)
        {
            itemTypeInBoard = ItemTypeInBoard.Tnt;
        }

        else if (itemType == PositiveItem.Puzzle)
        {
            switch (color)
            {
            case Color.Blue:
                itemTypeInBoard = ItemTypeInBoard.BluePuzzle;
                break;

            case Color.Green:
                itemTypeInBoard = ItemTypeInBoard.GreenPuzzle;
                break;

            case Color.Orange:
                itemTypeInBoard = ItemTypeInBoard.OrangePuzzle;
                break;

            case Color.Purple:
                itemTypeInBoard = ItemTypeInBoard.PurplePuzzle;
                break;

            case Color.Red:
                itemTypeInBoard = ItemTypeInBoard.RedPuzzle;
                break;

            case Color.Yellow:
                itemTypeInBoard = ItemTypeInBoard.YellowPuzzle;
                break;

            default:
                itemTypeInBoard = ItemTypeInBoard.BluePuzzle;
                break;
            }
        }

        posItem.AddWillSpawnItem(itemTypeInBoard, pos, pos.y);
        posItem.AddId(IdHelper.GetNewId());
        return(posItem.id.Value);
    }
 private void CreateColorCube(GameEntity entity, MatchType matchType, Color color)
 {
     entity.AddColor(color);
     entity.AddHint(HintType.None);
     entity.AddMatchType(matchType);
     entity.AddMatchGroup(-1, 0);
     entity.isCanBeActivatedByTouch = true;
     entity.isCanFall                  = true;
     entity.isRemoverSensitive         = true;
     entity.isInnerMatchItem           = true;
     entity.isCanBeTargetedByGenerator = true;
     entity.isCollectedAtEnd           = true;
 }
예제 #4
0
    private bool ShouldChangeColor(Dictionary <Color, int> colors, out Color color)
    {
        foreach (var entry in colors)
        {
            if (entry.Value < 2)
            {
                continue;
            }

            color = entry.Key;
            return(false);
        }

        color = Color.Blue;
        return(true);
    }
예제 #5
0
    private static bool ReduceColorSensitivityWithNearMatch(GameEntity item, Color color)
    {
        var  colors  = item.colorSensitive.colors;
        bool reduced = false;

        if (colors.ContainsKey(color) && colors[color] > 0)
        {
            colors[color]--;
            reduced = true;
        }

        if (reduced)
        {
            item.ReplaceColorSensitive(colors);
        }

        return(reduced);
    }
예제 #6
0
    private GoalType GetGoalType(Color color)
    {
        switch (color)
        {
        case Color.Blue:
            return(GoalType.BlueCube);

        case Color.Green:
            return(GoalType.GreenCube);

        case Color.Red:
            return(GoalType.RedCube);

        case Color.Yellow:
            return(GoalType.YellowCube);
        }

        return(GoalType.BlueCube);
    }
예제 #7
0
    private MatchType GetMatchType(Color color)
    {
        switch (color)
        {
        case Color.Blue:
            return(MatchType.BlueCube);

        case Color.Green:
            return(MatchType.GreenCube);

        case Color.Red:
            return(MatchType.RedCube);

        case Color.Yellow:
            return(MatchType.YellowCube);
        }

        return(MatchType.Invalid);
    }
    private List <int> GetColorCubes(Color color)
    {
        var cubes = new List <int>();

        foreach (var item in _itemGroup.GetEntities())
        {
            var        entitySet = _contexts.game.GetEntitiesWithGridPosition(item.gridPosition.value);
            GameEntity cellItem  = null;
            foreach (var entity in entitySet)
            {
                if (entity.isCellItem)
                {
                    cellItem = entity;
                }
            }

            if (!Equals(item.itemType.Value, ItemType.ColorCube))
            {
                continue;
            }

            if (cellItem != null && cellItem.isCanStopItemActivation)
            {
                continue;
            }

            Color itemColor = item.color.Value;

            if (color != itemColor)
            {
                continue;
            }

            cubes.Add(item.id.Value);
        }

        return(cubes);
    }
예제 #9
0
    public static void TryActivateItemWithNear(Contexts contexts, Vector2Int pos, int removerId, Color color)
    {
        if (!InBounds(contexts, pos))
        {
            return;
        }

        var        entitySet = contexts.game.GetEntitiesWithGridPosition(pos);
        GameEntity cellItem  = null;
        GameEntity item      = null;

        foreach (var entity in entitySet)
        {
            if (entity.isEnabled && entity.isCellItem)
            {
                cellItem = entity;
            }

            if (entity.isEnabled && entity.isItem)
            {
                item = entity;
            }

            if (entity.isEnabled && entity.hasFakeItem)
            {
                item = contexts.game.GetEntityWithId(entity.fakeItem.RealItemId);
            }
        }

        var hasCellItem = cellItem != null;
        var hasItem     = item != null;

        if (hasCellItem && cellItem.isCanBeActivatedByNearMatch)
        {
            cellItem.isWillBeDestroyed = true;
            return;
        }

        if (hasCellItem && cellItem.isCanStopItemActivation)
        {
            return;
        }

        if (item == null || !item.isEnabled)
        {
            return;
        }

        if (item.isCantBeActivated)
        {
            return;
        }

        if (!item.isCanBeActivatedByNearMatch)
        {
            return;
        }

        var removerSet = item.removers.Set;

        if (removerSet.Contains(removerId))
        {
            return;
        }

        if (item.isRemoverSensitive)
        {
            removerSet.Add(removerId);
            item.ReplaceRemovers(removerSet);
        }

        if (item.hasColorSensitive)
        {
            var reduced = ReduceColorSensitivityWithNearMatch(item, color);
            if (!reduced)
            {
                return;
            }
        }

        if (item.isColorCopying && !item.hasColorSensitive)
        {
            var colors = new Dictionary <Color, int>
            {
                [color] = 1
            };
            item.AddColorSensitive(colors);
            item.AddColor(color);
        }

        ActivateItem(item, ActivationReason.NearMatch);
    }
    private void CreateCombo(Vector2Int pos, int rotorCount, int tntCount, int puzzleCount, Color puzzleColor)
    {
        var comboEntity = _contexts.game.CreateEntity();

        comboEntity.isCreatedFromMatch = true;

        if (puzzleCount > 0)
        {
            if (puzzleCount > 1)
            {
                CreatePuzzlePuzzleCombo(comboEntity, pos);
            }
            else if (tntCount > 0)
            {
                CreatePuzzleTntCombo(comboEntity, puzzleColor, pos);
            }
            else if (rotorCount > 0)
            {
                CreatePuzzleRotorCombo(comboEntity, puzzleColor, pos);
            }
        }
        else if (tntCount > 0)
        {
            if (tntCount > 1)
            {
                CreateTntTntCombo(comboEntity, pos);
            }
            else if (rotorCount > 0)
            {
                CreateTntRotorCombo(comboEntity, pos);
            }
        }
        else if (rotorCount > 1)
        {
            CreateRotorRotorCombo(comboEntity, pos);
        }
    }