wenn partiikel in einander sind werden sie nun genau um den overlap versetzt und es gibt friction bei collisionen
This commit is contained in:
@@ -87,6 +87,7 @@ func physics(particleList *[MAXPOINTS]rl.Vector2, particleCount int, particleLis
|
|||||||
var gravity rl.Vector2 = rl.Vector2{0, 300}
|
var gravity rl.Vector2 = rl.Vector2{0, 300}
|
||||||
var newParticleList [MAXPOINTS]rl.Vector2
|
var newParticleList [MAXPOINTS]rl.Vector2
|
||||||
var newParticleSpeed [MAXPOINTS]rl.Vector2
|
var newParticleSpeed [MAXPOINTS]rl.Vector2
|
||||||
|
var particleFriction float32 = 0.85
|
||||||
|
|
||||||
for j := float64(0); j < 50; {
|
for j := float64(0); j < 50; {
|
||||||
var startTime time.Time = time.Now()
|
var startTime time.Time = time.Now()
|
||||||
@@ -105,10 +106,22 @@ func physics(particleList *[MAXPOINTS]rl.Vector2, particleCount int, particleLis
|
|||||||
|
|
||||||
// Jede Goroutine arbeitet nur auf Index i → kein Datenkonflikt
|
// Jede Goroutine arbeitet nur auf Index i → kein Datenkonflikt
|
||||||
for l := 0; l < particleCount; l++ {
|
for l := 0; l < particleCount; l++ {
|
||||||
if rl.CheckCollisionCircles(currentPositions[i], *particleRadius, currentPositions[l], *particleRadius) && (l != i) {
|
if l == i {
|
||||||
var colNormal rl.Vector2 = rl.Vector2Normalize(rl.Vector2Subtract(currentPositions[i], currentPositions[l]))
|
continue
|
||||||
particleSpeed[i] = rl.Vector2Reflect(particleSpeed[i], colNormal)
|
}
|
||||||
currentPositions[i] = rl.Vector2Add(currentPositions[i], rl.Vector2Scale(rl.Vector2Normalize(particleSpeed[i]), *particleRadius/2))
|
|
||||||
|
diff := rl.Vector2Subtract(currentPositions[i], currentPositions[l])
|
||||||
|
dist := rl.Vector2Length(diff)
|
||||||
|
minDist := *particleRadius * 2
|
||||||
|
|
||||||
|
if dist < minDist && dist > 0 {
|
||||||
|
colNormal := rl.Vector2Scale(diff, 1/dist) //durch länge des Vektoren teilen
|
||||||
|
|
||||||
|
// Exakt die Hälfte der Überlappung korrigieren
|
||||||
|
overlap := minDist - dist
|
||||||
|
currentPositions[i] = rl.Vector2Add(currentPositions[i], rl.Vector2Scale(colNormal, overlap*0.5))
|
||||||
|
|
||||||
|
particleSpeed[i] = rl.Vector2Scale(rl.Vector2Reflect(particleSpeed[i], colNormal), particleFriction)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user