diff --git a/assets/images/players/default.png b/assets/images/players/default.png new file mode 100644 index 0000000..e85a36e Binary files /dev/null and b/assets/images/players/default.png differ diff --git a/domain/domain.go b/domain/domain.go index b5eb3ca..fac8e01 100644 --- a/domain/domain.go +++ b/domain/domain.go @@ -15,5 +15,6 @@ func (d *Domain) Init() { d.InitNPCType() d.InitMenu() d.InitDialog() + d.InitPlayer() d.InitLevel() } diff --git a/domain/type.player.go b/domain/type.player.go new file mode 100644 index 0000000..3e873f5 --- /dev/null +++ b/domain/type.player.go @@ -0,0 +1,38 @@ +package domain + +import "game/konstructor" + +const ( + DefaultPlayerType konstructor.PlayerTypeID = "default" +) + +func (d *Domain) InitPlayer() { + d.Players = []konstructor.Player{ + { + ID: "default", + Type: konstructor.PlayerType{ + ID: DefaultPlayerType, + Render: konstructor.Render{ + Image: konstructor.GetPlayerTypeImagePath(DefaultPlayerType), + }, + }, + Position: konstructor.Position{ + X: 70, + Y: 70, + Z: 1, + }, + }, + } +} + +func (d *Domain) GetPlayers() []konstructor.Player { + return d.Players +} + +func (d *Domain) GetPlayer(index int) konstructor.Player { + return d.Players[index] +} + +func (d *Domain) GetDefaultPlayer() konstructor.Player { + return d.Players[0] +} diff --git a/konstructor/engines/easy_ebitengine/screen.playground.go b/konstructor/engines/easy_ebitengine/screen.playground.go index 93aa8b9..4fc5707 100644 --- a/konstructor/engines/easy_ebitengine/screen.playground.go +++ b/konstructor/engines/easy_ebitengine/screen.playground.go @@ -19,6 +19,7 @@ func (e *Engine) PlaygroundDraw(screen *ebiten.Image) { e.PlaygroundPlatformsDraw(screen) e.PlaygroundItemsDraw(screen) e.PlaygroundNPCsDraw(screen) + e.PlaygroundDefaultPlayerDraw(screen) } func (e *Engine) PlaygroundBackgroundDraw(screen *ebiten.Image) { @@ -66,6 +67,17 @@ func (e *Engine) PlaygroundNPCsDraw(screen *ebiten.Image) { } } +func (e *Engine) PlaygroundDefaultPlayerDraw(screen *ebiten.Image) { + player := e.Domain.GetDefaultPlayer() + geoM := ebiten.GeoM{} + render := player.Type.Render + geoM.Reset() + geoM.Translate(float64(player.Position.X), float64(player.Position.Y)) + screen.DrawImage(e.GetImage(render), &ebiten.DrawImageOptions{ + GeoM: geoM, + }) +} + func (e *Engine) GetPlayground() konstructor.Playground { level := e.Domain.GetLevel(e.KContext.CurrentLevel) return level.Playgrounds[e.KContext.CurrentPlayground] diff --git a/konstructor/interface.domain.go b/konstructor/interface.domain.go index 4632b3b..12ba255 100644 --- a/konstructor/interface.domain.go +++ b/konstructor/interface.domain.go @@ -4,6 +4,7 @@ type DomainBaseFields struct { MenuMap MenuMap DialogMap DialogMap Levels []Level + Players []Player PlatformTypeMap PlatformTypeMap ItemTypeMap ItemTypeMap NPCTypeMap NPCTypeMap @@ -23,6 +24,10 @@ type DomainInterface interface { GetLevels() []Level GetLevel(index int) Level + GetPlayers() []Player + GetPlayer(index int) Player + GetDefaultPlayer() Player + GetPlatformTypeMap() PlatformTypeMap GetPlatformType(name PlatformTypeMapKey) PlatformType diff --git a/konstructor/kcontext.go b/konstructor/kcontext.go index ee1939a..c290a99 100644 --- a/konstructor/kcontext.go +++ b/konstructor/kcontext.go @@ -6,11 +6,7 @@ type KContext struct { ActiveDialog DialogMapKey CurrentLevel int CurrentPlayground int - Players []Player -} - -func (c *KContext) getPrimaryPlayer() Player { - return c.Players[0] + Multiplayer bool } func (c *KContext) ScreenTypeIs(name ScreenType) bool { diff --git a/konstructor/object.go b/konstructor/object.go index 2e7db60..28250e9 100644 --- a/konstructor/object.go +++ b/konstructor/object.go @@ -6,6 +6,7 @@ const ( ItemObjectType ObjectType = "item" NPCObjectType ObjectType = "npc" PlatformObjectType ObjectType = "platform" + PlayerObjectType ObjectType = "player" ) type ObjectDirectoryMap map[ObjectType]string @@ -14,6 +15,7 @@ var ObjectDirectories = ObjectDirectoryMap{ ItemObjectType: "items", NPCObjectType: "npcs", PlatformObjectType: "platforms", + PlayerObjectType: "players", } func GetObjectDirectory(name ObjectType) string { diff --git a/konstructor/object.player.go b/konstructor/object.player.go new file mode 100644 index 0000000..b978985 --- /dev/null +++ b/konstructor/object.player.go @@ -0,0 +1,29 @@ +package konstructor + +type PlayerTypeID string + +type InventoryItem struct { + Item Item + Used bool + Active bool +} + +type Inventory struct { + Items []InventoryItem +} + +type PlayerType struct { + ID PlayerTypeID + Render Render +} + +type Player struct { + ID string + Type PlayerType + Position Position + Inventory Inventory +} + +func GetPlayerTypeImagePath(name PlayerTypeID) string { + return GetObjectDirectory(PlayerObjectType) + string(name) + ".png" +} diff --git a/konstructor/playground.player.go b/konstructor/playground.player.go deleted file mode 100644 index 3ffff17..0000000 --- a/konstructor/playground.player.go +++ /dev/null @@ -1,18 +0,0 @@ -package konstructor - -type InventoryItem struct { - Item Item - Used bool - Active bool -} - -type Inventory struct { - Items []InventoryItem -} - -type Player struct { - ID string - Render Render - Position Position - Inventory Inventory -}