diff --git a/domain/domain.go b/domain/domain.go index 79046dd..fced373 100644 --- a/domain/domain.go +++ b/domain/domain.go @@ -4,5 +4,5 @@ type Domain struct { Context Context } -func (d Domain) Init() { +func (d *Domain) Init() { } diff --git a/domain/menu.go b/domain/menu.go index 534024e..e9dae78 100644 --- a/domain/menu.go +++ b/domain/menu.go @@ -1,49 +1,9 @@ package domain import ( - "game/konstructor" "os" ) -func (d Domain) GetMenuMap() konstructor.MenuMap { - - return map[string]konstructor.Menu{ - "MainMenu": { - MenuItems: []konstructor.MenuItem{ - { - ID: "new", - Label: "New Game", - Handler: d.StartGame, - }, - { - ID: "load", - Label: "Load Game", - Handler: d.LoadtGame, - }, - { - ID: "exit", - Label: "Exit Game", - Handler: d.ExitGame, - }, - }, - }, - "GameMenu": { - MenuItems: []konstructor.MenuItem{ - { - ID: "save", - Label: "Save Game", - Handler: d.SaveGame, - }, - { - ID: "close", - Label: "Close Game", - Handler: d.CloseGame, - }, - }, - }, - } -} - func (d *Domain) CloseGame() { } diff --git a/go.mod b/go.mod index ab56cf4..a67fbfd 100644 --- a/go.mod +++ b/go.mod @@ -4,10 +4,13 @@ go 1.20 require github.com/hajimehoshi/ebiten v1.12.12 +require golang.org/x/text v0.4.0 // indirect + require ( github.com/go-gl/glfw/v3.3/glfw v0.0.0-20200707082815-5321531c36a2 // indirect + github.com/hajimehoshi/bitmapfont/v2 v2.2.3 golang.org/x/exp v0.0.0-20190731235908-ec7cb31e5a56 // indirect - golang.org/x/image v0.0.0-20200801110659-972c09e46d76 // indirect + golang.org/x/image v0.1.0 // indirect golang.org/x/mobile v0.0.0-20210208171126-f462b3930c8f // indirect - golang.org/x/sys v0.0.0-20200918174421-af09f7315aff // indirect + golang.org/x/sys v0.0.0-20220722155257-8c9f86f7a55f // indirect ) diff --git a/go.sum b/go.sum index b550a10..edeeddb 100644 --- a/go.sum +++ b/go.sum @@ -5,6 +5,8 @@ github.com/gofrs/flock v0.8.0 h1:MSdYClljsF3PbENUUEx85nkWfJSGfzYI9yEBZOJz6CY= github.com/gofrs/flock v0.8.0/go.mod h1:F1TvTiK9OcQqauNUHlbJvyl9Qa1QvF/gOUDKA14jxHU= github.com/golang/freetype v0.0.0-20170609003504-e2365dfdc4a0/go.mod h1:E/TSTwGwJL78qG/PmXZO1EjYhfJinVAhrmmHX6Z8B9k= github.com/hajimehoshi/bitmapfont v1.3.0/go.mod h1:/Qb7yVjHYNUV4JdqNkPs6BSZwLjKqkZOMIp6jZD0KgE= +github.com/hajimehoshi/bitmapfont/v2 v2.2.3 h1:jmq/TMNj352V062Tr5e3hAoipkoxCbY1JWTzor0zNps= +github.com/hajimehoshi/bitmapfont/v2 v2.2.3/go.mod h1:sWM8ejdkGSXaQGlZcegMRx4DyEPOWYyXqsBKIs+Yhzk= github.com/hajimehoshi/ebiten v1.12.12 h1:JvmF1bXRa+t+/CcLWxrJCRsdjs2GyBYBSiFAfIqDFlI= github.com/hajimehoshi/ebiten v1.12.12/go.mod h1:1XI25ImVCDPJiXox4h9yK/CvN5sjDYnbF4oZcFzPXHw= github.com/hajimehoshi/file2byteslice v0.0.0-20200812174855-0e5e8a80490e/go.mod h1:CqqAHp7Dk/AqQiwuhV1yT2334qbA/tFWQW0MD2dGqUE= @@ -18,11 +20,14 @@ github.com/kr/pty v1.1.1/go.mod h1:pFQYn66WHrOpPYNljwOMqo10TkYh1fy3cYio2l3bCsQ= github.com/kr/text v0.1.0/go.mod h1:4Jbv+DJW3UT/LiOwJeYQe1efqtUx/iVham/4vfdArNI= github.com/niemeyer/pretty v0.0.0-20200227124842-a10e7caefd8e/go.mod h1:zD1mROLANZcx1PVRCS0qkT7pwLkGfwJo4zjcN/Tysno= github.com/pkg/browser v0.0.0-20180916011732-0a3d74bf9ce4/go.mod h1:4OwLy04Bl9Ef3GJJCoec+30X3LQs/0/m4HFRt/2LUSA= +github.com/pkg/browser v0.0.0-20210911075715-681adbf594b8/go.mod h1:HKlIX3XHQyzLZPlr7++PzdhaXEj94dEiJgZDTsxEqUI= github.com/yuin/goldmark v1.2.1/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74= +github.com/yuin/goldmark v1.4.13/go.mod h1:6yULJ656Px+3vBD8DxQVa3kxgyrAnzto9xy5taEt/CY= golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w= golang.org/x/crypto v0.0.0-20190510104115-cbcb75029529/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= golang.org/x/crypto v0.0.0-20191011191535-87dc89f01550/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= golang.org/x/crypto v0.0.0-20200622213623-75b288015ac9/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto= +golang.org/x/crypto v0.0.0-20210921155107-089bfa567519/go.mod h1:GvvjBRRGRdwPK5ydBHafDWAxML/pGHZbMvKqRZ5+Abc= golang.org/x/exp v0.0.0-20190306152737-a1d7652674e8/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA= golang.org/x/exp v0.0.0-20190731235908-ec7cb31e5a56 h1:estk1glOnSVeJ9tdEZZc5mAMDZk5lNJNyJ6DvrBkTEU= golang.org/x/exp v0.0.0-20190731235908-ec7cb31e5a56/go.mod h1:JhuoJpWY28nO4Vef9tZUw9qufEGTyX1+7lmHxV5q5G4= @@ -31,6 +36,8 @@ golang.org/x/image v0.0.0-20190703141733-d6a02ce849c9/go.mod h1:FeLwcggjj3mMvU+o golang.org/x/image v0.0.0-20190802002840-cff245a6509b/go.mod h1:FeLwcggjj3mMvU+oOTbSwawSJRM1uh48EjtB4UJZlP0= golang.org/x/image v0.0.0-20200801110659-972c09e46d76 h1:U7GPaoQyQmX+CBRWXKrvRzWTbd+slqeSh8uARsIyhAw= golang.org/x/image v0.0.0-20200801110659-972c09e46d76/go.mod h1:FeLwcggjj3mMvU+oOTbSwawSJRM1uh48EjtB4UJZlP0= +golang.org/x/image v0.1.0 h1:r8Oj8ZA2Xy12/b5KZYj3tuv7NG/fBz3TwQVvpJ9l8Rk= +golang.org/x/image v0.1.0/go.mod h1:iyPr49SD/G/TBxYVB/9RRtGUT5eNbo2u4NamWeQcD5c= golang.org/x/mobile v0.0.0-20190312151609-d3739f865fa6/go.mod h1:z+o9i4GpDbdi3rU15maQ/Ox0txvL9dWGYEHz965HBQE= golang.org/x/mobile v0.0.0-20190415191353-3e0bab5405d6/go.mod h1:E/iHnbuqvinMTCcRqshq8CkpyQDoeVncDDYHnLhea+o= golang.org/x/mobile v0.0.0-20210208171126-f462b3930c8f h1:aEcjdTsycgPqO/caTgnxfR9xwWOltP/21vtJyFztEy0= @@ -39,12 +46,16 @@ golang.org/x/mod v0.1.0/go.mod h1:0QHyrYULN0/3qlju5TqG8bIK38QM8yzMo5ekMj3DlcY= golang.org/x/mod v0.1.1-0.20191105210325-c90efee705ee/go.mod h1:QqPTAvyqsEbceGzBzNggFXnrqF1CaUcvgkdR5Ot7KZg= golang.org/x/mod v0.1.1-0.20191209134235-331c550502dd/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA= golang.org/x/mod v0.3.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA= +golang.org/x/mod v0.6.0-dev.0.20220419223038-86c51ed26bb4/go.mod h1:jJ57K6gSWd91VN4djpZkiMVwK6gcyfeH4XE8wZrZaV4= golang.org/x/net v0.0.0-20190311183353-d8887717615a/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg= golang.org/x/net v0.0.0-20190404232315-eb5bcb51f2a3/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg= golang.org/x/net v0.0.0-20190620200207-3b0461eec859/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= golang.org/x/net v0.0.0-20200822124328-c89045814202/go.mod h1:/O7V0waA8r7cgGh81Ro3o1hOxt32SMVPicZroKQ2sZA= +golang.org/x/net v0.0.0-20210226172049-e18ecbb05110/go.mod h1:m0MpNAwzfU5UDzcl9v0D8zg8gWTRqZa9RBIspLL5mdg= +golang.org/x/net v0.0.0-20220722155237-a158d28d115b/go.mod h1:XRhObCWvk6IyKnWLug+ECip1KBveYUHfp+8e9klMJ9c= golang.org/x/sync v0.0.0-20190423024810-112230192c58/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.0.0-20200625203802-6e8e738ad208/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= +golang.org/x/sync v0.0.0-20220722155255-886fb9371eb4/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sys v0.0.0-20190215142949-d0b11bdaac8a/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= golang.org/x/sys v0.0.0-20190312061237-fead79001313/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20190412213103-97732733099d/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= @@ -52,11 +63,25 @@ golang.org/x/sys v0.0.0-20190429190828-d89cdac9e872/go.mod h1:h1NjWce9XRLGQEsW7w golang.org/x/sys v0.0.0-20200323222414-85ca7c5b95cd/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20200918174421-af09f7315aff h1:1CPUrky56AcgSpxz/KfgzQWzfG09u5YOL8MvPYBlrL8= golang.org/x/sys v0.0.0-20200918174421-af09f7315aff/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20201119102817-f84b799fce68/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20210615035016-665e8c7367d1/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.0.0-20210616045830-e2b7044e8c71/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.0.0-20220520151302-bc2c85ada10a/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.0.0-20220722155257-8c9f86f7a55f h1:v4INt8xihDGvnrfjMDVXGxw9wrfxYyCjk0KbXjhR55s= +golang.org/x/sys v0.0.0-20220722155257-8c9f86f7a55f/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/term v0.0.0-20201126162022-7de9c90e9dd1/go.mod h1:bj7SfCRtBDWHUb9snDiAeCFNEtKQo2Wmx5Cou7ajbmo= +golang.org/x/term v0.0.0-20210927222741-03fcf44c2211/go.mod h1:jbD1KX2456YbFQfuXm/mYQcufACuNUgVhRMnK/tPxf8= golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= +golang.org/x/text v0.3.3/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ= +golang.org/x/text v0.3.7/go.mod h1:u+2+/6zg+i71rQMx5EYifcz6MCKuco9NR6JIITiCfzQ= +golang.org/x/text v0.4.0 h1:BrVqGRd7+k1DiOgtnFvAkoQEWQvBc25ouMJM6429SFg= +golang.org/x/text v0.4.0/go.mod h1:mrYo+phRRbMaCq/xk9113O4dZlRixOauAjOtrjsXDZ8= +golang.org/x/tools v0.0.0-20180917221912-90fa682c2a6e/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= golang.org/x/tools v0.0.0-20190312151545-0bb0c0a6e846/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs= golang.org/x/tools v0.0.0-20191119224855-298f0cb1881e/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= golang.org/x/tools v0.0.0-20200117012304-6edc0a871e69/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28= golang.org/x/tools v0.0.0-20200918232735-d647fc253266/go.mod h1:z6u4i615ZeAfBE4XtMziQW1fSVJXACjjbWkB/mvPzlU= +golang.org/x/tools v0.1.12/go.mod h1:hNGJHUnrk76NpqgfD5Aqm5Crs+Hm0VOH/i9J2+nxYbc= golang.org/x/xerrors v0.0.0-20190717185122-a985d3407aa7/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= golang.org/x/xerrors v0.0.0-20191011141410-1b5146add898/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= golang.org/x/xerrors v0.0.0-20200804184101-5ec99f83aff1/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= diff --git a/konstructor/engine.go b/konstructor/engine.go index 0297161..d9a88b1 100644 --- a/konstructor/engine.go +++ b/konstructor/engine.go @@ -1,25 +1,65 @@ package konstructor import ( + "image/color" + "os" + "github.com/hajimehoshi/ebiten" + "github.com/hajimehoshi/ebiten/examples/resources/fonts" + "github.com/hajimehoshi/ebiten/text" + "golang.org/x/image/font" + "golang.org/x/image/font/opentype" ) type Engine struct { - Konstructor *Konstructor - Logic *Logic + Domain DomainInterface + Controller *Controller + Settings *Settings + KContext *KContext + MenuMap MenuMap } -func (g *Engine) Layout(outsideWidth, outsideHeight int) (int, int) { - return g.Logic.Settings.Screen.Width, g.Logic.Settings.Screen.Height +func (e *Engine) Layout(outsideWidth, outsideHeight int) (int, int) { + return e.Settings.Screen.Width, e.Settings.Screen.Height } -func (g *Engine) Update(screen *ebiten.Image) error { - g.Logic.Controller.Watch() - g.Logic.Update(screen) +func (e *Engine) Update(screen *ebiten.Image) error { + e.Controller.Watch() + if e.KContext.Screen.Type == "menu" { + } return nil } -func (g *Engine) Draw(screen *ebiten.Image) { - g.Logic.Draw(screen) - g.Logic.Controller.Clear() +func (e *Engine) Draw(screen *ebiten.Image) { + if e.KContext.Screen.Type == "menu" { + menu := e.MenuMap[e.KContext.Screen.Value] + + if e.Controller.DownPressed() && menu.CurrentSelected != len(menu.MenuItems)-1 { + menu.CurrentSelected++ + } + + if e.Controller.UpPressed() && menu.CurrentSelected != 0 { + menu.CurrentSelected-- + } + + e.MenuMap[e.KContext.Screen.Value] = menu + + tt, _ := opentype.Parse(fonts.MPlus1pRegular_ttf) + menu_face, _ := opentype.NewFace(tt, &opentype.FaceOptions{ + Size: menu.MenuLayout.DPI, + DPI: menu.MenuLayout.Size, + Hinting: font.HintingVertical, + }) + for i, menu_item := range menu.MenuItems { + if menu.CurrentSelected == i { + text.Draw(screen, menu_item.Label+"\n", menu_face, 8, 24*(i+1), color.RGBA{R: 0, G: 255, B: 0, A: 100}) + } else { + text.Draw(screen, menu_item.Label+"\n", menu_face, 8, 24*(i+1), color.White) + } + } + if e.Controller.Action3Pressed() { + os.Exit(1) + } + } + e.Controller.Clear() } diff --git a/konstructor/konstructor.go b/konstructor/konstructor.go index 277a0fc..3238800 100644 --- a/konstructor/konstructor.go +++ b/konstructor/konstructor.go @@ -10,7 +10,6 @@ type ContextInterface interface { } type DomainInterface interface { - GetMenuMap() MenuMap Init() } @@ -19,6 +18,15 @@ type ScreenSettings struct { Height int } +type KContextScreen struct { + Type string + Value string +} + +type KContext struct { + Screen KContextScreen +} + type Settings struct { Name string Screen *ScreenSettings @@ -28,17 +36,20 @@ type Konstructor struct { Domain DomainInterface Controller *Controller Settings *Settings + KContext *KContext + MenuMap MenuMap } func (k Konstructor) Init() { + k.Domain.Init() ebiten.SetWindowSize(k.Settings.Screen.Width, k.Settings.Screen.Height) ebiten.SetWindowTitle(k.Settings.Name) if err := ebiten.RunGame(&Engine{ - Logic: &Logic{ - Domain: k.Domain, - Controller: k.Controller, - Settings: k.Settings, - }, + MenuMap: k.MenuMap, + KContext: k.KContext, + Domain: k.Domain, + Controller: k.Controller, + Settings: k.Settings, }); err != nil { log.Fatal(err) } diff --git a/konstructor/logic.go b/konstructor/logic.go deleted file mode 100644 index 679e223..0000000 --- a/konstructor/logic.go +++ /dev/null @@ -1,22 +0,0 @@ -package konstructor - -import ( - "image/color" - - "github.com/hajimehoshi/ebiten" -) - -type Logic struct { - Domain DomainInterface - Controller *Controller - Settings *Settings -} - -func (l *Logic) Update(screen *ebiten.Image) { -} - -func (l *Logic) Draw(screen *ebiten.Image) { - if l.Controller.UpPressed() { - screen.Fill(color.White) - } -} diff --git a/konstructor/menu.go b/konstructor/menu.go index 1cc5ecb..311b7cb 100644 --- a/konstructor/menu.go +++ b/konstructor/menu.go @@ -4,6 +4,8 @@ type MenuMap map[string]Menu type MenuLayout struct { Background string + DPI float64 + Size float64 } type MenuItem struct { @@ -13,6 +15,7 @@ type MenuItem struct { } type Menu struct { - MenuLayout MenuLayout - MenuItems []MenuItem + CurrentSelected int + MenuLayout MenuLayout + MenuItems []MenuItem } diff --git a/main.go b/main.go index ccc7ecd..76277f5 100644 --- a/main.go +++ b/main.go @@ -9,6 +9,12 @@ import ( func main() { konstructor := konstructor.Konstructor{ + KContext: &konstructor.KContext{ + Screen: konstructor.KContextScreen{ + Type: "menu", + Value: "MainMenu", + }, + }, Domain: &domain.Domain{ Context: domain.Context{ Player: domain.Player{ @@ -19,6 +25,46 @@ func main() { }, }, }, + MenuMap: konstructor.MenuMap{ + "MainMenu": { + CurrentSelected: 0, + MenuLayout: konstructor.MenuLayout{ + DPI: 72, + Size: 24, + }, + MenuItems: []konstructor.MenuItem{ + { + ID: "new", + Label: "New Game", + }, + { + ID: "load", + Label: "Load Game", + }, + { + ID: "exit", + Label: "Exit Game", + }, + }, + }, + "GameMenu": { + CurrentSelected: 0, + MenuLayout: konstructor.MenuLayout{ + DPI: 72, + Size: 24, + }, + MenuItems: []konstructor.MenuItem{ + { + ID: "save", + Label: "Save Game", + }, + { + ID: "close", + Label: "Close Game", + }, + }, + }, + }, Controller: &konstructor.Controller{ KeyMap: konstructor.KeyMap{ Up: ebiten.KeyUp,