From 7bde48730debb79d3af2988db12fee7bb18f427d Mon Sep 17 00:00:00 2001 From: any Date: Sun, 10 May 2026 19:01:57 +0200 Subject: [PATCH] weird glitches durch den boden beim versuch bounces zu machen --- main.go | 70 ++++++++++++++++++++++++++++++++++++++++++++++++--------- 1 file changed, 59 insertions(+), 11 deletions(-) diff --git a/main.go b/main.go index eeb556f..f998a30 100644 --- a/main.go +++ b/main.go @@ -9,6 +9,13 @@ import ( const MAXPOINTS = 100000 +type quad struct { + lu rl.Vector2 + ru rl.Vector2 + rd rl.Vector2 + ld rl.Vector2 +} + func spawnParticlesAsGrid(particleWidth float32, particleHeight float32, particleColumnCount int, particleRowCount int, particleList *[MAXPOINTS]rl.Vector2) { var particleLeftCornerPos rl.Vector2 = rl.Vector2{500, 300} @@ -20,9 +27,37 @@ func spawnParticlesAsGrid(particleWidth float32, particleHeight float32, particl } } -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 +func createRectangle(centerPoint rl.Vector2, width float32, height float32, rotation float32) quad { + rectangle := quad{} + rectangle.lu = rl.Vector2Add( + centerPoint, + rl.Vector2Rotate(rl.Vector2{-0.5 * width, -0.5 * height}, + rotation)) + rectangle.ru = rl.Vector2Add( + centerPoint, + rl.Vector2Rotate(rl.Vector2{0.5 * width, -0.5 * height}, + rotation)) + rectangle.rd = rl.Vector2Add( + centerPoint, + rl.Vector2Rotate(rl.Vector2{0.5 * width, 0.5 * height}, + rotation)) + rectangle.ld = rl.Vector2Add( + centerPoint, + rl.Vector2Rotate(rl.Vector2{-0.5 * width, 0.5 * height}, + rotation)) + return rectangle +} + +func drawRec(rectangle *quad) { + rl.DrawLineV((*rectangle).lu, (*rectangle).ru, rl.Black) + rl.DrawLineV((*rectangle).ru, (*rectangle).rd, rl.Black) + rl.DrawLineV((*rectangle).rd, (*rectangle).ld, rl.Black) + rl.DrawLineV((*rectangle).ld, (*rectangle).lu, rl.Black) +} + +func physics(particleList *[MAXPOINTS]rl.Vector2, particleCount int, particleListKey *sync.Mutex, floor *quad, particleRadius *float32) { + var particleSpeed = [MAXPOINTS]rl.Vector2{{0, -300}} //pixel pro Sekunde + var timeIncrement float64 = 0.01 var gravity rl.Vector2 = rl.Vector2{0, 150} for j := float64(0); j < 5; { @@ -31,25 +66,35 @@ func physics(particleList *[MAXPOINTS]rl.Vector2, particleCount int, particleLis particleListKey.Lock() for i := 0; i < particleCount; i++ { + if rl.CheckCollisionCircleLine(particleList[i], *particleRadius, floor.lu, floor.ru) { + var floorVector rl.Vector2 = rl.Vector2Subtract(floor.ru, floor.lu) + var normalFloor rl.Vector2 = rl.Vector2Rotate(floorVector, -90) + var collisionAngle float32 = 2 * rl.Vector2Angle(particleSpeed[i], normalFloor) + particleSpeed[i] = rl.Vector2Rotate( + particleSpeed[i], + collisionAngle) + } particleList[i] = rl.Vector2Add( particleList[i], - rl.Vector2Scale(particleSpeed, float32(timeIncrement))) + rl.Vector2Scale(particleSpeed[i], float32(timeIncrement))) + + particleSpeed[i] = + rl.Vector2Add( + particleSpeed[i], + rl.Vector2Scale(gravity, 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) + //rl.ClearBackground(rl.RayWhite) } } @@ -80,7 +125,10 @@ func main() { var particleList = [MAXPOINTS]rl.Vector2{} spawnParticlesAsGrid(particleWidth, particleHeight, particleColumnCount, particleRowCount, &particleList) - go physics(&particleList, particleCount, &particleListKey) + + var floor quad = createRectangle(rl.Vector2{600, 700}, 600, 100, 0) + + go physics(&particleList, particleCount, &particleListKey, &floor, &particleRadius) for !rl.WindowShouldClose() { rl.ClearBackground(rl.RayWhite) @@ -93,7 +141,7 @@ func main() { } particleListKey.Unlock() - + drawRec(&floor) rl.EndDrawing() }