Fix UI urgency handling.
Only cards can block other cards or actions from being used due to urgency, so only display the `[URGENT!]` header for cards. Debug actions can't be blocked, so skip the "urgency conflict" check for those.
This commit is contained in:
		| @@ -149,19 +149,19 @@ func pickNextAction[C StatsCollection](p *Player[C]) (actionType EnactableType, | ||||
| 				wait() | ||||
| 			} else if i <= actionsOffset { | ||||
| 				i = i - debugOffset - 1 | ||||
| 				option, promptErr := promptCard(p, p.DebugActions[i]) | ||||
| 				option, promptErr := promptCard(p, p.DebugActions[i], DebugActionEnactable) | ||||
| 				if option >= 0 || IsSeriousError(promptErr) { | ||||
| 					return DebugActionEnactable, i, option, promptErr | ||||
| 				} | ||||
| 			} else if i <= handOffset { | ||||
| 				i = i - actionsOffset - 1 | ||||
| 				option, promptErr := promptCard(p, p.PermanentActions[i]) | ||||
| 				option, promptErr := promptCard(p, p.PermanentActions[i], PermanentActionEnactable) | ||||
| 				if option >= 0 || IsSeriousError(promptErr) { | ||||
| 					return PermanentActionEnactable, i, option, promptErr | ||||
| 				} | ||||
| 			} else { | ||||
| 				i = i - handOffset - 1 | ||||
| 				option, promptErr := promptCard(p, p.Hand[i]) | ||||
| 				option, promptErr := promptCard(p, p.Hand[i], CardEnactable) | ||||
| 				if option >= 0 || IsSeriousError(promptErr) { | ||||
| 					return CardEnactable, i, option, nil | ||||
| 				} | ||||
| @@ -281,10 +281,10 @@ func displayNumberedTitles[C StatsCollection, T Titled[C]](p *Player[C], cards [ | ||||
|  | ||||
| // promptCard asks the player to take an action on a card. Returns the option | ||||
| // they chose, or -1 if there was a serious error or they cancelled selection. | ||||
| func promptCard[C StatsCollection](p *Player[C], card Card[C]) (optionIdx int, err error) { | ||||
| func promptCard[C StatsCollection](p *Player[C], card Card[C], cardType EnactableType) (optionIdx int, err error) { | ||||
| 	// Iterate until the player makes a valid choice. | ||||
| 	for { | ||||
| 		opts, valid, err := displayCard(p, card, true) | ||||
| 		opts, valid, err := displayCard(p, card, cardType, true) | ||||
| 		if IsSeriousError(err) { | ||||
| 			return -1, err | ||||
| 		} | ||||
| @@ -322,11 +322,11 @@ func promptCard[C StatsCollection](p *Player[C], card Card[C]) (optionIdx int, e | ||||
| 	} | ||||
| } | ||||
|  | ||||
| func displayCard[C StatsCollection](p *Player[C], card Card[C], canAct bool) ([]CardOption[C], bool, error) { | ||||
| func displayCard[C StatsCollection](p *Player[C], card Card[C], cardType EnactableType, canAct bool) ([]CardOption[C], bool, error) { | ||||
| 	cls() | ||||
| 	t := card.Title(p).String() | ||||
| 	urgent := card.Urgent(p) | ||||
| 	if urgent { | ||||
| 	if urgent && cardType == CardEnactable { | ||||
| 		t = "[URGENT!] " + t | ||||
| 	} | ||||
| 	fmt.Println(t) | ||||
| @@ -342,7 +342,7 @@ func displayCard[C StatsCollection](p *Player[C], card Card[C], canAct bool) ([] | ||||
| 	fmt.Println() | ||||
| 	fmt.Println(SectionBreak.String()) | ||||
| 	fmt.Println() | ||||
| 	if !urgent && p.HasUrgentCards() { | ||||
| 	if !urgent && cardType != DebugActionEnactable && p.HasUrgentCards() { | ||||
| 		fmt.Println("<You have more urgent matters to attend to! You cannot act on this right now.>") | ||||
| 		fmt.Println() | ||||
| 		canAct = false | ||||
| @@ -457,13 +457,13 @@ func actionsMode[C StatsCollection](p *Player[C], canAct bool) (actionType Enact | ||||
| 			} else if v <= dOff { | ||||
| 				v-- | ||||
| 				if canAct { | ||||
| 					optIdx, err := promptCard(p, p.DebugActions[v]) | ||||
| 					optIdx, err := promptCard(p, p.DebugActions[v], DebugActionEnactable) | ||||
| 					errs.Add(err) | ||||
| 					if optIdx >= 0 || IsSeriousError(err) { | ||||
| 						return DebugActionEnactable, v, optIdx, errs.Emit() | ||||
| 					} | ||||
| 				} else { | ||||
| 					_, _, err := displayCard(p, p.DebugActions[v], false) | ||||
| 					_, _, err := displayCard(p, p.DebugActions[v], DebugActionEnactable, false) | ||||
| 					errs.Add(err) | ||||
| 					if IsSeriousError(err) { | ||||
| 						return DebugActionEnactable, -1, -1, errs.Emit() | ||||
| @@ -473,13 +473,13 @@ func actionsMode[C StatsCollection](p *Player[C], canAct bool) (actionType Enact | ||||
| 			} else if v <= pOff { | ||||
| 				v = v - dOff - 1 | ||||
| 				if canAct { | ||||
| 					optIdx, err := promptCard(p, p.PermanentActions[v]) | ||||
| 					optIdx, err := promptCard(p, p.PermanentActions[v], PermanentActionEnactable) | ||||
| 					errs.Add(err) | ||||
| 					if optIdx >= 0 || IsSeriousError(err) { | ||||
| 						return PermanentActionEnactable, v, optIdx, errs.Emit() | ||||
| 					} | ||||
| 				} else { | ||||
| 					_, _, err := displayCard(p, p.PermanentActions[v], false) | ||||
| 					_, _, err := displayCard(p, p.PermanentActions[v], PermanentActionEnactable, false) | ||||
| 					errs.Add(err) | ||||
| 					if IsSeriousError(err) { | ||||
| 						return PermanentActionEnactable, -1, -1, errs.Emit() | ||||
| @@ -489,13 +489,13 @@ func actionsMode[C StatsCollection](p *Player[C], canAct bool) (actionType Enact | ||||
| 			} else { | ||||
| 				v = v - pOff - 1 | ||||
| 				if canAct { | ||||
| 					optIdx, err := promptCard(p, p.Hand[v]) | ||||
| 					optIdx, err := promptCard(p, p.Hand[v], CardEnactable) | ||||
| 					errs.Add(err) | ||||
| 					if optIdx >= 0 || IsSeriousError(err) { | ||||
| 						return CardEnactable, v, optIdx, errs.Emit() | ||||
| 					} | ||||
| 				} else { | ||||
| 					_, _, err := displayCard(p, p.Hand[v], false) | ||||
| 					_, _, err := displayCard(p, p.Hand[v], CardEnactable, false) | ||||
| 					errs.Add(err) | ||||
| 					if IsSeriousError(err) { | ||||
| 						return CardEnactable, -1, -1, errs.Emit() | ||||
| @@ -552,21 +552,21 @@ func review[C StatsCollection](p *Player[C]) error { | ||||
| 				displayOnePanel(p, p.InfoPanels[i-1]) | ||||
| 			} else if i <= actionsOffset { | ||||
| 				i = i - debugOffset - 1 | ||||
| 				_, _, err := displayCard(p, p.DebugActions[i], false) | ||||
| 				_, _, err := displayCard(p, p.DebugActions[i], DebugActionEnactable, false) | ||||
| 				errs.Add(err) | ||||
| 				if IsSeriousError(err) { | ||||
| 					return errs.Emit() | ||||
| 				} | ||||
| 			} else if i <= handOffset { | ||||
| 				i = i - actionsOffset - 1 | ||||
| 				_, _, err := displayCard(p, p.PermanentActions[i], false) | ||||
| 				_, _, err := displayCard(p, p.PermanentActions[i], PermanentActionEnactable, false) | ||||
| 				errs.Add(err) | ||||
| 				if IsSeriousError(err) { | ||||
| 					return errs.Emit() | ||||
| 				} | ||||
| 			} else { | ||||
| 				i = i - handOffset - 1 | ||||
| 				_, _, err := displayCard(p, p.Hand[i], false) | ||||
| 				_, _, err := displayCard(p, p.Hand[i], CardEnactable, false) | ||||
| 				errs.Add(err) | ||||
| 				if IsSeriousError(err) { | ||||
| 					return errs.Emit() | ||||
|   | ||||
		Reference in New Issue
	
	Block a user