aboutsummaryrefslogtreecommitdiff
path: root/go/assets
diff options
context:
space:
mode:
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
+}