Add 2D pixel-based demo

This commit is contained in:
Christian Rocha 2021-07-09 13:19:05 -04:00
parent 4034cbe42c
commit 4db1ed716b
No known key found for this signature in database
GPG Key ID: D6CC7A16E5878018
3 changed files with 123 additions and 0 deletions

88
examples/canvas/main.go Normal file
View File

@ -0,0 +1,88 @@
package main
import (
"time"
"github.com/charmbracelet/harmonica"
"github.com/h8gi/canvas"
)
const (
width = 1024
height = 768
fps = 60
bgColor = "#111111"
)
func main() {
var (
circ = newCircle()
clickedYet bool
)
c := canvas.NewCanvas(&canvas.CanvasConfig{
Width: width,
Height: height,
FrameRate: fps,
Title: "Harmonica",
})
c.Draw(func(ctx *canvas.Context) {
ctx.SetHexColor(bgColor)
ctx.Clear()
if ctx.IsMouseDragged {
if !clickedYet {
// Set starting positions.
circ.x = ctx.Mouse.X
circ.y = ctx.Mouse.Y
circ.Radius = 100
clickedYet = true
}
circ.X = ctx.Mouse.X
circ.Y = ctx.Mouse.Y
}
if clickedYet {
circ.draw(ctx)
}
})
}
type circle struct {
// Target values. This is what the spring will seek.
X, Y, Radius float64
// Managed values. These are the initial
x, xVel float64
y, yVel float64
rad, radVel float64
spring harmonica.Spring
}
func newCircle() circle {
const (
frequency = 0.8
damping = 0.99
)
return circle{
spring: harmonica.NewSpring(harmonica.TimeDelta(time.Second/fps), frequency, damping),
}
}
func (c *circle) draw(ctx *canvas.Context) {
// Update
c.spring.Update(&c.x, &c.xVel, c.X)
c.spring.Update(&c.y, &c.yVel, c.Y)
c.spring.Update(&c.rad, &c.radVel, c.Radius)
const color = "#f1f1f1"
ctx.Push()
ctx.DrawCircle(c.x, c.y, c.rad)
ctx.SetHexColor(color)
ctx.Fill()
}

11
examples/go.mod Normal file
View File

@ -0,0 +1,11 @@
module examples
go 1.16
replace github.com/charmbracelet/harmonica => ../
require (
github.com/charmbracelet/harmonica v0.0.0-20210709144143-16876a63b30d // indirect
github.com/h8gi/canvas v0.0.0-20200710004640-a6361a06ab49
golang.org/x/image v0.0.0-20190523035834-f03afa92d3ff
)

24
examples/go.sum Normal file
View File

@ -0,0 +1,24 @@
github.com/faiface/glhf v0.0.0-20181018222622-82a6317ac380 h1:FvZ0mIGh6b3kOITxUnxS3tLZMh7yEoHo75v3/AgUqg0=
github.com/faiface/glhf v0.0.0-20181018222622-82a6317ac380/go.mod h1:zqnPFFIuYFFxl7uH2gYByJwIVKG7fRqlqQCbzAnHs9g=
github.com/faiface/mainthread v0.0.0-20171120011319-8b78f0a41ae3 h1:baVdMKlASEHrj19iqjARrPbaRisD7EuZEVJj6ZMLl1Q=
github.com/faiface/mainthread v0.0.0-20171120011319-8b78f0a41ae3/go.mod h1:VEPNJUlxl5KdWjDvz6Q1l+rJlxF2i6xqDeGuGAxa87M=
github.com/faiface/pixel v0.8.0 h1:phOHW6ixfMAKRamjnvhI6FFI2VRyPEq7+LmmkDGXB/4=
github.com/faiface/pixel v0.8.0/go.mod h1:CEUU/s9E82Kqp01Boj1O67KnBskqiLghANqvUJGgDAM=
github.com/fogleman/gg v1.3.0 h1:/7zJX8F6AaYQc57WQCyN9cAIz+4bCJGO9B+dyW29am8=
github.com/fogleman/gg v1.3.0/go.mod h1:R/bRT+9gY/C5z7JzPU0zXsXHKM4/ayA+zqcVNZzPa1k=
github.com/go-gl/gl v0.0.0-20190320180904-bf2b1f2f34d7 h1:SCYMcCJ89LjRGwEa0tRluNRiMjZHalQZrVrvTbPh+qw=
github.com/go-gl/gl v0.0.0-20190320180904-bf2b1f2f34d7/go.mod h1:482civXOzJJCPzJ4ZOX/pwvXBWSnzD4OKMdH4ClKGbk=
github.com/go-gl/glfw v0.0.0-20190409004039-e6da0acd62b1 h1:QbL/5oDUmRBzO9/Z7Seo6zf912W/a6Sr4Eu0G/3Jho0=
github.com/go-gl/glfw v0.0.0-20190409004039-e6da0acd62b1/go.mod h1:vR7hzQXu2zJy9AVAgeJqvqgH9Q5CA+iKCZ2gyEVpxRU=
github.com/go-gl/mathgl v0.0.0-20190416160123-c4601bc793c7 h1:THttjeRn1iiz69E875U6gAik8KTWk/JYAHoSVpUxBBI=
github.com/go-gl/mathgl v0.0.0-20190416160123-c4601bc793c7/go.mod h1:yhpkQzEiH9yPyxDUGzkmgScbaBVlhC06qodikEM0ZwQ=
github.com/golang/freetype v0.0.0-20170609003504-e2365dfdc4a0 h1:DACJavvAHhabrF08vX0COfcOBJRhZ8lUbR+ZWIs0Y5g=
github.com/golang/freetype v0.0.0-20170609003504-e2365dfdc4a0/go.mod h1:E/TSTwGwJL78qG/PmXZO1EjYhfJinVAhrmmHX6Z8B9k=
github.com/h8gi/canvas v0.0.0-20200710004640-a6361a06ab49 h1:svddC2dRqy+Y1zGH4+AvvCFZLKuPhAfEvlgYSNP4lcg=
github.com/h8gi/canvas v0.0.0-20200710004640-a6361a06ab49/go.mod h1:7iSUKfOcA+GiWc+LpxXggMogUFIo8pm1FZcYTUmL3YY=
github.com/pkg/errors v0.8.1 h1:iURUrRGxPUNPdy5/HRSm+Yj6okJ6UtLINN0Q9M4+h3I=
github.com/pkg/errors v0.8.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0=
golang.org/x/image v0.0.0-20190321063152-3fc05d484e9f/go.mod h1:kZ7UVZpmo3dzQBMxlp+ypCbDeSB+sBbTgSJuh5dn5js=
golang.org/x/image v0.0.0-20190523035834-f03afa92d3ff h1:+2zgJKVDVAz/BWSsuniCmU1kLCjL88Z8/kv39xCI9NQ=
golang.org/x/image v0.0.0-20190523035834-f03afa92d3ff/go.mod h1:kZ7UVZpmo3dzQBMxlp+ypCbDeSB+sBbTgSJuh5dn5js=
golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ=