コード例 #1
0
    private void addSkills11()
    {
        Func <Enemy> getEnemy = () => {
            foreach (Enemy e in GameController.Instance.getCurrEnemies())
            {
                if (e.getEnemyID() != getEnemyID())
                {
                    return(e);
                }
            }
            return(null);
        };

        skillList.Add(EnemyHPBuff.Create(() => GameController.Instance.isTurnMod(2), EnemyBuffs.DMG_ABSORB, getEnemy, 1, skillTrans));

        EnemyBoardSkill  oneEmptyPerDigit = null;
        Func <Orb, bool> randDigits       = (Orb o) => {
            System.Random rand = new System.Random(getRandomSeedByTurn(oneEmptyPerDigit));
            for (int i = 0; i < 10; i++)
            {
                List <Orb> currDigit = new List <Orb>();
                for (int j = 0; j < Board.COLUMNS; j++)
                {
                    for (int k = 0; k < Board.ROWS; k++)
                    {
                        Orb z = Board.Instance.getOrb(j, k);
                        if (z.getOrbValue() == (ORB_VALUE)i)
                        {
                            currDigit.Add(z);
                        }
                    }
                }
                if (o.getIntValue() == i && currDigit[rand.Next(currDigit.Count)] == o)
                {
                    return(true);
                }
            }
            return(false);
        };

        oneEmptyPerDigit = EnemyBoardSkill.MarkIfSkill(() => GameController.Instance.isTurnMod(2), randDigits, 0.1f, skillTrans);
        oneEmptyPerDigit.addSetSkill(0.1f, (Orb o) => ORB_VALUE.EMPTY);
        skillList.Add(oneEmptyPerDigit);

        Func <ORB_VALUE, OrbSpawnRate> incAnti = (ORB_VALUE orbVal) => orbVal == ORB_VALUE.POISON ? OrbSpawnRate.INCREASED : Board.getDefaultOrbSpawnRates()[(int)orbVal];

        skillList.Add(EnemyOrbSkill.Create(() => GameController.Instance.isTurnMod(2, 1), incAnti, 1, skillTrans));

        skillList.Add(EnemyAttack.Create(() => true, false, () => Player.Instance.gameObject, () => (currState.currHealth - currState.maxHealth) / 2 - 100, skillTrans));
        skillList.Add(EnemyAttack.Create(() => GameController.Instance.isTurnMod(2), false, () => gameObject, () => currState.currHealth / 2, skillTrans));
    }
コード例 #2
0
    public IEnumerator getInput()
    {
        //getting valid input
        do
        {
            //reseting the stack and its orbs
            while (selectedOrbs.Count > 0)
            {
                selectedOrbs.Last().isSelected = false;
                selectedOrbs.Last().updateConnectors();
                selectedOrbs.Remove(selectedOrbs.Last());
            }
            displayNumBar();
            setNumBarColor(NUMBAR_STATE.DEFAULT);
            //waiting for && getting input
            yield return(waitForInput);

            while (!inputReleased() && !GameController.Instance.isPaused)
            {
                Vector2 relativeInputPos = getRelativeInputPos();
                int     c = Mathf.RoundToInt(relativeInputPos.x);
                int     r = Mathf.RoundToInt(relativeInputPos.y);
                if (0 <= r && r < ROWS && 0 <= c && c < COLUMNS && Mathf.Abs(relativeInputPos.x - c) <= THRESHOLD && Mathf.Abs(relativeInputPos.y - r) <= THRESHOLD)
                {
                    Orb        chosenOrb        = orbArray[c][r];
                    Vector2Int currGridPosition = new Vector2Int(c, r);
                    if (selectedOrbs.Count == 0)
                    {
                        selectedOrbs.Add(chosenOrb);
                        chosenOrb.isSelected = true;
                    }
                    else
                    {
                        Orb head = selectedOrbs.Last();
                        selectedOrbs.Remove(selectedOrbs.Last());
                        Vector2Int prevHeadDir = head.prevOrbDir;
                        head.prevOrbDir = Vector2Int.zero;
                        head.isSelected = false;
                        if (!(selectedOrbs.Count >= 1 && currGridPosition.Equals(selectedOrbs.Last().getGridPos())))    //if the player backtracks, then the head orb is removed
                        {
                            selectedOrbs.Add(head);
                            head.prevOrbDir = prevHeadDir;
                            head.isSelected = true;
                            if (!chosenOrb.Equals(head) && chosenOrb.isAdjacentTo(head) && !chosenOrb.isSelected && //if the player moves to a new adjacent orb, then the new orb is put in
                                (numberIsNullified() || head.getOrbValue() != ORB_VALUE.STOP))       // can't move if the current orb is a non-nullified stop orb
                            {
                                head.nextOrbDir = head.directionTo(chosenOrb);
                                selectedOrbs.Add(chosenOrb);
                                chosenOrb.prevOrbDir = chosenOrb.directionTo(head);
                                chosenOrb.isSelected = true;
                            }
                        }
                        else
                        {
                            chosenOrb.nextOrbDir = Vector2Int.zero;
                        }
                        head.updateConnectors();
                        chosenOrb.updateConnectors();
                    }
                }
                displayNumBar();
                yield return(null);
            }
        } while (selectedOrbs.Count <= 1);
    }
