diff --git a/main.go b/main.go index 6b83ec3..eeb556f 100644 --- a/main.go +++ b/main.go @@ -1,12 +1,13 @@ package main import ( + "sync" "time" rl "github.com/gen2brain/raylib-go/raylib" ) -const MAXPOINTS = 100 +const MAXPOINTS = 100000 func spawnParticlesAsGrid(particleWidth float32, particleHeight float32, particleColumnCount int, particleRowCount int, particleList *[MAXPOINTS]rl.Vector2) { var particleLeftCornerPos rl.Vector2 = rl.Vector2{500, 300} @@ -19,31 +20,35 @@ func spawnParticlesAsGrid(particleWidth float32, particleHeight float32, particl } } -func physics(particleList *[MAXPOINTS]rl.Vector2, particleCount int) { +func physics(particleList *[MAXPOINTS]rl.Vector2, particleCount int, particleListKey *sync.Mutex) { var particleSpeed rl.Vector2 = rl.Vector2{0, -300} //pixel pro Sekunde - var timeIncrement float32 = 0.001 + var timeIncrement float64 = 0.0001 var gravity rl.Vector2 = rl.Vector2{0, 150} - for j := float32(0); j < 5; { + for j := float64(0); j < 5; { var startTime time.Time = time.Now() + + particleListKey.Lock() + for i := 0; i < particleCount; i++ { particleList[i] = rl.Vector2Add( particleList[i], - rl.Vector2Scale(particleSpeed, timeIncrement)) + rl.Vector2Scale(particleSpeed, float32(timeIncrement))) } + particleListKey.Unlock() //fmt.Println(particleList) particleSpeed = rl.Vector2Add( particleSpeed, - rl.Vector2Scale(gravity, timeIncrement)) + rl.Vector2Scale(gravity, float32(timeIncrement))) j += timeIncrement var endTime time.Time = time.Now() var elapsed time.Duration = endTime.Sub(startTime) - var waitTime float64 = float64(timeIncrement) - elapsed.Seconds() - println(waitTime) + var waitTime float64 = timeIncrement - elapsed.Seconds() rl.WaitTime(waitTime) + println((waitTime / timeIncrement)) rl.ClearBackground(rl.RayWhite) } } @@ -61,26 +66,34 @@ func main() { rl.EndDrawing() - var particleWidth float32 = 200 + var particleWidth float32 = 300 var particleHeight float32 = 200 - var particleColumnCount int = 10 - var particleRowCount int = 10 + var particleColumnCount int = 20 + var particleRowCount int = 20 var particleCount int = particleRowCount * particleColumnCount var particleRadius float32 = 5 var particleColor rl.Color = rl.Black + var particleListKey sync.Mutex //var stepSize float32 = 10 var particleList = [MAXPOINTS]rl.Vector2{} spawnParticlesAsGrid(particleWidth, particleHeight, particleColumnCount, particleRowCount, &particleList) - go physics(&particleList, particleCount) + go physics(&particleList, particleCount, &particleListKey) for !rl.WindowShouldClose() { + rl.ClearBackground(rl.RayWhite) + + particleListKey.Lock() + rl.BeginDrawing() for i := 0; i < particleCount; i++ { rl.DrawCircleV(particleList[i], particleRadius, particleColor) } + + particleListKey.Unlock() + rl.EndDrawing() }