aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorFlorian Fischer <florian.fischer@muhq.space>2023-02-15 16:41:29 +0100
committerFlorian Fischer <florian.fischer@muhq.space>2025-01-27 16:43:50 +0100
commitf9fef6046fdc6895d5eaa7fc15d9b4f4a02becae (patch)
tree7f3ffdd01af02d60c78ea65bafa75384cf140aac
parent0edb119b497bf1283f976693b02e044033d4de08 (diff)
downloadmuhqs-game-f9fef6046fdc6895d5eaa7fc15d9b4f4a02becae.tar.gz
muhqs-game-f9fef6046fdc6895d5eaa7fc15d9b4f4a02becae.zip
replace Fatalf with Panicf
Panicf includes a stacktrace and causes a debugger to halt.
-rw-r--r--go/client/game.go4
-rw-r--r--go/game/ai.go8
-rw-r--r--go/game/artifact.go2
-rw-r--r--go/game/attack.go4
-rw-r--r--go/game/card.go10
-rw-r--r--go/game/cardParsing.go4
-rw-r--r--go/game/kraken.go2
-rw-r--r--go/game/marks.go2
-rw-r--r--go/game/movement.go2
-rw-r--r--go/game/permanent.go2
-rw-r--r--go/game/player.go4
-rw-r--r--go/game/range.go2
-rw-r--r--go/game/stack.go2
-rw-r--r--go/game/state.go6
-rw-r--r--go/game/store.go2
-rw-r--r--go/game/targets.go24
-rw-r--r--go/game/unit.go2
-rw-r--r--go/ui/cardGrid.go8
-rw-r--r--go/ui/mapView.go2
19 files changed, 46 insertions, 46 deletions
diff --git a/go/client/game.go b/go/client/game.go
index 9fb26efa..b70c2b8f 100644
--- a/go/client/game.go
+++ b/go/client/game.go
@@ -317,7 +317,7 @@ func (g *Game) AddHighlight(obj interface{}) {
case *game.Unit:
g.mapView.AddHighlightPermanent(obj)
default:
- log.Fatalf("Unhandled highlight of type %T", obj)
+ log.Panicf("Unhandled highlight of type %T", obj)
}
}
@@ -450,7 +450,7 @@ func (g *Game) handleSelection(obj interface{}, x, y int) {
g.handLayer.HighlightCard(obj.C)
default:
- log.Fatalf("Object of type %T not handled", obj)
+ log.Panicf("Object of type %T not handled", obj)
}
}
}
diff --git a/go/game/ai.go b/go/game/ai.go
index 9f1ef488..0500c88a 100644
--- a/go/game/ai.go
+++ b/go/game/ai.go
@@ -68,7 +68,7 @@ func NewUnitAI(s *State, u *Unit) *UnitAI {
aiDesc := u.Card().getCanonicalValues("ai")[0]
x, err := strconv.Atoi(strings.Split(aiDesc, " ")[1])
if err != nil {
- log.Fatalf("Invalid wandering AI description %s", aiDesc)
+ log.Panicf("Invalid wandering AI description %s", aiDesc)
}
go ai.Execute(func(ai *UnitAI) { WanderingAI(ai, x) })
case "target-oriented":
@@ -112,7 +112,7 @@ func (m *Map) generateMapGraphFor(u *Unit) *dijkstra.Graph {
}
err := graph.AddMappedArc(tId, neighbour.Position.String(), int64(cost))
if err != nil {
- log.Fatalf("Failed to add mapped arc: %s", err)
+ log.Panicf("Failed to add mapped arc: %s", err)
}
}
}
@@ -123,12 +123,12 @@ func (m *Map) generateMapGraphFor(u *Unit) *dijkstra.Graph {
func findPathTo(graph *dijkstra.Graph, u *Unit, pos Position) (dijkstra.BestPath, error) {
srcId, err := graph.GetMapping(TileOrContainingPermTile(u).Position.String())
if err != nil {
- log.Fatalf("No mapping %s in Graph: %s", u.Tile().Position.String(), err)
+ log.Panicf("No mapping %s in Graph: %s", u.Tile().Position.String(), err)
}
destId, err := graph.GetMapping(pos.String())
if err != nil {
- log.Fatalf("No mapping %s in Graph: %s", pos.String(), err)
+ log.Panicf("No mapping %s in Graph: %s", pos.String(), err)
}
return graph.Shortest(srcId, destId)
diff --git a/go/game/artifact.go b/go/game/artifact.go
index e340b15a..2cc0e1d7 100644
--- a/go/game/artifact.go
+++ b/go/game/artifact.go
@@ -26,7 +26,7 @@ func NewArtifact(card *Card, tile *Tile, owner *Player) *Artifact {
var err error
a.Solid, err = strconv.Atoi(tokens[1])
if err != nil {
- log.Fatalf("Invalid Solid definition %s\n", e)
+ log.Panicf("Invalid Solid definition %s\n", e)
}
}
}
diff --git a/go/game/attack.go b/go/game/attack.go
index 0d3bef7c..08bc9567 100644
--- a/go/game/attack.go
+++ b/go/game/attack.go
@@ -49,14 +49,14 @@ func parseAttack(attack interface{}) Attack {
tokens := strings.Split(attackStr, " ")
a, err := strconv.Atoi(tokens[0])
if err != nil {
- log.Fatalf("Attack %s has no valid Damage value\n", attackStr)
+ log.Panicf("Attack %s has no valid Damage value\n", attackStr)
}
r := 1
if len(tokens) == 3 {
r, err = strconv.Atoi(tokens[2])
if err != nil {
- log.Fatalf("Attack %s has no valid Range value\n", attackStr)
+ log.Panicf("Attack %s has no valid Range value\n", attackStr)
}
}
diff --git a/go/game/card.go b/go/game/card.go
index 7701b5f2..f305634b 100644
--- a/go/game/card.go
+++ b/go/game/card.go
@@ -179,12 +179,12 @@ func (card *Card) parseDefinition(definition []byte) {
data := make(map[interface{}]interface{})
err := yaml.Unmarshal(definition, &data)
if err != nil {
- log.Fatalf("parsing %s failed with: %v\n", definition, err)
+ log.Panicf("parsing %s failed with: %v\n", definition, err)
}
name, found := data["name"]
if !found {
- log.Fatalf("no name in card yaml %s\n", definition)
+ log.Panicf("no name in card yaml %s\n", definition)
}
delete(data, "name")
@@ -195,12 +195,12 @@ func (card *Card) parseDefinition(definition []byte) {
cardName := nameYml["en"]
card.Name = cardName.(string)
default:
- log.Fatalf("Unexpected type %T of yml card field 'Name'\n", name)
+ log.Panicf("Unexpected type %T of yml card field 'Name'\n", name)
}
t, found := data["type"]
if !found {
- log.Fatalf("no type in card yaml %s\n", definition)
+ log.Panicf("no type in card yaml %s\n", definition)
}
delete(data, "type")
@@ -326,7 +326,7 @@ func (c *Card) IsToken() bool {
if v, found := c.Values["token"]; found {
b, ok := v.(bool)
if !ok {
- log.Fatalf("Invalid value for %s token value: %v", c.Name, v)
+ log.Panicf("Invalid value for %s token value: %v", c.Name, v)
}
return b
}
diff --git a/go/game/cardParsing.go b/go/game/cardParsing.go
index ad231fd2..934a487f 100644
--- a/go/game/cardParsing.go
+++ b/go/game/cardParsing.go
@@ -122,7 +122,7 @@ func (impl *dynamicCardImplementation) parseFullAction(fullAction string) {
tokens := strings.SplitN(string(find), " ", 3)
gain, err := strconv.Atoi(tokens[1])
if err != nil {
- log.Fatalf("Failed to parse resource gain full action: %s", err)
+ log.Panicf("Failed to parse resource gain full action: %s", err)
}
resolveProto := func(a Action) ActionResolveFunc {
@@ -185,7 +185,7 @@ func parseLocation(location string) func(interface{}, *State) []*Tile {
var err error
r, err = strconv.Atoi(rangeStr)
if err != nil {
- log.Fatalf("Unsupported range pattern \"%s\" in \"%s\"", "range "+rangeStr, location)
+ log.Panicf("Unsupported range pattern \"%s\" in \"%s\"", "range "+rangeStr, location)
}
}
diff --git a/go/game/kraken.go b/go/game/kraken.go
index 97929814..8c82fc9d 100644
--- a/go/game/kraken.go
+++ b/go/game/kraken.go
@@ -94,7 +94,7 @@ func (ctrl *KrakenControl) krakenTurn() {
ctrl.awaitGameStateSync()
ctrl.turn++
if ctrl.turn != kraken.Turn {
- log.Fatalf("Ai turn out of sync %d != %d", ctrl.turn, kraken.Turn)
+ log.Panicf("Ai turn out of sync %d != %d", ctrl.turn, kraken.Turn)
}
for {
diff --git a/go/game/marks.go b/go/game/marks.go
index 0764b531..68b14a85 100644
--- a/go/game/marks.go
+++ b/go/game/marks.go
@@ -33,7 +33,7 @@ func (mark PermanentMark) String() string {
case faith:
return "faith"
default:
- log.Fatalf("Unknown permanent mark %d", mark)
+ log.Panicf("Unknown permanent mark %d", mark)
return ""
}
}
diff --git a/go/game/movement.go b/go/game/movement.go
index 1a3f03c4..b8a8dc56 100644
--- a/go/game/movement.go
+++ b/go/game/movement.go
@@ -30,7 +30,7 @@ func parseMovement(desc interface{}) Movement {
tokens := strings.Split(movementStr, " ")
r, err := strconv.Atoi(tokens[0])
if err != nil {
- log.Fatalf("Invalid movement description %s", movementStr)
+ log.Panicf("Invalid movement description %s", movementStr)
}
swimming := false
diff --git a/go/game/permanent.go b/go/game/permanent.go
index f211179b..91aff890 100644
--- a/go/game/permanent.go
+++ b/go/game/permanent.go
@@ -55,7 +55,7 @@ type PermanentBase struct {
func NewPermanentBase(card *Card, tile *Tile, owner *Player) PermanentBase {
if tile != nil && tile.Permanent != nil {
- log.Fatalf("Tile at %v already occupied by %v", tile.Position, tile.Permanent)
+ log.Panicf("Tile at %v already occupied by %v", tile.Position, tile.Permanent)
}
return PermanentBase{
diff --git a/go/game/player.go b/go/game/player.go
index a69f2cd3..802cafeb 100644
--- a/go/game/player.go
+++ b/go/game/player.go
@@ -153,14 +153,14 @@ func (p *Player) PromptHandCardSelection(min, max int) []*Card {
case *TargetSelection:
err := a.CheckTargets(p.gameState)
if err != nil {
- log.Fatalf("Invalid hand card selection: %v", err)
+ log.Panicf("Invalid hand card selection: %v", err)
}
return utils.InterfaceSliceToTypedSlice[*Card](a.Target().sel)
case *PassPriority:
return nil
default:
- log.Fatalf("Unexpected response type %T for hand card selection", a)
+ log.Panicf("Unexpected response type %T for hand card selection", a)
}
return nil
}
diff --git a/go/game/range.go b/go/game/range.go
index 5f9d8e80..07a6e234 100644
--- a/go/game/range.go
+++ b/go/game/range.go
@@ -17,7 +17,7 @@ func DistanceBetweenPositions(origin, pos Position) int {
}
if int(abs) < 0 {
- log.Fatalf("Distance smaller than 0")
+ log.Panicf("Distance smaller than 0")
}
return int(abs)
}
diff --git a/go/game/stack.go b/go/game/stack.go
index 78a5ff41..a06af9f3 100644
--- a/go/game/stack.go
+++ b/go/game/stack.go
@@ -24,7 +24,7 @@ func (s *Stack) push(a Action) {
func (s *Stack) pop() {
l := len(s.Actions)
if l == 0 {
- log.Fatalf("Can not pop from empty stack")
+ log.Panicf("Can not pop from empty stack")
}
a := s.Actions[l-1]
diff --git a/go/game/state.go b/go/game/state.go
index a5a9de82..7fa6e1bf 100644
--- a/go/game/state.go
+++ b/go/game/state.go
@@ -107,7 +107,7 @@ func (s *State) stateBasedActions() {
func (s *State) IsValidPlay(a *PlayAction) error {
if s.ActivePhase != Phases.ActionPhase {
- log.Fatalf("Play actions can only be declared during one's actions phase")
+ log.Panicf("Play actions can only be declared during one's actions phase")
}
if a.Card.IsPermanent() {
@@ -219,7 +219,7 @@ func (s *State) ValidateAction(a Action) (err error) {
func (s *State) pushAction(a Action) {
if !a.PayCosts(s) {
- log.Fatalf("Cost for %s could not be paid", a)
+ log.Panicf("Cost for %s could not be paid", a)
}
s.Stack.push(a)
@@ -458,7 +458,7 @@ func (s *State) WaterSpawnTiles(p *Player) []*Tile {
func (s *State) AvailableSpawnTiles(p *Player, c *Card) []*Tile {
if !c.IsPermanent() {
- log.Fatalf("AvailableSpawnTiles called for %s", c.Type.String())
+ log.Panicf("AvailableSpawnTiles called for %s", c.Type.String())
}
candidates := c.Impl.spawnTiles(s, p)
diff --git a/go/game/store.go b/go/game/store.go
index 73153980..92943010 100644
--- a/go/game/store.go
+++ b/go/game/store.go
@@ -15,7 +15,7 @@ func NewStore() *Store {
func (s *Store) AddCard(card *Card) {
if !card.IsBuyable() {
- log.Fatalf("Non buyable card %s can not be added to a store", card.Name)
+ log.Panicf("Non buyable card %s can not be added to a store", card.Name)
}
s.PileOfCardsBase.AddCard(card)
}
diff --git a/go/game/targets.go b/go/game/targets.go
index 440d8922..2ef88665 100644
--- a/go/game/targets.go
+++ b/go/game/targets.go
@@ -97,18 +97,18 @@ func (d *TargetDesc) requirement() TargetRequirement {
tokens := strings.SplitN(d.req, "-", 2)
min, err := strconv.Atoi(tokens[0])
if err != nil {
- log.Fatalf("failed to parse target requirement %s: %v", d.req, err)
+ log.Panicf("failed to parse target requirement %s: %v", d.req, err)
}
max, err := strconv.Atoi(tokens[1])
if err != nil {
- log.Fatalf("failed to parse target requirement %s: %v", d.req, err)
+ log.Panicf("failed to parse target requirement %s: %v", d.req, err)
}
return TargetRequirement{min, max}
}
x, err := strconv.Atoi(d.req)
if err != nil {
- log.Fatalf("failed to parse target requirement %s: %v", d.req, err)
+ log.Panicf("failed to parse target requirement %s: %v", d.req, err)
}
return TargetRequirement{x, x}
}
@@ -231,7 +231,7 @@ func enemyPermanentTargetConstraint(action Action) TargetConstraintFunc {
case Permanent:
sourceController = source.Controller()
default:
- log.Fatalf("Unhandled source type %T in enemyPermanentTargetConstraint", source)
+ log.Panicf("Unhandled source type %T in enemyPermanentTargetConstraint", source)
}
return func(t interface{}) (err error) {
@@ -270,7 +270,7 @@ func posFromTileOrPermanent(tileOrPermanent interface{}) Position {
case Permanent:
return obj.Tile().Position
default:
- log.Fatalf("Unhandled source type %T in posFromTileOrPermanent", tileOrPermanent)
+ log.Panicf("Unhandled source type %T in posFromTileOrPermanent", tileOrPermanent)
return INVALID_POSITION()
}
}
@@ -321,7 +321,7 @@ func parsePermanentTargetConstraint(desc string, s *State, action Action) []Targ
tokens := strings.SplitN(desc, " in range ", 2)
r, err := strconv.Atoi(tokens[1])
if err != nil {
- log.Fatalf("Invalid range %s in target constraint %s", tokens[1], desc)
+ log.Panicf("Invalid range %s in target constraint %s", tokens[1], desc)
}
constraints = append(constraints, rangeTargetConstraint(action.Source(), r))
}
@@ -340,7 +340,7 @@ func parseUnitTargetConstraint(desc string, s *State, action Action) []TargetCon
tokens := strings.SplitN(desc, " in range ", 2)
r, err := strconv.Atoi(tokens[1])
if err != nil {
- log.Fatalf("Invalid range %s in target constraint %s", tokens[1], desc)
+ log.Panicf("Invalid range %s in target constraint %s", tokens[1], desc)
}
constraints = append(constraints, rangeTargetConstraint(action.Source(), r))
}
@@ -366,7 +366,7 @@ func relaxedTileTarget(action Action, t interface{}) *Tile {
case *Unit:
return t.Tile()
default:
- log.Fatalf("Not handled target type %T", t)
+ log.Panicf("Not handled target type %T", t)
}
return nil
@@ -405,7 +405,7 @@ func parseTileTargetConstraint(desc string, s *State, action Action) []TargetCon
if strings.Contains(desc, "spawn") {
if player == nil {
- log.Fatalf("Not implemented spawn tile constraint for %T", action)
+ log.Panicf("Not implemented spawn tile constraint for %T", action)
}
constraints = append(constraints, func(t interface{}) (err error) {
@@ -422,7 +422,7 @@ func parseTileTargetConstraint(desc string, s *State, action Action) []TargetCon
tile := relaxedTileTarget(action, t)
if card == nil {
- log.Fatalf("Not implemented availability tile constraint for %T", action)
+ log.Panicf("Not implemented availability tile constraint for %T", action)
}
if tile.IsAvailableForCard(card) {
@@ -480,7 +480,7 @@ func parseCardTargetConstraint(desc string, s *State, action Action) []TargetCon
strings.Contains(desc, "discard pile") {
if player == nil {
- log.Fatalf("Not implemented PileOfCards constraint for %T", action)
+ log.Panicf("Not implemented PileOfCards constraint for %T", action)
}
var pocs []PileOfCards
@@ -534,6 +534,6 @@ func targetCandidates(desc string, s *State) []interface{} {
return utils.TypedSliceToInterfaceSlice(s.Map.AllTiles())
}
- log.Fatalf("Unimplemented target options for %s", desc)
+ log.Panicf("Unimplemented target options for %s", desc)
return nil
}
diff --git a/go/game/unit.go b/go/game/unit.go
index c6c1839a..4851a037 100644
--- a/go/game/unit.go
+++ b/go/game/unit.go
@@ -90,7 +90,7 @@ func (u *Unit) onUpkeep() {
func (u *Unit) move(s *State, tile *Tile) {
if !u.IsAvailableTile(tile) {
- log.Fatalf("moving to not available tile %v", tile)
+ log.Panicf("moving to not available tile %v", tile)
}
if u.containingPerm != nil {
diff --git a/go/ui/cardGrid.go b/go/ui/cardGrid.go
index abe1d60b..f6720ca1 100644
--- a/go/ui/cardGrid.go
+++ b/go/ui/cardGrid.go
@@ -35,7 +35,7 @@ func NewCardGrid(x, y, width, height int, scale float64, cards game.PileOfCards)
func (w *CardGrid) Columns(columns int) *CardGrid {
if w.rows != 0 {
- log.Fatalf("CardGrid can not have fixed columns and rows")
+ log.Panicf("CardGrid can not have fixed columns and rows")
}
w.columns = columns
return w
@@ -43,7 +43,7 @@ func (w *CardGrid) Columns(columns int) *CardGrid {
func (w *CardGrid) Rows(rows int) *CardGrid {
if w.columns != 0 {
- log.Fatalf("CardGrid can not have fixed columns and rows")
+ log.Panicf("CardGrid can not have fixed columns and rows")
}
w.rows = rows
return w
@@ -81,7 +81,7 @@ func (w *CardGrid) render() *ebiten.Image {
width = int(float64(w.columns) * w.cardWidth)
height = int(math.Ceil(float64(nCards)/float64(w.columns)) * w.cardHeight)
} else {
- log.Fatalf("CardGrid must have have fixed columns or rows")
+ log.Panicf("CardGrid must have have fixed columns or rows")
}
w.gridCards = nCards
w.grid = ebiten.NewImage(width, height)
@@ -90,7 +90,7 @@ func (w *CardGrid) render() *ebiten.Image {
for i, card := range cards {
cardImg := assets.GetCard(card.Path(), "en")
if cardImg == nil {
- log.Fatalf("No image found for %s", card.Path())
+ log.Panicf("No image found for %s", card.Path())
}
op := &ebiten.DrawImageOptions{}
diff --git a/go/ui/mapView.go b/go/ui/mapView.go
index 697eb774..155750b4 100644
--- a/go/ui/mapView.go
+++ b/go/ui/mapView.go
@@ -138,7 +138,7 @@ func getPermanentSymbol(p game.Permanent, i int) *ebiten.Image {
symbol := fmt.Sprintf("%c%d", unicode.ToUpper(rune(p.Card().Type.String()[0])), i)
permanentSymbol = assets.GetGenericSymbol(symbol)
if permanentSymbol == nil {
- log.Fatalf("Failed to generate generic symbol %s", symbol)
+ log.Panicf("Failed to generate generic symbol %s", symbol)
}
}