diff options
Diffstat (limited to 'go/webtools')
| -rw-r--r-- | go/webtools/main.go | 48 |
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) +} |
