@if (this.Context is not null) {
@this.Context.CurrentCharacter.DisplayName
@if (this.isDropdownOpen) {
@foreach (var character in this.Context.Characters.Where(character => character != this.Context.CurrentCharacter)) {
@character.DisplayName
}
}
@this.GetExperienceBarText()
} else { }
@code { [Parameter] public required CharacterComponentContext? Context { get; init; } [Parameter] public required Action OnCharacterChanged { get; init; } [Parameter] public required Action OnExperienceBarClicked { get; init; } private bool isDropdownOpen = false; private void ExperienceBarClicked() { this.OnExperienceBarClicked(); } private void CharacterNameClicked(CharacterSelectComponentEntry entry) { this.isDropdownOpen = false; this.OnCharacterChanged(entry); } private void ToggleDropdown() { this.isDropdownOpen = !this.isDropdownOpen; } private string GetExperienceBarWidth() { if (this.Context is null) { return string.Empty; } return $"width: {(this.Context.ExperienceForCurrentLevel * 100d / this.Context.NextExperienceThreshold)}%;"; } private string GetExperienceBarText() { if (this.Context is null) { return string.Empty; } return this.Context.ExperienceDisplay switch { ExperienceDisplay.TotalCurretAndTotalMax => $"{this.Context.CurrentTotalExperience} / {this.Context.TotalExperienceForNextLevel} xp", ExperienceDisplay.CurrentLevelCurrentAndCurrentLevelMax => $"{this.Context.ExperienceForCurrentLevel} / {this.Context.NextExperienceThreshold} xp", ExperienceDisplay.Percentage => $"{(this.Context.ExperienceForCurrentLevel * 100d / this.Context.NextExperienceThreshold):F2}%", ExperienceDisplay.RemainingUntilNextLevel => $"{this.Context.ExperienceForNextLevel} xp remaining", _ => throw new InvalidOperationException() }; } }