diff options
| author | Florian Fischer <florian.fischer@muhq.space> | 2023-02-15 16:41:29 +0100 |
|---|---|---|
| committer | Florian Fischer <florian.fischer@muhq.space> | 2025-01-27 16:43:50 +0100 |
| commit | f9fef6046fdc6895d5eaa7fc15d9b4f4a02becae (patch) | |
| tree | 7f3ffdd01af02d60c78ea65bafa75384cf140aac | |
| parent | 0edb119b497bf1283f976693b02e044033d4de08 (diff) | |
| download | muhqs-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.go | 4 | ||||
| -rw-r--r-- | go/game/ai.go | 8 | ||||
| -rw-r--r-- | go/game/artifact.go | 2 | ||||
| -rw-r--r-- | go/game/attack.go | 4 | ||||
| -rw-r--r-- | go/game/card.go | 10 | ||||
| -rw-r--r-- | go/game/cardParsing.go | 4 | ||||
| -rw-r--r-- | go/game/kraken.go | 2 | ||||
| -rw-r--r-- | go/game/marks.go | 2 | ||||
| -rw-r--r-- | go/game/movement.go | 2 | ||||
| -rw-r--r-- | go/game/permanent.go | 2 | ||||
| -rw-r--r-- | go/game/player.go | 4 | ||||
| -rw-r--r-- | go/game/range.go | 2 | ||||
| -rw-r--r-- | go/game/stack.go | 2 | ||||
| -rw-r--r-- | go/game/state.go | 6 | ||||
| -rw-r--r-- | go/game/store.go | 2 | ||||
| -rw-r--r-- | go/game/targets.go | 24 | ||||
| -rw-r--r-- | go/game/unit.go | 2 | ||||
| -rw-r--r-- | go/ui/cardGrid.go | 8 | ||||
| -rw-r--r-- | go/ui/mapView.go | 2 |
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) } } |
