Example #1
0
    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;
Example #2
0
 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();
     }
 }
Example #3
0
    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;
        }
    }
Example #4
0
    // 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);
    }
Example #5
0
 public void Spin()
 {
     // TODO: Play SFX
     // Check if wheel hasn't been spun yet before spinning
     if (!this.isAnimating)
     {
         this.targetReward = SpinWheelWithAnimation(true);
     }
 }
Example #6
0
 public void ClaimReward()
 {
     // TODO: Play SFX
     if (this.targetReward != null)
     {
         GiveRewardToPlayer(this.targetReward);
         this.targetReward = null;
         this.bonusWheelItem.gameObject.SetActive(false);
     }
 }
Example #7
0
    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;
        }
    }