//go:build js && wasm // +build js,wasm package main import ( "fmt" "syscall/js" doodle "git.kirsle.net/SketchyMaze/doodle/pkg" "git.kirsle.net/SketchyMaze/doodle/pkg/balance" "git.kirsle.net/SketchyMaze/doodle/pkg/branding" "git.kirsle.net/SketchyMaze/doodle/pkg/log" "git.kirsle.net/go/render" "git.kirsle.net/go/render/canvas" ) func main() { fmt.Printf("Hello world\n") // testRawCanvas() // Enable workarounds. balance.DisableChunkTextureCache = true js.Global().Get("sessionStorage").Call("clear") // HTML5 Canvas engine. engine, _ := canvas.New("canvas") engine.AddEventListeners() game := doodle.New(true, engine) game.SetupEngine() doodle.DebugOverlay = true // Manually inform Doodle of the canvas size since it can't control // the size on its own. w, h := engine.WindowSize() game.SetWindowSize(w, h) // game.Goto(&doodle.GUITestScene{}) // game.Goto(&doodle.EditorScene{}) game.Run() } func testRawCanvas() { engine, _ := canvas.New("canvas") engine.SetTitle( fmt.Sprintf("%s v%s", branding.AppName, branding.Version), ) fmt.Printf("Got engine: %+v\n", engine) engine.Clear(render.Green) for pt := range render.IterLine(render.NewPoint(20, 20), render.NewPoint(300, 300)) { engine.DrawPoint(render.Red, pt) } engine.DrawLine(render.Blue, render.NewPoint(20, 300), render.NewPoint(300, 20)) engine.DrawRect(render.Black, render.Rect{ X: 5, Y: 5, W: 10, H: 10, }) engine.DrawBox(render.White, render.Rect{ X: 5, Y: 5, W: 10, H: 10, }) engine.DrawBox(render.Purple, render.Rect{ X: 25, Y: 5, W: 10, H: 10, }) engine.DrawText(render.Text{ Text: "Hello world!", FontFilename: "DejaVuSans", Size: 14, }, render.NewPoint(400, 400)) size, _ := engine.ComputeTextRect(render.Text{ Text: "Hello world! blah blah", FontFilename: "DejaVuSans", Size: 14, }) log.Info("text rect: %+v", size) _ = engine }