Add custom campaign roll composer

This commit is contained in:
2026-04-04 19:58:00 +02:00
parent 7248b60395
commit 9e6e6fe8c7
21 changed files with 502 additions and 47 deletions

View File

@@ -706,6 +706,12 @@ public partial class Workspace : IAsyncDisposable
return Task.CompletedTask;
}
private Task OnCampaignLogPanelErrorAsync(string message)
{
SetStatus(message, true);
return Task.CompletedTask;
}
private async Task RollSkillAsync(Guid skillId)
{
if (SelectedCampaign is null)
@@ -717,15 +723,8 @@ public partial class Workspace : IAsyncDisposable
IsMutating = true;
try
{
LastRoll = await ApiClient.RequestAsync<RollResult>("POST", $"/api/skills/{skillId}/roll", new RollSkillRequest(RollVisibility));
CampaignLogDetails[LastRoll.RollId] = ToCampaignRollDetail(LastRoll);
CampaignLogDetailErrors.Remove(LastRoll.RollId);
await RefreshCampaignLogAsync(CampaignLogCursor);
PromoteFreshRoll(LastRoll.RollId);
ResetCampaignStateTracking();
SetStatus("Roll recorded.", false);
Announce("Roll result updated.");
var roll = await ApiClient.RequestAsync<RollResult>("POST", $"/api/skills/{skillId}/roll", new RollSkillRequest(RollVisibility));
await HandleRecordedRollAsync(roll);
}
catch (ApiRequestException ex)
{
@@ -737,6 +736,32 @@ public partial class Workspace : IAsyncDisposable
}
}
private async Task OnCustomRollCreatedAsync(RollResult roll)
{
IsMutating = true;
try
{
await HandleRecordedRollAsync(roll);
}
finally
{
IsMutating = false;
}
}
private async Task HandleRecordedRollAsync(RollResult roll)
{
LastRoll = roll;
CampaignLogDetails[roll.RollId] = ToCampaignRollDetail(roll);
CampaignLogDetailErrors.Remove(roll.RollId);
await RefreshCampaignLogAsync(CampaignLogCursor);
PromoteFreshRoll(roll.RollId);
ResetCampaignStateTracking();
SetStatus("Roll recorded.", false);
Announce("Roll result updated.");
}
private async Task OnRollVisibilityChanged(string visibility)
{
RollVisibility = NormalizeRollVisibility(visibility);