Beispiel #1
0
    public List <StarCount> CountStars(int sevenStars, int extraStars, CurseBehavior curseBehavior)
    {
        List <StarCount> retVal = new List <StarCount>();

        for (int i = 0; i < simulations.Count; i++)
        {
            retVal.Add(CountStars(simulations[i], sevenStars, extraStars, curseBehavior));
        }
        return(retVal);
    }
Beispiel #2
0
    private void CursePlayer()
    {
        if (isCurseChanging)
        {
            return;
        }

        if (target == null)
        {
            Collider[] colls       = Physics.OverlapSphere(transform.position, laserLength, LayerMask.GetMask("Alley"));
            float      closestDist = float.MaxValue;
            foreach (var item in colls)
            {
                Mob itemMob = item.GetComponent <Mob>();
                if (itemMob)
                {
                    Vector3 subVec  = item.transform.position - transform.position;
                    float   sqrDist = subVec.sqrMagnitude;
                    if (sqrDist <= closestDist)
                    {
                        closestDist = sqrDist;
                        target      = itemMob;
                    }
                }
            }
        }

        if (target)
        {
            CurseBehavior curseBehavior = ScriptableObject.CreateInstance <CurseBehavior>();
            int           r1            = UnityEngine.Random.Range(0, movePts.Length);
            int           r2            = UnityEngine.Random.Range(0, movePts.Length);
            while (r1 == r2)
            {
                r2 = UnityEngine.Random.Range(0, movePts.Length);
            }
            curseBehavior.Init(laserPrefab, laserPt, laserLength, laserDamage, movePts[r1].transform.position, movePts[r2].transform.position, mainSoundPlayer, target, laserDuration, laserChargeTime, BehaviorPriority.Skill);
            fsm.DirectAddBehavior(curseBehavior);

            StartCoroutine(IE_Wave());
        }
    }
Beispiel #3
0
    public StarCount CountStars(List <MonteCard> simulation, int sevenStars, int extraStars, CurseBehavior curseBehavior)
    {
        List <int>  StarsByDepth         = new List <int>();
        List <int>  RequiredByDifficulty = new List <int>();
        List <bool> SafetyByDepth        = new List <bool>();

        int totalStars = extraStars;

        int  left         = 0;
        int  right        = 0;
        bool hasAHalf     = false;
        int  successIndex = -1;
        bool failed       = false;

        for (int i = 0; i < simulation.Count; i++)
        {
            MonteCard card = simulation[i];
            totalStars += card.stars;
            totalStars += card.sevens * sevenStars;



            if (card.curse)
            {
                switch (curseBehavior)
                {
                case CurseBehavior.FAIL:
                    failed = true;
                    break;

                case CurseBehavior.MINUS:
                    totalStars--;
                    break;

                case CurseBehavior.STAR:
                    totalStars++;
                    break;

                case CurseBehavior.SUCCEED:
                    if (successIndex == -1)
                    {
                        successIndex = i;
                    }
                    break;
                }
            }

            if (card.root && rootAutoFail)
            {
                failed = true;
            }

            if (card.amulet)
            {
                totalStars++;
                if (amuletAutoSucceed && successIndex == -1)
                {
                    successIndex = i;
                }
            }



            if (card.left)
            {
                left++;
            }

            if (card.right)
            {
                right++;
            }

            if (!(card.right && card.left))
            {
                hasAHalf = true;
            }


            int halfTotal = Math.Min(left, right);
            if (!hasAHalf)
            {
                halfTotal--;
            }
            if (halfTotal < 0)
            {
                halfTotal = 0;
            }

            int totalAtDepthI = halfTotal + totalStars;

            StarsByDepth.Add(totalAtDepthI);
            SafetyByDepth.Add(!failed || successIndex > -1);
            if (successIndex > -1)
            {
                while (RequiredByDifficulty.Count < totalAtDepthI)
                {
                    RequiredByDifficulty.Add(successIndex);
                }
            }
            else if (!failed)
            {
                while (RequiredByDifficulty.Count < totalAtDepthI)
                {
                    RequiredByDifficulty.Add(i);
                }
            }
        }

        StarCount count = new StarCount(StarsByDepth, RequiredByDifficulty, successIndex, SafetyByDepth);

        return(count);
    }