This commit is contained in:
roodletoof
2024-09-14 15:16:36 +02:00
commit d5d9badb05
6 changed files with 295 additions and 0 deletions
+95
View File
@@ -0,0 +1,95 @@
package main
import (
"errors"
color_lib "image/color"
"github.com/hajimehoshi/ebiten/v2"
"github.com/hajimehoshi/ebiten/v2/vector"
)
type Vec2 struct {
x, y float32
}
func cursorPosition() Vec2 {
x, y := ebiten.CursorPosition()
return Vec2{
x: float32(x),
y: float32(y),
}
}
type stroke struct {
points []Vec2
width float32
color color_lib.Color
}
func (s *stroke) appendIfMoved(point Vec2) {
if len(s.points) != 0 {
lastPoint := s.points[len(s.points)-1]
if lastPoint.x == point.x && lastPoint.y == point.y {
return
}
}
s.points = append(s.points, point)
}
func (s *stroke) drawLast(screen *ebiten.Image) error {
if s.color == nil {
return errors.New("stroke has nil color")
}
if len(s.points) == 0 {
return nil
}
from := s.points[len(s.points)-1]
vector.DrawFilledCircle(screen, from.x, from.y, s.width/2, s.color, true)
if len(s.points) == 1 {
return nil
}
to := s.points[len(s.points)-2]
vector.StrokeLine(
screen,
from.x,
from.y,
to.x,
to.y,
s.width,
s.color,
true,
)
vector.DrawFilledCircle(screen, to.x, to.y, s.width/2, s.color, true)
return nil
}
func (s *stroke) draw(screen *ebiten.Image) error {
if s.color == nil {
return errors.New("stroke has nil color")
}
from := s.points[0]
vector.DrawFilledCircle(screen, from.x, from.y, s.width/2, s.color, true)
for _, to := range s.points[1:] {
vector.StrokeLine(
screen,
from.x,
from.y,
to.x,
to.y,
s.width,
s.color,
true,
)
vector.DrawFilledCircle(screen, to.x, to.y, s.width/2, s.color, true)
from = to
}
return nil
}