automated snapshot

This commit is contained in:
sumi
2025-12-15 01:25:28 -06:00
parent f46bb4d17b
commit a66ea07961
9 changed files with 430 additions and 90 deletions

100
main.go
View File

@@ -1,46 +1,13 @@
package main
import (
"fmt"
"math"
"log"
"os"
"github.com/gen2brain/raylib-go/raylib"
"github.com/ojrac/opensimplex-go"
"github.com/go-git/go-git/v6"
"math"
)
func HeadHash(repoPath string) (string, error) {
r, err := git.PlainOpen(repoPath)
if err != nil {
return "", err
}
ref, err := r.Head()
if err != nil {
return "", err
}
return ref.Hash().String(), nil
}
func IsDirty(repoPath string) (bool, error) {
r, err := git.PlainOpen(repoPath)
if err != nil {
return false, err
}
wt, err := r.Worktree()
if err != nil {
return false, err
}
status, err := wt.Status()
if err != nil {
return false, err
}
return !status.IsClean(), nil
}
func clamp01(v float64) float64 {
if v < 0 {
return 0
@@ -74,11 +41,11 @@ func curve(order int, length float64, angle float64) {
rl.DrawLine(0, 0, len, 0, rl.Black)
rl.Translatef(float32(len), 0, 0)
} else {
curve(order - 1, length/2, -angle)
curve(order-1, length/2, -angle)
rl.Rotatef(float32(angle), 0, 0, 1)
curve(order - 1, length/2, angle)
curve(order-1, length/2, angle)
rl.Rotatef(float32(angle), 0, 0, 1)
curve(order - 1, length/2, -angle)
curve(order-1, length/2, -angle)
}
}
@@ -87,11 +54,22 @@ func main() {
const (
screenWidth = 1200
screenHeight = 700
snapshotsDir = "snapshots"
)
os.MkdirAll(snapshotsDir, 0755)
log := log.New(os.Stdout, "", log.Ldate|log.Ltime|log.Lshortfile)
storage, err := NewStorage(snapshotsDir)
if err != nil {
log.Printf("Error loading storage: %v\n", err)
os.Exit(1)
}
rl.InitWindow(screenWidth, screenHeight, "sumi sierpinski arrow")
var camera = rl.Camera2D {
var camera = rl.Camera2D{
Target: rl.Vector2{X: 0, Y: 0},
Offset: rl.Vector2{X: float32(screenWidth) / 2, Y: float32(screenHeight) / 2},
Rotation: 0,
@@ -103,8 +81,7 @@ func main() {
angles := make([]float32, 1000)
noise := opensimplex.NewNormalized(0)
for i := range len(angles) {
angles[i] = float32(noise.Eval2(float64(i)*0.05, 0.00)) * 0.1 - 0.05
fmt.Printf("angles[%d] = %.2f\n", i, angles[i])
angles[i] = float32(noise.Eval2(float64(i)*0.05, 0.00))*0.1 - 0.05
}
frameNum := 0
@@ -161,10 +138,10 @@ func main() {
// initial transform by halfway again through angle array
angleIndex := frameNum%len(angles)
angleIndex := frameNum % len(angles)
angle := angles[angleIndex]
initAngle := angles[(angleIndex + len(angles)/2)%len(angles)]
initAngle := angles[(angleIndex+len(angles)/2)%len(angles)]
rl.Rotatef(2500*initAngle, 0, 0, 1)
rl.Translatef(100*initAngle, 100*initAngle, 0)
@@ -174,50 +151,36 @@ func main() {
rl.Translatef(float32(stepSize), 0, 0)
rl.Rotatef(angle, 0, 0, 1)
angleIndex++
angleIndex = angleIndex%len(angles)
angleIndex = angleIndex % len(angles)
angle += angles[angleIndex]
}
rl.PopMatrix()
rl.PushMatrix()
//rl.Translatef(-screenWidth/2, screenHeight/2, 0)
sierpinskiArrow(9,800)
sierpinskiArrow(9, 800)
rl.PopMatrix()
/*
rl.PushMatrix()
rl.Translatef(0, 25*50, 0)
rl.Rotatef(90, 1, 0, 0)
rl.DrawGrid(100, 50)
rl.PopMatrix()
rl.PushMatrix()
rl.Translatef(0, 25*50, 0)
rl.Rotatef(90, 1, 0, 0)
rl.DrawGrid(100, 50)
rl.PopMatrix()
*/
rl.EndMode2D()
if rl.IsKeyDown(rl.KeySpace) {
//rl.TakeScreenshot("snapshot.png")
img := rl.LoadImageFromScreen()
defer rl.UnloadImage(img)
rl.ExportImage(*img, "snapshot.png")
dflag, err := IsDirty(".")
if err == nil {
if dflag {
fmt.Printf("working tree is dirty\n")
} else {
fmt.Printf("working tree is clean\n")
}
hash, err := HeadHash(".")
if err == nil {
fmt.Printf("HEAD -> %s\n", hash)
}
if _, err := storage.Save(img); err != nil {
log.Printf("Error saving snapshot: %v\n", err)
}
}
@@ -228,4 +191,3 @@ func main() {
rl.CloseWindow()
}