weird glitches durch den boden beim versuch bounces zu machen
This commit is contained in:
@@ -9,6 +9,13 @@ import (
|
|||||||
|
|
||||||
const MAXPOINTS = 100000
|
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) {
|
func spawnParticlesAsGrid(particleWidth float32, particleHeight float32, particleColumnCount int, particleRowCount int, particleList *[MAXPOINTS]rl.Vector2) {
|
||||||
var particleLeftCornerPos rl.Vector2 = rl.Vector2{500, 300}
|
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) {
|
func createRectangle(centerPoint rl.Vector2, width float32, height float32, rotation float32) quad {
|
||||||
var particleSpeed rl.Vector2 = rl.Vector2{0, -300} //pixel pro Sekunde
|
rectangle := quad{}
|
||||||
var timeIncrement float64 = 0.0001
|
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}
|
var gravity rl.Vector2 = rl.Vector2{0, 150}
|
||||||
|
|
||||||
for j := float64(0); j < 5; {
|
for j := float64(0); j < 5; {
|
||||||
@@ -31,25 +66,35 @@ func physics(particleList *[MAXPOINTS]rl.Vector2, particleCount int, particleLis
|
|||||||
particleListKey.Lock()
|
particleListKey.Lock()
|
||||||
|
|
||||||
for i := 0; i < particleCount; i++ {
|
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] =
|
particleList[i] =
|
||||||
rl.Vector2Add(
|
rl.Vector2Add(
|
||||||
particleList[i],
|
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()
|
particleListKey.Unlock()
|
||||||
//fmt.Println(particleList)
|
//fmt.Println(particleList)
|
||||||
particleSpeed =
|
|
||||||
rl.Vector2Add(
|
|
||||||
particleSpeed,
|
|
||||||
rl.Vector2Scale(gravity, float32(timeIncrement)))
|
|
||||||
j += timeIncrement
|
j += timeIncrement
|
||||||
var endTime time.Time = time.Now()
|
var endTime time.Time = time.Now()
|
||||||
var elapsed time.Duration = endTime.Sub(startTime)
|
var elapsed time.Duration = endTime.Sub(startTime)
|
||||||
var waitTime float64 = timeIncrement - elapsed.Seconds()
|
var waitTime float64 = timeIncrement - elapsed.Seconds()
|
||||||
rl.WaitTime(waitTime)
|
rl.WaitTime(waitTime)
|
||||||
println((waitTime / timeIncrement))
|
println((waitTime / timeIncrement))
|
||||||
rl.ClearBackground(rl.RayWhite)
|
//rl.ClearBackground(rl.RayWhite)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -80,7 +125,10 @@ func main() {
|
|||||||
var particleList = [MAXPOINTS]rl.Vector2{}
|
var particleList = [MAXPOINTS]rl.Vector2{}
|
||||||
|
|
||||||
spawnParticlesAsGrid(particleWidth, particleHeight, particleColumnCount, particleRowCount, &particleList)
|
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() {
|
for !rl.WindowShouldClose() {
|
||||||
rl.ClearBackground(rl.RayWhite)
|
rl.ClearBackground(rl.RayWhite)
|
||||||
@@ -93,7 +141,7 @@ func main() {
|
|||||||
}
|
}
|
||||||
|
|
||||||
particleListKey.Unlock()
|
particleListKey.Unlock()
|
||||||
|
drawRec(&floor)
|
||||||
rl.EndDrawing()
|
rl.EndDrawing()
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user