diff --git a/konstructor/engine/engine.wrapper.go b/konstructor/engine/engine.wrapper.go new file mode 100644 index 0000000..6084ce1 --- /dev/null +++ b/konstructor/engine/engine.wrapper.go @@ -0,0 +1,25 @@ +package engine + +import ( + "game/konstructor/entity" + + "github.com/hajimehoshi/ebiten" +) + +type EngineWrapper struct { + Engine Engine +} + +func (ew *EngineWrapper) Init(options entity.EngineOptions) { + ew.Engine = Engine{ + KContext: &options.KContext, + Domain: options.Domain, + Settings: &options.Settings, + } + ebiten.SetWindowSize(options.Settings.Screen.Width, options.Settings.Screen.Height) + ebiten.SetWindowTitle(options.Settings.Name) +} + +func (ew *EngineWrapper) Run() { + ebiten.RunGame(&ew.Engine) +} diff --git a/konstructor/entity/entity.engine.go b/konstructor/entity/entity.engine.go new file mode 100644 index 0000000..96226ef --- /dev/null +++ b/konstructor/entity/entity.engine.go @@ -0,0 +1,37 @@ +package entity + +type EngineInterface interface { + ClearKeyPresed() + UpPressed() bool + DownPressed() bool + RightPressed() bool + LeftPressed() bool + Action0Pressed() bool + Action1Pressed() bool + Action2Pressed() bool + Action3Pressed() bool + ScreenTypeIs(name string) bool + Update(screen any) error + Draw(screen any) + AddToInventory(item *Item) + RemoveFromInventory(item *Item) + UseInventoryItem(item *Item) + DialogDraw(screen any) + DialogUpdate() + MenuDraw(screen any) + MenuUpdate() + PlaygroundDraw(screen any) + PlaygroundUpdate() +} + +type EngineOptions struct { + Engine EngineInterface + Domain DomainInterface + KContext KContext + Settings Settings +} + +type EngineWrapperInterface interface { + Init(options EngineOptions) + Run() +} diff --git a/konstructor/konstructor.go b/konstructor/konstructor.go index 21ed79d..2f2a116 100644 --- a/konstructor/konstructor.go +++ b/konstructor/konstructor.go @@ -1,33 +1,22 @@ package konstructor import ( - "game/konstructor/engine" "game/konstructor/entity" - - "github.com/hajimehoshi/ebiten" ) type Konstructor struct { - Domain entity.DomainInterface - Settings *entity.Settings - KContext *entity.KContext + Domain entity.DomainInterface + Settings entity.Settings + KContext *entity.KContext + EngineWrapper entity.EngineWrapperInterface } func (k Konstructor) Init() { k.Domain.Init() - k.SetWindow() - k.Run() -} - -func (k Konstructor) SetWindow() { - ebiten.SetWindowSize(k.Settings.Screen.Width, k.Settings.Screen.Height) - ebiten.SetWindowTitle(k.Settings.Name) -} - -func (k Konstructor) Run() { - ebiten.RunGame(&engine.Engine{ - KContext: k.KContext, + k.EngineWrapper.Init(entity.EngineOptions{ + KContext: *k.KContext, Domain: k.Domain, Settings: k.Settings, }) + k.EngineWrapper.Run() } diff --git a/main.go b/main.go index bc53a24..00962e2 100644 --- a/main.go +++ b/main.go @@ -3,13 +3,34 @@ package main import ( "game/domain" "game/konstructor" + "game/konstructor/engine" "game/konstructor/entity" "github.com/hajimehoshi/ebiten" ) func main() { + + s := entity.Settings{ + Name: "Game", + Screen: &entity.ScreenSettings{ + Width: 640, + Height: 480, + }, + KeyMap: entity.KeyMap{ + Up: ebiten.KeyUp, + Down: ebiten.KeyDown, + Right: ebiten.KeyRight, + Left: ebiten.KeyLeft, + Action0: ebiten.KeySpace, + Action1: ebiten.KeyAlt, + Action2: ebiten.KeyControl, + Action3: ebiten.KeyEscape, + }, + } + k := konstructor.Konstructor{ + EngineWrapper: &engine.EngineWrapper{}, KContext: &entity.KContext{ Screen: entity.KContextScreen{ Type: "menu", @@ -27,23 +48,7 @@ func main() { }, }, }, - Settings: &entity.Settings{ - Name: "Game", - Screen: &entity.ScreenSettings{ - Width: 640, - Height: 480, - }, - KeyMap: entity.KeyMap{ - Up: ebiten.KeyUp, - Down: ebiten.KeyDown, - Right: ebiten.KeyRight, - Left: ebiten.KeyLeft, - Action0: ebiten.KeySpace, - Action1: ebiten.KeyAlt, - Action2: ebiten.KeyControl, - Action3: ebiten.KeyEscape, - }, - }, + Settings: s, } k.Init() }