A card game engine for TCGs, primarily Magic: The Gathering but with support for others
0
fork

Configure Feed

Select the types of activity you want to include in your feed.

Changing in loading content to a separate module

authored by

Cass Unterholzner and committed by
Tangled
094298ab 842e55db

+87 -52
+63
content/cards.go
··· 1 + package content 2 + 3 + import ( 4 + "embed" 5 + "encoding/json" 6 + 7 + "github.com/google/uuid" 8 + 9 + "tangled.org/cass.cityboundforest.com/managrove/game" 10 + ) 11 + 12 + //go:embed cards/*.json 13 + var cards embed.FS 14 + 15 + var sets = []string{ 16 + "test", 17 + } 18 + 19 + func LoadCard(oracle_id uuid.UUID, set *string) (game.Card, error) { 20 + if set == nil { 21 + for _, file := range sets { 22 + data, err := cards.ReadFile(file + ".json") 23 + 24 + if err != nil { 25 + return game.Card{}, err 26 + } 27 + 28 + var cards map[string]game.Card 29 + 30 + if err = json.Unmarshal(data, &cards); err != nil { 31 + return game.Card{}, err 32 + } 33 + 34 + card, ok := cards[oracle_id.String()] 35 + 36 + if ok { 37 + return card, nil 38 + } 39 + } 40 + 41 + return game.Card{}, game.NewCardNotFoundError(oracle_id) 42 + } else { 43 + data, err := cards.ReadFile(*set + ".json") 44 + 45 + if err != nil { 46 + return game.Card{}, err 47 + } 48 + 49 + var cards map[string]game.Card 50 + 51 + if err = json.Unmarshal(data, &cards); err != nil { 52 + return game.Card{}, err 53 + } 54 + 55 + card, ok := cards[oracle_id.String()] 56 + 57 + if ok { 58 + return card, nil 59 + } else { 60 + return game.Card{}, game.NewCardNotFoundError(oracle_id) 61 + } 62 + } 63 + }
-41
game/cards.go
··· 1 - package game 2 - 3 - import ( 4 - "embed" 5 - "encoding/json" 6 - "fmt" 7 - ) 8 - 9 - //go:embed cards/*.json 10 - var content embed.FS 11 - 12 - func LoadCard(card_name string) (Card, error) { 13 - txt_data, err := content.ReadFile(fmt.Sprintf("cards/%s", card_name)) 14 - 15 - if err != nil { 16 - return Card{}, err 17 - } 18 - 19 - var data Card 20 - err = json.Unmarshal(txt_data, &data) 21 - 22 - if err != nil { 23 - return Card{}, err 24 - } 25 - 26 - return data, nil 27 - } 28 - 29 - func LoadCards(file_name string, cards *[]Card) error { 30 - txt_data, err := content.ReadFile(fmt.Sprintf("cards/%s", file_name)) 31 - 32 - if err != nil { 33 - return err 34 - } 35 - 36 - if err = json.Unmarshal(txt_data, cards); err != nil { 37 - return err 38 - } 39 - 40 - return nil 41 - }
+3 -3
game/cards/test.json content/cards/test.json
··· 1 - [ 2 - { 1 + { 2 + "84ae9ffe-878f-4769-b18f-214658b92379": { 3 3 "name": "River Bear", 4 4 "cost": { 5 5 "game": "mtg", ··· 17 17 "defense": 2, 18 18 "text": "" 19 19 } 20 - ] 20 + }
+21 -1
game/error.go
··· 1 1 package game 2 2 3 + import ( 4 + "fmt" 5 + 6 + "github.com/google/uuid" 7 + ) 8 + 3 9 type ManaGroveError struct{} 4 10 5 - func (e *ManaGroveError) Error() string { 11 + func (e ManaGroveError) Error() string { 6 12 return "Error running game" 7 13 } 14 + 15 + type ManaGroveCardNotFoundError struct { 16 + oracle_id uuid.UUID 17 + } 18 + 19 + func NewCardNotFoundError(oracle_id uuid.UUID) ManaGroveCardNotFoundError { 20 + return ManaGroveCardNotFoundError{ 21 + oracle_id, 22 + } 23 + } 24 + 25 + func (e ManaGroveCardNotFoundError) Error() string { 26 + return fmt.Sprintf("Could not find card with Oracle ID %s", e.oracle_id.String()) 27 + }
-7
main.go
··· 4 4 "log" 5 5 6 6 "github.com/hajimehoshi/ebiten/v2" 7 - 8 7 "tangled.org/cass.cityboundforest.com/managrove/game" 9 8 ) 10 9 11 10 func main() { 12 11 ebiten.SetWindowSize(1920, 1080) 13 12 ebiten.SetWindowTitle("Hello, World!") 14 - 15 - var cards []game.Card 16 - 17 - if err := game.LoadCards("test.json", &cards); err != nil { 18 - log.Fatal(err) 19 - } 20 13 21 14 game, err := game.NewGame([]string{"Player 1", "Player 2", "Player 3", "Player 4"}) 22 15