Compare commits

...
3 Commits
Author SHA1 Message Date
adminandClaude Opus 4.5 deb0e33c5a Show province count progress in Develop/Mobilize quest descriptions
Quest descriptions now show both the current province count and months
completed, e.g., "Maintain 3 provinces with Develop orders for 4 months
(2/3 provinces, 1/4 months)"

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-02-06 15:11:40 -08:00
adminandClaude Opus 4.5 0191455d5d Update Ransom Panel layout
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-02-06 15:01:04 -08:00
adminandClaude Opus 4.5 98ed70c2e0 Convert Manage Prisoners to button-style toggles
- Add ToggleGroup and ConfigureToggle for consistent toggle styling
- Remove individual RawImage icon references
- Use CanvasGroup alpha for disabled state styling (35%)
- Default selection priority: Release > Move > Exile > Execute > Return
- Move dropdown only visible when Move option is selected

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-02-06 14:46:06 -08:00
3 changed files with 5770 additions and 2645 deletions
@@ -21,12 +21,7 @@ namespace eagle {
public Toggle ExileToggle;
public Toggle ExecuteToggle;
public Toggle ReturnToggle;
public RawImage ReleaseIcon;
public RawImage MoveIcon;
public RawImage ExileIcon;
public RawImage ExecuteIcon;
public RawImage ReturnIcon;
public ToggleGroup decisionToggleGroup;
public TMP_Dropdown moveToDropdown;
@@ -143,28 +138,43 @@ namespace eagle {
MessageText.text = GetQuestMessagesForPrisoner(SelectedHero.Id);
// The order here is important: the last available toggle in this list
// will be on by default
ConditionallyEnable(
ExecuteToggle,
ExecuteIcon,
PrisonerManagementOption.SealedValueOneofCase.Execute);
ConditionallyEnable(
ExileToggle,
ExileIcon,
PrisonerManagementOption.SealedValueOneofCase.Exile);
ConditionallyEnable(
ReturnToggle,
ReturnIcon,
PrisonerManagementOption.SealedValueOneofCase.Return);
ConditionallyEnable(
MoveToggle,
MoveIcon,
PrisonerManagementOption.SealedValueOneofCase.Move);
ConditionallyEnable(
ReleaseToggle,
ReleaseIcon,
PrisonerManagementOption.SealedValueOneofCase.Release);
var options = SelectedPrisonerToManage.AvailableOptions;
bool hasRelease = options.Any(
opt => opt.SealedValueCase ==
PrisonerManagementOption.SealedValueOneofCase.Release);
bool hasMove = options.Any(
opt => opt.SealedValueCase ==
PrisonerManagementOption.SealedValueOneofCase.Move);
bool hasExile = options.Any(
opt => opt.SealedValueCase ==
PrisonerManagementOption.SealedValueOneofCase.Exile);
bool hasExecute = options.Any(
opt => opt.SealedValueCase ==
PrisonerManagementOption.SealedValueOneofCase.Execute);
bool hasReturn = options.Any(
opt => opt.SealedValueCase ==
PrisonerManagementOption.SealedValueOneofCase.Return);
ConfigureToggle(ReleaseToggle, hasRelease);
ConfigureToggle(MoveToggle, hasMove);
ConfigureToggle(ExileToggle, hasExile);
ConfigureToggle(ExecuteToggle, hasExecute);
ConfigureToggle(ReturnToggle, hasReturn);
// Select first available option (priority order: Release > Move > Exile > Execute >
// Return)
if (hasRelease) ReleaseToggle.isOn = true;
else if (hasMove)
MoveToggle.isOn = true;
else if (hasExile)
ExileToggle.isOn = true;
else if (hasExecute)
ExecuteToggle.isOn = true;
else if (hasReturn)
ReturnToggle.isOn = true;
// Update dropdown visibility based on selected toggle
moveToDropdown.gameObject.SetActive(MoveToggle.isOn);
}
private string GetQuestMessagesForPrisoner(HeroId prisonerId) {
@@ -225,36 +235,23 @@ namespace eagle {
: "A free hero";
}
private bool ConditionallyEnable(
Toggle toggle,
PrisonerManagementOption.SealedValueOneofCase option) {
bool enable = SelectedPrisonerToManage.AvailableOptions.Any(
opt => opt.SealedValueCase == option);
toggle.gameObject.SetActive(enable);
private const float DisabledAlpha = 0.35f;
if (enable) {
ExecuteToggle.isOn = false;
ExileToggle.isOn = false;
MoveToggle.isOn = false;
ReleaseToggle.isOn = false;
ReturnToggle.isOn = false;
private void ConfigureToggle(Toggle toggle, bool available) {
if (toggle == null) return;
toggle.isOn = true;
} else
toggle.isOn = false;
toggle.gameObject.SetActive(true);
toggle.interactable = available;
return enable;
}
if (!available) { toggle.isOn = false; }
private void ConditionallyEnable(
Toggle toggle,
RawImage img,
PrisonerManagementOption.SealedValueOneofCase option) {
bool enable = ConditionallyEnable(toggle, option);
toggle.group = available ? decisionToggleGroup : null;
Color color = img.color;
color.a = enable ? 1.0f : 0.25f;
img.color = color;
var canvasGroup = toggle.GetComponent<CanvasGroup>();
if (canvasGroup == null) {
canvasGroup = toggle.gameObject.AddComponent<CanvasGroup>();
}
canvasGroup.alpha = available ? 1f : DisabledAlpha;
}
}
}
@@ -345,18 +345,28 @@ namespace eagle {
var details = quest.Details.DevelopProvincesQuest;
var targetMonths = quest.ComponentCount;
var currentMonths = quest.ComponentsFulfilled;
var progressText =
currentMonths > 0 ? $" ({currentMonths}/{targetMonths} months)" : "";
return $"Maintain {details.TargetProvinceCount} provinces with Develop orders for {targetMonths} months{progressText}";
var currentProvinces =
model.PlayerId.HasValue
? model.ProvincesForFaction(model.PlayerId.Value)
.Count(pid => model.Provinces[pid]
.FullInfo?.ProvinceOrders ==
ProvinceOrderType.Develop)
: 0;
return $"Maintain {details.TargetProvinceCount} provinces with Develop orders for {targetMonths} months ({currentProvinces}/{details.TargetProvinceCount} provinces, {currentMonths}/{targetMonths} months)";
}
case SealedValueOneofCase.MobilizeProvincesQuest: {
var details = quest.Details.MobilizeProvincesQuest;
var targetMonths = quest.ComponentCount;
var currentMonths = quest.ComponentsFulfilled;
var progressText =
currentMonths > 0 ? $" ({currentMonths}/{targetMonths} months)" : "";
return $"Maintain {details.TargetProvinceCount} provinces with Mobilize orders for {targetMonths} months{progressText}";
var currentProvinces =
model.PlayerId.HasValue
? model.ProvincesForFaction(model.PlayerId.Value)
.Count(pid => model.Provinces[pid]
.FullInfo?.ProvinceOrders ==
ProvinceOrderType.Mobilize)
: 0;
return $"Maintain {details.TargetProvinceCount} provinces with Mobilize orders for {targetMonths} months ({currentProvinces}/{details.TargetProvinceCount} provinces, {currentMonths}/{targetMonths} months)";
}
case SealedValueOneofCase.BattalionDiversityQuest:
File diff suppressed because it is too large Load Diff