diff options
| author | Florian Fischer <florian.fischer@muhq.space> | 2022-12-27 14:29:39 +0100 |
|---|---|---|
| committer | Florian Fischer <florian.fischer@muhq.space> | 2025-08-20 15:46:38 +0200 |
| commit | d6b5eeaa5e639c5ab89b5e1c93075a1b765794dc (patch) | |
| tree | f87422bb91c2197f88aa8d29092592858764049d /go/assets | |
| parent | 3c2ee4ee48480a28dc606878503f314ec8862d45 (diff) | |
| download | muhqs-game-d6b5eeaa5e639c5ab89b5e1c93075a1b765794dc.tar.gz muhqs-game-d6b5eeaa5e639c5ab89b5e1c93075a1b765794dc.zip | |
intermediate commit
Diffstat (limited to 'go/assets')
| -rw-r--r-- | go/assets/retrieve.go | 100 |
1 files changed, 100 insertions, 0 deletions
diff --git a/go/assets/retrieve.go b/go/assets/retrieve.go new file mode 100644 index 00000000..d9b40643 --- /dev/null +++ b/go/assets/retrieve.go @@ -0,0 +1,100 @@ +package assets + +import ( + "image/color" + "image/png" + "log" + "net/http" + "path" + "strings" + + "github.com/hajimehoshi/ebiten/v2" + "github.com/hajimehoshi/ebiten/v2/text" + + "muhq.space/muhqs-game/go/font" +) + +const ( + PROTOCOL string = "http://" + BASE_URL string = "localhost:8000/" + IMAGE_URL_PART string = "html/build/latex-build" + TILE_URL_PART string = "assets/tiles" + SYMBOL_URL_PART string = "assets/symbols/40x40" +) + +func retrieveAsset(path string) *ebiten.Image { + log.Printf("loading %s\n", path) + resp, err := http.Get(PROTOCOL + path) + if err != nil { + log.Println(err) + return nil + } + defer resp.Body.Close() + + if resp.StatusCode != http.StatusOK { + return nil + } + + img, err := png.Decode(resp.Body) + if err != nil { + log.Fatal("decoding ", err) + } + return ebiten.NewImageFromImage(img) +} + +var cards = map[string]map[string]map[string]*ebiten.Image{} + +func GetCard(cardPath string, language string) *ebiten.Image { + card := path.Base(cardPath) + set := path.Dir(cardPath) + img, found := cards[language][set][card] + if !found { + url := path.Join(BASE_URL, IMAGE_URL_PART, language, cardPath+".png") + img = retrieveAsset(url) + + if cards[language] == nil { + cards[language] = map[string]map[string]*ebiten.Image{} + } + + if cards[language][set] == nil { + cards[language][set] = map[string]*ebiten.Image{} + } + + cards[language][set][card] = img + } + return img +} + +var tiles = map[string]*ebiten.Image{} + +func GetTile(tile string) *ebiten.Image { + img, found := tiles[tile] + if !found { + url := path.Join(BASE_URL, TILE_URL_PART, strings.Replace(tile, " ", "_", -1)+".png") + img = retrieveAsset(url) + tiles[tile] = img + } + return img +} + +var symbols = map[string]*ebiten.Image{} + +func GetSymbol(symbol string) *ebiten.Image { + img, found := symbols[symbol] + if !found { + url := path.Join(BASE_URL, SYMBOL_URL_PART, symbol+".png") + img = retrieveAsset(url) + symbols[symbol] = img + } + return img +} + +func GetGenericSymbol(symbol string) *ebiten.Image { + img, found := symbols[symbol] + if !found { + genericBase := GetSymbol("generic_base") + img = ebiten.NewImageFromImage(genericBase) + text.Draw(img, symbol, font.Font24, 5, 27, color.Black) + } + return img +} |
