diff options
| author | Florian Fischer <florian.fischer@muhq.space> | 2022-12-27 14:29:39 +0100 |
|---|---|---|
| committer | Florian Fischer <florian.fischer@muhq.space> | 2025-08-20 15:46:38 +0200 |
| commit | d6b5eeaa5e639c5ab89b5e1c93075a1b765794dc (patch) | |
| tree | f87422bb91c2197f88aa8d29092592858764049d /go/webtools | |
| parent | 3c2ee4ee48480a28dc606878503f314ec8862d45 (diff) | |
| download | muhqs-game-d6b5eeaa5e639c5ab89b5e1c93075a1b765794dc.tar.gz muhqs-game-d6b5eeaa5e639c5ab89b5e1c93075a1b765794dc.zip | |
intermediate commit
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) +} |
