Update C sources and examples
This commit is contained in:
parent
3b28d17b95
commit
8f1ad11c49
100 changed files with 2081 additions and 1686 deletions
123
examples/textures/particles_blending/main.go
Normal file
123
examples/textures/particles_blending/main.go
Normal file
|
@ -0,0 +1,123 @@
|
|||
package main
|
||||
|
||||
import (
|
||||
"github.com/gen2brain/raylib-go/raylib"
|
||||
)
|
||||
|
||||
const (
|
||||
maxParticles = 200
|
||||
)
|
||||
|
||||
type particle struct {
|
||||
Position raylib.Vector2
|
||||
Color raylib.Color
|
||||
Alpha float32
|
||||
Size float32
|
||||
Rotation float32
|
||||
Active bool
|
||||
}
|
||||
|
||||
func main() {
|
||||
screenWidth := int32(800)
|
||||
screenHeight := int32(450)
|
||||
|
||||
//raylib.SetConfigFlags(raylib.FlagVsyncHint)
|
||||
raylib.InitWindow(screenWidth, screenHeight, "raylib [textures] example - particles blending")
|
||||
|
||||
// Particles pool, reuse them!
|
||||
mouseTail := make([]particle, maxParticles)
|
||||
|
||||
// Initialize particles
|
||||
for i := 0; i < maxParticles; i++ {
|
||||
mouseTail[i].Position = raylib.NewVector2(0, 0)
|
||||
mouseTail[i].Color = raylib.NewColor(byte(raylib.GetRandomValue(0, 255)), byte(raylib.GetRandomValue(0, 255)), byte(raylib.GetRandomValue(0, 255)), 255)
|
||||
mouseTail[i].Alpha = 1.0
|
||||
mouseTail[i].Size = float32(raylib.GetRandomValue(1, 30)) / 20.0
|
||||
mouseTail[i].Rotation = float32(raylib.GetRandomValue(0, 360))
|
||||
mouseTail[i].Active = false
|
||||
}
|
||||
|
||||
gravity := float32(3.0)
|
||||
|
||||
smoke := raylib.LoadTexture("smoke.png")
|
||||
|
||||
blending := raylib.BlendAlpha
|
||||
|
||||
raylib.SetTargetFPS(60)
|
||||
|
||||
for !raylib.WindowShouldClose() {
|
||||
// Update
|
||||
|
||||
// Activate one particle every frame and Update active particles
|
||||
// NOTE: Particles initial position should be mouse position when activated
|
||||
// NOTE: Particles fall down with gravity and rotation... and disappear after 2 seconds (alpha = 0)
|
||||
// NOTE: When a particle disappears, active = false and it can be reused.
|
||||
for i := 0; i < maxParticles; i++ {
|
||||
if !mouseTail[i].Active {
|
||||
mouseTail[i].Active = true
|
||||
mouseTail[i].Alpha = 1.0
|
||||
mouseTail[i].Position = raylib.GetMousePosition()
|
||||
i = maxParticles
|
||||
}
|
||||
}
|
||||
|
||||
for i := 0; i < maxParticles; i++ {
|
||||
if mouseTail[i].Active {
|
||||
mouseTail[i].Position.Y += gravity
|
||||
mouseTail[i].Alpha -= 0.01
|
||||
|
||||
if mouseTail[i].Alpha <= 0.0 {
|
||||
mouseTail[i].Active = false
|
||||
}
|
||||
|
||||
mouseTail[i].Rotation += 5.0
|
||||
}
|
||||
}
|
||||
|
||||
if raylib.IsKeyPressed(raylib.KeySpace) {
|
||||
if blending == raylib.BlendAlpha {
|
||||
blending = raylib.BlendAdditive
|
||||
} else {
|
||||
blending = raylib.BlendAlpha
|
||||
}
|
||||
}
|
||||
|
||||
// Draw
|
||||
|
||||
raylib.BeginDrawing()
|
||||
|
||||
raylib.ClearBackground(raylib.DarkGray)
|
||||
|
||||
raylib.BeginBlendMode(blending)
|
||||
|
||||
// Draw active particles
|
||||
for i := 0; i < maxParticles; i++ {
|
||||
if mouseTail[i].Active {
|
||||
raylib.DrawTexturePro(
|
||||
smoke,
|
||||
raylib.NewRectangle(0, 0, smoke.Width, smoke.Height),
|
||||
raylib.NewRectangle(int32(mouseTail[i].Position.X), int32(mouseTail[i].Position.Y), smoke.Width*int32(mouseTail[i].Size), smoke.Height*int32(mouseTail[i].Size)),
|
||||
raylib.NewVector2(float32(smoke.Width)*mouseTail[i].Size/2, float32(smoke.Height)*mouseTail[i].Size/2),
|
||||
mouseTail[i].Rotation,
|
||||
raylib.Fade(mouseTail[i].Color, mouseTail[i].Alpha),
|
||||
)
|
||||
}
|
||||
}
|
||||
|
||||
raylib.EndBlendMode()
|
||||
|
||||
raylib.DrawText("PRESS SPACE to CHANGE BLENDING MODE", 180, 20, 20, raylib.Black)
|
||||
|
||||
if blending == raylib.BlendAlpha {
|
||||
raylib.DrawText("ALPHA BLENDING", 290, screenHeight-40, 20, raylib.Black)
|
||||
} else {
|
||||
raylib.DrawText("ADDITIVE BLENDING", 280, screenHeight-40, 20, raylib.RayWhite)
|
||||
}
|
||||
|
||||
raylib.EndDrawing()
|
||||
}
|
||||
|
||||
raylib.UnloadTexture(smoke)
|
||||
|
||||
raylib.CloseWindow()
|
||||
}
|
BIN
examples/textures/particles_blending/smoke.png
Normal file
BIN
examples/textures/particles_blending/smoke.png
Normal file
Binary file not shown.
After Width: | Height: | Size: 15 KiB |
Loading…
Add table
Add a link
Reference in a new issue