aboutsummaryrefslogtreecommitdiff
path: root/go/webtools/main.go
diff options
context:
space:
mode:
Diffstat (limited to 'go/webtools/main.go')
-rw-r--r--go/webtools/main.go48
1 files changed, 48 insertions, 0 deletions
diff --git a/go/webtools/main.go b/go/webtools/main.go
new file mode 100644
index 00000000..c468f4dd
--- /dev/null
+++ b/go/webtools/main.go
@@ -0,0 +1,48 @@
+package main
+
+import (
+ "math/rand"
+ "syscall/js"
+ "time"
+
+ "muhq.space/muhqs-game/go/game"
+)
+
+var r *rand.Rand
+
+func jSRandomTileFromMap() js.Func {
+ jsonFunc := js.FuncOf(func(this js.Value, args []js.Value) any {
+ if len(args) != 2 {
+ return "Invalid number of arguments passed"
+ }
+
+ mapData := args[0].String()
+
+ symbols := make([]string, 0, args[1].Length())
+ for i := 0; i < args[1].Length(); i++ {
+ symbol := args[1].Index(i).String()
+ symbols = append(symbols, symbol)
+ }
+
+ position, err := randomTileFromMap(mapData, symbols)
+ if err != nil {
+ return err.Error()
+ }
+ return map[string]interface{}{"y": position.Y + 1, "x": position.X + 1}
+ })
+ return jsonFunc
+}
+
+func randomTileFromMap(mapData string, symbols []string) (game.Position, error) {
+ m, err := game.ParseMap([]byte(mapData))
+ if err != nil {
+ return game.INVALID_POSITION(), err
+ }
+ return m.RandomTileFromSymbols(r, symbols)
+}
+
+func main() {
+ r = rand.New(rand.NewSource(time.Now().UnixNano()))
+ js.Global().Set("randomTileFromSymbol", jSRandomTileFromMap())
+ <-make(chan bool)
+}