add some more games
improve rendering by drawing only when needed
This commit is contained in:
parent
0bd4180b85
commit
0308227dc5
@ -22,7 +22,9 @@ steps:
|
|||||||
- name : build wasm
|
- name : build wasm
|
||||||
image: golang:latest
|
image: golang:latest
|
||||||
commands:
|
commands:
|
||||||
- GOOS=js GOARCH=wasm go build -o main.wasm ./cmd/web
|
- GOOS=js GOARCH=wasm go build -o main.wasm ./cmd/web
|
||||||
|
- cp ./cmd/web/html/index.html .
|
||||||
|
- cp "$(go env GOROOT)/misc/wasm/wasm_exec.js" .
|
||||||
|
|
||||||
- name: publish
|
- name: publish
|
||||||
image: plugins/gitea-release
|
image: plugins/gitea-release
|
||||||
@ -31,6 +33,7 @@ steps:
|
|||||||
- build windows
|
- build windows
|
||||||
- build linux
|
- build linux
|
||||||
- build mac
|
- build mac
|
||||||
|
- build wasm
|
||||||
# This step is only run when a branch is tagged in Gitea.
|
# This step is only run when a branch is tagged in Gitea.
|
||||||
when:
|
when:
|
||||||
event:
|
event:
|
||||||
@ -43,5 +46,8 @@ steps:
|
|||||||
- mac_test
|
- mac_test
|
||||||
- linux_test
|
- linux_test
|
||||||
- windows_test.exe
|
- windows_test.exe
|
||||||
|
- main.wasm
|
||||||
|
- index.html
|
||||||
|
- wasm_exec.js
|
||||||
checksum:
|
checksum:
|
||||||
- sha1
|
- sha1
|
50
cmd/web/html/index.html
Normal file
50
cmd/web/html/index.html
Normal file
@ -0,0 +1,50 @@
|
|||||||
|
<html>
|
||||||
|
|
||||||
|
<head>
|
||||||
|
<meta charset="utf-8" />
|
||||||
|
<title>Go WebAssembly - Plot</title>
|
||||||
|
<meta name="author" content="Mark Farnan" />
|
||||||
|
<meta name="description" content="Prototype PLotter with GO, Canvas and WebAssembly" />
|
||||||
|
<meta name="theme-color" content="#000000" />
|
||||||
|
<meta name="viewport" content="width=device-width,initial-scale=1.0" />
|
||||||
|
<style>
|
||||||
|
body {
|
||||||
|
height: 100%;
|
||||||
|
width: 100%;
|
||||||
|
padding: 0;
|
||||||
|
margin: 0;
|
||||||
|
background-color: #FFFFFF;
|
||||||
|
color: #000000;
|
||||||
|
font-family: Arial, Helvetica, sans-serif
|
||||||
|
}
|
||||||
|
</style>
|
||||||
|
|
||||||
|
<!--
|
||||||
|
Add the following polyfill for Microsoft Edge 17/18 support:
|
||||||
|
<script src="https://cdn.jsdelivr.net/npm/text-encoding@0.7.0/lib/encoding.min.js"></script>
|
||||||
|
(see https://caniuse.com/#feat=textencoder)
|
||||||
|
-->
|
||||||
|
<script type="text/javascript" src="./wasm_exec.js"></script>
|
||||||
|
<script>
|
||||||
|
if (!WebAssembly.instantiateStreaming) { // polyfill
|
||||||
|
WebAssembly.instantiateStreaming = async (resp, importObject) => {
|
||||||
|
const source = await (await resp).arrayBuffer();
|
||||||
|
return await WebAssembly.instantiate(source, importObject);
|
||||||
|
};
|
||||||
|
}
|
||||||
|
|
||||||
|
const go = new Go();
|
||||||
|
WebAssembly.instantiateStreaming(fetch('main.wasm'), go.importObject).then(res => {
|
||||||
|
go.run(res.instance)
|
||||||
|
})
|
||||||
|
</script>
|
||||||
|
<style>
|
||||||
|
</style>
|
||||||
|
</head>
|
||||||
|
|
||||||
|
<body>
|
||||||
|
|
||||||
|
|
||||||
|
</body>
|
||||||
|
|
||||||
|
</html>
|
@ -2,8 +2,8 @@ package main
|
|||||||
|
|
||||||
import (
|
import (
|
||||||
"image/color"
|
"image/color"
|
||||||
"time"
|
|
||||||
"sync"
|
"sync"
|
||||||
|
"time"
|
||||||
|
|
||||||
"github.com/llgcode/draw2d/draw2dimg"
|
"github.com/llgcode/draw2d/draw2dimg"
|
||||||
"github.com/llgcode/draw2d/draw2dkit"
|
"github.com/llgcode/draw2d/draw2dkit"
|
||||||
@ -18,6 +18,7 @@ var cvs *canvas.Canvas2d
|
|||||||
var width, height float64 = 64, 32
|
var width, height float64 = 64, 32
|
||||||
var sizeMultiplier = 8
|
var sizeMultiplier = 8
|
||||||
var drawBuf = [64 * 32]byte{}
|
var drawBuf = [64 * 32]byte{}
|
||||||
|
var drawNeeded = false
|
||||||
var graphicsLock sync.Mutex
|
var graphicsLock sync.Mutex
|
||||||
|
|
||||||
func main() {
|
func main() {
|
||||||
@ -29,7 +30,7 @@ func main() {
|
|||||||
height = float64(cvs.Height())
|
height = float64(cvs.Height())
|
||||||
width = float64(cvs.Width())
|
width = float64(cvs.Width())
|
||||||
|
|
||||||
cpu := chip8.NewCHIP8(getSpaceInvaders())
|
cpu := chip8.NewCHIP8(getPong())
|
||||||
|
|
||||||
cvs.Start(60, Render)
|
cvs.Start(60, Render)
|
||||||
i := 0
|
i := 0
|
||||||
@ -38,11 +39,12 @@ func main() {
|
|||||||
go timeCycle(c)
|
go timeCycle(c)
|
||||||
cpu.PerformCycle()
|
cpu.PerformCycle()
|
||||||
if cpu.DrawIsNeeded() {
|
if cpu.DrawIsNeeded() {
|
||||||
|
drawNeeded = true
|
||||||
graphicsLock.Lock()
|
graphicsLock.Lock()
|
||||||
drawBuf = cpu.GetGraphicsBuffer()
|
drawBuf = cpu.GetGraphicsBuffer()
|
||||||
graphicsLock.Unlock()
|
graphicsLock.Unlock()
|
||||||
}
|
}
|
||||||
i++
|
i++
|
||||||
if i > 7 {
|
if i > 7 {
|
||||||
cpu.TickTimers()
|
cpu.TickTimers()
|
||||||
i = 0
|
i = 0
|
||||||
@ -58,6 +60,10 @@ func timeCycle(c chan int) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
func Render(gc *draw2dimg.GraphicContext) bool {
|
func Render(gc *draw2dimg.GraphicContext) bool {
|
||||||
|
if !drawNeeded {
|
||||||
|
return false
|
||||||
|
}
|
||||||
|
drawNeeded = false
|
||||||
gc.SetFillColor(color.RGBA{0x00, 0x00, 0x00, 0xff})
|
gc.SetFillColor(color.RGBA{0x00, 0x00, 0x00, 0xff})
|
||||||
gc.Clear()
|
gc.Clear()
|
||||||
|
|
||||||
@ -80,4 +86,4 @@ func Render(gc *draw2dimg.GraphicContext) bool {
|
|||||||
gc.Close()
|
gc.Close()
|
||||||
//println("drawing")
|
//println("drawing")
|
||||||
return true
|
return true
|
||||||
}
|
}
|
||||||
|
18
cmd/web/pong.go
Normal file
18
cmd/web/pong.go
Normal file
@ -0,0 +1,18 @@
|
|||||||
|
package main
|
||||||
|
|
||||||
|
func getPong() []byte {
|
||||||
|
return []byte{
|
||||||
|
106, 2, 107, 12, 108, 63, 109, 12, 162, 234, 218, 182, 220, 214, 110, 0, 34, 212, 102, 3,
|
||||||
|
104, 2, 96, 96, 240, 21, 240, 7, 48, 0, 18, 26, 199, 23, 119, 8, 105, 255, 162, 240,
|
||||||
|
214, 113, 162, 234, 218, 182, 220, 214, 96, 1, 224, 161, 123, 254, 96, 4, 224, 161, 123, 2,
|
||||||
|
96, 31, 139, 2, 218, 182, 96, 12, 224, 161, 125, 254, 96, 13, 224, 161, 125, 2, 96, 31,
|
||||||
|
141, 2, 220, 214, 162, 240, 214, 113, 134, 132, 135, 148, 96, 63, 134, 2, 97, 31, 135, 18,
|
||||||
|
70, 2, 18, 120, 70, 63, 18, 130, 71, 31, 105, 255, 71, 0, 105, 1, 214, 113, 18, 42,
|
||||||
|
104, 2, 99, 1, 128, 112, 128, 181, 18, 138, 104, 254, 99, 10, 128, 112, 128, 213, 63, 1,
|
||||||
|
18, 162, 97, 2, 128, 21, 63, 1, 18, 186, 128, 21, 63, 1, 18, 200, 128, 21, 63, 1,
|
||||||
|
18, 194, 96, 32, 240, 24, 34, 212, 142, 52, 34, 212, 102, 62, 51, 1, 102, 3, 104, 254,
|
||||||
|
51, 1, 104, 2, 18, 22, 121, 255, 73, 254, 105, 255, 18, 200, 121, 1, 73, 2, 105, 1,
|
||||||
|
96, 4, 240, 24, 118, 1, 70, 64, 118, 254, 18, 108, 162, 242, 254, 51, 242, 101, 241, 41,
|
||||||
|
100, 20, 101, 0, 212, 85, 116, 21, 242, 41, 212, 85, 0, 238, 128, 128, 128, 128, 128, 128,
|
||||||
|
128, 0, 0, 0, 0, 0}
|
||||||
|
}
|
File diff suppressed because one or more lines are too long
30
cmd/web/tetris.go
Normal file
30
cmd/web/tetris.go
Normal file
@ -0,0 +1,30 @@
|
|||||||
|
package main
|
||||||
|
|
||||||
|
func getTetris() []byte {
|
||||||
|
return []byte{
|
||||||
|
162, 180, 35, 230, 34, 182, 112, 1, 208, 17, 48, 37, 18, 6, 113, 255, 208, 17, 96, 26,
|
||||||
|
208, 17, 96, 37, 49, 0, 18, 14, 196, 112, 68, 112, 18, 28, 195, 3, 96, 30, 97, 3,
|
||||||
|
34, 92, 245, 21, 208, 20, 63, 1, 18, 60, 208, 20, 113, 255, 208, 20, 35, 64, 18, 28,
|
||||||
|
231, 161, 34, 114, 232, 161, 34, 132, 233, 161, 34, 150, 226, 158, 18, 80, 102, 0, 246, 21,
|
||||||
|
246, 7, 54, 0, 18, 60, 208, 20, 113, 1, 18, 42, 162, 196, 244, 30, 102, 0, 67, 1,
|
||||||
|
102, 4, 67, 2, 102, 8, 67, 3, 102, 12, 246, 30, 0, 238, 208, 20, 112, 255, 35, 52,
|
||||||
|
63, 1, 0, 238, 208, 20, 112, 1, 35, 52, 0, 238, 208, 20, 112, 1, 35, 52, 63, 1,
|
||||||
|
0, 238, 208, 20, 112, 255, 35, 52, 0, 238, 208, 20, 115, 1, 67, 4, 99, 0, 34, 92,
|
||||||
|
35, 52, 63, 1, 0, 238, 208, 20, 115, 255, 67, 255, 99, 3, 34, 92, 35, 52, 0, 238,
|
||||||
|
128, 0, 103, 5, 104, 6, 105, 4, 97, 31, 101, 16, 98, 7, 0, 238, 64, 224, 0, 0,
|
||||||
|
64, 192, 64, 0, 0, 224, 64, 0, 64, 96, 64, 0, 64, 64, 96, 0, 32, 224, 0, 0,
|
||||||
|
192, 64, 64, 0, 0, 224, 128, 0, 64, 64, 192, 0, 0, 224, 32, 0, 96, 64, 64, 0,
|
||||||
|
128, 224, 0, 0, 64, 192, 128, 0, 192, 96, 0, 0, 64, 192, 128, 0, 192, 96, 0, 0,
|
||||||
|
128, 192, 64, 0, 0, 96, 192, 0, 128, 192, 64, 0, 0, 96, 192, 0, 192, 192, 0, 0,
|
||||||
|
192, 192, 0, 0, 192, 192, 0, 0, 192, 192, 0, 0, 64, 64, 64, 64, 0, 240, 0, 0,
|
||||||
|
64, 64, 64, 64, 0, 240, 0, 0, 208, 20, 102, 53, 118, 255, 54, 0, 19, 56, 0, 238,
|
||||||
|
162, 180, 140, 16, 60, 30, 124, 1, 60, 30, 124, 1, 60, 30, 124, 1, 35, 94, 75, 10,
|
||||||
|
35, 114, 145, 192, 0, 238, 113, 1, 19, 80, 96, 27, 107, 0, 208, 17, 63, 0, 123, 1,
|
||||||
|
208, 17, 112, 1, 48, 37, 19, 98, 0, 238, 96, 27, 208, 17, 112, 1, 48, 37, 19, 116,
|
||||||
|
142, 16, 141, 224, 126, 255, 96, 27, 107, 0, 208, 225, 63, 0, 19, 144, 208, 225, 19, 148,
|
||||||
|
208, 209, 123, 1, 112, 1, 48, 37, 19, 134, 75, 0, 19, 166, 125, 255, 126, 255, 61, 1,
|
||||||
|
19, 130, 35, 192, 63, 1, 35, 192, 122, 1, 35, 192, 128, 160, 109, 7, 128, 210, 64, 4,
|
||||||
|
117, 254, 69, 2, 101, 4, 0, 238, 167, 0, 242, 85, 168, 4, 250, 51, 242, 101, 240, 41,
|
||||||
|
109, 50, 110, 0, 221, 229, 125, 5, 241, 41, 221, 229, 125, 5, 242, 41, 221, 229, 167, 0,
|
||||||
|
242, 101, 162, 180, 0, 238, 106, 0, 96, 25, 0, 238, 55, 35}
|
||||||
|
}
|
Loading…
x
Reference in New Issue
Block a user