IEnumerator AnimateRoll(DieDef die, int finalRollFaceIndex, int rollOrder) { IsRolling = true; _dieFace.enabled = false; yield return(new WaitForSeconds(rollOrder * DELAY_PER_DIE)); _dieFace.enabled = true; var ctr = 0f; var duration = ROLL_DURATION; int lastRandomFace = -1; do { int randomFace = -1; do { randomFace = Random.Range(0, die.NumFaces()); }while (randomFace == lastRandomFace && die.NumFaces() > 1); // prevent infinite loop _dieFace.sprite = die.GetFaceImage(randomFace); lastRandomFace = randomFace; yield return(null); ctr += Time.deltaTime; } while (ctr < duration); _dieFace.sprite = die.GetFaceImage(finalRollFaceIndex); ctr = 0f; while (ctr < PULSE_DURATION) { var scale = Vector3.one * (1 + (PULSE_SCALE * Mathf.Sin(Mathf.PI * ctr / PULSE_DURATION))); _dieFace.transform.localScale = scale; yield return(null); ctr += Time.deltaTime; } _dieFace.transform.localScale = Vector3.one; IsRolling = false; }
public void Roll(DieDef die, int rollFaceIndex, int rollOrder) { StartCoroutine(AnimateRoll(die, rollFaceIndex, rollOrder)); }