From fa3e43299c9e02fb32d3a7fb7303a98c2d80a450 Mon Sep 17 00:00:00 2001 From: Zsolt Tasnadi Date: Fri, 7 Jul 2023 09:14:37 +0200 Subject: [PATCH] item and npc rendering --- assets/images/items/sword.ase | Bin 0 -> 616 bytes assets/images/items/sword.png | Bin 0 -> 234 bytes assets/images/npcs/test_npc.ase | Bin 0 -> 638 bytes assets/images/npcs/test_npc.png | Bin 0 -> 221 bytes assets/images/objects/test_object.ase | Bin 639 -> 640 bytes assets/images/objects/test_object.png | Bin 226 -> 214 bytes domain/domain.go | 2 ++ domain/item_type.go | 13 +++++++- domain/level.go | 26 ++++++++++++++-- domain/npc_type.go | 12 +++++++- domain/object_type.go | 6 +++- .../easy_ebitengine/screen.playground.go | 28 ++++++++++++++++++ main.go | 2 +- 13 files changed, 83 insertions(+), 6 deletions(-) create mode 100644 assets/images/items/sword.ase create mode 100644 assets/images/items/sword.png create mode 100644 assets/images/npcs/test_npc.ase create mode 100644 assets/images/npcs/test_npc.png diff --git a/assets/images/items/sword.ase b/assets/images/items/sword.ase new file mode 100644 index 0000000000000000000000000000000000000000..7949df0f1ebcabfcc05124c54504b8c9bd6fe480 GIT binary patch literal 616 zcmcK1NhpM29LMp$z2xF3hj~LdF{X(ano=%CSq_#cWS=x5YlDN7nu`mGQ4~rI4kAk; zBnK%XvSbN0$`Thf==B{!xqGJf)BB!&->0ec6uB7l5asjdAtI$bzeo9f{g*cwjaw&gsB%Q?lXKYF-i1|WGv;MyVPmolCv-YI z$|=D^>mqjdrJ}7ytD3osw{Tte<+ublAfI-^sV13TVksq)MgplLjV_`nBFEjLs#K7` zKI1Gi%O-=YF{N=YDPH(}NDx0sD{d*PQ(_wU@KMB_A}W9X*U^YZng{RqR{cc@@Z5P< z(+}Hv0!JG&oUyGtxxM<4q&~-V&eYo3LbbtiI$wL`D%c;ZvqroQWg4w3Q7;D-8#f8} d=S|y7w}sXE&6(Xh$M~c3+7UV%5o~w)egN_0yMF)x literal 0 HcmV?d00001 diff --git a/assets/images/items/sword.png b/assets/images/items/sword.png new file mode 100644 index 0000000000000000000000000000000000000000..dbc231b5d4ac597050bda10caf21866edb0865a2 GIT binary patch literal 234 zcmeAS@N?(olHy`uVBq!ia0vp^3LwnE1|*BCs=ffJjh-%!ArY--r+f1?DDbdGKmNPE z$J&|cN?ly^{X-rt=UApF1lJzB^T4lS>j9?qA~z1LX6Y+XdX&Q`_%CkPgPBZP71J7| z<|!sLEoMDau%v;zPpIIqAd_N6hyqVPhr@%Q=Zaq%5Bf8gF^J9E`B03}Up7?ly#q^( z)S9`iAMBJwe@tq4v#3Lr~m&lol9rFDWgq|FC9p25@A&t;ucLK6TbkXhCM literal 0 HcmV?d00001 diff --git a/assets/images/npcs/test_npc.ase b/assets/images/npcs/test_npc.ase new file mode 100644 index 0000000000000000000000000000000000000000..28c4a727ad97325cccdd32fe8017580dd455ac8d GIT binary patch literal 638 zcmcJMPe__!9DrXphp=_n!Hr2p9~Dt7m`W6p5Cpr-4*j7bBAPe_9TY`~QFs_a;SP3? zl^HbP# z3L(ThPI9E=^s$l07VDt5wgm3C=D^+0Rv29w zfPXFuq5o$Ev@d93k*^sVZLeUJF&pX)#jv!r9ctfxfDO$D&>WCq)8-Le-}?(?Mu;(ycrUNN|c*AENznRBR`KM4mmQ< ze?8Adns5%D`VJn8rz!4v*;pN~x2~pFPN?5sKAR3H^8%q>%h=AR;PH_2NywpZnN)cr zQ{ly#VasLLca5dDDb!(toX0} zc$$Rf=ari#L`qIRXTvomXxqPaSy#64=!-s()B7!}Vwz7V VYY6RFc?jrU22WQ%mvv4FO#n&nRHy&| literal 0 HcmV?d00001 diff --git a/assets/images/objects/test_object.ase b/assets/images/objects/test_object.ase index 3afc8153fe8738457bc8cb88f954d7b1e3bd93cd..51b1a18ce2ac93dd6fa6a95ae81cb24311164343 100644 GIT binary patch delta 190 zcmey*(!k2tFp;sIiGgWjQxIdlJOcv*ivlx{gn|D+20MdKVr6QPf?+R^!>Rz0`p*QR z85k6Ruwu^JYX^B740xO``d$7zV@BYEK9>-7>vb+#KW}~apJKS7SnhKdTb#RLsBYx+ ziw8Fu^X5or2He!<&9cr~vFX0loVu-lbAIS^5EAFtA)F8t1mesH=C0APbk{{R30 delta 189 zcmZo*{m;T!KasJX=|AJfrXa?8B?blt76pDF2?PIu3@!$z#N_PsqWsdllujU@RRJRV zp9w-UFem_F#hka(4fz-pIan$uzyH>sp1;VlpwN6`QdF82tMTtMj`_LW>0+m5UKRSP zWEJqvgZb9m%o9cbGf$Mgm&)52&g=6(_q)!W51Zyc)$3~F|NU3f{{R2b51YU1xBd-I a{2#W%UgVv=%kh=wmmbYEXUM3F)&c-WiAA>n diff --git a/assets/images/objects/test_object.png b/assets/images/objects/test_object.png index 539c7999ebcffa1dd49d0f0ad1ba5b9c06a2df6b..e85a36e4b13692faa7e5b08bf5e67ac39ee5036c 100644 GIT binary patch delta 186 zcmV;r07d`e0oDPKB!8VrL_t(oh3%KU5r7~Jg^8QcxSx}_AC04Eg?B0h0{O8>Do8lq zM+)u*0x^zlJ+XS+6HxB!I@}VSfk6+93R6I;1upRxL@~)NjzN49QsOm;$3|Mb1aU94 z#NQB$rf4Z31pU|Nhd;kCd delta 198 zcmV;%06G8G0pbCWB!8(%L_t(oh3%Ko4S*mFM30WdER5+atfXHgCQz_QOFy{Zn!D%O zL7#+23RjGxf5B>PZ{PqNfCE6%Gu%q0oE{sF%^lEy;5^wSTnW+h@_jj-fsr=%0Jw@iCH%|oiU0rr07*qoM6N<$f=Vh? AV*mgE diff --git a/domain/domain.go b/domain/domain.go index 1ea9d10..ad15256 100644 --- a/domain/domain.go +++ b/domain/domain.go @@ -11,6 +11,8 @@ type Domain struct { func (d *Domain) Init() { d.InitObjectType() + d.InitItemType() + d.InitNPCType() d.InitMenu() d.InitDialog() d.InitLevel() diff --git a/domain/item_type.go b/domain/item_type.go index 90d45d4..b2c230b 100644 --- a/domain/item_type.go +++ b/domain/item_type.go @@ -2,8 +2,19 @@ package domain import "game/konstructor" +const ( + SwordItemType konstructor.ItemTypeMapKey = "sword" +) + func (d *Domain) InitItemType() { - d.ItemTypeMap = konstructor.ItemTypeMap{} + d.ItemTypeMap = konstructor.ItemTypeMap{ + SwordItemType: { + ID: "sword", + Render: konstructor.Render{ + Image: "assets/images/items/sword.png", + }, + }, + } } func (d *Domain) GetItemTypeMap() konstructor.ItemTypeMap { diff --git a/domain/level.go b/domain/level.go index 7636b9e..0c45154 100644 --- a/domain/level.go +++ b/domain/level.go @@ -20,7 +20,7 @@ func (d *Domain) InitLevel() { Y: 10, Z: 0, }, - Type: d.GetObjectType("TestObjectType"), + Type: d.GetObjectType(TestObjectType), }, { ID: "test_object2", @@ -29,7 +29,29 @@ func (d *Domain) InitLevel() { Y: 50, Z: 0, }, - Type: d.GetObjectType("TestObjectType"), + Type: d.GetObjectType(TestObjectType), + }, + }, + Items: []konstructor.Item{ + { + ID: "sword_1", + Position: konstructor.Position{ + X: 100, + Y: 100, + Z: 0, + }, + Type: d.GetItemType(SwordItemType), + }, + }, + NPCs: []konstructor.NPC{ + { + ID: "test_npc_1", + Position: konstructor.Position{ + X: 220, + Y: 180, + Z: 0, + }, + Type: d.GetNPCType(TestNPCType), }, }, }, diff --git a/domain/npc_type.go b/domain/npc_type.go index ed31611..e07050f 100644 --- a/domain/npc_type.go +++ b/domain/npc_type.go @@ -2,8 +2,18 @@ package domain import "game/konstructor" +const ( + TestNPCType konstructor.NPCTypeMapKey = "test" +) + func (d *Domain) InitNPCType() { - d.NPCTypeMap = konstructor.NPCTypeMap{} + d.NPCTypeMap = konstructor.NPCTypeMap{ + TestNPCType: { + Render: konstructor.Render{ + Image: "assets/images/npcs/test_npc.png", + }, + }, + } } func (d *Domain) GetNPCTypeMap() konstructor.NPCTypeMap { diff --git a/domain/object_type.go b/domain/object_type.go index fceff56..aa11168 100644 --- a/domain/object_type.go +++ b/domain/object_type.go @@ -2,9 +2,13 @@ package domain import "game/konstructor" +const ( + TestObjectType konstructor.ObjectTypeMapKey = "test" +) + func (d *Domain) InitObjectType() { d.ObjectTypeMap = konstructor.ObjectTypeMap{ - "TestObjectType": konstructor.ObjectType{ + TestObjectType: konstructor.ObjectType{ ID: "test_object_type", Render: konstructor.Render{ Image: "assets/images/objects/test_object.png", diff --git a/konstructor/engines/easy_ebitengine/screen.playground.go b/konstructor/engines/easy_ebitengine/screen.playground.go index 94dc6d3..7259649 100644 --- a/konstructor/engines/easy_ebitengine/screen.playground.go +++ b/konstructor/engines/easy_ebitengine/screen.playground.go @@ -17,6 +17,8 @@ func (e *Engine) PlaygroundUpdate() { func (e *Engine) PlaygroundDraw(screen *ebiten.Image) { e.PlaygroundBackgroundDraw(screen) e.PlaygroundObjectsDraw(screen) + e.PlaygroundItemsDraw(screen) + e.PlaygroundNPCsDraw(screen) } func (e *Engine) PlaygroundBackgroundDraw(screen *ebiten.Image) { @@ -38,6 +40,32 @@ func (e *Engine) PlaygroundObjectsDraw(screen *ebiten.Image) { } } +func (e *Engine) PlaygroundItemsDraw(screen *ebiten.Image) { + playground := e.GetPlayground() + geoM := ebiten.GeoM{} + for _, object := range playground.Items { + render := object.Type.Render + geoM.Reset() + geoM.Translate(float64(object.Position.X), float64(object.Position.Y)) + screen.DrawImage(e.GetImage(render), &ebiten.DrawImageOptions{ + GeoM: geoM, + }) + } +} + +func (e *Engine) PlaygroundNPCsDraw(screen *ebiten.Image) { + playground := e.GetPlayground() + geoM := ebiten.GeoM{} + for _, object := range playground.NPCs { + render := object.Type.Render + geoM.Reset() + geoM.Translate(float64(object.Position.X), float64(object.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/main.go b/main.go index d8e300a..e511cce 100644 --- a/main.go +++ b/main.go @@ -13,7 +13,7 @@ func main() { EngineWrapper: &easy_ebitengine.EngineWrapper{}, Domain: &domain.Domain{}, KContext: &konstructor.KContext{ - ScreenType: konstructor.DialogScreenType, + ScreenType: konstructor.PlaygroundScreenType, ActiveMenu: domain.MainMenu, ActiveDialog: domain.DialogTest, CurrentLevel: 0,