This commit is contained in:
Milan Nikolic 2017-02-21 17:16:26 +01:00
parent 10f04b58be
commit 468b700d5d
14 changed files with 130 additions and 124 deletions

View file

@ -8,6 +8,7 @@ import (
"github.com/gen2brain/raylib-go/raylib" "github.com/gen2brain/raylib-go/raylib"
) )
// Game states
const ( const (
Logo = iota Logo = iota
Title Title

View file

@ -4,9 +4,9 @@ import (
"github.com/gen2brain/raylib-go/raylib" "github.com/gen2brain/raylib-go/raylib"
) )
const MaxCircles = 64 const maxCircles = 64
type CircleWave struct { type circleWave struct {
Position raylib.Vector2 Position raylib.Vector2
Radius float32 Radius float32
Alpha float32 Alpha float32
@ -30,10 +30,10 @@ func main() {
raylib.Yellow, raylib.Green, raylib.SkyBlue, raylib.Purple, raylib.Beige, raylib.Yellow, raylib.Green, raylib.SkyBlue, raylib.Purple, raylib.Beige,
} }
circles := make([]CircleWave, MaxCircles) circles := make([]circleWave, maxCircles)
for i := MaxCircles - 1; i >= 0; i-- { for i := maxCircles - 1; i >= 0; i-- {
c := CircleWave{} c := circleWave{}
c.Alpha = 0 c.Alpha = 0
c.Radius = float32(raylib.GetRandomValue(10, 40)) c.Radius = float32(raylib.GetRandomValue(10, 40))
@ -79,7 +79,7 @@ func main() {
timePlayed := int32(raylib.GetMusicTimePlayed(xm)/raylib.GetMusicTimeLength(xm)*float32(screenWidth-40)) * 2 timePlayed := int32(raylib.GetMusicTimePlayed(xm)/raylib.GetMusicTimeLength(xm)*float32(screenWidth-40)) * 2
// Color circles animation // Color circles animation
for i := MaxCircles - 1; (i >= 0) && !pause; i-- { for i := maxCircles - 1; (i >= 0) && !pause; i-- {
circles[i].Alpha += circles[i].Speed circles[i].Alpha += circles[i].Speed
circles[i].Radius += circles[i].Speed * 10.0 circles[i].Radius += circles[i].Speed * 10.0
@ -101,7 +101,7 @@ func main() {
raylib.ClearBackground(raylib.RayWhite) raylib.ClearBackground(raylib.RayWhite)
for i := MaxCircles - 1; i >= 0; i-- { for i := maxCircles - 1; i >= 0; i-- {
raylib.DrawCircleV(circles[i].Position, float32(circles[i].Radius), raylib.Fade(circles[i].Color, circles[i].Alpha)) raylib.DrawCircleV(circles[i].Position, float32(circles[i].Radius), raylib.Fade(circles[i].Color, circles[i].Alpha))
} }

View file

@ -5,7 +5,7 @@ import (
) )
var ( var (
MaxBuildings int = 100 maxBuildings int = 100
) )
func main() { func main() {
@ -16,12 +16,12 @@ func main() {
player := raylib.NewRectangle(400, 280, 40, 40) player := raylib.NewRectangle(400, 280, 40, 40)
buildings := make([]raylib.Rectangle, MaxBuildings) buildings := make([]raylib.Rectangle, maxBuildings)
buildColors := make([]raylib.Color, MaxBuildings) buildColors := make([]raylib.Color, maxBuildings)
spacing := int32(0) spacing := int32(0)
for i := 0; i < MaxBuildings; i++ { for i := 0; i < maxBuildings; i++ {
r := raylib.Rectangle{} r := raylib.Rectangle{}
r.Width = raylib.GetRandomValue(50, 200) r.Width = raylib.GetRandomValue(50, 200)
r.Height = raylib.GetRandomValue(100, 800) r.Height = raylib.GetRandomValue(100, 800)
@ -93,7 +93,7 @@ func main() {
raylib.DrawRectangle(-6000, 320, 13000, 8000, raylib.DarkGray) raylib.DrawRectangle(-6000, 320, 13000, 8000, raylib.DarkGray)
for i := 0; i < MaxBuildings; i++ { for i := 0; i < maxBuildings; i++ {
raylib.DrawRectangleRec(buildings[i], buildColors[i]) raylib.DrawRectangleRec(buildings[i], buildColors[i])
} }

View file

@ -5,7 +5,7 @@ import (
) )
const ( const (
MaxColumns = 20 maxColumns = 20
) )
func main() { func main() {
@ -18,11 +18,11 @@ func main() {
camera.Fovy = 60.0 camera.Fovy = 60.0
// Generates some random columns // Generates some random columns
heights := make([]float32, MaxColumns) heights := make([]float32, maxColumns)
positions := make([]raylib.Vector3, MaxColumns) positions := make([]raylib.Vector3, maxColumns)
colors := make([]raylib.Color, MaxColumns) colors := make([]raylib.Color, maxColumns)
for i := 0; i < MaxColumns; i++ { for i := 0; i < maxColumns; i++ {
heights[i] = float32(raylib.GetRandomValue(1, 12)) heights[i] = float32(raylib.GetRandomValue(1, 12))
positions[i] = raylib.NewVector3(float32(raylib.GetRandomValue(-15, 15)), heights[i]/2, float32(raylib.GetRandomValue(-15, 15))) positions[i] = raylib.NewVector3(float32(raylib.GetRandomValue(-15, 15)), heights[i]/2, float32(raylib.GetRandomValue(-15, 15)))
colors[i] = raylib.NewColor(uint8(raylib.GetRandomValue(20, 255)), uint8(raylib.GetRandomValue(10, 55)), 30, 255) colors[i] = raylib.NewColor(uint8(raylib.GetRandomValue(20, 255)), uint8(raylib.GetRandomValue(10, 55)), 30, 255)
@ -47,7 +47,7 @@ func main() {
raylib.DrawCube(raylib.NewVector3(0.0, 2.5, 16.0), 32.0, 5.0, 1.0, raylib.Gold) // Draw a yellow wall raylib.DrawCube(raylib.NewVector3(0.0, 2.5, 16.0), 32.0, 5.0, 1.0, raylib.Gold) // Draw a yellow wall
// Draw some cubes around // Draw some cubes around
for i := 0; i < MaxColumns; i++ { for i := 0; i < maxColumns; i++ {
raylib.DrawCube(positions[i], 2.0, heights[i], 2.0, colors[i]) raylib.DrawCube(positions[i], 2.0, heights[i], 2.0, colors[i])
raylib.DrawCubeWires(positions[i], 2.0, heights[i], 2.0, raylib.Maroon) raylib.DrawCubeWires(positions[i], 2.0, heights[i], 2.0, raylib.Maroon)
} }

View file

@ -5,7 +5,7 @@ import (
) )
var ( var (
MaxGestureStrings int = 20 maxGestureStrings int = 20
) )
func main() { func main() {
@ -56,7 +56,7 @@ func main() {
gestureStrings = append(gestureStrings, "GESTURE PINCH OUT") gestureStrings = append(gestureStrings, "GESTURE PINCH OUT")
} }
if len(gestureStrings) >= MaxGestureStrings { if len(gestureStrings) >= maxGestureStrings {
gestureStrings = make([]string, 0) gestureStrings = make([]string, 0)
} }
} }

View file

@ -7,8 +7,8 @@ import (
) )
const ( const (
Xbox360NameId = "Xbox 360 Controller" xbox360NameID = "Xbox 360 Controller"
Ps3NameId = "PLAYSTATION(R)3 Controller" ps3NameID = "PLAYSTATION(R)3 Controller"
) )
func main() { func main() {
@ -29,7 +29,7 @@ func main() {
if raylib.IsGamepadAvailable(raylib.GamepadPlayer1) { if raylib.IsGamepadAvailable(raylib.GamepadPlayer1) {
raylib.DrawText(fmt.Sprintf("GP1: %s", raylib.GetGamepadName(raylib.GamepadPlayer1)), 10, 10, 10, raylib.Black) raylib.DrawText(fmt.Sprintf("GP1: %s", raylib.GetGamepadName(raylib.GamepadPlayer1)), 10, 10, 10, raylib.Black)
if raylib.IsGamepadName(raylib.GamepadPlayer1, Xbox360NameId) { if raylib.IsGamepadName(raylib.GamepadPlayer1, xbox360NameID) {
raylib.DrawTexture(texXboxPad, 0, 0, raylib.DarkGray) raylib.DrawTexture(texXboxPad, 0, 0, raylib.DarkGray)
// Draw buttons: xbox home // Draw buttons: xbox home
@ -99,7 +99,7 @@ func main() {
raylib.DrawRectangle(170, 30, 15, int32(((1.0+raylib.GetGamepadAxisMovement(raylib.GamepadPlayer1, raylib.GamepadXboxAxisLt))/2.0)*70), raylib.Red) raylib.DrawRectangle(170, 30, 15, int32(((1.0+raylib.GetGamepadAxisMovement(raylib.GamepadPlayer1, raylib.GamepadXboxAxisLt))/2.0)*70), raylib.Red)
raylib.DrawRectangle(604, 30, 15, int32(((1.0+raylib.GetGamepadAxisMovement(raylib.GamepadPlayer1, raylib.GamepadXboxAxisRt))/2.0)*70), raylib.Red) raylib.DrawRectangle(604, 30, 15, int32(((1.0+raylib.GetGamepadAxisMovement(raylib.GamepadPlayer1, raylib.GamepadXboxAxisRt))/2.0)*70), raylib.Red)
} else if raylib.IsGamepadName(raylib.GamepadPlayer1, Ps3NameId) { } else if raylib.IsGamepadName(raylib.GamepadPlayer1, ps3NameID) {
raylib.DrawTexture(texPs3Pad, 0, 0, raylib.DarkGray) raylib.DrawTexture(texPs3Pad, 0, 0, raylib.DarkGray)
// Draw buttons: ps // Draw buttons: ps

View file

@ -6,10 +6,6 @@ import (
"github.com/gen2brain/raylib-go/raylib" "github.com/gen2brain/raylib-go/raylib"
) )
var (
MaxBuildings int = 100
)
func main() { func main() {
screenWidth := int32(800) screenWidth := int32(800)
screenHeight := int32(450) screenHeight := int32(450)

View file

@ -7,8 +7,8 @@ import (
) )
const ( const (
StorageScore = 0 storageScore = 0
StorageHiscore = 1 storageHiscore = 1
) )
func main() { func main() {
@ -28,12 +28,12 @@ func main() {
} }
if raylib.IsKeyPressed(raylib.KeyEnter) { if raylib.IsKeyPressed(raylib.KeyEnter) {
raylib.StorageSaveValue(StorageScore, score) raylib.StorageSaveValue(storageScore, score)
raylib.StorageSaveValue(StorageHiscore, hiscore) raylib.StorageSaveValue(storageHiscore, hiscore)
} else if raylib.IsKeyPressed(raylib.KeySpace) { } else if raylib.IsKeyPressed(raylib.KeySpace) {
// NOTE: If requested position could not be found, value 0 is returned // NOTE: If requested position could not be found, value 0 is returned
score = raylib.StorageLoadValue(StorageScore) score = raylib.StorageLoadValue(storageScore)
hiscore = raylib.StorageLoadValue(StorageHiscore) hiscore = raylib.StorageLoadValue(storageHiscore)
} }
framesCounter++ framesCounter++

View file

@ -18,19 +18,19 @@ const (
spriteSize = 48 spriteSize = 48
) )
// Floppy // Floppy type
type Floppy struct { type Floppy struct {
Position raylib.Vector2 Position raylib.Vector2
} }
// Pipe // Pipe type
type Pipe struct { type Pipe struct {
Rec raylib.Rectangle Rec raylib.Rectangle
Color raylib.Color Color raylib.Color
Active bool Active bool
} }
// Game // Game type
type Game struct { type Game struct {
ScreenWidth int32 ScreenWidth int32
ScreenHeight int32 ScreenHeight int32
@ -60,7 +60,7 @@ type Game struct {
PipesSpeedX int32 PipesSpeedX int32
} }
// New Game // NewGame - Start new game
func NewGame() (g Game) { func NewGame() (g Game) {
g.Init() g.Init()
return return
@ -119,7 +119,7 @@ func run(app unsafe.Pointer) {
os.Exit(0) os.Exit(0)
} }
// Initialize game // Init - Initialize game
func (g *Game) Init() { func (g *Game) Init() {
// Window resolution // Window resolution
g.ScreenWidth = 504 g.ScreenWidth = 504
@ -173,7 +173,7 @@ func (g *Game) Init() {
g.Pause = false g.Pause = false
} }
// Load resources // Load - Load resources
func (g *Game) Load() { func (g *Game) Load() {
g.FxFlap = raylib.LoadSound("sounds/flap.wav") g.FxFlap = raylib.LoadSound("sounds/flap.wav")
g.FxSlap = raylib.LoadSound("sounds/slap.wav") g.FxSlap = raylib.LoadSound("sounds/slap.wav")
@ -182,7 +182,7 @@ func (g *Game) Load() {
g.Texture = raylib.LoadTexture("images/sprite.png") g.Texture = raylib.LoadTexture("images/sprite.png")
} }
// Unload resources // Unload - Unload resources
func (g *Game) Unload() { func (g *Game) Unload() {
raylib.UnloadSound(g.FxFlap) raylib.UnloadSound(g.FxFlap)
raylib.UnloadSound(g.FxSlap) raylib.UnloadSound(g.FxSlap)
@ -191,7 +191,7 @@ func (g *Game) Unload() {
raylib.UnloadTexture(g.Texture) raylib.UnloadTexture(g.Texture)
} }
// Update game // Update - Update game
func (g *Game) Update() { func (g *Game) Update() {
if raylib.WindowShouldClose() { if raylib.WindowShouldClose() {
g.WindowShouldClose = true g.WindowShouldClose = true
@ -304,7 +304,7 @@ func (g *Game) Update() {
} }
} }
// Draw game // Draw - Draw game
func (g *Game) Draw() { func (g *Game) Draw() {
raylib.BeginDrawing() raylib.BeginDrawing()

View file

@ -9,6 +9,7 @@ const (
squareSize = 31 squareSize = 31
) )
// Snake type
type Snake struct { type Snake struct {
Position raylib.Vector2 Position raylib.Vector2
Size raylib.Vector2 Size raylib.Vector2
@ -16,6 +17,7 @@ type Snake struct {
Color raylib.Color Color raylib.Color
} }
// Food type
type Food struct { type Food struct {
Position raylib.Vector2 Position raylib.Vector2
Size raylib.Vector2 Size raylib.Vector2
@ -23,6 +25,7 @@ type Food struct {
Color raylib.Color Color raylib.Color
} }
// Game type
type Game struct { type Game struct {
ScreenWidth int32 ScreenWidth int32
ScreenHeight int32 ScreenHeight int32
@ -56,7 +59,7 @@ func main() {
raylib.CloseWindow() raylib.CloseWindow()
} }
// Initialize game // Init - Initialize game
func (g *Game) Init() { func (g *Game) Init() {
g.ScreenWidth = 800 g.ScreenWidth = 800
g.ScreenHeight = 450 g.ScreenHeight = 450
@ -97,7 +100,7 @@ func (g *Game) Init() {
g.Fruit.Active = false g.Fruit.Active = false
} }
// Update game // Update - Update game
func (g *Game) Update() { func (g *Game) Update() {
if !g.GameOver { if !g.GameOver {
if raylib.IsKeyPressed('P') { if raylib.IsKeyPressed('P') {
@ -192,7 +195,7 @@ func (g *Game) Update() {
} }
} }
// Draw game // Draw - Draw game
func (g *Game) Draw() { func (g *Game) Draw() {
raylib.BeginDrawing() raylib.BeginDrawing()

View file

@ -6,33 +6,34 @@ import (
"github.com/gen2brain/raylib-go/raylib" "github.com/gen2brain/raylib-go/raylib"
) )
const NumTextures = 24 const numTextures = 24
// Formats
const ( const (
PNG_R8G8B8A8 = iota PngR8g8b8a8 = iota
PVR_GRAYSCALE PvrGrayscale
PVR_GRAY_ALPHA PvrGrayAlpha
PVR_R5G6B5 PvrR5g6b5
PVR_R5G5B5A1 PvrR5g5b5a1
PVR_R4G4B4A4 PvrR4g4b4a4
DDS_R5G6B5 DdsR5g6b5
DDS_R5G5B5A1 DdsR5g5b5a1
DDS_R4G4B4A4 DdsR4g4b4a4
DDS_R8G8B8A8 DdsR8g8b8a8
DDS_DXT1_RGB DdsDxt1Rgb
DDS_DXT1_RGBA DdsDxt1Rgba
DDS_DXT3_RGBA DdsDxt3Rgba
DDS_DXT5_RGBA DdsDxt5Rgba
PKM_ETC1_RGB PkmEtc1Rgb
PKM_ETC2_RGB PkmEtc2Rgb
PKM_ETC2_EAC_RGBA PkmEtc2EacRgba
KTX_ETC1_RGB KtxEtc1Rgb
KTX_ETC2_RGB KtxEtc2Rgb
KTX_ETC2_EAC_RGBA KtxEtc2EacRgba
ASTC_4x4_LDR Astc4x4Ldr
ASTC_8x8_LDR Astc8x8Ldr
PVR_PVRT_RGB PvrPvrtRgb
PVR_PVRT_RGBA PvrPvrtRgba
) )
var formatText = []string{ var formatText = []string{
@ -70,60 +71,60 @@ func main() {
// NOTE: Textures MUST be loaded after Window initialization (OpenGL context is required) // NOTE: Textures MUST be loaded after Window initialization (OpenGL context is required)
sonic := make([]raylib.Texture2D, NumTextures) sonic := make([]raylib.Texture2D, numTextures)
sonic[PNG_R8G8B8A8] = raylib.LoadTexture("texture_formats/sonic.png") sonic[PngR8g8b8a8] = raylib.LoadTexture("texture_formats/sonic.png")
// Load UNCOMPRESSED PVR texture data // Load UNCOMPRESSED PVR texture data
sonic[PVR_GRAYSCALE] = raylib.LoadTexture("texture_formats/sonic_GRAYSCALE.pvr") sonic[PvrGrayscale] = raylib.LoadTexture("texture_formats/sonic_GRAYSCALE.pvr")
sonic[PVR_GRAY_ALPHA] = raylib.LoadTexture("texture_formats/sonic_L8A8.pvr") sonic[PvrGrayAlpha] = raylib.LoadTexture("texture_formats/sonic_L8A8.pvr")
sonic[PVR_R5G6B5] = raylib.LoadTexture("texture_formats/sonic_R5G6B5.pvr") sonic[PvrR5g6b5] = raylib.LoadTexture("texture_formats/sonic_R5G6B5.pvr")
sonic[PVR_R5G5B5A1] = raylib.LoadTexture("texture_formats/sonic_R5G5B5A1.pvr") sonic[PvrR5g5b5a1] = raylib.LoadTexture("texture_formats/sonic_R5G5B5A1.pvr")
sonic[PVR_R4G4B4A4] = raylib.LoadTexture("texture_formats/sonic_R4G4B4A4.pvr") sonic[PvrR4g4b4a4] = raylib.LoadTexture("texture_formats/sonic_R4G4B4A4.pvr")
// Load UNCOMPRESSED DDS texture data // Load UNCOMPRESSED DDS texture data
sonic[DDS_R5G6B5] = raylib.LoadTexture("texture_formats/sonic_R5G6B5.dds") sonic[DdsR5g6b5] = raylib.LoadTexture("texture_formats/sonic_R5G6B5.dds")
sonic[DDS_R5G5B5A1] = raylib.LoadTexture("texture_formats/sonic_A1R5G5B5.dds") sonic[DdsR5g5b5a1] = raylib.LoadTexture("texture_formats/sonic_A1R5G5B5.dds")
sonic[DDS_R4G4B4A4] = raylib.LoadTexture("texture_formats/sonic_A4R4G4B4.dds") sonic[DdsR4g4b4a4] = raylib.LoadTexture("texture_formats/sonic_A4R4G4B4.dds")
sonic[DDS_R8G8B8A8] = raylib.LoadTexture("texture_formats/sonic_A8R8G8B8.dds") sonic[DdsR8g8b8a8] = raylib.LoadTexture("texture_formats/sonic_A8R8G8B8.dds")
// Load COMPRESSED DXT DDS texture data (if supported) // Load COMPRESSED DXT DDS texture data (if supported)
sonic[DDS_DXT1_RGB] = raylib.LoadTexture("texture_formats/sonic_DXT1_RGB.dds") sonic[DdsDxt1Rgb] = raylib.LoadTexture("texture_formats/sonic_DXT1_RGB.dds")
sonic[DDS_DXT1_RGBA] = raylib.LoadTexture("texture_formats/sonic_DXT1_RGBA.dds") sonic[DdsDxt1Rgba] = raylib.LoadTexture("texture_formats/sonic_DXT1_RGBA.dds")
sonic[DDS_DXT3_RGBA] = raylib.LoadTexture("texture_formats/sonic_DXT3_RGBA.dds") sonic[DdsDxt3Rgba] = raylib.LoadTexture("texture_formats/sonic_DXT3_RGBA.dds")
sonic[DDS_DXT5_RGBA] = raylib.LoadTexture("texture_formats/sonic_DXT5_RGBA.dds") sonic[DdsDxt5Rgba] = raylib.LoadTexture("texture_formats/sonic_DXT5_RGBA.dds")
// Load COMPRESSED ETC texture data (if supported) // Load COMPRESSED ETC texture data (if supported)
sonic[PKM_ETC1_RGB] = raylib.LoadTexture("texture_formats/sonic_ETC1_RGB.pkm") sonic[PkmEtc1Rgb] = raylib.LoadTexture("texture_formats/sonic_ETC1_RGB.pkm")
sonic[PKM_ETC2_RGB] = raylib.LoadTexture("texture_formats/sonic_ETC2_RGB.pkm") sonic[PkmEtc2Rgb] = raylib.LoadTexture("texture_formats/sonic_ETC2_RGB.pkm")
sonic[PKM_ETC2_EAC_RGBA] = raylib.LoadTexture("texture_formats/sonic_ETC2_EAC_RGBA.pkm") sonic[PkmEtc2EacRgba] = raylib.LoadTexture("texture_formats/sonic_ETC2_EAC_RGBA.pkm")
sonic[KTX_ETC1_RGB] = raylib.LoadTexture("texture_formats/sonic_ETC1_RGB.ktx") sonic[KtxEtc1Rgb] = raylib.LoadTexture("texture_formats/sonic_ETC1_RGB.ktx")
sonic[KTX_ETC2_RGB] = raylib.LoadTexture("texture_formats/sonic_ETC2_RGB.ktx") sonic[KtxEtc2Rgb] = raylib.LoadTexture("texture_formats/sonic_ETC2_RGB.ktx")
sonic[KTX_ETC2_EAC_RGBA] = raylib.LoadTexture("texture_formats/sonic_ETC2_EAC_RGBA.ktx") sonic[KtxEtc2EacRgba] = raylib.LoadTexture("texture_formats/sonic_ETC2_EAC_RGBA.ktx")
// Load COMPRESSED ASTC texture data (if supported) // Load COMPRESSED ASTC texture data (if supported)
sonic[ASTC_4x4_LDR] = raylib.LoadTexture("texture_formats/sonic_ASTC_4x4_ldr.astc") sonic[Astc4x4Ldr] = raylib.LoadTexture("texture_formats/sonic_ASTC_4x4_ldr.astc")
sonic[ASTC_8x8_LDR] = raylib.LoadTexture("texture_formats/sonic_ASTC_8x8_ldr.astc") sonic[Astc8x8Ldr] = raylib.LoadTexture("texture_formats/sonic_ASTC_8x8_ldr.astc")
// Load COMPRESSED PVR texture data (if supported) // Load COMPRESSED PVR texture data (if supported)
sonic[PVR_PVRT_RGB] = raylib.LoadTexture("texture_formats/sonic_PVRT_RGB.pvr") sonic[PvrPvrtRgb] = raylib.LoadTexture("texture_formats/sonic_PVRT_RGB.pvr")
sonic[PVR_PVRT_RGBA] = raylib.LoadTexture("texture_formats/sonic_PVRT_RGBA.pvr") sonic[PvrPvrtRgba] = raylib.LoadTexture("texture_formats/sonic_PVRT_RGBA.pvr")
selectedFormat := PNG_R8G8B8A8 selectedFormat := PngR8g8b8a8
selectRecs := make([]raylib.Rectangle, NumTextures) selectRecs := make([]raylib.Rectangle, numTextures)
for i := 0; i < NumTextures; i++ { for i := 0; i < numTextures; i++ {
if i < NumTextures/2 { if i < numTextures/2 {
selectRecs[i] = raylib.NewRectangle(40, int32(30+32*i), 150, 30) selectRecs[i] = raylib.NewRectangle(40, int32(30+32*i), 150, 30)
} else { } else {
selectRecs[i] = raylib.NewRectangle(40+152, int32(30+32*(i-NumTextures/2)), 150, 30) selectRecs[i] = raylib.NewRectangle(40+152, int32(30+32*(i-numTextures/2)), 150, 30)
} }
} }
// Texture sizes in KB // Texture sizes in KB
var textureSizes = [NumTextures]int{ var textureSizes = [numTextures]int{
512 * 512 * 32 / 8 / 1024, //PNG_R8G8B8A8 (32 bpp) 512 * 512 * 32 / 8 / 1024, //PNG_R8G8B8A8 (32 bpp)
512 * 512 * 8 / 8 / 1024, //PVR_GRAYSCALE (8 bpp) 512 * 512 * 8 / 8 / 1024, //PVR_GRAYSCALE (8 bpp)
512 * 512 * 16 / 8 / 1024, //PVR_GRAY_ALPHA (16 bpp) 512 * 512 * 16 / 8 / 1024, //PVR_GRAY_ALPHA (16 bpp)
@ -157,21 +158,21 @@ func main() {
if raylib.IsKeyPressed(raylib.KeyDown) { if raylib.IsKeyPressed(raylib.KeyDown) {
selectedFormat++ selectedFormat++
if selectedFormat >= NumTextures { if selectedFormat >= numTextures {
selectedFormat = 0 selectedFormat = 0
} }
} else if raylib.IsKeyPressed(raylib.KeyUp) { } else if raylib.IsKeyPressed(raylib.KeyUp) {
selectedFormat-- selectedFormat--
if selectedFormat < 0 { if selectedFormat < 0 {
selectedFormat = NumTextures - 1 selectedFormat = numTextures - 1
} }
} else if raylib.IsKeyPressed(raylib.KeyRight) { } else if raylib.IsKeyPressed(raylib.KeyRight) {
if selectedFormat < NumTextures/2 { if selectedFormat < numTextures/2 {
selectedFormat += NumTextures / 2 selectedFormat += numTextures / 2
} }
} else if raylib.IsKeyPressed(raylib.KeyLeft) { } else if raylib.IsKeyPressed(raylib.KeyLeft) {
if selectedFormat >= NumTextures/2 { if selectedFormat >= numTextures/2 {
selectedFormat -= NumTextures / 2 selectedFormat -= numTextures / 2
} }
} }
@ -182,7 +183,7 @@ func main() {
raylib.ClearBackground(raylib.RayWhite) raylib.ClearBackground(raylib.RayWhite)
// Draw rectangles // Draw rectangles
for i := 0; i < NumTextures; i++ { for i := 0; i < numTextures; i++ {
if i == selectedFormat { if i == selectedFormat {
raylib.DrawRectangleRec(selectRecs[i], raylib.SkyBlue) raylib.DrawRectangleRec(selectRecs[i], raylib.SkyBlue)
raylib.DrawRectangleLines(selectRecs[i].X, selectRecs[i].Y, selectRecs[i].Width, selectRecs[i].Height, raylib.Blue) raylib.DrawRectangleLines(selectRecs[i].X, selectRecs[i].Y, selectRecs[i].Width, selectRecs[i].Height, raylib.Blue)
@ -195,7 +196,7 @@ func main() {
} }
// Draw selected texture // Draw selected texture
if sonic[selectedFormat].Id != 0 { if sonic[selectedFormat].ID != 0 {
raylib.DrawTexture(sonic[selectedFormat], 350, -10, raylib.White) raylib.DrawTexture(sonic[selectedFormat], 350, -10, raylib.White)
} else { } else {
raylib.DrawRectangleLines(488, 165, 200, 110, raylib.DarkGray) raylib.DrawRectangleLines(488, 165, 200, 110, raylib.DarkGray)
@ -211,7 +212,7 @@ func main() {
raylib.EndDrawing() raylib.EndDrawing()
} }
for i := 0; i < NumTextures; i++ { for i := 0; i < numTextures; i++ {
raylib.UnloadTexture(sonic[i]) raylib.UnloadTexture(sonic[i])
} }

View file

@ -4,8 +4,9 @@ import (
"github.com/gen2brain/raylib-go/raylib" "github.com/gen2brain/raylib-go/raylib"
) )
const NumProcesses = 8 const numProcesses = 8
// Process
const ( const (
None = iota None = iota
ColorGrayscale ColorGrayscale
@ -41,9 +42,9 @@ func main() {
currentProcess := None currentProcess := None
textureReload := false textureReload := false
selectRecs := make([]raylib.Rectangle, NumProcesses) selectRecs := make([]raylib.Rectangle, numProcesses)
for i := int32(0); i < NumProcesses; i++ { for i := int32(0); i < numProcesses; i++ {
selectRecs[i] = raylib.NewRectangle(40, 50+32*i, 150, 30) selectRecs[i] = raylib.NewRectangle(40, 50+32*i, 150, 30)
} }
@ -110,7 +111,7 @@ func main() {
raylib.DrawText("IMAGE PROCESSING:", 40, 30, 10, raylib.DarkGray) raylib.DrawText("IMAGE PROCESSING:", 40, 30, 10, raylib.DarkGray)
// Draw rectangles // Draw rectangles
for i := 0; i < NumProcesses; i++ { for i := 0; i < numProcesses; i++ {
if i == currentProcess { if i == currentProcess {
raylib.DrawRectangleRec(selectRecs[i], raylib.SkyBlue) raylib.DrawRectangleRec(selectRecs[i], raylib.SkyBlue)
raylib.DrawRectangleLines(selectRecs[i].X, selectRecs[i].Y, selectRecs[i].Width, selectRecs[i].Height, raylib.Blue) raylib.DrawRectangleLines(selectRecs[i].X, selectRecs[i].Y, selectRecs[i].Width, selectRecs[i].Height, raylib.Blue)

View file

@ -5,10 +5,10 @@ import (
) )
const ( const (
MaxParticles = 200 maxParticles = 200
) )
type Particle struct { type particle struct {
Position raylib.Vector2 Position raylib.Vector2
Color raylib.Color Color raylib.Color
Alpha float32 Alpha float32
@ -25,10 +25,10 @@ func main() {
raylib.InitWindow(screenWidth, screenHeight, "raylib [textures] example - particles trail blending") raylib.InitWindow(screenWidth, screenHeight, "raylib [textures] example - particles trail blending")
// Particles pool, reuse them! // Particles pool, reuse them!
mouseTail := make([]Particle, MaxParticles) mouseTail := make([]particle, maxParticles)
// Initialize particles // Initialize particles
for i := 0; i < MaxParticles; i++ { for i := 0; i < maxParticles; i++ {
mouseTail[i].Position = raylib.NewVector2(0, 0) 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].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].Alpha = 1.0
@ -52,16 +52,16 @@ func main() {
// NOTE: Particles initial position should be mouse position when activated // 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: 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. // NOTE: When a particle disappears, active = false and it can be reused.
for i := 0; i < MaxParticles; i++ { for i := 0; i < maxParticles; i++ {
if !mouseTail[i].Active { if !mouseTail[i].Active {
mouseTail[i].Active = true mouseTail[i].Active = true
mouseTail[i].Alpha = 1.0 mouseTail[i].Alpha = 1.0
mouseTail[i].Position = raylib.GetMousePosition() mouseTail[i].Position = raylib.GetMousePosition()
i = MaxParticles i = maxParticles
} }
} }
for i := 0; i < MaxParticles; i++ { for i := 0; i < maxParticles; i++ {
if mouseTail[i].Active { if mouseTail[i].Active {
mouseTail[i].Position.Y += gravity mouseTail[i].Position.Y += gravity
mouseTail[i].Alpha -= 0.01 mouseTail[i].Alpha -= 0.01
@ -91,7 +91,7 @@ func main() {
raylib.BeginBlendMode(blending) raylib.BeginBlendMode(blending)
// Draw active particles // Draw active particles
for i := 0; i < MaxParticles; i++ { for i := 0; i < maxParticles; i++ {
if mouseTail[i].Active { if mouseTail[i].Active {
raylib.DrawTexturePro( raylib.DrawTexturePro(
smoke, smoke,

View file

@ -1,4 +1,4 @@
// 2D Physics library for videogames // Package physics - 2D Physics library for videogames
// //
// A port of Victor Fisac's physac engine (https://github.com/raysan5/raylib/blob/master/src/physac.h) // A port of Victor Fisac's physac engine (https://github.com/raysan5/raylib/blob/master/src/physac.h)
package physics package physics
@ -35,6 +35,7 @@ type Mat2 struct {
M11 float32 M11 float32
} }
// PolygonData type
type PolygonData struct { type PolygonData struct {
// Current used vertex and normals count // Current used vertex and normals count
VertexCount uint32 VertexCount uint32
@ -46,6 +47,7 @@ type PolygonData struct {
Transform Mat2 Transform Mat2
} }
// PhysicsShape type
type PhysicsShape struct { type PhysicsShape struct {
// Physics shape type (circle or polygon) // Physics shape type (circle or polygon)
Type uint32 Type uint32
@ -59,6 +61,7 @@ type PhysicsShape struct {
VertexData PolygonData VertexData PolygonData
} }
// PhysicsBodyData type
type PhysicsBodyData struct { type PhysicsBodyData struct {
// Reference unique identifier // Reference unique identifier
Id uint32 Id uint32
@ -102,6 +105,7 @@ type PhysicsBodyData struct {
Shape PhysicsShape Shape PhysicsShape
} }
// PhysicsManifoldData type
type PhysicsManifoldData struct { type PhysicsManifoldData struct {
// Reference unique identifier // Reference unique identifier
Id uint32 Id uint32