parâmetros

This commit is contained in:
silva guimaraes 2023-08-15 10:42:02 -03:00
parent de94235fb9
commit c8c06724e7

78
main.go
View file

@ -16,12 +16,6 @@ type magnet struct {
radius float32 radius float32
} }
type state struct {
windowHeight int32
windowWidth int32
magnetsDistance float32
}
type ball struct { type ball struct {
pos rl.Vector2 pos rl.Vector2
originGrid rl.Vector2 originGrid rl.Vector2
@ -29,11 +23,21 @@ type ball struct {
speed rl.Vector2 speed rl.Vector2
} }
// parametros
const windowWidth = 800
const windowHeight = 450
const magnetRadius = 15
const magnetForce = 8
const magnetsDistance float32 = 80
const verticalGrids = 100
const horizontalGrids = 100
const ballMass float32 = 2
const gravConst float32 = 8
const magnetsAngle = 45
func (ball *ball) update(magnets []magnet) (bool, rl.Color) { func (ball *ball) update(magnets []magnet) (bool, rl.Color) {
magnetsPull := rl.Vector2{} magnetsPull := rl.Vector2{}
const ballMass float32 = 1
const gravConst float32 = 8
for _, magnet := range magnets { for _, magnet := range magnets {
direction := rl.Vector2Normalize( direction := rl.Vector2Normalize(
@ -64,55 +68,44 @@ func (ball *ball) update(magnets []magnet) (bool, rl.Color) {
func main() { func main() {
state := state{
windowWidth: 800,
windowHeight: 450,
}
rl.InitWindow( rl.InitWindow(
state.windowWidth, state.windowHeight, windowWidth, windowHeight,
"raylib [core] example - basic window", "raylib [core] example - basic window",
) )
defer rl.CloseWindow() defer rl.CloseWindow()
// rl.SetTargetFPS(60) // rl.SetTargetFPS(60)
const RADIUS = 10
const FORCE = 8
magnets := []magnet{ magnets := []magnet{
{ {
color: rl.Red, color: rl.Red,
radius: RADIUS, radius: magnetRadius,
force: FORCE, force: magnetForce,
}, },
{ {
color: rl.Green, color: rl.Green,
radius: RADIUS, radius: magnetRadius,
force: FORCE, force: magnetForce,
}, },
{ {
color: rl.Blue, color: rl.Blue,
radius: RADIUS, radius: magnetRadius,
force: FORCE, force: magnetForce,
}, },
} }
// pocisionar imas no meio da tela // pocisionar imas no meio da tela
xCenter := float32(state.windowWidth / 2) xCenter := float32(windowWidth / 2)
yCenter := float32(state.windowHeight / 2) yCenter := float32(windowHeight / 2)
var magnetsDistance float32 = 80
for i := range magnets { for i := range magnets {
angle := 2.0 * math.Pi * float64(i) / float64(len(magnets)) angle := 2.0 * math.Pi * float64(i) / float64(len(magnets)) + magnetsAngle
magnets[i].pos = rl.Vector2{ magnets[i].pos = rl.Vector2{
X: float32(math.Cos(angle)) * magnetsDistance + xCenter, X: float32(math.Cos(angle)) * magnetsDistance + xCenter,
Y: float32(math.Sin(angle)) * magnetsDistance + yCenter, Y: float32(math.Sin(angle)) * magnetsDistance + yCenter,
} }
} }
verticalGrids := 60
horizontalGrids := 60
grid := make([][]rl.Color, verticalGrids) grid := make([][]rl.Color, verticalGrids)
for i := range grid { for i := range grid {
@ -128,8 +121,8 @@ func main() {
// } // }
// //
gridSize := rl.Vector2{ gridSize := rl.Vector2{
X: float32(state.windowWidth / int32(verticalGrids)), X: float32(windowWidth / int32(verticalGrids)),
Y: float32(state.windowHeight / int32(horizontalGrids)), Y: float32(windowHeight / int32(horizontalGrids)),
} }
var fallingBall []*ball var fallingBall []*ball
@ -154,7 +147,7 @@ func main() {
fallingBall = append(fallingBall, &ball{ fallingBall = append(fallingBall, &ball{
pos: rl.Vector2{X: x, Y: y}, pos: rl.Vector2{X: x, Y: y},
speed: rl.Vector2{}, speed: rl.Vector2{},
radius: RADIUS/2, radius: magnetRadius/2,
originGrid: randomGrid, originGrid: randomGrid,
}) })
} }
@ -173,8 +166,8 @@ func main() {
} }
} }
for i := range magnets { for i := range magnets {
rl.DrawCircleV(magnets[i].pos, RADIUS+2, rl.Black) rl.DrawCircleV(magnets[i].pos, magnetRadius+2, rl.Black)
rl.DrawCircleV(magnets[i].pos, RADIUS, magnets[i].color) rl.DrawCircleV(magnets[i].pos, magnetRadius, magnets[i].color)
} }
if len(fallingBall) == 0 { if len(fallingBall) == 0 {
@ -186,11 +179,20 @@ func main() {
for i := 0; i < len(fallingBall); i++ { for i := 0; i < len(fallingBall); i++ {
ball := fallingBall[i] ball := fallingBall[i]
rl.DrawCircleV( // rl.DrawCircleV(
ball.pos, ball.radius/2+1, rl.Black, // ball.pos, ball.radius/2+1, rl.Black,
// )
// rl.DrawCircleV(
// ball.pos, ball.radius/2,
// rl.NewColor(100, 100, 100, 255),
// )
rl.DrawRectangleV(
rl.Vector2{X: ball.pos.X-1, Y: ball.pos.Y-1 },
rl.Vector2{X: ball.radius+1, Y: ball.radius+1},
rl.Black,
) )
rl.DrawCircleV( rl.DrawRectangleV(
ball.pos, ball.radius/2, ball.pos, rl.Vector2{X: ball.radius, Y: ball.radius},
rl.NewColor(100, 100, 100, 255), rl.NewColor(100, 100, 100, 255),
) )
if hit, color := ball.update(magnets); hit { if hit, color := ball.update(magnets); hit {