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