From d6b5eeaa5e639c5ab89b5e1c93075a1b765794dc Mon Sep 17 00:00:00 2001 From: Florian Fischer Date: Tue, 27 Dec 2022 14:29:39 +0100 Subject: intermediate commit --- go/webtools/main.go | 48 ++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 48 insertions(+) create mode 100644 go/webtools/main.go (limited to 'go/webtools') 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) +} -- cgit v1.2.3