Restrict play screen to owned characters and own private rolls
This commit is contained in:
@@ -975,6 +975,90 @@ public partial class Workspace : IAsyncDisposable
|
||||
private CharacterSummary? SelectedCharacter =>
|
||||
SelectedCampaign?.Characters.FirstOrDefault(c => c.Id == SelectedCharacterId);
|
||||
|
||||
private CampaignDetails? PlaySelectedCampaign
|
||||
{
|
||||
get
|
||||
{
|
||||
if (SelectedCampaign is null)
|
||||
return null;
|
||||
|
||||
if (User is null)
|
||||
return new CampaignDetails(SelectedCampaign.Id, SelectedCampaign.Name, SelectedCampaign.RulesetId, SelectedCampaign.Gm, [], [], []);
|
||||
|
||||
var ownedCharacters = SelectedCampaign.Characters
|
||||
.Where(character => character.OwnerUserId == User.Id)
|
||||
.ToList();
|
||||
var ownedCharacterIds = ownedCharacters.Select(character => character.Id).ToHashSet();
|
||||
var ownedSkillGroups = SelectedCampaign.SkillGroups
|
||||
.Where(group => ownedCharacterIds.Contains(group.CharacterId))
|
||||
.ToList();
|
||||
var ownedSkills = SelectedCampaign.Skills
|
||||
.Where(skill => ownedCharacterIds.Contains(skill.CharacterId))
|
||||
.ToList();
|
||||
|
||||
return new CampaignDetails(
|
||||
SelectedCampaign.Id,
|
||||
SelectedCampaign.Name,
|
||||
SelectedCampaign.RulesetId,
|
||||
SelectedCampaign.Gm,
|
||||
ownedCharacters,
|
||||
ownedSkillGroups,
|
||||
ownedSkills);
|
||||
}
|
||||
}
|
||||
|
||||
private CharacterSummary? PlaySelectedCharacter
|
||||
{
|
||||
get
|
||||
{
|
||||
if (PlaySelectedCampaign is null || PlaySelectedCampaign.Characters.Count == 0)
|
||||
return null;
|
||||
|
||||
if (SelectedCharacterId.HasValue)
|
||||
{
|
||||
var selectedCharacter = PlaySelectedCampaign.Characters.FirstOrDefault(character => character.Id == SelectedCharacterId.Value);
|
||||
if (selectedCharacter is not null)
|
||||
return selectedCharacter;
|
||||
}
|
||||
|
||||
if (ActiveCharacterId.HasValue)
|
||||
{
|
||||
var activeCharacter = PlaySelectedCampaign.Characters.FirstOrDefault(character => character.Id == ActiveCharacterId.Value);
|
||||
if (activeCharacter is not null)
|
||||
return activeCharacter;
|
||||
}
|
||||
|
||||
return PlaySelectedCampaign.Characters[0];
|
||||
}
|
||||
}
|
||||
|
||||
private Guid? PlaySelectedCharacterId => PlaySelectedCharacter?.Id;
|
||||
|
||||
private List<SkillSummary> PlaySelectedCharacterSkills =>
|
||||
PlaySelectedCampaign is null || !PlaySelectedCharacterId.HasValue
|
||||
? []
|
||||
: PlaySelectedCampaign.Skills
|
||||
.Where(skill => skill.CharacterId == PlaySelectedCharacterId.Value)
|
||||
.OrderBy(skill => skill.Name, StringComparer.OrdinalIgnoreCase)
|
||||
.ToList();
|
||||
|
||||
private List<SkillGroupSummary> PlaySelectedCharacterSkillGroups =>
|
||||
PlaySelectedCampaign is null || !PlaySelectedCharacterId.HasValue
|
||||
? []
|
||||
: PlaySelectedCampaign.SkillGroups
|
||||
.Where(group => group.CharacterId == PlaySelectedCharacterId.Value)
|
||||
.OrderBy(group => group.Name, StringComparer.OrdinalIgnoreCase)
|
||||
.ToList();
|
||||
|
||||
private List<CampaignLogEntry> PlayVisibleCampaignLog =>
|
||||
User is null
|
||||
? CampaignLog.Where(entry => !string.Equals(entry.Visibility, "private", StringComparison.OrdinalIgnoreCase)).ToList()
|
||||
: CampaignLog
|
||||
.Where(entry =>
|
||||
!string.Equals(entry.Visibility, "private", StringComparison.OrdinalIgnoreCase) ||
|
||||
entry.RollerUserId == User.Id)
|
||||
.ToList();
|
||||
|
||||
private bool IsCurrentUserGm =>
|
||||
SelectedCampaign is not null && User is not null && SelectedCampaign.Gm.Id == User.Id;
|
||||
|
||||
|
||||
Reference in New Issue
Block a user