Beispiel #1
0
        /// <summary>Raised after the game state is updated (≈60 times per second).</summary>
        /// <param name="sender">The event sender.</param>
        /// <param name="e">The event arguments.</param>
        private void OnUpdateTicked_DetermineIfExperienceHasBeenGained(object sender, UpdateTickedEventArgs e)
        {
            if (!e.IsMultipleOf(15)) // quarter second
            {
                return;
            }

            Item currentItem = Game1.player.CurrentItem;

            int currentLevelIndex = -1;

            int[] levelExtenderExperience = null;
            if (_levelExtenderAPI != null)
            {
                levelExtenderExperience = _levelExtenderAPI.CurrentXP();
            }

            for (var i = 0; i < _currentExperience.Value.Length; ++i)
            {
                if (_currentExperience.Value[i] != Game1.player.experiencePoints[i] ||
                    (_levelExtenderAPI != null &&
                     _currentLevelExtenderExperience.Value[i] != levelExtenderExperience[i]))
                {
                    currentLevelIndex = i;
                    break;
                }
            }

            if (currentLevelIndex > -1)
            {
                switch (currentLevelIndex)
                {
                case 0:
                {
                    _experienceFillColor.Value    = new Color(255, 251, 35, 0.38f);
                    _experienceIconPosition.Value = _farmingIconRectangle;
                    _currentSkillLevel.Value      = Game1.player.farmingLevel.Value;
                    break;
                }

                case 1:
                {
                    _experienceFillColor.Value    = new Color(17, 84, 252, 0.63f);
                    _experienceIconPosition.Value = _fishingIconRectangle;
                    _currentSkillLevel.Value      = Game1.player.fishingLevel.Value;
                    break;
                }

                case 2:
                {
                    _experienceFillColor.Value    = new Color(0, 234, 0, 0.63f);
                    _experienceIconPosition.Value = _foragingIconRectangle;
                    _currentSkillLevel.Value      = Game1.player.foragingLevel.Value;
                    break;
                }

                case 3:
                {
                    _experienceFillColor.Value    = new Color(145, 104, 63, 0.63f);
                    _experienceIconPosition.Value = _miningIconRectangle;
                    _currentSkillLevel.Value      = Game1.player.miningLevel.Value;
                    break;
                }

                case 4:
                {
                    _experienceFillColor.Value    = new Color(204, 0, 3, 0.63f);
                    _experienceIconPosition.Value = _combatIconRectangle;
                    _currentSkillLevel.Value      = Game1.player.combatLevel.Value;
                    break;
                }
                }

                _experienceRequiredToLevel.Value    = GetExperienceRequiredToLevel(_currentSkillLevel.Value);
                _experienceFromPreviousLevels.Value = GetExperienceRequiredToLevel(_currentSkillLevel.Value - 1);
                _experienceEarnedThisLevel.Value    = Game1.player.experiencePoints[currentLevelIndex] - _experienceFromPreviousLevels.Value;
                var experiencePreviouslyEarnedThisLevel = _currentExperience.Value[currentLevelIndex] - _experienceFromPreviousLevels.Value;

                if (_experienceRequiredToLevel.Value <= 0 &&
                    _levelExtenderAPI != null)
                {
                    _experienceEarnedThisLevel.Value    = _levelExtenderAPI.CurrentXP()[currentLevelIndex];
                    _experienceFromPreviousLevels.Value = _currentExperience.Value[currentLevelIndex] - _experienceEarnedThisLevel.Value;
                    _experienceRequiredToLevel.Value    = _levelExtenderAPI.RequiredXP()[currentLevelIndex] + _experienceFromPreviousLevels.Value;
                }

                ShowExperienceBar();
                if (_showExperienceGain &&
                    _experienceRequiredToLevel.Value > 0)
                {
                    int currentExperienceToUse  = Game1.player.experiencePoints[currentLevelIndex];
                    var previousExperienceToUse = _currentExperience.Value[currentLevelIndex];
                    if (_levelExtenderAPI != null &&
                        _currentSkillLevel.Value > 9)
                    {
                        currentExperienceToUse  = _levelExtenderAPI.CurrentXP()[currentLevelIndex];
                        previousExperienceToUse = _currentLevelExtenderExperience.Value[currentLevelIndex];
                    }

                    int experienceGain = currentExperienceToUse - previousExperienceToUse;

                    if (experienceGain > 0)
                    {
                        _experiencePointDisplays.Value.Add(
                            new ExperiencePointDisplay(
                                experienceGain,
                                Game1.player.getLocalPosition(Game1.viewport)));
                    }
                }

                _currentExperience.Value[currentLevelIndex] = Game1.player.experiencePoints[currentLevelIndex];

                if (_levelExtenderAPI != null)
                {
                    _currentLevelExtenderExperience.Value[currentLevelIndex] = _levelExtenderAPI.CurrentXP()[currentLevelIndex];
                }
            }
            else if (_previousItem.Value != currentItem)
            {
                if (currentItem is FishingRod)
                {
                    _experienceFillColor.Value    = new Color(17, 84, 252, 0.63f);
                    currentLevelIndex             = 1;
                    _experienceIconPosition.Value = _fishingIconRectangle;
                    _currentSkillLevel.Value      = Game1.player.fishingLevel.Value;
                }
                else if (currentItem is Pickaxe)
                {
                    _experienceFillColor.Value    = new Color(145, 104, 63, 0.63f);
                    currentLevelIndex             = 3;
                    _experienceIconPosition.Value = _miningIconRectangle;
                    _currentSkillLevel.Value      = Game1.player.miningLevel.Value;
                }
                else if (currentItem is MeleeWeapon &&
                         currentItem.Name != "Scythe")
                {
                    _experienceFillColor.Value    = new Color(204, 0, 3, 0.63f);
                    currentLevelIndex             = 4;
                    _experienceIconPosition.Value = _combatIconRectangle;
                    _currentSkillLevel.Value      = Game1.player.combatLevel.Value;
                }
                else if (Game1.currentLocation is Farm &&
                         !(currentItem is Axe))
                {
                    _experienceFillColor.Value    = new Color(255, 251, 35, 0.38f);
                    currentLevelIndex             = 0;
                    _experienceIconPosition.Value = _farmingIconRectangle;
                    _currentSkillLevel.Value      = Game1.player.farmingLevel.Value;
                }
                else
                {
                    _experienceFillColor.Value    = new Color(0, 234, 0, 0.63f);
                    currentLevelIndex             = 2;
                    _experienceIconPosition.Value = _foragingIconRectangle;
                    _currentSkillLevel.Value      = Game1.player.foragingLevel.Value;
                }

                _experienceRequiredToLevel.Value    = GetExperienceRequiredToLevel(_currentSkillLevel.Value);
                _experienceFromPreviousLevels.Value = GetExperienceRequiredToLevel(_currentSkillLevel.Value - 1);
                _experienceEarnedThisLevel.Value    = Game1.player.experiencePoints[currentLevelIndex] - _experienceFromPreviousLevels.Value;

                if (_experienceRequiredToLevel.Value <= 0 &&
                    _levelExtenderAPI != null)
                {
                    _experienceEarnedThisLevel.Value    = _levelExtenderAPI.CurrentXP()[currentLevelIndex];
                    _experienceFromPreviousLevels.Value = _currentExperience.Value[currentLevelIndex] - _experienceEarnedThisLevel.Value;
                    _experienceRequiredToLevel.Value    = _levelExtenderAPI.RequiredXP()[currentLevelIndex] + _experienceFromPreviousLevels.Value;
                }

                ShowExperienceBar();
                _previousItem.Value = currentItem;
            }
        }