From 8b0bcef568ce29f406c3eab5cfead7f68c7dcea8 Mon Sep 17 00:00:00 2001 From: Abdulmujeeb Raji Date: Sun, 23 Jul 2023 07:57:28 +0100 Subject: [PATCH] frontend: UI refactoring - moved ui code to seperate file - added a simple wrapper over ebitenui.UI to allow storage of colors and such Hopefully this makes it possible for colors to be changed by users in the future --- frontend/main.go | 69 +++++++---------------------------------------- frontend/ui.go | 70 ++++++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 79 insertions(+), 60 deletions(-) create mode 100644 frontend/ui.go diff --git a/frontend/main.go b/frontend/main.go index f0ac623..64b9204 100644 --- a/frontend/main.go +++ b/frontend/main.go @@ -1,10 +1,6 @@ package main import ( - // Image-related packages - img "image" - "image/color" - // Random "math/rand" @@ -12,76 +8,29 @@ import ( "log" // Ebitengine - "github.com/ebitenui/ebitenui" - "github.com/ebitenui/ebitenui/image" - "github.com/ebitenui/ebitenui/widget" "github.com/hajimehoshi/ebiten/v2" ) // Create the `Game` struct type Game struct { - ui ebitenui.UI + ui UI } -// Function for UI initialization -func uiInit() ebitenui.UI { - // The `hazakura` colorscheme - hazakura := make(map[string]color.RGBA) - // The monotone colors - hazakura["dark_black"] = color.RGBA{0x0f, 0x0f, 0x0d, 0xff} - hazakura["black"] = color.RGBA{0x15, 0x15, 0x17, 0xff} - hazakura["dark_gray"] = color.RGBA{0x24, 0x24, 0x26, 0xff} - hazakura["gray"] = color.RGBA{0x27, 0x27, 0x2b, 0xff} - hazakura["light_gray"] = color.RGBA{0x45, 0x44, 0x49, 0xff} - hazakura["overlay"] = color.RGBA{0x5c, 0x5c, 0x61, 0xff} - hazakura["highlight"] = color.RGBA{0xd9, 0x0, 0xd7, 0xff} - hazakura["subwhite"] = color.RGBA{0xec, 0xe5, 0xea, 0xff} - - // Actual* colors - hazakura["red"] = color.RGBA{0xf0, 0x69, 0x69, 0xff} - hazakura["magenta"] = color.RGBA{0xe8, 0x87, 0xbb, 0xff} - hazakura["purple"] = color.RGBA{0xa2, 0x92, 0xe8, 0xff} - hazakura["blue"] = color.RGBA{0x78, 0xb9, 0xc4, 0xff} - hazakura["cyan"] = color.RGBA{0x7e, 0xe6, 0xae, 0xff} - hazakura["green"] = color.RGBA{0x91, 0xd6, 0x5c, 0xff} - hazakura["yellow"] = color.RGBA{0xd9, 0xd5, 0x64, 0xff} - - // Get the window width/height - window_width, window_height := ebiten.WindowSize() - - // Define the root container - root := widget.NewContainer( - // Define the plain color to be used as a default background - widget.ContainerOpts.BackgroundImage(image.NewNineSliceColor(hazakura["dark_black"])), - ) - - // Define the left bar container - leftBar := widget.NewContainer( - widget.ContainerOpts.BackgroundImage(image.NewNineSliceColor(hazakura["gray"])), - ) - // Set the position and size of the left bar - leftBar.SetLocation(img.Rect(0, 0, int(float64(window_width)/3.5), window_height)) - // Add the left bar to the root container - root.AddChild(leftBar) - - // Construct the UI - ui := ebitenui.UI{ - Container: root, - } - - return ui -} +const ( + window_width = 640 + window_height = 480 +) // Update implements Game func (g *Game) Update() error { - g.ui.Update() + g.ui.base.Update() return nil } // Draw implements Game func (g *Game) Draw(screen *ebiten.Image) { // Draw the UI onto the screen - g.ui.Draw(screen) + g.ui.base.Draw(screen) } // Layout implements Game @@ -102,13 +51,13 @@ func main() { window_title := "Ambition: " + window_titles[rand.Intn(len(window_titles))] // Engine setup - ebiten.SetWindowSize(640, 480) + ebiten.SetWindowSize(window_width, window_height) ebiten.SetWindowTitle(window_title) // Initialise the game game := Game{ // Initialise the UI - ui: uiInit(), + ui: uiInit(window_width, window_height), } // Log and exit on error diff --git a/frontend/ui.go b/frontend/ui.go new file mode 100644 index 0000000..b1c7789 --- /dev/null +++ b/frontend/ui.go @@ -0,0 +1,70 @@ +package main + +import ( + // Image-related packages + img "image" + "image/color" + + // EbitenUI + "github.com/ebitenui/ebitenui" + "github.com/ebitenui/ebitenui/image" + "github.com/ebitenui/ebitenui/widget" +) + +type UI struct { + base ebitenui.UI + colors map[string]color.RGBA + width, height int +} + +// Function for UI initialization +func uiInit(width, height int) UI { + var ui UI + // The `hazakura` colorscheme + { + hazakura := make(map[string]color.RGBA) + // The monotone colors + hazakura["dark_black"] = color.RGBA{0x0f, 0x0f, 0x0d, 0xff} + hazakura["black"] = color.RGBA{0x15, 0x15, 0x17, 0xff} + hazakura["dark_gray"] = color.RGBA{0x24, 0x24, 0x26, 0xff} + hazakura["gray"] = color.RGBA{0x27, 0x27, 0x2b, 0xff} + hazakura["light_gray"] = color.RGBA{0x45, 0x44, 0x49, 0xff} + hazakura["overlay"] = color.RGBA{0x5c, 0x5c, 0x61, 0xff} + hazakura["highlight"] = color.RGBA{0xd9, 0x0, 0xd7, 0xff} + hazakura["subwhite"] = color.RGBA{0xec, 0xe5, 0xea, 0xff} + + // Actual* colors + hazakura["red"] = color.RGBA{0xf0, 0x69, 0x69, 0xff} + hazakura["magenta"] = color.RGBA{0xe8, 0x87, 0xbb, 0xff} + hazakura["purple"] = color.RGBA{0xa2, 0x92, 0xe8, 0xff} + hazakura["blue"] = color.RGBA{0x78, 0xb9, 0xc4, 0xff} + hazakura["cyan"] = color.RGBA{0x7e, 0xe6, 0xae, 0xff} + hazakura["green"] = color.RGBA{0x91, 0xd6, 0x5c, 0xff} + hazakura["yellow"] = color.RGBA{0xd9, 0xd5, 0x64, 0xff} + + ui.colors = hazakura + } + + // Get the window width/height + ui.width = width + ui.height = height + + // Define the root container + root := widget.NewContainer( + // Define the plain color to be used as a default background + widget.ContainerOpts.BackgroundImage(image.NewNineSliceColor(ui.colors["dark_black"])), + ) + + // Define the left bar container + leftBar := widget.NewContainer( + widget.ContainerOpts.BackgroundImage(image.NewNineSliceColor(ui.colors["gray"])), + ) + // Set the position and size of the left bar + leftBar.SetLocation(img.Rect(0, 0, int(float64(width)/3.5), height)) + // Add the left bar to the root container + root.AddChild(leftBar) + + ui.base.Container = root + + return ui +}