From 589a6151b2864fdd1f12bdcdfd43e2f33c0942d3 Mon Sep 17 00:00:00 2001 From: Zachary Snow Date: Wed, 16 Sep 2026 19:46:16 +0200 Subject: [PATCH 1/2] flag example --- example/flag/main.go | 78 ++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 78 insertions(+) create mode 100644 example/flag/main.go diff --git a/example/flag/main.go b/example/flag/main.go new file mode 100644 index 0000000..a4dc0a3 --- /dev/null +++ b/example/flag/main.go @@ -0,0 +1,78 @@ +// Using the raylib library to open a window and draw a waving flag. +// +// Usage: +// +// make example name=flag +// ./build/flag +package main + +import ( + rl "solod.dev/raylib/libraylib" + "solod.dev/so/c" + "solod.dev/so/math" +) + +var _ c.Int // for implicit int -> c.Int conversion + +const ( + screenWidth = 800 + screenHeight = 450 + + halfScreenWidth = screenWidth / 2 + halfScreenHeight = screenHeight / 2 + + flagWidth = 640 + flagHeight = 320 + + halfFlagWidth = flagWidth / 2 + halfFlagHeight = flagHeight / 2 + + flagParts = 25 + flagPartWidth = flagWidth / flagParts + + elapsedTimeFactor = 10 + yOffsetFactor = 10 +) + +func main() { + rl.InitWindow(screenWidth, screenHeight, "Solod Flag") + defer rl.CloseWindow() + + rl.SetTargetFPS(60) + + image := rl.GenImageColor(flagWidth, flagHeight, rl.Color{R: 13, G: 50, B: 89, A: 255}) + rl.ImageDrawText(&image, "solod", 150, 70, 128, rl.Color{R: 242, G: 203, B: 73, A: 255}) + rl.ImageDrawText(&image, "Go can be a better C", 150, 190, 30, rl.WHITE) + + texture := rl.LoadTextureFromImage(image) + + rl.UnloadImage(image) + + for !rl.WindowShouldClose() { + elapsedTime := rl.GetTime() + + rl.BeginDrawing() + rl.ClearBackground(rl.BLACK) + for i := 0; i < flagParts; i += 1 { + angle := float64(flagPartWidth*i) + (elapsedTime * elapsedTimeFactor) + rl.DrawTexturePro( + texture, + rl.Rectangle{ + X: float32(flagPartWidth * i), + Y: 0, + Width: flagPartWidth, + Height: flagHeight, + }, + rl.Rectangle{ + X: halfScreenWidth + float32(flagPartWidth*i), + Y: halfScreenHeight + (float32(math.Sin(angle)) * yOffsetFactor), + Width: flagPartWidth, + Height: flagHeight, + }, + rl.Vector2{X: halfFlagWidth, Y: halfFlagHeight}, + 0.0, + rl.WHITE) + } + rl.EndDrawing() + } +} From ea3a304f88d02437da304b838ee01fa657efbd7e Mon Sep 17 00:00:00 2001 From: Zachary Snow Date: Thu, 17 Sep 2026 10:02:39 +0200 Subject: [PATCH 2/2] Optimize a bit. --- example/flag/main.go | 18 +++++++++++------- 1 file changed, 11 insertions(+), 7 deletions(-) diff --git a/example/flag/main.go b/example/flag/main.go index a4dc0a3..80c8bba 100644 --- a/example/flag/main.go +++ b/example/flag/main.go @@ -30,8 +30,8 @@ const ( flagParts = 25 flagPartWidth = flagWidth / flagParts - elapsedTimeFactor = 10 - yOffsetFactor = 10 + speedFactor = 10 + waveFactor = 10 ) func main() { @@ -45,6 +45,7 @@ func main() { rl.ImageDrawText(&image, "Go can be a better C", 150, 190, 30, rl.WHITE) texture := rl.LoadTextureFromImage(image) + defer rl.UnloadTexture(texture) rl.UnloadImage(image) @@ -53,23 +54,26 @@ func main() { rl.BeginDrawing() rl.ClearBackground(rl.BLACK) + + origin := rl.Vector2{X: halfFlagWidth, Y: halfFlagHeight} for i := 0; i < flagParts; i += 1 { - angle := float64(flagPartWidth*i) + (elapsedTime * elapsedTimeFactor) + x := float32(flagPartWidth * i) + angle := float64(x) + elapsedTime*speedFactor rl.DrawTexturePro( texture, rl.Rectangle{ - X: float32(flagPartWidth * i), + X: x, Y: 0, Width: flagPartWidth, Height: flagHeight, }, rl.Rectangle{ - X: halfScreenWidth + float32(flagPartWidth*i), - Y: halfScreenHeight + (float32(math.Sin(angle)) * yOffsetFactor), + X: halfScreenWidth + x, + Y: halfScreenHeight + float32(math.Sin(angle)*waveFactor), Width: flagPartWidth, Height: flagHeight, }, - rl.Vector2{X: halfFlagWidth, Y: halfFlagHeight}, + origin, 0.0, rl.WHITE) }