public string TestBonusWheel() { // Create a dictionary to store the results so it's flexible if we change the rewards or values later // Dictionary uses a composite key based on the reward + the value, ie (Gems, 35) Dictionary <(BonusReward.BonusRewardType, int), int> countOfOutcomes = new Dictionary <(BonusReward.BonusRewardType, int), int>(); // Add predicted results to compare against, in order to judge the test as Passed or Failed Dictionary <(BonusReward.BonusRewardType, int), float> predictedResults = new Dictionary <(BonusReward.BonusRewardType, int), float>(); predictedResults.Add((BonusReward.BonusRewardType.Life, 30), 20.0f); predictedResults.Add((BonusReward.BonusRewardType.Brush, 30), 20.0f); predictedResults.Add((BonusReward.BonusRewardType.Gems, 30), 20.0f); predictedResults.Add((BonusReward.BonusRewardType.Hammer, 30), 20.0f); predictedResults.Add((BonusReward.BonusRewardType.Coins, 30), 20.0f); predictedResults.Add((BonusReward.BonusRewardType.Brush, 1), 20.0f); predictedResults.Add((BonusReward.BonusRewardType.Gems, 75), 20.0f); predictedResults.Add((BonusReward.BonusRewardType.Hammer, 1), 20.0f); // Run the test, compiling the results for (int i = 0; i < numTestsToPerform; i++) { BonusReward bonusReward = this.gameObject.GetComponent <GameManager>().TestBonusWheel(); if (countOfOutcomes.ContainsKey((bonusReward.rewardType, bonusReward.value))) { countOfOutcomes[(bonusReward.rewardType, bonusReward.value)] = countOfOutcomes[(bonusReward.rewardType, bonusReward.value)] + 1;
public void Reset() { this.targetReward = null; this.bonusWheel.SetActive(true); this.spinButton.SetActive(true); this.claimButton.SetActive(false); this.bonusWheelItem.gameObject.SetActive(false); this.isAnimating = false; this.timeAtAnimationStart = 0; this.timeAtEaseOutStart = 0; this.rotationAngleAtEaseOutStart = 0; this.startRotationAngle = 0; this.targetRotationAngle = 0; this.previousRotationAngle = 0; this.currentRotationAngle = 0; this.currentSpeed = 1.0f; this.didStartEaseOut = false; this.wheelContainer.localRotation = Quaternion.Euler(0, 0, this.currentRotationAngle); this.blurredWheel.color = new Color(this.blurredWheel.color.r, this.blurredWheel.color.g, this.blurredWheel.color.b, 0); if (!this.spinButton.GetComponent <Animator>().isInitialized) { this.spinButton.GetComponent <Animator>().Rebind(); } if (!this.claimButton.GetComponent <Animator>().isInitialized) { this.claimButton.GetComponent <Animator>().Rebind(); } }
private void GiveRewardToPlayer(BonusReward bonusReward) { switch (bonusReward.rewardType) { case BonusReward.BonusRewardType.None: // Do nothing, no reward to give break; case BonusReward.BonusRewardType.Life: GameManager.sharedInstance.AddToPlayerLives(bonusReward.value); break; case BonusReward.BonusRewardType.Brush: GameManager.sharedInstance.AddToPlayerBrushes(bonusReward.value); break; case BonusReward.BonusRewardType.Gems: GameManager.sharedInstance.AddToPlayerGems(bonusReward.value); break; case BonusReward.BonusRewardType.Hammer: GameManager.sharedInstance.AddToPlayerHammers(bonusReward.value); break; case BonusReward.BonusRewardType.Coins: GameManager.sharedInstance.AddToPlayerCoins(bonusReward.value); break; case BonusReward.BonusRewardType.Count: // Do nothing, not an actual valid reward type break; } }
// This method both initiates the spin animation as well as returns the resultant reward, // so that it can be processed and the user's. Calling w/ shouldPlayAnimation = false // allows for testing without triggering animation. private BonusReward SpinWheelWithAnimation(bool shouldPlayAnimation = true) { // Get target reward float randomPercentage = Random.Range(0, 100.0f); BonusReward bonusReward = null; float cumulativeDropChance = 0; int bonusIndex = 0; foreach (BonusReward reward in this.bonusRewards) { cumulativeDropChance += reward.dropChance; if (randomPercentage < cumulativeDropChance) { bonusReward = reward; break; } bonusIndex++; } // TODO: Play animation based on target reward (bonusIndex) if (shouldPlayAnimation) { this.targetRotationAngle = (((float)bonusIndex + 0.5f) / (float)numWheelSections) * 360.0f; StartAnimationTowardsTarget(); } return(bonusReward); }
public void Spin() { // TODO: Play SFX // Check if wheel hasn't been spun yet before spinning if (!this.isAnimating) { this.targetReward = SpinWheelWithAnimation(true); } }
public void ClaimReward() { // TODO: Play SFX if (this.targetReward != null) { GiveRewardToPlayer(this.targetReward); this.targetReward = null; this.bonusWheelItem.gameObject.SetActive(false); } }
public void SetVisibilityWithBonusReward(BonusReward bonusReward) { heartIcon.SetActive(false); brushIcon.SetActive(false); gemIcon.SetActive(false); hammerIcon.SetActive(false); coinIcon.SetActive(false); primaryText.gameObject.SetActive(false); heartPrimaryText.gameObject.SetActive(false); heartSecondaryText.gameObject.SetActive(false); switch (bonusReward.rewardType) { case BonusReward.BonusRewardType.None: // Do nothing break; case BonusReward.BonusRewardType.Life: heartIcon.SetActive(true); heartPrimaryText.gameObject.SetActive(true); heartSecondaryText.gameObject.SetActive(true); heartPrimaryText.text = "x" + bonusReward.value; heartSecondaryText.text = "mins"; break; case BonusReward.BonusRewardType.Brush: brushIcon.SetActive(true); primaryText.gameObject.SetActive(true); primaryText.text = "x" + bonusReward.value; break; case BonusReward.BonusRewardType.Gems: gemIcon.SetActive(true); primaryText.gameObject.SetActive(true); primaryText.text = "x" + bonusReward.value; break; case BonusReward.BonusRewardType.Hammer: hammerIcon.SetActive(true); primaryText.gameObject.SetActive(true); primaryText.text = "x" + bonusReward.value; break; case BonusReward.BonusRewardType.Coins: coinIcon.SetActive(true); primaryText.gameObject.SetActive(true); primaryText.text = "x" + bonusReward.value; break; case BonusReward.BonusRewardType.Count: // Do nothing, not an actual valid reward type break; } }