コード例 #3
0
    private void addHardSkill(int index)
    {
        System.Random rand = new System.Random(getRandomSeedByFloor());
        Func <bool> wtu    = () => true;
        Func <ORB_VALUE, OrbSpawnRate> newSpawnRates;
        bool markZeroAndFives = currState.number % 5 == 0;
        bool isAnti           = RNG.Next(2) == 0;

        switch (index)
        {
        case 0:
            int numNullify = rand.Next(1, 3);
            wtu = () => GameController.Instance.isTurnMod(2 * numNullify, RNG.Next(numNullify));
            Func <Orb, bool> randZeros = (Orb o) => {
                List <Orb> currZeros = new List <Orb>();
                for (int i = 0; i < Board.COLUMNS; i++)
                {
                    for (int j = 0; j < Board.ROWS; j++)
                    {
                        Orb z = Board.Instance.getOrb(i, j);
                        if (z.getOrbValue() == ORB_VALUE.ZERO)
                        {
                            currZeros.Add(z);
                        }
                    }
                }
                for (int i = 0; i < numNullify && currZeros.Count > 0; i++)
                {
                    int orb = rand.Next(currZeros.Count);
                    if (currZeros[orb] == o)
                    {
                        return(true);
                    }
                    currZeros.RemoveAt(orb);
                }
                return(false);
            };
            EnemyBoardSkill zerosToNullify = EnemyBoardSkill.MarkIfSkill(wtu, randZeros, 0.1f, skillTrans);
            zerosToNullify.addSetSkill(0.1f, (Orb o) => ORB_VALUE.NULLIFY);
            skillList.Add(zerosToNullify);
            break;

        case 1:
            int numOrbReduce = rand.Next(1, 4);
            newSpawnRates = (ORB_VALUE orbVal) => {
                if (markZeroAndFives)
                {
                    return(orbVal == ORB_VALUE.ZERO || orbVal == ORB_VALUE.FIVE ? OrbSpawnRate.DECREASED : Board.getDefaultOrbSpawnRates()[(int)orbVal]);
                }
                return(orbVal <= ORB_VALUE.NINE && (int)orbVal % 2 == 0 ? OrbSpawnRate.DECREASED : Board.getDefaultOrbSpawnRates()[(int)orbVal]);
            };
            wtu = () => GameController.Instance.isTurnMod(2 * numOrbReduce, RNG.Next(numOrbReduce));
            skillList.Add(EnemyOrbSkill.Create(wtu, newSpawnRates, numOrbReduce, skillTrans));
            break;

        case 2:
            wtu = () => GameController.Instance.isTurnMod(3, RNG.Next(3));
            Func <Orb, bool> evensOrFives     = (Orb o) => o.isDigit() && o.getIntValue() % (markZeroAndFives ? 5 : 2) == 0;
            EnemyBoardSkill clearEvensOrFives = EnemyBoardSkill.MarkIfSkill(wtu, evensOrFives, 0.1f, skillTrans);
            clearEvensOrFives.addRmvSkill(0);
            skillList.Add(clearEvensOrFives);
            break;

        case 3:
            wtu = () => GameController.Instance.isTurnMod(3, RNG.Next(3));
            EnemyBoardSkill replaceWithAntiOrStop = null;
            replaceWithAntiOrStop = EnemyBoardSkill.MarkOrderSkill(wtu, () => getRandomPattern(replaceWithAntiOrStop), 0.1f, skillTrans, 1);
            replaceWithAntiOrStop.addSetSkill(0.1f, (Orb o) => isAnti ? ORB_VALUE.POISON : ORB_VALUE.STOP);
            skillList.Add(replaceWithAntiOrStop);
            break;

        case 4:
            wtu = () => GameController.Instance.isTurnMod(4, RNG.Next(4));
            EnemyBoardSkill emptyFourLines = null;
            emptyFourLines = EnemyBoardSkill.MarkOrderSkill(wtu, () => getFourLines(emptyFourLines), 0.1f, skillTrans, 1);
            emptyFourLines.addSetSkill(0.1f, (Orb o) => ORB_VALUE.EMPTY);
            skillList.Add(emptyFourLines);
            break;

        case 5:
            wtu = () => GameController.Instance.isTurnMod(3, RNG.Next(3));
            EnemyBoardSkill allHealsToAntiOrStop = EnemyBoardSkill.MarkIfSkill(wtu, (Orb o) => o.getOrbValue() == ORB_VALUE.ZERO, 0.1f, skillTrans, 1);
            allHealsToAntiOrStop.addSetSkill(0.1f, (Orb o) => isAnti ? ORB_VALUE.POISON : ORB_VALUE.STOP);
            skillList.Add(allHealsToAntiOrStop);
            break;

        case 6:
            int numNoneZeroTurns = rand.Next(1, 3);
            newSpawnRates = (ORB_VALUE orbVal) => orbVal == ORB_VALUE.ZERO ? OrbSpawnRate.NONE : Board.getDefaultOrbSpawnRates()[(int)orbVal];
            wtu           = () => GameController.Instance.isTurnMod(2 * numNoneZeroTurns, RNG.Next(numNoneZeroTurns));
            skillList.Add(EnemyOrbSkill.Create(wtu, newSpawnRates, numNoneZeroTurns, skillTrans));
            break;

        case 7:
            int antiOrStop = rand.Next(2, 4);
            newSpawnRates = (ORB_VALUE orbVal) => orbVal == (antiOrStop == 2 ? ORB_VALUE.POISON : ORB_VALUE.STOP) ? OrbSpawnRate.INCREASED : Board.getDefaultOrbSpawnRates()[(int)orbVal];
            wtu           = () => GameController.Instance.isTurnMod(antiOrStop, RNG.Next(antiOrStop - 1));
            skillList.Add(EnemyOrbSkill.Create(wtu, newSpawnRates, 1, skillTrans));
            break;

        case 8:
            int numTimerTurns = rand.Next(1, 3);
            wtu = () => GameController.Instance.isTurnMod(2 * numTimerTurns, RNG.Next(numTimerTurns));
            EnemyTimer numDOT = EnemyTimer.Create(wtu, Mathf.Clamp(currState.number / 10f, 0f, 10f), numTimerTurns, skillTrans);
            numDOT.addDOTSkill(() => - currState.number);
            skillList.Add(numDOT);
            break;

        case 9:
            int numDecrement = rand.Next(1, 4);
            wtu = () => GameController.Instance.isTurnMod(numDecrement + 2, RNG.Next(numDecrement));
            EnemyBoardSkill decrementPattern = null;
            decrementPattern = EnemyBoardSkill.MarkOrderSkill(wtu, () => getRandomPattern(decrementPattern), 0.1f, skillTrans, numDecrement);
            decrementPattern.addIncSkill(0.1f, (Orb o) => - numDecrement);
            skillList.Add(decrementPattern);
            break;
        }
    }
