diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..822ca0c --- /dev/null +++ b/.gitignore @@ -0,0 +1,6 @@ +# Remove Editor Files +.idea +.vscode + +# Remove Enviroment Variables +.env diff --git a/application/globalVars.go b/application/globalVars.go new file mode 100644 index 0000000..7d6b893 --- /dev/null +++ b/application/globalVars.go @@ -0,0 +1,18 @@ +package application + +const ( + WindowTitle = "Colouring App" + WindowWidth = 800 + WindowHeight = 600 + WindowFPS = 60 +) + +const ( + SceneTitle = iota + SceneOptions + SceneGame +) + +var CurrentScene = SceneTitle + +var ShouldQuit = false diff --git a/go.mod b/go.mod new file mode 100644 index 0000000..8e5ba81 --- /dev/null +++ b/go.mod @@ -0,0 +1,13 @@ +module ColouringApp + +go 1.21.5 + +require ( + github.com/gen2brain/raylib-go/raygui v0.0.0-20231230150416-17ce08145200 + github.com/gen2brain/raylib-go/raylib v0.0.0-20231230150416-17ce08145200 +) + +require ( + github.com/ebitengine/purego v0.6.0-alpha.1.0.20231122024802-192c5e846faa // indirect + golang.org/x/sys v0.14.0 // indirect +) diff --git a/go.sum b/go.sum new file mode 100644 index 0000000..3126fe8 --- /dev/null +++ b/go.sum @@ -0,0 +1,8 @@ +github.com/ebitengine/purego v0.6.0-alpha.1.0.20231122024802-192c5e846faa h1:Ik7QikRgeH+bFOfAcMpttCbs6XxWXxCLXMm4awxtOXk= +github.com/ebitengine/purego v0.6.0-alpha.1.0.20231122024802-192c5e846faa/go.mod h1:ah1In8AOtksoNK6yk5z1HTJeUkC1Ez4Wk2idgGslMwQ= +github.com/gen2brain/raylib-go/raygui v0.0.0-20231230150416-17ce08145200 h1:8UJDYu3Ws+VRrPnhESvjtityUEotaFM2uEPbT+3rR8Q= +github.com/gen2brain/raylib-go/raygui v0.0.0-20231230150416-17ce08145200/go.mod h1:Ra1zgJP7vnGst+STvzPPiVJhjicklFWONCz5nu6MnOM= +github.com/gen2brain/raylib-go/raylib v0.0.0-20231230150416-17ce08145200 h1:cff+9Xad/S2SfPhUieMoyDlvJFnsxvwd6aWFfhbeOe4= +github.com/gen2brain/raylib-go/raylib v0.0.0-20231230150416-17ce08145200/go.mod h1:P/hDjVwz/9fhR0ww3+umzDpDA7Bf7Tce4xNChHIEFqE= +golang.org/x/sys v0.14.0 h1:Vz7Qs629MkJkGyHxUlRHizWJRG2j8fbQKjELVSNhy7Q= +golang.org/x/sys v0.14.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA= diff --git a/main.go b/main.go new file mode 100644 index 0000000..25a1b4a --- /dev/null +++ b/main.go @@ -0,0 +1,35 @@ +package main + +import ( + "ColouringApp/application" + "ColouringApp/scenes" + raylib "github.com/gen2brain/raylib-go/raylib" +) + +func main() { + raylib.InitWindow(application.WindowWidth, application.WindowHeight, application.WindowTitle) + raylib.InitAudioDevice() + + raylib.SetTargetFPS(application.WindowFPS) + raylib.SetExitKey(0) // disable exit key + + // MAIN LOOP + for !application.ShouldQuit { + switch application.CurrentScene { + case application.SceneTitle: + scenes.Title() + case application.SceneOptions: + scenes.Options() + case application.SceneGame: + scenes.Game() + default: + panic("Unknown scene") + } + } + + // QUIT + raylib.CloseAudioDevice() + raylib.CloseWindow() + + // GOODBYE +} diff --git a/scenes/game.go b/scenes/game.go new file mode 100644 index 0000000..28cee99 --- /dev/null +++ b/scenes/game.go @@ -0,0 +1,49 @@ +package scenes + +import ( + "ColouringApp/application" + + gui "github.com/gen2brain/raylib-go/raygui" + raylib "github.com/gen2brain/raylib-go/raylib" +) + +func Game() { + var ( + scenePaused = false + ) + + // load resources here + + for !application.ShouldQuit { + application.ShouldQuit = raylib.WindowShouldClose() + if application.CurrentScene != application.SceneGame { + break + } + + if raylib.IsKeyPressed(raylib.KeyEscape) { + scenePaused = !scenePaused + } + + raylib.BeginDrawing() + raylib.ClearBackground(raylib.Black) + + raylib.DrawText("Game", 100, 100, 20, raylib.White) + + if scenePaused { + raylib.DrawRectangle(0, 0, application.WindowWidth, application.WindowHeight, raylib.Fade(raylib.Black, 0.5)) + raylib.DrawText("Paused", 10, 10, 20, raylib.White) + raylib.DrawLine(10, 40, 790, 40, raylib.White) + if gui.Button(raylib.NewRectangle(application.WindowWidth-110, 10, 100, 20), "Unpause") { + scenePaused = false + } + + if gui.Button(raylib.NewRectangle(10, 50, 100, 20), "Main Menu") { + application.CurrentScene = application.SceneTitle + } + } + + raylib.EndDrawing() + } + + // unload resources here +} diff --git a/scenes/options.go b/scenes/options.go new file mode 100644 index 0000000..7b8fbf5 --- /dev/null +++ b/scenes/options.go @@ -0,0 +1,94 @@ +package scenes + +import ( + "ColouringApp/application" + "fmt" + gui "github.com/gen2brain/raylib-go/raygui" + raylib "github.com/gen2brain/raylib-go/raylib" +) + +func Options() { + var ( + centerPos float32 = 10 + backPos float32 = -application.WindowWidth + 10 + forwardPos float32 = application.WindowWidth + 10 + + rootPanelPos = true + controlsPanelPos = false + graphicPanelPos = false + + rootPos = centerPos + controlsPos = forwardPos + graphicPos = forwardPos + ) + // load resources here + + fmt.Println("Options") + + for !application.ShouldQuit { + application.ShouldQuit = raylib.WindowShouldClose() + if application.CurrentScene != application.SceneOptions { + break + } + + raylib.BeginDrawing() + raylib.ClearBackground(raylib.Black) + + raylib.DrawText("Options", 10, 10, 20, raylib.White) + raylib.DrawLine(10, 40, 790, 40, raylib.White) + if gui.Button(raylib.NewRectangle(application.WindowWidth-110, 10, 100, 20), "Main Menu") { + application.CurrentScene = application.SceneTitle + } + + // ROOT PANEL FOR SETTINGS + { + if rootPanelPos { + rootPos = raylib.Lerp(rootPos, centerPos, 0.1) + } else { + rootPos = raylib.Lerp(rootPos, backPos, 0.1) + } + if gui.Button(raylib.NewRectangle(rootPos, 50, 100, 20), "Controls") { + rootPanelPos = false + controlsPanelPos = true + } + if gui.Button(raylib.NewRectangle(rootPos, 80, 100, 20), "Graphics") { + rootPanelPos = false + graphicPanelPos = true + } + } + + // CONTROLS PANEL + { + if controlsPanelPos { + controlsPos = raylib.Lerp(controlsPos, centerPos, 0.1) + } else { + controlsPos = raylib.Lerp(controlsPos, forwardPos, 0.1) + } + + raylib.DrawText("Controls", int32(controlsPos), 50, 20, raylib.White) + if gui.Button(raylib.NewRectangle(controlsPos, 80, 100, 20), "Back") { + rootPanelPos = true + controlsPanelPos = false + } + } + + // GRAPHICS PANEL + { + if graphicPanelPos { + graphicPos = raylib.Lerp(graphicPos, centerPos, 0.1) + } else { + graphicPos = raylib.Lerp(graphicPos, forwardPos, 0.1) + } + + raylib.DrawText("Graphics", int32(graphicPos), 50, 20, raylib.White) + if gui.Button(raylib.NewRectangle(graphicPos, 80, 100, 20), "Back") { + rootPanelPos = true + graphicPanelPos = false + } + } + + raylib.EndDrawing() + } + + // unload resources here +} diff --git a/scenes/title.go b/scenes/title.go new file mode 100644 index 0000000..5239c2b --- /dev/null +++ b/scenes/title.go @@ -0,0 +1,43 @@ +package scenes + +import ( + "ColouringApp/application" + + gui "github.com/gen2brain/raylib-go/raygui" + raylib "github.com/gen2brain/raylib-go/raylib" +) + +func Title() { + var ( + titleText = "Example Game" + ) + + // load resources here + + for !application.ShouldQuit { + application.ShouldQuit = raylib.WindowShouldClose() + if application.CurrentScene != application.SceneTitle { + break + } + + raylib.BeginDrawing() + raylib.ClearBackground(raylib.Black) + + raylib.DrawText(titleText, 10, 10, 20, raylib.White) + raylib.DrawLine(10, 40, 790, 40, raylib.White) + + if gui.Button(raylib.NewRectangle(10, 50, 100, 20), "Start") { + application.CurrentScene = application.SceneGame + } + if gui.Button(raylib.NewRectangle(10, 80, 100, 20), "Options") { + application.CurrentScene = application.SceneOptions + } + if gui.Button(raylib.NewRectangle(10, 110, 100, 20), "Quit") { + application.ShouldQuit = true + } + + raylib.EndDrawing() + } + + // unload resources here +}