initial working sketch in go on raylib
This commit is contained in:
108
main.go
Normal file
108
main.go
Normal file
@@ -0,0 +1,108 @@
|
||||
package main
|
||||
|
||||
import (
|
||||
"fmt"
|
||||
"github.com/gen2brain/raylib-go/raylib"
|
||||
"github.com/ojrac/opensimplex-go"
|
||||
)
|
||||
|
||||
func main() {
|
||||
|
||||
const (
|
||||
screenWidth = 2200
|
||||
screenHeight = 1200
|
||||
)
|
||||
|
||||
rl.InitWindow(screenWidth, screenHeight, "sumi sierpinski arrow")
|
||||
|
||||
var camera rl.Camera2D
|
||||
camera.Zoom = 1.0
|
||||
|
||||
rl.SetTargetFPS(60)
|
||||
|
||||
angles := make([]float32, 1000)
|
||||
noise := opensimplex.NewNormalized(0)
|
||||
for i := range len(angles) {
|
||||
angles[i] = float32(noise.Eval2(float64(i)*0.0001, 0.00)) * 2 - 1
|
||||
fmt.Printf("angles[%d] = %.2f\n", i, angles[i])
|
||||
}
|
||||
|
||||
frameNum := 0
|
||||
|
||||
for !rl.WindowShouldClose() {
|
||||
|
||||
frameNum++
|
||||
|
||||
if rl.IsMouseButtonDown(rl.MouseRightButton) {
|
||||
delta := rl.GetMouseDelta()
|
||||
delta = rl.Vector2Scale(delta, -1.0/camera.Zoom)
|
||||
camera.Target = rl.Vector2Add(camera.Target, delta)
|
||||
}
|
||||
|
||||
// Zoom based on mouse wheel
|
||||
wheel := rl.GetMouseWheelMove()
|
||||
if wheel != 0 {
|
||||
// Get the world point that is under the mouse
|
||||
mouseWorldPos := rl.GetScreenToWorld2D(rl.GetMousePosition(), camera)
|
||||
|
||||
// Set the offset to where the mouse is
|
||||
camera.Offset = rl.GetMousePosition()
|
||||
|
||||
// Set the target to match, so that the camera maps the world space point
|
||||
// under the cursor to the screen space point under the cursor at any zoom
|
||||
camera.Target = mouseWorldPos
|
||||
|
||||
// Zoom increment
|
||||
const zoomIncrement float32 = 0.125
|
||||
|
||||
camera.Zoom += (wheel * zoomIncrement)
|
||||
if camera.Zoom < zoomIncrement {
|
||||
camera.Zoom = zoomIncrement
|
||||
}
|
||||
}
|
||||
|
||||
rl.BeginDrawing()
|
||||
rl.ClearBackground(rl.RayWhite)
|
||||
|
||||
rl.BeginMode2D(camera)
|
||||
|
||||
rl.PushMatrix()
|
||||
rl.Translatef(screenWidth/2, screenHeight/2, 0);
|
||||
|
||||
// initial transform by halfway again through angle array
|
||||
|
||||
angleIndex := frameNum%len(angles)
|
||||
angle := angles[angleIndex]
|
||||
|
||||
initAngle := angles[(angleIndex + len(angles)/2)%len(angles)]
|
||||
rl.Rotatef(250*initAngle, 0, 0, 1)
|
||||
rl.Translatef(100*initAngle, 100*initAngle, 0)
|
||||
|
||||
for range 1000 {
|
||||
rl.DrawLine(0, 0, 10, 0, rl.Black)
|
||||
rl.Translatef(10, 0, 0)
|
||||
rl.Rotatef(angle, 0, 0, 1)
|
||||
angleIndex++
|
||||
angleIndex = angleIndex%len(angles)
|
||||
angle += angles[angleIndex]
|
||||
}
|
||||
rl.PopMatrix()
|
||||
|
||||
/*
|
||||
rl.PushMatrix()
|
||||
rl.Translatef(0, 25*50, 0)
|
||||
rl.Rotatef(90, 1, 0, 0)
|
||||
rl.DrawGrid(100, 50)
|
||||
rl.PopMatrix()
|
||||
*/
|
||||
|
||||
rl.EndMode2D()
|
||||
|
||||
rl.DrawText("Mouse right button drag to move, mouse wheel to zoom", 10, 10, 20, rl.White)
|
||||
|
||||
rl.EndDrawing()
|
||||
}
|
||||
|
||||
rl.CloseWindow()
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user