aboutsummaryrefslogtreecommitdiff
path: root/go/assets
diff options
context:
space:
mode:
authorFlorian Fischer <florian.fischer@muhq.space>2022-12-27 14:29:39 +0100
committerFlorian Fischer <florian.fischer@muhq.space>2025-08-20 15:46:38 +0200
commitd6b5eeaa5e639c5ab89b5e1c93075a1b765794dc (patch)
treef87422bb91c2197f88aa8d29092592858764049d /go/assets
parent3c2ee4ee48480a28dc606878503f314ec8862d45 (diff)
downloadmuhqs-game-d6b5eeaa5e639c5ab89b5e1c93075a1b765794dc.tar.gz
muhqs-game-d6b5eeaa5e639c5ab89b5e1c93075a1b765794dc.zip
intermediate commit
Diffstat (limited to 'go/assets')
-rw-r--r--go/assets/retrieve.go100
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
+}