コード例 #4
0
    private IEnumerator useTimerSkill()
    {
        if (timeDelay != null)
        {
            yield return(timeDelay);
        }
        internalTimer = skillRate;
        while (isRunning)
        {
            while (internalTimer < skillRate)
            {
                internalTimer += Time.deltaTime;
                yield return(null);
            }
            if (!isRunning)
            {
                break;
            }
            System.Random rand          = new System.Random();
            List <Orb>    potentialOrbs = new List <Orb>();
            Orb           selectedOrb;
            switch (endSkill)
            {
            case EnemySkillType.CLEAR:
                for (int c = 0; c < Board.COLUMNS; c++)
                {
                    for (int r = 0; r < Board.ROWS; r++)
                    {
                        Orb o = Board.Instance.getOrb(c, r);
                        if (rmvCondition(o) && !o.getIsMarkedBy(skillID))
                        {
                            potentialOrbs.Add(o);
                        }
                    }
                }
                if (potentialOrbs.Count > 0)
                {
                    selectedOrb = potentialOrbs[rand.Next(potentialOrbs.Count)];
                    Vector2Int gridPos = selectedOrb.getGridPos();
                    yield return(StartCoroutine(Board.Instance.markOrbAt(gridPos.x, gridPos.y, skillID, 0f)));

                    Board.Instance.displayNumBar();
                }
                break;

            case EnemySkillType.REPLACE:
                for (int c = 0; c < Board.COLUMNS; c++)
                {
                    for (int r = 0; r < Board.ROWS; r++)
                    {
                        Orb o = Board.Instance.getOrb(c, r);
                        if (setCondition(o) != o.getOrbValue())
                        {
                            potentialOrbs.Add(o);
                        }
                    }
                }
                if (potentialOrbs.Count > 0)
                {
                    selectedOrb = potentialOrbs[rand.Next(potentialOrbs.Count)];
                    selectedOrb.changeValue(setCondition(selectedOrb));
                    Board.Instance.displayNumBar();
                }
                break;

            case EnemySkillType.DECREMENT:
                for (int c = 0; c < Board.COLUMNS; c++)
                {
                    for (int r = 0; r < Board.ROWS; r++)
                    {
                        Orb o        = Board.Instance.getOrb(c, r);
                        int deltaVal = incCondition(o);
                        if (deltaVal != 0 && o.isDigit() && o.getIntValue() + deltaVal <= 9 && o.getIntValue() + deltaVal >= 0)
                        {
                            potentialOrbs.Add(o);
                        }
                    }
                }
                if (potentialOrbs.Count > 0)
                {
                    selectedOrb = potentialOrbs[rand.Next(potentialOrbs.Count)];
                    selectedOrb.incrementValue(incCondition(selectedOrb));
                    Board.Instance.displayNumBar();
                }
                break;

            case EnemySkillType.ATTACK:
                yield return(StartCoroutine(Player.Instance.inflictDOT(getDOT())));

                break;
            }
            internalTimer = 0;
        }
    }