package main import ( "sync" "time" rl "github.com/gen2brain/raylib-go/raylib" ) 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} for y := 0; y < (particleColumnCount); y++ { for x := 0; x < particleRowCount; x++ { newParticle := rl.NewVector2(particleWidth*(float32(x)/float32(particleRowCount))+particleLeftCornerPos.X, particleHeight*(float32(y)/float32(particleColumnCount))+particleLeftCornerPos.Y) particleList[y*particleRowCount+x] = newParticle } } } func physics(particleList *[MAXPOINTS]rl.Vector2, particleCount int, particleListKey *sync.Mutex) { var particleSpeed rl.Vector2 = rl.Vector2{0, -300} //pixel pro Sekunde var timeIncrement float64 = 0.0001 var gravity rl.Vector2 = rl.Vector2{0, 150} 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, float32(timeIncrement))) } particleListKey.Unlock() //fmt.Println(particleList) particleSpeed = rl.Vector2Add( particleSpeed, rl.Vector2Scale(gravity, float32(timeIncrement))) j += timeIncrement var endTime time.Time = time.Now() var elapsed time.Duration = endTime.Sub(startTime) var waitTime float64 = timeIncrement - elapsed.Seconds() rl.WaitTime(waitTime) println((waitTime / timeIncrement)) rl.ClearBackground(rl.RayWhite) } } func main() { rl.InitWindow(1200, 800, "raylib [core] example - basic window") defer rl.CloseWindow() rl.SetTargetFPS(120) rl.BeginDrawing() rl.WaitTime(1) rl.ClearBackground(rl.RayWhite) rl.DrawText("Congrats! You created your first window!", 190, 200, 20, rl.LightGray) rl.EndDrawing() var particleWidth float32 = 300 var particleHeight float32 = 200 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, &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() } }