public ViewModelQuestRequirement( IQuestRequirement requirement, // can be null when the quest is completed [CanBeNull] QuestRequirementState requirementState) { this.requirement = requirement; this.requirementState = requirementState; this.requirementState?.ClientSubscribe( _ => _.IsSatisfied, isSatisfiedNow => { this.NotifyPropertyChanged(nameof(this.IsSatisfied)); if (isSatisfiedNow) { Api.Client.Audio.PlayOneShot(new SoundResource("UI/Quests/QuestRequirementSatisfied.ogg")); } }, this); if (requirement is IQuestRequirementWithCount questRequirementWithCount) { this.CountRequired = questRequirementWithCount.RequiredCount; if (requirementState != null) { // requirement state can be null if the quest is already completed this.requirementStateWithCount = (QuestRequirementStateWithCount)requirementState; this.requirementStateWithCount.ClientSubscribe( _ => _.CountCurrent, _ => this.NotifyPropertyChanged(nameof(this.CountCurrent)), this); } } }
public ViewModelQuestRequirement( IQuestRequirement requirement, // can be null when the quest is completed [CanBeNull] QuestRequirementState requirementState) { this.requirement = requirement; this.requirementState = requirementState; this.requirementState?.ClientSubscribe( _ => _.IsSatisfied, isSatisfiedNow => { this.NotifyPropertyChanged(nameof(this.IsSatisfied)); if (!isSatisfiedNow) { return; } // play requirement satisfied sound (not more often than once per frame) if (lastRequirementSatisfiedFrame != Client.CurrentGame.ServerFrameNumber) { lastRequirementSatisfiedFrame = Client.CurrentGame.ServerFrameNumber; Api.Client.Audio.PlayOneShot(SoundResourceQuestRequirementSatisfied, volume: 0.5f); } }, this); if (requirement is IQuestRequirementWithCount questRequirementWithCount) { this.CountRequired = questRequirementWithCount.RequiredCount; if (requirementState != null) { // requirement state can be null if the quest is already completed this.requirementStateWithCount = (QuestRequirementStateWithCount)requirementState; this.requirementStateWithCount.ClientSubscribe( _ => _.CountCurrent, _ => this.NotifyPropertyChanged(nameof(this.CountCurrent)), this); } } }