From 97171b7bfecfe2450187be1ce54a0852bf7ae86e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Th=C3=A9au?= <theau.baton@etu.univ-amu.fr> Date: Sun, 2 Feb 2025 03:26:49 +0100 Subject: [PATCH] Refactoring code --- assets/game/objects/mimik.png | Bin 0 -> 529 bytes assets/player.png | Bin 1386 -> 0 bytes assets/textures/Cube_Air.png | Bin 134 -> 0 bytes assets/textures/Cube_Black.png | Bin 282 -> 0 bytes assets/textures/Cube_Blue.png | Bin 282 -> 0 bytes assets/textures/Cube_Blue_Outlined.png | Bin 329 -> 0 bytes assets/textures/Cube_Brown.png | Bin 282 -> 0 bytes assets/textures/Cube_Cyan.png | Bin 282 -> 0 bytes assets/textures/Cube_GLab_1.png | Bin 282 -> 0 bytes assets/textures/Cube_GLab_2.png | Bin 282 -> 0 bytes assets/textures/Cube_GLab_3.png | Bin 282 -> 0 bytes assets/textures/Cube_Grass.png | Bin 450 -> 0 bytes assets/textures/Cube_Gray.png | Bin 282 -> 0 bytes assets/textures/Cube_Green.png | Bin 282 -> 0 bytes assets/textures/Cube_Lava.png | Bin 776 -> 0 bytes assets/textures/Cube_Light_Red.png | Bin 282 -> 0 bytes assets/textures/Cube_Orange.png | Bin 282 -> 0 bytes assets/textures/Cube_Pink.png | Bin 282 -> 0 bytes assets/textures/Cube_Purple.png | Bin 282 -> 0 bytes assets/textures/Cube_Red.png | Bin 282 -> 0 bytes assets/textures/Cube_Red2.png | Bin 282 -> 0 bytes assets/textures/Cube_Sepia.png | Bin 282 -> 0 bytes assets/textures/Cube_Test.png | Bin 359 -> 0 bytes assets/textures/Cube_Void.png | Bin 307 -> 0 bytes assets/textures/Cube_White.png | Bin 282 -> 0 bytes assets/textures/Cube_Yellow.png | Bin 282 -> 0 bytes assets/textures/Image_Test.png | Bin 1396 -> 0 bytes assets/textures/Neera.png | Bin 8304 -> 0 bytes assets/textures/Tile_Test.png | Bin 460 -> 0 bytes assets/textures/Tile_Test_2.png | Bin 2079 -> 0 bytes assets/textures/Tile_Test_3.png | Bin 604 -> 0 bytes assets/textures/Tile_Test_4.png | Bin 246 -> 0 bytes assets/textures/letters.png | Bin 1029 -> 0 bytes assets/tilemap.png | Bin 4985 -> 0 bytes .../engine/graphics/back/textures/Texture.hpp | 2 +- source/engine/graphics/front.hpp | 16 +++++ .../engine/graphics/front/engine/Engine.hpp | 4 -- .../graphics/front/module/Quad_Module.hpp | 3 +- .../graphics/front/module/Sprite_Module.cpp | 4 +- .../graphics/front/module/Text_Module.cpp | 34 ---------- .../graphics/front/module/Text_Module.hpp | 24 ------- .../front/module/TileArray_Module.cpp | 8 +-- source/engine/graphics/front/object/Image.cpp | 4 +- source/engine/graphics/front/object/Image.hpp | 16 ++--- .../engine/graphics/front/object/Sprite.cpp | 7 +- .../engine/graphics/front/object/Sprite.hpp | 39 ++++++------ source/engine/graphics/front/object/Text.cpp | 28 -------- source/engine/graphics/front/object/Text.hpp | 60 ------------------ .../graphics/front/object/TileArray.cpp | 8 +-- .../graphics/front/object/TileArray.hpp | 32 ++++++---- source/engine/physic/back/Position.cpp | 4 -- source/engine/physic/back/Position.hpp | 7 +- source/engine/physic/back/SquareBox.cpp | 22 ++----- source/engine/physic/back/SquareBox.hpp | 19 ++++-- source/engine/physic/front/engine/Engine.cpp | 8 +-- source/engine/physic/front/engine/Engine.hpp | 2 +- .../engine/physic/front/object/Tangible.cpp | 13 +++- .../engine/physic/front/object/Tangible.hpp | 16 +++-- .../physic/front/object/TangibleMovable.cpp | 2 +- .../physic/front/object/TangibleMovable.hpp | 2 +- .../physic/front/object/TangibleStatic.cpp | 2 +- .../physic/front/object/TangibleStatic.hpp | 2 +- source/game/Game.cpp | 9 +-- source/game/back/GameObject.cpp | 6 ++ source/game/back/GameObject.hpp | 9 +-- source/game/back/object/Damagable.cpp | 18 ++++++ source/game/back/object/Damagable.hpp | 27 ++++++++ source/game/back/object/Enemy.cpp | 28 ++++---- source/game/back/object/Enemy.hpp | 7 +- source/game/back/object/Level.cpp | 6 +- source/game/back/object/Player.cpp | 10 +-- source/game/back/object/Player.hpp | 13 ++-- source/game/back/object/Terrain.cpp | 6 +- source/game/back/object/Terrain.hpp | 13 ++-- source/game/front/object/Klinck.cpp | 35 +++++----- source/game/front/object/Klinck.hpp | 4 +- source/game/front/profile/KlinckKeys.cpp | 8 +-- source/game/object/Test.cpp | 46 -------------- source/game/object/Test.hpp | 21 ------ source/kernel/back/component/Component.hpp | 4 +- source/kernel/back/component/Graphical.hpp | 11 ++-- source/kernel/back/component/Graphical.tpp | 7 ++ source/kernel/back/component/Physical.hpp | 19 +++--- source/kernel/back/component/Physical.tpp | 7 ++ source/kernel/back/engine/Engine.hpp | 10 +-- source/kernel/back/engine/GraphicEngine.cpp | 14 ++-- source/kernel/back/engine/GraphicEngine.hpp | 10 +-- source/kernel/back/engine/PhysicEngine.cpp | 14 ++-- source/kernel/back/engine/PhysicEngine.hpp | 12 ++-- source/kernel/front/Kernel.cpp | 40 ++++++------ source/kernel/front/Kernel.hpp | 7 +- .../kernel/front/component/graphic/Sprite.cpp | 37 +++++------ .../kernel/front/component/graphic/Sprite.hpp | 29 +++++---- .../front/component/graphic/TileMap.cpp | 30 ++++----- .../front/component/graphic/TileMap.hpp | 22 +++---- .../kernel/front/component/physic/Fixed.cpp | 8 +-- .../kernel/front/component/physic/Fixed.hpp | 10 +-- .../kernel/front/component/physic/Movable.cpp | 8 +-- .../kernel/front/component/physic/Movable.hpp | 10 +-- source/kernel/front/component/physic/Tile.cpp | 3 + source/kernel/front/component/physic/Tile.hpp | 2 + .../front/component/physic/TileArray.cpp | 14 ++-- .../front/component/physic/TileArray.hpp | 12 ++-- source/kernel/front/props/Props.hpp | 6 +- source/kernel/front/props/PropsDynamic.hpp | 2 + source/kernel/front/props/PropsPlayable.hpp | 6 +- source/kernel/front/props/PropsStatic.hpp | 2 + source/kernel/front/props/PropsTileMap.hpp | 2 + .../kernel/front/resolver/PhysicResolver.cpp | 2 +- source/kernel/front/resolver/Resolver.hpp | 2 +- source/kernel/front/resolver/Resolver.tpp | 2 +- 111 files changed, 450 insertions(+), 568 deletions(-) create mode 100644 assets/game/objects/mimik.png delete mode 100644 assets/player.png delete mode 100644 assets/textures/Cube_Air.png delete mode 100644 assets/textures/Cube_Black.png delete mode 100644 assets/textures/Cube_Blue.png delete mode 100644 assets/textures/Cube_Blue_Outlined.png delete mode 100644 assets/textures/Cube_Brown.png delete mode 100644 assets/textures/Cube_Cyan.png delete mode 100644 assets/textures/Cube_GLab_1.png delete mode 100644 assets/textures/Cube_GLab_2.png delete mode 100644 assets/textures/Cube_GLab_3.png delete mode 100644 assets/textures/Cube_Grass.png delete mode 100644 assets/textures/Cube_Gray.png delete mode 100644 assets/textures/Cube_Green.png delete mode 100644 assets/textures/Cube_Lava.png delete mode 100644 assets/textures/Cube_Light_Red.png delete mode 100644 assets/textures/Cube_Orange.png delete mode 100644 assets/textures/Cube_Pink.png delete mode 100644 assets/textures/Cube_Purple.png delete mode 100644 assets/textures/Cube_Red.png delete mode 100644 assets/textures/Cube_Red2.png delete mode 100644 assets/textures/Cube_Sepia.png delete mode 100644 assets/textures/Cube_Test.png delete mode 100644 assets/textures/Cube_Void.png delete mode 100644 assets/textures/Cube_White.png delete mode 100644 assets/textures/Cube_Yellow.png delete mode 100644 assets/textures/Image_Test.png delete mode 100644 assets/textures/Neera.png delete mode 100644 assets/textures/Tile_Test.png delete mode 100644 assets/textures/Tile_Test_2.png delete mode 100644 assets/textures/Tile_Test_3.png delete mode 100644 assets/textures/Tile_Test_4.png delete mode 100644 assets/textures/letters.png delete mode 100644 assets/tilemap.png create mode 100644 source/engine/graphics/front.hpp delete mode 100644 source/engine/graphics/front/module/Text_Module.cpp delete mode 100644 source/engine/graphics/front/module/Text_Module.hpp delete mode 100644 source/engine/graphics/front/object/Text.cpp delete mode 100644 source/engine/graphics/front/object/Text.hpp create mode 100644 source/game/back/GameObject.cpp create mode 100644 source/game/back/object/Damagable.cpp create mode 100644 source/game/back/object/Damagable.hpp delete mode 100644 source/game/object/Test.cpp delete mode 100644 source/game/object/Test.hpp create mode 100644 source/kernel/back/component/Graphical.tpp create mode 100644 source/kernel/back/component/Physical.tpp diff --git a/assets/game/objects/mimik.png b/assets/game/objects/mimik.png new file mode 100644 index 0000000000000000000000000000000000000000..c5e50d7b9498a04315051951bd3796330c502e6b GIT binary patch literal 529 zcmeAS@N?(olHy`uVBq!ia0y~yU~phyU=ZM7V_;xd_PkP)fq{XsILO_JVcj{ImkbOH zEa{HEjtmSN`?>!lvNA9*a29w(7BevL9R^{><M}I67#J9rdAc};M7STFb}{gX0gsEY z)I!#O8jb#^7P3h#;7R+jgyr8lR;>js6GU&GahsU?^URsOlCgT}>veM9oH-jjGj;c* zTX#C5UkBgG4L|?sQ_akMcKdZd$nL-C(HH%i@mY4u1%|mP-PKaAJ+Gz)+ImQHFy|DR zy!`w2_@aX=_H|spE+rVnmL=2gpz<a$<o|saeg;#cFfro?UmqW2+Q4~_*?ik>amQL0 zH~*5_1*UP#TW(1g&t$aGp2<4FMe60Uh5Xy~1!P|sT`)gickm%ciZ8=dwIG&XNuRl% zg<M-V_y68XR<<+!{@?4%o766`@FZTVHowOEbywY#VrhTr4w+kju6;fuD=>>;V*H%j z$N%Q3DMY!ZeE2+JbNFlCo>|A+<rs|@USl|xG3CCO_SyO@+un*5S2Z3Uk1%((+{3)d zW6|n=^Sqd2t12xn7zR0<4ybAR>+`eIVUDh@&6@s_C5f{#ce-izuYZ`ruzlNot-d6| z<|=``cRjtX8{F^HFW;bcr(3;MZPwYzezulR8Fg;tos%)SxU2P6A6rhi|LO#zRqR`r l^LMf3T$j5RbNLH*{<R=Bh8<h_7#J8BJYD@<);T3K0RVA#;hq2h literal 0 HcmV?d00001 diff --git a/assets/player.png b/assets/player.png deleted file mode 100644 index c84d047f428c2c2dadeff99120314ec06d313048..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1386 zcmeAS@N?(olHy`uVBq!ia0y~yU~phyU@+idV_;xd=v^bvz`(#*9OUlAu<o49O9lo8 zmUKs7M+SzC{oH>NSs54@I14-?iy0XB4uCLY*0oMf1_qY@o-U3d8O~>CoW3YyD$<(X z!NBgoFo9Wm)t<!HAso#ids3Z6rHc+QS}>e=;QsuVT;Z=*uP$EB5|0m!mfHI6^$Ww# zzkh~R#5{=nkmvIE+q0e%pQ65Q&dFx_b8l_pncs_I-5XAytpELS`SJVr|Np7@{?c5U z<$ui&=CfzcOXqOb?$EWkabNAg?fCsw-?`7r*KIsz_hn_-41Ym}))^fE-Qm_ZR>Yfp zTeu;bA=;MZv%^#aG3INsi(P|R8kDxgXViRow&}+P;RD6X8MamF1aV(HV3Z!o;;_4q zqy3R-f8fU-&!u1IwVl+s8Nt9A8RQ|tT5wzchS>!+y9eG~>kAL)GBL2EFm@-fU$JJ; zo%}3M!7i>_!)B>NvzbKr{ER<_+qe!i32xb*r5rdzqjSDvkWHowgYkT8RuAETz$L!i z54N4>5`SnEo%G&l;zQxbb><=RxBDHoebT7<C^NgmV+y~+?9SWGb`8Hy9l8Hc_ke?r z#WzFsbxsTB`Lo(>ViI~Ieeijj%$x1+8N_;~)i!u{{*|1=zVVC2j|!~`#Xm$>eA{~? z`aQ!M9j1j5Z0_>>+n=O-<-Pa7`sL3(Pp2m=E4wjial>X^o~mzm?<(5yZ@bO<VA|)Y z>smf8WVjb5y=hZ5mnpkYQ6}q$f8H#N2hQ9N`Y2pw=XZO4p^2AG^7j7doXz58Y?YZG zKAk#uzM)Eb_596tdqTI}KIUkA#k-@GVdsph&XDRwbz*Nk-^=K8f9SI9323l=@j94m z#bZ15p!<pIZgus3Gk!GZSIb7Zn|E?_mikFqPAH$4`>i6xrAz*qOWY>^dXCohyvowA z3$N}|d9(NbiDOlBHrjJEbZ3chysywqi`ja9!s*W<8zMWGGTn$z+OhSt*+#}Kw~kx; ztL^q#cdJ~utsu`_r|Z4J_U!@}_gOM&GrGlWSpR>%fmWHq1MmOx3z;5l+Q4b>=oI4@ z!?yBuIeT4NbiXy!Db?63%~md){X>Ld`{MHb5)Uq2QukhQ{LH=NRHcwAC7v99Q-L25 zf`0qu-efz=?>m0@{L{`G*5@9l*BZ3BCuv@7E4<S7w@=sNi0f%PxnEBzDtT<Z%_7vU z&R@@>9U*hYPU`oCCWmW*(ua~Cq}WYZQkul)@MibN&3_nk9JloMtuksj+2HxeOLS6) z?n|);xw~@3i!zcXPjJ?9*vwqB)p!}J#vRVdvI*M~mw&Yol~<`d>pts9OI$(G(c|I$ z^~dWw{>Y!m^7?GTxbOFe<@GklpZDAMvAp2?{fcWHSFC<e!($t(Dr;7UM=zootEPWo zW7}-4pvFImNkaQlP4@+}JB(M$wllOlL>e98UbSuSA;%zw4yF+K8S86ru_+$h{4@H2 zmXDO9Bv10>=)Vll(vBAEJPfc&c8`Acct(RYt3f-5kZXdHVx!31({>!JN3P~CP}tDC z;NZ4f@9!~&vc$UHy?0>pMWtE$pQy3ANL9-z_XNA-7lypu(KMH7Ml$cQB{R-QhH(pA zvTx7ye)N2;b%GdA#U$_59APzF&!$`ZH_Da=FFba?ioM`=x~ErA<i{r^jFJMA>@Ivd zd1U|N_JD1+QxiY6p8mGOe$(A2GH=S`n+`A~9Ni&2VM0vHVy3rq&xPB!E`8*AM)5Hp zV_SvOOpdQidz<gM*8CP+@afJZjZMXUz6|x(Z*VS-y>K`7!*|nn4QZm00uOdiWKh_w zC>xzR!+D|Tf#3RqtRKomZ|%zxkNo=hTmSL>*EGL2_3u<~VPIfj@O1TaS?83{1OTJI Be#Za+ diff --git a/assets/textures/Cube_Air.png b/assets/textures/Cube_Air.png deleted file mode 100644 index ed6b8e0766c45ad7800bcd2a972db9bd9ce8e979..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 134 zcmeAS@N?(olHy`uVBq!ia0y~yU{GLSU{K^>V_;y|p|&!Rfq{XsILO_JVcj{ImkbOH zEa{HEjtmSN`?>!lvNA9*a29w(7BevL9RguSQ4OyK1_lOcPZ!6K2=})K4H+327!ED? j>YvLa4>Gr5y_CR021dT=_o^5e7#KWV{an^LB{Ts5Is6{= diff --git a/assets/textures/Cube_Black.png b/assets/textures/Cube_Black.png deleted file mode 100644 index c16e826571abf5b30be7c3365d62b1b8c8538ab0..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 282 zcmeAS@N?(olHy`uVBq!ia0y~yU{C;I4rT@h2A3sW#~2tG7>k44ofy`glX=O&z`&C3 z=<CS9u(6-}Pa-P=0|QThPl&6WoE!rKgRZVF0|UcRnY%F{btOT5!T<mNXK>J3`GtXj zfwRCPvY3H^?*IrhW?k##WME)u_jGX#vG9L8$y2OBf#;~iyZUr%mM7Z3Y#JgzWK2%= z7VkPJo>KDGfbDbxZ-nIM?wK3p7^4}5&oi_5MBjVsp7nI|Qd91Elha%__{W@oFmFj5 zlkbLOLUTCvCMXE=#56_S^#7-@aq%IB>IWHxjA{=uWY;trUlN$ZDYlnIIZ)S8ZIynb e`l@PshMVfF3&VEv?_ywJVDNPHb6Mw<&;$UkwOW|~ diff --git a/assets/textures/Cube_Blue.png b/assets/textures/Cube_Blue.png deleted file mode 100644 index 507f300138b6411b10e78bad4cc2a83b3aaba7da..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 282 zcmeAS@N?(olHy`uVBq!ia0y~yU{C;I4rT@h2A3sW#~2tG7>k44ofy`glX=O&z`&C3 z=<CS9u(6-}Pa-P=0|QThPl&6v>t!921);GQ85kInS51EoQdbh>7ySSKe+CDwm0uVb z7&r?&B8wRq_zr?F<Bo~hZy6XE+C5zyLoEE?PVy9MP~bT#@vc7In&pZ1FPnzQ4;hnF zy~Vo@il>ykHDEj4z#Ad?xqIdYImT#4;q%NaKGFByx@SGzywsF?-sCiw4gN9bAIw`4 z$K<==n9v+fy$K4!JTXmCH~s%9Y+QVZq545aA*0%Z4B0h}#+L-<aEk3^Q4Z8~R9mIr fsJ^P&p5dlC>%y?z{JR(!7#KWV{an^LB{Ts5?e<>K diff --git a/assets/textures/Cube_Blue_Outlined.png b/assets/textures/Cube_Blue_Outlined.png deleted file mode 100644 index 7b9880a482b09a1df76a7df636e288472e224130..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 329 zcmeAS@N?(olHy`uVBq!ia0y~yU{C;I4rT@h2A3sW#~2tG7>k44ofy`glX=O&z`&C3 z=<CS9u(6-}Pa-P=1A}ycPlzi60|PS)ueIxC21aHkCJr5w1);GQ85kHD7#PIw_PH=H zFmRRx`33)n0)}A!3L%hSfk$L90|VcF5N5Ps4OU@bU|8ho;uvD#e|M6n&|w1(mcmD_ z|LY4SBvdABul|*As$}|U_9dbzk<WOSD}D;xS9*Nq4z}!jMQXe$Z!EjmCf=~fe$Z*R z&eTEayVQ!hFYj6ZeEY(0-Sk#1aIf(WFQ0yg$<4<WoOAr=b=|Z><)x)V&=<=KEp2~% z4Ma@?dKWJ;E=su8KP^ns(LPGrw(~$KzuP0n7a}fA2`_{ynv9>U4vd=+a`zU0wu<2X T2ebcxT+86;>gTe~DWM4f3Ji6C diff --git a/assets/textures/Cube_Brown.png b/assets/textures/Cube_Brown.png deleted file mode 100644 index 020f8148945580c16561cc7b2b95e763ff718ffa..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 282 zcmeAS@N?(olHy`uVBq!ia0y~yU{C;I4rT@h2A3sW#~2tG7>k44ofy`glX=O&z`&C3 z=<CS9u(6-}Pa-P=0|QThPl#({kV&qc^3)6u1_p+2W^>nq)RhGJ1^@s5pTR+E<rfA9 z2F?PH$YKTtz5^i4n02j_lYxPu-P6S}#KQmWBu}vh1)if4@9NX7S)OSBvT2C?kTE&c zTfFO_cuL7z1Gdu*yb+S0yJv2YV~l1LKF`eJ6MgTkd)Cv<OHH}wO-^&!;2(4T!Mr7L zOuieA3C-cuo1h@f6VnuR)Bm5s#>Iyisvl$&GO9hukX_Sgd`Vyqr`TQ=<v?9WwN?6! e>Z_{l8E&exE)3hvzl(u^fx*+&&t;ucLK6VRCtWT8 diff --git a/assets/textures/Cube_Cyan.png b/assets/textures/Cube_Cyan.png deleted file mode 100644 index 13773ab71faba09930bdb840951eaa60571b0f9d..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 282 zcmeAS@N?(olHy`uVBq!ia0y~yU{C;I4rT@h2A3sW#~2tG7>k44ofy`glX=O&z`&C3 z=<CS9u(6-}Pa-P=0|QThPl&6|kt6Y!FYB#Z#lXOD$$3o}NL@*gU-19`{}~*#R(@e% zVBjq9h%9Dc;5!Jyj5{V~zhz)xX!mq+46*QkJIPb5L4oI}#Jl=*YnCV4zib*JKV(c! z^%n0sD4tUC)`0DF18;=n=kA#s<QStFh0imy_(b1(>z?&=^HNjpd6UyzHu%S!e=u)J z9Fy;cV?uK{^(H6?^Taeo-Sq#buyOGrhUy0yg^X$sGGx~@8ebBa!zs3xMLAH{QEioe fqx!09dxo3ptP8_-^Y3C{U|{fc^>bP0l+XkKxQk!G diff --git a/assets/textures/Cube_GLab_1.png b/assets/textures/Cube_GLab_1.png deleted file mode 100644 index dde2eea7829efe08f4841cd5e0c2f832fb243d6c..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 282 zcmeAS@N?(olHy`uVBq!ia0y~yU{C;I4rT@h2A3sW#~2tG7>k44ofy`glX=O&z`&C3 z=<CS9u(6-}Pa-P=0|QThPl)SNOVgQZD*prh85kHU?0@8d)RhGJ1^@s5pTR+E<rfA9 z2F?PH$YKTtz5^i4n02j_lYxPu-P6S}#KQmWBu}vh1)if4@9NX7S)OSBvT2C?kTE&c zTfFO_cuL7z1Gdu*yb+S0yJv2YV~l1LKF`eJ6MgTkd)Cv<OHH}wO-^&!;2(4T!Mr7L zOuieA3C-cuo1h@f6VnuR)Bm5s#>Iyisvl$&GO9hukX_Sgd`Vyqr`TQ=<v?9WwN?6! e>Z_{l8E&exE)3hvzl(u^fx*+&&t;ucLK6TM*<FqR diff --git a/assets/textures/Cube_GLab_2.png b/assets/textures/Cube_GLab_2.png deleted file mode 100644 index 5529901db2254ea4a144a954502f548275c7c47e..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 282 zcmeAS@N?(olHy`uVBq!ia0y~yU{C;I4rT@h2A3sW#~2tG7>k44ofy`glX=O&z`&C3 z=<CS9u(6-}Pa-P=0|QThPl)UP0_Pj?R{uNG7#J8HzG`FvsVfQc3;zHAKZAqT$}bEI z44efXk;M!Qd<Q_7G3#0<Cj$dRyQhm|h=u>#NuFX23Oq+8-qojDvpmuMWz!J(A!Bl? zw|Lh<@syIc25hGrcq1e~chB4)#~95he4d%bC;Hx7_pGOzmzr|Vo1Esd!9V8wgLzBh zn0z-J6Pm-RH$g#|C#EUtrvE>Mjf)R4R6oclWK?^QA-ks0_>#aJPO-f#%7MC$YOC}c e)mK&9Gu%{XT^P2Te-{G-1B0ilpUXO@geCw&*<Swu diff --git a/assets/textures/Cube_GLab_3.png b/assets/textures/Cube_GLab_3.png deleted file mode 100644 index 5d5da902f3a75d14435bc76d5c0cb9fc7d2a4fdc..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 282 zcmeAS@N?(olHy`uVBq!ia0y~yU{C;I4rT@h2A3sW#~2tG7>k44ofy`glX=O&z`&C3 z=<CS9u(6-}Pa-P=0|QThPl)UP<!Z+oWdHApV_;yAwO;oTq^=~$FZloe{|pXVE59%> zFmM)lL>4nJ@ErhQ#;j|doD2*M?Vc`<Ar}5`CwYoBDDWJWcvqip&GJP1mrX<Dhm6Uo z-r`*c#ZyY&8nB&i;Ej;{+&y!H9Ah-2@OfqypXhsU-Lsx<UTVrcZ*rQ;2LG7z59Te2 zWAfc_OlS_L-UJ0<o|vYnoBsb4HZDHIQ2ijIkWuYHhU}U~<4Xc_IK}p|C<p2~s;$y* eR9{tX&u~+nbz#_U{#^_V3=E#GelF{r5}E)fj9%RU diff --git a/assets/textures/Cube_Grass.png b/assets/textures/Cube_Grass.png deleted file mode 100644 index cdf1c247f553a7bac65b41a60a90ba387e72e327..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 450 zcmeAS@N?(olHy`uVBq!ia0y~yU{C;I4rT@h2A3sW#~2tG7>k44ofy`glX=O&z`&C3 z=<CS9u(6-}Pa-P=1A|I{Pl#(ulV5U!Z)&rDN~3RDi+@tRPjZ7#YO`N@Ye0yROuer* z0|Ue4r(s153=BLaL4Lvi5r9GH{<(7u3=EtF9+AZi415Pcm~qF%?6(XIjQpN1jv*HQ zZznNsYBu0-X`B%7<=^+e{T|V8CI6kX(E1%Q$>&LphfBTo-+P-LUY;KLKksgXV$xIv z@4Tz$mtWLWUZfCsS#Lk%uM{4`tBa<%AA6d^a6Q#cP`gdzu!O1Jdz<Mu1U4<d?A5R$ zJ0QX=p22(1pD4-T8IQF&R60#pewK8WJ*0S?kN=f%Q>Uor%rh-p|Ef>kAtgU`MUf1{ z%xz1;UU+xb`now7ymOE~p>n%3MLbNpbw<g3h6%M@#ul$vERFrfdqO45Qlb26hWOnE zpECQG+rDj+b5NUo!~6Fu_7iV@x&J?)x-Q0g?Yiy1E^XU>^;}r|t)Sg2Y)dS8YbKW6 s-p82#B-6fuyYiO3gQEX$oBs?O=gC*Eidk}&fq{X+)78&qol`;+06hb{wEzGB diff --git a/assets/textures/Cube_Gray.png b/assets/textures/Cube_Gray.png deleted file mode 100644 index d1f106c214c46328ab91ca74b87a8561286239bb..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 282 zcmeAS@N?(olHy`uVBq!ia0y~yU{C;I4rT@h2A3sW#~2tG7>k44ofy`glX=O&z`&C3 z=<CS9u(6-}Pa-P=0|QThPl#(qMuxw?e^pf#0|P^@%*6E|btOT5!T<mNXK>J3`GtXj zfwRCPvY3H^?;r>>?wFYUmVtqx-P6S}#KQmWBu}vh1)if4@9NX7S)OSBvT2C?kTE&c zTfFO_cuL7z1Gdu*yb+S0yJv2YV~l1LKF`eJ6MgTkd)Cv<OHH}wO-^&!;2(4T!Mr7L zOuieA3C-cuo1h@f6VnuR)Bm5s#>Iyisvl$&GO9hukX_Sgd`Vyqr`TQ=<v?9WwN?6! e>Z_{l8E&exE)3hvzl(u^fx*+&&t;ucLK6TYu3gIj diff --git a/assets/textures/Cube_Green.png b/assets/textures/Cube_Green.png deleted file mode 100644 index fcf9d95475e3f448c86c6bf73678eee864e84000..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 282 zcmeAS@N?(olHy`uVBq!ia0y~yU{C;I4rT@h2A3sW#~2tG7>k44ofy`glX=O&z`&C3 z=<CS9u(6-}Pa-P=0|QThPl&6>WoxqqI`J1n85kJ+&&qd!)RhGJ1^@s5pTR+E<rfA9 z2F?PH$YKTtzJnmlxMO1WTLuP(c25__5DWjelRU*56nKtGysJ;QW_hCh%cddnL&oG( zZ}F~!;wdF>4cJaM@J2{}?w+|pjxm~1_&hU<PxQUF?paSaFE!<!H#yB^gMZBV2lJN1 zG5KydCNzgrZ-Rm_PfSzPP5*xi8y6p9sD6-9$f))pLv~H0@g;#doML-flmm4g)mG^@ es;{cHXSk`(x-e`v|1Jgw1_n=8KbLh*2~7Z8hF%c> diff --git a/assets/textures/Cube_Lava.png b/assets/textures/Cube_Lava.png deleted file mode 100644 index 064c841716d1f8629cd93615e4bc81c8a6e7749e..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 776 zcmeAS@N?(olHy`uVBq!ia0y~yU{C;I4rT@h2A3sW#~2tG7>k44ofy`glX=O&z`&C3 z=<CS9u(6-}Pa-P=14C?pPl)Rj0fq_u43qg8Ch;>&6JVIa&oGgnVX6Q_A3sAsKSKf+ zLn0T$1ZClVCE;W)hAuva2};5fm4%bI7^Wx-_bLg+b1_U-7Vc9Lnxrf|MMXG;i=jtJ zD3yyL4&*Eb{g&4+7#JAjOM?7@|KkM=XC=!77#J8h3p^r=85sBuf-vKbiP>)%7??Oc zT^vI!{6i--RxMHBY2maiP(8@J>d@BmegBio4&8cfR&#&dtobuJU#*jWdg60!<#ql8 z|C6|$Jg&8V&D!D3Bl6?n-_@t;6&CoP@ww+3wP?S5J)^c&-;K3zlmncmM5i*Hx%lyw zbBY_6PT9kQd1;ISGp0=qFJoa4`*UD^uA>5j%*n~Bk572VC_AeQuv%F1U%B{*spjDA zPdCJ7{7w2iOMIuwmyV7vQ+N#Z?3{$U7VJ&it~&8W{o^);v)!4;rY=0?t!KJh?b4E& z%wHr9-|+j^|Dx;F>~|X+WTR)D%watEt>W6c$|tXU9D=eY8L$+7(bhk5&H8noSdkB} zXAy_>ekJ+W8nSHH^!esaJFum!K}jZcU9H1{>#ICo_OU(EWGL_!xGrmZw%#jDc3FdI z?xa1-7f-vz{VnYEv~_076q0TWT)DC7`ogXAEc^QdCn%~e@!_>^+qNt<!)@OlWyJu7 zro7*~efy_u$ea=-B6O?xrC#m}=UTVS*-tJOzhljv@c3+>)W?kuiGCB;gc?4*q1fPk z)Kku2dpMggN2We2dq}oi>4D>kOslKUUGuYfXH|AoLNe*clQ*^vhdj5{PqI?#E7A&@ zw(-9FT3#;B(>IGQ@-Mm4#PHocyY$5Go{AG19TjP^e{b$=d|fr`L?h$#p6`$I86w{( z+}e=w;omCp2fJ9@6WJ^8pZmqgAn5%s_WD;&olQ0d*A}x~WME)m@O1TaS?83{1OSiz BO^*No diff --git a/assets/textures/Cube_Light_Red.png b/assets/textures/Cube_Light_Red.png deleted file mode 100644 index 19358f477e5c40c303c41af9a48e25a12bfe1616..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 282 zcmeAS@N?(olHy`uVBq!ia0y~yU{C;I4rT@h2A3sW#~2tG7>k44ofy`glX=O&z`&C3 z=<CS9u(6-}Pa-P=0|QThPl)Sc6VFy<+e0293=9lP_on89)RhGJ1^@s5pTR+E<rfA9 z2F?PH$YKTtz5^i4n02j_lYxPu-P6S}#KQmWBu}vh1)if4@9NX7S)OSBvT2C?kTE&c zTfFO_cuL7z1Gdu*yb+S0yJv2YV~l1LKF`eJ6MgTkd)Cv<OHH}wO-^&!;2(4T!Mr7L zOuieA3C-cuo1h@f6VnuR)Bm5s#>Iyisvl$&GO9hukX_Sgd`Vyqr`TQ=<v?9WwN?6! e>Z_{l8E&exE)3hvzl(u^fx*+&&t;ucLK6U|wOs`O diff --git a/assets/textures/Cube_Orange.png b/assets/textures/Cube_Orange.png deleted file mode 100644 index 3507d1817b1ce103382da1a2c0fc64aa0d84ae0b..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 282 zcmeAS@N?(olHy`uVBq!ia0y~yU{C;I4rT@h2A3sW#~2tG7>k44ofy`glX=O&z`&C3 z=<CS9u(6-}Pa-P=0|QThPl)T~Wa|aqIv2}A85kIPnv1uA)RhGJ1^@s5pTR+E<rfA9 z2F?PH$YKTtzJnmlxMO1WTLuP(c25__5DWjelRU*56nKtGysJ;QW_hCh%cddnL&oG( zZ}F~!;wdF>4cJaM@J2{}?w+|pjxm~1_&hU<PxQUF?paSaFE!<!H#yB^gMZBV2lJN1 zG5KydCNzgrZ-Rm_PfSzPP5*xi8y6p9sD6-9$f))pLv~H0@g;#doML-flmm4g)mG^@ es;{cHXSk`(x-e`v|1Jgw1_n=8KbLh*2~7a-pI*xV diff --git a/assets/textures/Cube_Pink.png b/assets/textures/Cube_Pink.png deleted file mode 100644 index ba27564cbc49fd9b80963fe86a3e7b60035718d5..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 282 zcmeAS@N?(olHy`uVBq!ia0y~yU{C;I4rT@h2A3sW#~2tG7>k44ofy`glX=O&z`&C3 z=<CS9u(6-}Pa-P=0|QThPl)Sf>s1SM8ZU-!U|?YQ%^G|Oq^=~$FZloe{|pXVE59%> zFmM)lL>4nJ@ErtU#vK#0-!d>Tw0pWZhFJK&o#ZLjpulrf;$3~ZHOmw2Up5VqA2KGV zdW&}*6i+F6YruB8fj2_(bN9>*a*WZ8!snS;e4_8Yb<cXbd8sM)yvb=U8~kI=KbW^9 zj>&h!F`+q}dJ`0cd19KPZu<XI*tqx*L-m7<LPoU*8M12{jV}qz;S}4;q8zB}sJ2SK fQGHdlJ;P0P)`ela`FAleFfe$!`njxgN@xNAb@*Rz diff --git a/assets/textures/Cube_Purple.png b/assets/textures/Cube_Purple.png deleted file mode 100644 index ee44d1c36dc3d41ddcc29ae14f87b7a0ac54346e..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 282 zcmeAS@N?(olHy`uVBq!ia0y~yU{C;I4rT@h2A3sW#~2tG7>k44ofy`glX=O&z`&C3 z=<CS9u(6-}Pa-P=0|QThPl)RZ>&x{z3)Y2RWME*Zm-apZQdbh>7ySSKe+CDwm0uVb z7&r?&B8wRq_zr?F<Bo~hZy6XE+C5zyLoEE?PVy9MP~bT#@vc7In&pZ1FPnzQ4;hnF zy~Vo@il>ykHDEj4z#Ad?xqIdYImT#4;q%NaKGFByx@SGzywsF?-sCiw4gN9bAIw`4 z$K<==n9v+fy$K4!JTXmCH~s%9Y+QVZq545aA*0%Z4B0h}#+L-<aEk3^Q4Z8~R9mIr fsJ^P&p5dlC>%y?z{JR(!7#KWV{an^LB{Ts55}01` diff --git a/assets/textures/Cube_Red.png b/assets/textures/Cube_Red.png deleted file mode 100644 index 0a74973acf3f347737254a42611fadb532695d1f..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 282 zcmeAS@N?(olHy`uVBq!ia0y~yU{C;I4rT@h2A3sW#~2tG7>k44ofy`glX=O&z`&C3 z=<CS9u(6-}Pa-P=0|QThPl)SfYwHC%Iu}Dj85kIZHf~-BQdbh>7ySSKe+CDwm0uVb z7&r?&B8wRq_zr?F<Bo~hZy6XE+C5zyLoEE?PVy9MP~bT#@vc7In&pZ1FPnzQ4;hnF zy~Vo@il>ykHDEj4z#Ad?xqIdYImT#4;q%NaKGFByx@SGzywsF?-sCiw4gN9bAIw`4 z$K<==n9v+fy$K4!JTXmCH~s%9Y+QVZq545aA*0%Z4B0h}#+L-<aEk3^Q4Z8~R9mIr fsJ^P&p5dlC>%y?z{JR(!7#KWV{an^LB{Ts5fzw_> diff --git a/assets/textures/Cube_Red2.png b/assets/textures/Cube_Red2.png deleted file mode 100644 index 56f33155d5b904a8d0f2fec48a951ee55433a741..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 282 zcmeAS@N?(olHy`uVBq!ia0y~yU{C;I4rT@h2A3sW#~2tG7>k44ofy`glX=O&z`&C3 z=<CS9u(6-}Pa-P=0|QThPl)Sc6SG!j-9rH$3=9k$vX3u-)RhGJ1^@s5pTR+E<rfA9 z2F?PH$YKTtz5^i4n02j_lYxPu-P6S}#KQmWBu}vh1)if4@9NX7S)OSBvT2C?kTE&c zTfFO_cuL7z1Gdu*yb+S0yJv2YV~l1LKF`eJ6MgTkd)Cv<OHH}wO-^&!;2(4T!Mr7L zOuieA3C-cuo1h@f6VnuR)Bm5s#>Iyisvl$&GO9hukX_Sgd`Vyqr`TQ=<v?9WwN?6! e>Z_{l8E&exE)3hvzl(u^fx*+&&t;ucLK6UFsa&!E diff --git a/assets/textures/Cube_Sepia.png b/assets/textures/Cube_Sepia.png deleted file mode 100644 index 6c1088662450d67d9c75dcffb3b13b81bd70e372..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 282 zcmeAS@N?(olHy`uVBq!ia0y~yU{C;I4rT@h2A3sW#~2tG7>k44ofy`glX=O&z`&C3 z=<CS9u(6-}Pa-P=0|QThPl#)6MtHKnU2jz;NWs39d?2bM$S?T+|NjgQS}VUWFfecy zctjR6Fz_7&Va6R3v)?i>FtmHRIEGmGzn$bM)}X+1RN`HIx;4ua?O!$xksmT9r+SNb z9TZO~d27ISx`8)B@^kmh4RVapjKb%cS$v}Jy>-uex_PN7_q@qzE*tz~&Oey9B#y~< z!!e;boO%-!gn43`qHg;CQ`orp5JUBYj6z1W2N|+!8jUXr%;6N<%c2~p>!`L$zfpZv cwLQa4b=HMpyZLu9FfcH9y85}Sb4q9e0POW$ga7~l diff --git a/assets/textures/Cube_Test.png b/assets/textures/Cube_Test.png deleted file mode 100644 index 673ea5b784babacfdb93ea407c2db77aed95f6ac..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 359 zcmeAS@N?(olHy`uVBq!ia0y~yU{C;I4rT@h2A3sW#~2tG7>k44ofy`glX=O&z`&C3 z=<CS9u(6-}Pa-P=1A}ycPlzi>HxKhwI|gPZ1`ZCUplyl_Q~onDGB7YO+*`Dqmw|zS zvn0qb_&*dd1p8MAfdmUYB8wRq`1XS^qXlcQ3IhYf0Z$jl5DWjKlTPzB8}P9BMqm2# zUwrb{Uy>?SZ@i8iGgg#Q+U(kwJU`-U$DXizwP~fT5<jo3yxJsqa;NCgXB)~Fd8<aA z5PHufx-$Je)0A)d<%!1cn11~H!q0q2@>Ey~kFe9lt5FX`rhR%kW7R{gCyuPsm3Mr* z>mj~CU~!f60_{U@TPpr(C|oO8qdh79hvpB#Qvqw4xe|E`S2EbRMnt?%3GbM&V@s4% yVWUM$$fw6XChHtL?yzX>X#2J*Q$N6J-e;y|jRKo$*D?EoeDCS%=d#Wzp$Pynj)pn_ diff --git a/assets/textures/Cube_Void.png b/assets/textures/Cube_Void.png deleted file mode 100644 index 9743f77ea12dda6388eb70707aa02019ad0a7f89..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 307 zcmeAS@N?(olHy`uVBq!ia0y~yU{C;I4rT@h2A3sW#~2tG7>k44ofy`glX=O&z`&C3 z=<CS9u(6-}Pa-P=0|Q%tPlzi67%WZSd7goRfvF_OFZe&h)9nUc3=9mM1s;*b3=Dh+ zK$tP>S|=w11H%eW7sn6_|JDi7LahcoPPhN&-?HI8()US_Q^xrE?rj+}PfbhtT6DA} z<K!WB<>O^D_!VT&JH+ppx8@4lb)J;Ze<S1i>lnlz6*&sVE&9?Rcw?0j!=+~;${G!i z%4B~{5U}h1xLCB~ujrKGzcC)KoezD>{p9$OgUiB`X$51*D~9VlEJ+PlxQ;Z&EAUOM z=-lSZZFc!q<Cd2!tt{`weJnbo8g%yk6TkfD&0hISN0@!GW=ng6{O9TF=d#Wzp$Py{ C9&bAU diff --git a/assets/textures/Cube_White.png b/assets/textures/Cube_White.png deleted file mode 100644 index 7a051769c27b4638b734fbf8271301b351245541..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 282 zcmeAS@N?(olHy`uVBq!ia0y~yU{C;I4rT@h2A3sW#~2tG7>k44ofy`glX=O&z`&C3 z=<CS9u(6-}Pa-P=0|QThPl)T&r%(U?|G$6#eg+1H#c`{;K<Y|@{DS}g|Igr{wekxC z0|RG)M`SSr1K$A<X3V<Q$;rUL(C+Et7-Hf7c9N%9g96V{iFfts)+|r7f7vude#n@d z>Mh=NP&}pNtpVHV2HptC&)qXO$T3DU3ZG|Y@rl0o);;U#=B1|G^CqXcZ19gc|6tyd zI40i>$Aso^>P=7(=80*Fy6OK<VdLUM4Al=Z3K`WNWXP^*G`=J-hf{1Xi*lf@quMI{ fM)g(I_6#@GSr>-w=HJD@z`)??>gTe~DWM4fd>&!E diff --git a/assets/textures/Cube_Yellow.png b/assets/textures/Cube_Yellow.png deleted file mode 100644 index 0101f31b955bc6fac43581e556bbeea94b9f03a9..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 282 zcmeAS@N?(olHy`uVBq!ia0y~yU{C;I4rT@h2A3sW#~2tG7>k44ofy`glX=O&z`&C3 z=<CS9u(6-}Pa-P=0|QThPl)TW%huBt=p4To%D}*IdDYf!Aax}{e!>6$|7UQ}TKR>6 zfq}EYBeIx*f$ty)Gwzs}{g#1&q21HPF~q|E?IcgJ1_hp@67TBMty!LE|FUU_{E#s@ z)myylpm<8jTLZS!4ZIPOpSx#nkYkKy6h6<);uC%Et$Wtf%}Y(W=S@y?+29{@{=vK@ zaZJ7&jtR}-)SI9n%oEcTb<_W!!p6mi7^)v+6f&wk$dFyrXnaXv4yV{&7Ue))N3~V@ fjq0na?HO*Wvn~wV&A*F*fq}u()z4*}Q$iB}NY`L` diff --git a/assets/textures/Image_Test.png b/assets/textures/Image_Test.png deleted file mode 100644 index 428fbc85ff234275126068eed22a3f0536537b91..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1396 zcmeAS@N?(olHy`uVBq!ia0y~yV9;V<V36lvV_;yISQ78bz`(#*9OUlAu<o49O9lo8 zmUKs7M+SzC{oH>NSs54@I14-?iy0XB4ude`@%$Aj3=FKCo-U3d5$=1ZYZpBB5NNZm zW@F=KVFE!OCLU&1W<Cii83Pj&3xOBOjcsh)JiL4oEG#S>G8_>K8ypnC@W26u(0xB| zWnH~7O@8*R-TSjn&6-*F=kn#t#?zcnxL&)aCbVYt!+5@&-}_cQw5?fLm;FZ5ht0@C z-0Gh;r?g|v<HH-C?>{6KIHmp4v{sg@9fvd2QjI1n_-@JO+wz(72lp|xZ66a4n9E2t zA9^r%%XYOFw_k1XW&72gvv{I$;;((a*}gJorn_xXU%H1SckTlIc`2nEr6c7f*4dpu zHt(FD%E!pksoZlOu)SKlUpL%0W%c_1a{Kg^In@t~bFZDf<|NxeHPLU2UMcz(X<oip zHSvkMayQSW7bXW6b^6yxds;ABWVr~c9B~tqNUUFK`Z80guv|&V^;dO|PVqjST~_Z{ z8RXprBs?u<-nq8&zG^i`VESSiSK~^lbE<r9xAK{aPbhHvd>5#hWH&`a+vpjGPi+00 zCp`wmbu6FG_&%GRD`U4-MKg8@UxQ_eh@X3@_K&iUtsr}!<+y*HGLf0bWbG05ue_2e zyT5aDE)MA0GoihG_pdEx5C8qk%-!_TdHpuVmCgo}PV_C=b3-{RBTBTbH%IDwY0fmC z{z)c0j}|^FG@p50Wh3i`=f91AxRk#BnQ(xEQKaX|s>@Ri<gT<i#w`(Q*)FB~OJ^EW z+_FxyeQOsfH0xNg<s=H<{$WthHecoM+QTU+y&ERJDQg$H_if4L`L8TIHcju|RI#!u zk6mr=+0xs+TR*N%7M<X_{M9PmoTS?)m_GB1%U9n{3p8-;aY+ncY(8(72HWH)^>=sH z6<#U(X<oBqwcB>Xz2(zRoGsbqx<$wR^~VjXxfL$G%@NL3&X{QOM$q&}%V&cr1{|ed zKN?JnlUXTu+j>Tt72m`~Iuh#=t<IcnlkIdfzPfmu+PZnO{6a+7Ii>i7?z*b?TzeLw zEOD;1+H|{>tSS@J^m2!IS3aF3({~<AEIhw6^Wu7Co|9`%oPShc7RY@2?EBn&orli< zGb}$JZ0h>GbC1rkTi-7~kojX0=n&=O94^@9d-1z}ws4MNd7{eUMK(M39{-TJ=-<gR zzlA#=t*g5&nrR*|Z;8-Z^YAq<|LD7{?0hoAl3k?U%U8H-daGC^bGOoQ|GR0sEi`@n zg68#b^l64#FvoO;iMj=UcX-(PWWo~VnLNM0u6%ZiRcF$qC$|^d%sq8;@#MO>B@;zn z$=#RXSiSa3;lC+64nIBdtKmtk&AQYzX+;7rgQv%)yw)n{d2{XT7VZ-dTG&}t4BG-Z z9ta%&!l*Lw`)tAQo{O@NZ0O9bQK;wHAG*K#fuQ4&b-S+rdX>o<|8&#c!1lHB|4&4F zKY9B%bXw}OzT@pF`77_-`J?!DeR!$&X7}Znr@i?a_<Z{6rOO;&e+pXkdY(|sG;h`2 zRr#LJjbxVp{Jvj{D>_4k%QLKh@oJ509DCBwPpbK^cHVxT{<@{6@AU1T)JAGO?C)PX zX-C;6ySUFT&vpDSR+e`EvMzt$^1Vc6jop&3f-h44?)VX$`grzz>62#9SX?~IZY#;W zy{EA5%!mD6`&X_M_$aTdFq{ADf<SA=rzf}STJJWOYhV5H<&7DOU5X8FYa}h;w79b9 z{Tyk*v!>zxnKjJMCag@6W=>Z5*!h05qf4ab{VTrJU*woJ9gkAI#*uS-w%E<!ecK!& zKgss|+B})ho;fFJ_p7Y?_k_|Hc3$yc`^CrPW)5G+iTz)0MSYqX-|fx7z`)??>gTe~ HDWM4f`XPe8 diff --git a/assets/textures/Neera.png b/assets/textures/Neera.png deleted file mode 100644 index 01d777dca4146f5ff1d41da072aa59c744c5cc5b..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 8304 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 diff --git a/assets/textures/Tile_Test.png b/assets/textures/Tile_Test.png deleted file mode 100644 index c113642b3f04ce076c806252f8a3f93109b54b5a..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 460 zcmeAS@N?(olHy`uVBq!ia0y~yU{C;I4mJh`hT^KKFANL}jKx9jP7LeL$-HD>U|>mi z^mSxl*x1kgCy|wbfq}EYBeIx*f$uN~Gak=hk;1^hnCR)^7!u+BbXs=NVFjL+UjE77 z4BqAz&+yZGoRvFe;#n>h;ZN%KTMC;5cXxzeQp)+gT%PmZ<LS4}ME2VRdFg(1KA1lx z@5x!`#XM`~Zg`f?xJ%*gl|}<$cE8%h16<+3!OV-dx+<#O;o<3wXB7>buF13D<%Ay! zd2IKNR`a~LGkN8Y2A&W%{%2Ad9nF<&Opg-!8W&hp>}}*L42W^F+|$Kt5$mRP@6eGo zLP9-SH<O=wowfgcu(ap-H}kSz%ibUUbKXp>-oN{gyuzbPg^gPl|EYVb&!_asrAKUz zm}1LJix01|BMSL<aT`QMPZ1Q>^<!Jt#I-tm;o|hn?LL+riykSYI0V~I>J+=upy#Hm zpmoo<N?;z7sgR-;-wMXqo^1`&I!|odEp*P|v`hXg(JG;;4PO_iC!T+?_GAHDTHz^& z+@rUzZ05PL!q-1Ty6VyTgsJD|Z*D(l%lM6NqtUL$t@Q=|-oMy$EE`(=DpT_r7#J8l MUHx3vIVCg!0N!@H)&Kwi diff --git a/assets/textures/Tile_Test_2.png b/assets/textures/Tile_Test_2.png deleted file mode 100644 index 6193471ba9f044adff524fb9b3afa01ee664c806..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2079 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 FngB(@+Qa|= diff --git a/assets/textures/Tile_Test_3.png b/assets/textures/Tile_Test_3.png deleted file mode 100644 index 5b6bb5cbd73647990fa99bac0513a38665b877c3..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 604 zcmeAS@N?(olHy`uVBq!ia0y~yU{C;I4mJh`hT^KKFANL}jKx9jP7LeL$-HD>U|>mi z^mSxl*x1kgCy|wbfq}EYBeIx*f$tCqGm2_>H83zRe)M#442f`mJJm3c$xy&m+;769 zqSLlcr>0DiQB+k`bziV#$r(Y7;Aaw=+n1c-?bv_)ehvRN))PT0Q`94Of1CBU{+RLU zoXUuKyX{lt)}6Jeo&RUUlxwr4BY3#$Lk;hJo_XmA!{XDf85^r-OI$ed;Ze+zh~VZs zm)~%#S#d7={Jizt@19ojWTal-@OzfT1Mb|7PanwrTlQ1Xz^T`0yW1>DhZL;^H!oDb zxmYR8{L3lf`GPIa|65N;Nsy`E_3i~*<X)ff&DXvs?q$5laP+tDdwG>Kmy$dEuEMXc zs@*BQ`)~(;xv)+^H1|J_Ju?!XFWBbZD!Oj^k%Kum_RX6t!aV!eoxp|(oLsdsc7H|p zte^g`%V!1S?N!Cg?k<;ek`OqgaprN|8q007YuHL`)%lXdRW#csFkd{nnJ-(R+(p3o zicDC{#h*D6Z7aE54m@7e%__;Iujq2#HsMdvZ>GPuQ}?><W8-kuKEG93&N$$t!y#VD z3YK{0aQ%fAF5HnCoQp4Pxgk=*&EDxM5xnxzkr@}ZL`NiKIkAeaiSIiQ<gt@==7zUN zEze$XcxP?6zsux|>8T~6Z|mB(i5@BC%evpWlDnZ>;NlOt^i_u~f19!R38Zb&y}F`z z&IaqU->3gG`~I|77Tr5D;h9`f?yP^(Q5jyB<#vS2#7Mu`6(6c$?Dx9;TLl9H1B0il KpUXO@geCwG!3CKB diff --git a/assets/textures/Tile_Test_4.png b/assets/textures/Tile_Test_4.png deleted file mode 100644 index b5db7d7c8c3da0f2ec9178caf6403d59193535d8..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 246 zcmeAS@N?(olHy`uVBq!ia0y~yU=RRd4mJh`2Kmqb6B!s77>k44ofy`glX=O&z`&C3 z=<CS9u(6-}Pa-P=0|RG)M`SSr1K(i~W;~w1B87p0q1)5NF~q|E=%jAm1_d6Mi<%M# z17$8=lxfs8$+ao6<m#MwWV%E~b<EElZ;sb3<zI6?LNooN|I4S+&3jViBYP~fdZZ87 zzFM&28t;vpT!HGR3z;)s36=;RUwrFNc*SWO=6yE>R~0j>eA%S5;NYxh94`*UE|OWn x_UsJPJ>K)ahc`+W9J+AhMdrVM{6V`I#r}j}t_%A2j)8%J!PC{xWt~$(699i5UE%-$ diff --git a/assets/textures/letters.png b/assets/textures/letters.png deleted file mode 100644 index 7ae52871e931f300419edcd0971ee378ddd0c9f0..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1029 zcmeAS@N?(olHy`uVBq!ia0y~yVDx2RVBqFpV_;zT-FBamfq{XsILO_JVcj{ImkbOH zEa{HEjtmSN`?>!lvNA9*a29w(7BevL9R^{><M}I67#NsmdAc};WH?`)*_|t6$m62F z^1-PhPCZ4{B`s4X2*os=E@J0<wtzEZmWccO*!A)XDgH7a)#v6-zT;L=U0uEX@ynOj ztBq|xeDh$|>fOFtif48A8;Pmw&z$?|!(L_9f88zns%7^kw~GSjRzsAyO9f=^nS1!v zpF4WIABwx!e(aogjDI!b)VV9Z&GWlB!6*6p?ZB6PpO}r#o^KCj=)U#1J}&Oxoka;^ z>u)|y7vKDIj^mWuH)C?|uiq0N?)Wyabf1X5^6$W-t0g+GCU4dIc}eB``Tg>XkB4Ve z-4Z+-x?y(Pp1An`|1#uLH=JBh9<g#|z^`J_-tAwv+~>Wv=t@ZDyYIV8mX#d|S~!26 z{n2ZeCq$n8u#|I({)d}V*0;W}hxk_i33}t&#v6Tdb$OzYEAteabC))_+gu6jPv37h z%Ub%W`<kZG1P%KNZPVM_%H64^dn1%hZ%Y}^pRs*oXKea;kMsW3J|AbT^xn*La+BxY z7RQhu96hZQ_b$_xx^(*ZwNkdw_hp+FuZ#Wra<2UEG8S2j)$XE^Z_UzIpZpg7a`B^d z(H}<=<~R1In%<lzcqaS;zuVW^w79@Ea(DPu(^o4Vo}Tt3h1INf%LnBLZUx5stZkO; zJ-kZhiR32d9nAHGVfHQQ2aGp=y4&$@m(16T$1FCTPjFvzbDl<Z^_73_)sB3XmtBet z9YRH<x(uT&k`3cp76nFpHH>=Q$J|)6x_RF%@k9SY3|H$5);6qR58q>9oU?Zgw@c;i zU5o6h;@#tBOw$s3vqtwe{~6)+5363QJ73)3e<9U&OWmS5nakUJ{<;Ue7gI~mRddkk zGyBTvT0C{v8?{vS0N0b^QuPLDE30^>M9k!uso?qIa&x_G0{@#-(Z*S;b|u`un*A$F zo`2yg$pZTidnWN$^)QOq@6I~^XTdU^`G^1e8YgdWOa9grnDo}EbLk$>o43OC!UALu z#r|!S?+Gn?Hu-0#-qU-jt(8xm)>N%Mu*b6M`QqA`L&v0hTjv!_SmW<?ZuhHMy`?9X zW_~;?Y1`p)@r=Rj^E`_;D*e6r=9T|5_V%Kd#h*Xct?}zLo^@RC&8vw`Lfq$Na$hz6 z?J<>m|NP9}_nA);zFlYK{+s@1=H9nI7VTNLiP_b8QO%#K(;jvkzWxa_tlqe3>zwCv zzB?*an=Q|{^>}&3HMUKq^G@(T+w^1R{S*Gxe;l^W>-n{^=EA$@BEHo%3vStjy)M1S rZ)q$h(JB5jF!}4FhMy7JZ`<E_%yoT(@9+H#3=9mOu6{1-oD!M<nj!V0 diff --git a/assets/tilemap.png b/assets/tilemap.png deleted file mode 100644 index 49ffb3925e40fe5195012608f088696ccd8bd4de..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 4985 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 diff --git a/source/engine/graphics/back/textures/Texture.hpp b/source/engine/graphics/back/textures/Texture.hpp index c58c013..aabf735 100644 --- a/source/engine/graphics/back/textures/Texture.hpp +++ b/source/engine/graphics/back/textures/Texture.hpp @@ -39,7 +39,7 @@ namespace megu { void bind() const; void bind(GLuint) const; - inline GLint width() const {return this->_width;} + inline GLint width() const {return this->_width;} inline GLint height() const {return this->_height;} inline GLuint slot() const {return this->_slot;} diff --git a/source/engine/graphics/front.hpp b/source/engine/graphics/front.hpp new file mode 100644 index 0000000..85ac870 --- /dev/null +++ b/source/engine/graphics/front.hpp @@ -0,0 +1,16 @@ +#pragma once + +#include "front/engine/Engine.hpp" +#include "front/engine/FrameBufferMerger.hpp" +#include "front/engine/Layer.hpp" +#include "front/engine/Renderer.hpp" +#include "front/engine/TextureArray.hpp" + +#include "front/geometry/Quads.hpp" +#include "front/geometry/Plane.hpp" + +#include "front/module/Quad_Module.hpp" + +#include "front/object/Image.hpp" +#include "front/object/Sprite.hpp" +#include "front/object/TileArray.hpp" \ No newline at end of file diff --git a/source/engine/graphics/front/engine/Engine.hpp b/source/engine/graphics/front/engine/Engine.hpp index 38dce9f..5a3b753 100644 --- a/source/engine/graphics/front/engine/Engine.hpp +++ b/source/engine/graphics/front/engine/Engine.hpp @@ -23,10 +23,6 @@ namespace megu { return this->_layers[layer_priority].get()->push<T>(object_priority, object, modul); } - /*void push(Priority layer_priority, Priority object_priority, Renderable & renderable) { - this->_layers[layer_priority].get()->push(object_priority, renderable); - }*/ - void remove(Priority); void remove(const Identifiable &); diff --git a/source/engine/graphics/front/module/Quad_Module.hpp b/source/engine/graphics/front/module/Quad_Module.hpp index 5822de0..5ec48d8 100644 --- a/source/engine/graphics/front/module/Quad_Module.hpp +++ b/source/engine/graphics/front/module/Quad_Module.hpp @@ -2,11 +2,10 @@ #include "Image_Module.hpp" #include "Sprite_Module.hpp" -#include "Text_Module.hpp" #include "TileArray_Module.hpp" namespace megu { - class Quad_Module : public Image_Module, public Sprite_Module, public Text_Module, public TileArray_Module { + class Quad_Module : public Image_Module, public Sprite_Module, public TileArray_Module { // ... }; } \ No newline at end of file diff --git a/source/engine/graphics/front/module/Sprite_Module.cpp b/source/engine/graphics/front/module/Sprite_Module.cpp index e95ba8d..b63d536 100644 --- a/source/engine/graphics/front/module/Sprite_Module.cpp +++ b/source/engine/graphics/front/module/Sprite_Module.cpp @@ -38,7 +38,7 @@ namespace megu { std::vector<std::reference_wrapper<const Texture>>::iterator it = std::find(textures.begin(), textures.end(), image.get().texture()); if(it != textures.end()) { uModels.push_back(image.get().transformation().model()); - uFrames.push_back(image.get().frame()); + uFrames.push_back(image.get().getFrame()); uSizes.push_back({it->get().width(), it->get().height()}); uTextures.push_back(static_cast<GLint>(it - textures.begin())); @@ -63,7 +63,7 @@ namespace megu { uTextures.push_back(static_cast<GLint>(textures.size()-1)); uModels.push_back(image.get().transformation().model()); - uFrames.push_back(image.get().frame()); + uFrames.push_back(image.get().getFrame()); uSizes.push_back({image.get().texture().width(), image.get().texture().height()}); } } diff --git a/source/engine/graphics/front/module/Text_Module.cpp b/source/engine/graphics/front/module/Text_Module.cpp deleted file mode 100644 index 9ccf73b..0000000 --- a/source/engine/graphics/front/module/Text_Module.cpp +++ /dev/null @@ -1,34 +0,0 @@ -#include "Text_Module.hpp" - -#include <engine/graphics/back/cameras/Camera.hpp> -#include <engine/utility/array_generator.hpp> - -namespace megu { - Text_Module::Text_Module() - : _vbo(this->_vao, Text::Layout(), Text::Vertices(), EditMode::STATIC) { - Source vert_source("assets/shaders/Text.vert", Source::Categorie::VERTEX); - this->_program << vert_source; - - Source frag_source("assets/shaders/Text.frag", Source::Categorie::FRAGMENT); - this->_program << frag_source; - - this->_program.link(); - vert_source.release(); - frag_source.release(); - } - - void Text_Module::draw(const Text & text, const Camera & camera, const Window &) const { - this->_vao.bind(); - this->_program.use(); - - text.texture().bind(); - this->_program.setUniform("uSampler", 0); - - glm::vec4 glyphFrame = text['w']; - - this->_program.setUniform("uSize", glm::vec2{text.texture().width(), text.texture().height()}); - this->_program.setUniform("uGlyphFrame", glyphFrame); - - glDrawArrays(Quads::Primitive(), 0, static_cast<GLsizei>(this->_vbo.size())); - } -} \ No newline at end of file diff --git a/source/engine/graphics/front/module/Text_Module.hpp b/source/engine/graphics/front/module/Text_Module.hpp deleted file mode 100644 index 71aacd0..0000000 --- a/source/engine/graphics/front/module/Text_Module.hpp +++ /dev/null @@ -1,24 +0,0 @@ -#pragma once - -#include "Module.hpp" - -#include <engine/graphics/back/buffers/VertexArray.hpp> -#include <engine/graphics/back/buffers/VerticeBuffer.hpp> -#include <engine/graphics/back/shaders/Program.hpp> - -#include <engine/graphics/front/object/Text.hpp> -#include <engine/utility/ref_set.hpp> - -namespace megu { - class Text_Module : public Module<Text> { - public: - Text_Module(); - - virtual void draw(const Text &, const Camera &, const Window &) const override; - - private: - VertexArray _vao; - VerticeBuffer _vbo; - Program _program; - }; -} \ No newline at end of file diff --git a/source/engine/graphics/front/module/TileArray_Module.cpp b/source/engine/graphics/front/module/TileArray_Module.cpp index cdc258f..efb6e0b 100644 --- a/source/engine/graphics/front/module/TileArray_Module.cpp +++ b/source/engine/graphics/front/module/TileArray_Module.cpp @@ -34,15 +34,15 @@ namespace megu { size_t count = 0; - for(size_t x = 0; x < vertexArray.width(); ++x) { - for(size_t y = 0; y < vertexArray.height(); ++y) { + for(size_t x = 0; x < vertexArray.row(); ++x) { + for(size_t y = 0; y < vertexArray.collumn(); ++y) { uOffsets.push_back(glm::translate(glm::mat4(1.f), {x, y, 0.f})); uUvs.push_back(vertexArray.uvs()[x][y]); if(count > 128) { this->_program.setUniform("uOffsets", uOffsets); this->_program.setUniform("uUvs", uUvs); - glDrawArraysInstanced(TileArray::Primitive(), 0, static_cast<GLsizei>(this->_vbo.size()), static_cast<GLsizei>(vertexArray.width() * vertexArray.height())); + glDrawArraysInstanced(TileArray::Primitive(), 0, static_cast<GLsizei>(this->_vbo.size()), static_cast<GLsizei>(vertexArray.row() * vertexArray.collumn())); uOffsets.clear(); uUvs.clear(); @@ -56,7 +56,7 @@ namespace megu { this->_program.setUniform("uOffsets", uOffsets); this->_program.setUniform("uUvs", uUvs); //glPolygonMode(GL_FRONT_AND_BACK, GL_LINE); - glDrawArraysInstanced(TileArray::Primitive(), 0, static_cast<GLsizei>(this->_vbo.size()), static_cast<GLsizei>(vertexArray.width() * vertexArray.height())); + glDrawArraysInstanced(TileArray::Primitive(), 0, static_cast<GLsizei>(this->_vbo.size()), static_cast<GLsizei>(vertexArray.row() * vertexArray.collumn())); //glPolygonMode(GL_FRONT_AND_BACK, GL_FILL); } } diff --git a/source/engine/graphics/front/object/Image.cpp b/source/engine/graphics/front/object/Image.cpp index 1dc1619..0570661 100644 --- a/source/engine/graphics/front/object/Image.cpp +++ b/source/engine/graphics/front/object/Image.cpp @@ -30,12 +30,12 @@ namespace megu { } void Image::load(const TextureBuffer & buffer) { - this->setSize({buffer.width(), buffer.height()}); + this->setSize(static_cast<float>(buffer.width()), static_cast<float>(buffer.height())); this->_texture.store(buffer); } void Image::link(const Texture & texture) { - this->setSize({texture.width(), texture.height()}); + this->setSize(static_cast<float>(texture.width()), static_cast<float>(texture.height())); this->_texture = texture; } } \ No newline at end of file diff --git a/source/engine/graphics/front/object/Image.hpp b/source/engine/graphics/front/object/Image.hpp index 715408d..95c5b6f 100644 --- a/source/engine/graphics/front/object/Image.hpp +++ b/source/engine/graphics/front/object/Image.hpp @@ -19,26 +19,24 @@ namespace megu { Image(const Image &) = default; Image operator=(const Image &); Image operator=(const Image &&); - ~Image() = default; + virtual ~Image() = default; inline Vec2 getPosition() const {return Vec2(this->_transformation.x(), this->_transformation.y());} inline Vec2 getOrigine() const {return Vec2(this->_transformation.origine().x, this->_transformation.origine().y);} inline Vec2 getSize() const {return Vec2(this->_transformation.scaling().x, this->_transformation.scaling().y);} inline float getRotation() const {return this->_transformation.roll();} - inline float getLayer() const {return this->_transformation.z();} inline const Texture & texture() const {return this->_texture;} inline const Transformable & transformation() const {return this->_transformation;} - inline void setPosition(const Vec2 & pos) {this->_transformation.setPosition(pos.x, pos.y);} - inline void setOrigine(const Vec2 & pos) {this->_transformation.setOrigine(pos.x, pos.y);} - inline void setSize(const Vec2 & size) {this->_transformation.setScaling(size.x, size.y);} + inline void setPosition(float x, float y) {this->_transformation.setPosition(x, y);} + inline void setOrigine(float x, float y) {this->_transformation.setOrigine(x, y);} + inline void setSize(float w, float h) {this->_transformation.setScaling(w, h);} inline void setRotation(float a) {this->_transformation.setRotation(a, Transformable::Axis::Z);} - inline void setLayer(float l) {this->_transformation.setZ(l);} - inline void move(const Vec2 & pos) {this->_transformation.move({pos.x, pos.y, 0.f});} - inline void scale(const Vec2 & size) {this->_transformation.scale({size.x, size.y, 0.f});} - inline void rotate(float a) {this->_transformation.rotate(a, Transformable::Axis::Z);} + inline void move(float x, float y) {this->_transformation.move({x, y, 0.f});} + inline void scale(float w, float h) {this->_transformation.scale({w, h, 0.f});} + inline void rotate(float a) {this->_transformation.rotate(a, Transformable::Axis::Z);} void load(const std::filesystem::path &, bool = false); void load(const TextureBuffer &); diff --git a/source/engine/graphics/front/object/Sprite.cpp b/source/engine/graphics/front/object/Sprite.cpp index d9dd26c..ef85ab7 100644 --- a/source/engine/graphics/front/object/Sprite.cpp +++ b/source/engine/graphics/front/object/Sprite.cpp @@ -1,6 +1,9 @@ #include "Sprite.hpp" namespace megu { + Sprite::Sprite() + : _frame(0, 0, 0, 0) {} + Sprite::Sprite(const std::filesystem::path & path, bool flip) : _frame(0, 0, 0, 0) { this->load(path, flip); @@ -18,12 +21,12 @@ namespace megu { } void Sprite::load(const TextureBuffer & buffer) { - this->setSize({buffer.width(), buffer.height()}); + this->setSize(static_cast<float>(buffer.width()), static_cast<float>(buffer.height())); this->_texture.store(buffer); } void Sprite::link(const Texture & texture) { - this->setSize({texture.width(), texture.height()}); + this->setSize(static_cast<float>(texture.width()), static_cast<float>(texture.height())); this->_texture = texture; } } \ No newline at end of file diff --git a/source/engine/graphics/front/object/Sprite.hpp b/source/engine/graphics/front/object/Sprite.hpp index a0b5b23..777eef3 100644 --- a/source/engine/graphics/front/object/Sprite.hpp +++ b/source/engine/graphics/front/object/Sprite.hpp @@ -13,34 +13,31 @@ namespace megu { public: using Frame = glm::vec4; + Sprite(); Sprite(const std::filesystem::path &, bool = true); Sprite(const std::filesystem::path &, const Frame &, bool = true); + virtual ~Sprite() = default; - inline void setFrame(const Frame & frame) {this->_frame = frame;} + inline const Vec2 & getPosition() const {return Vec2(this->_transformation.x(), this->_transformation.y());} + inline const Vec2 & getOrigine() const {return Vec2(this->_transformation.origine().x, this->_transformation.origine().y);} + inline const Vec2 & getSize() const {return Vec2(this->_transformation.scaling().x, this->_transformation.scaling().y);} + inline const Frame & getFrame() const {return this->_frame;} + inline float getrotation() const {return this->_transformation.rotation().z;} - inline void setPosition(const Vec2 & pos) {this->_transformation.setPosition(pos.x, pos.y);} - inline void setOrigine(const Vec2 & pos) {this->_transformation.setOrigine(pos.x, pos.y);} - inline void setSize(const Vec2 & size) {this->_transformation.setScaling(size.x, size.y);} + inline const Texture & texture() const {return this->_texture;} + inline const Transformable & transformation() const {return this->_transformation;} + + inline void setPosition(float x, float y) {this->_transformation.setPosition(x, y);} + inline void setOrigine(float x, float y) {this->_transformation.setOrigine(x, y);} + inline void setSize(float w, float h) {this->_transformation.setScaling(w, h);} inline void setRotation(float a) {this->_transformation.setRotation(a, Transformable::Axis::Z);} + inline void setFrame(const Frame & frame) {this->_frame = frame;} - inline const Vec3 & position() const {return this->_transformation.position();} - inline const Vec3 & origine() const {return this->_transformation.origine();} - inline const Vec3 & rotation() const {return this->_transformation.rotation();} - inline const Vec2 & size() const {return Vec2(this->_transformation.scaling().x, this->_transformation.scaling().y);} + inline void setFrame(float x, float y, float w, float h) {this->_frame = Frame(x, y, w ,h);} - inline float x() const {return this->_transformation.x();} - inline float y() const {return this->_transformation.y();} - inline float z() const {return this->_transformation.z();} - - inline void move(const Vec2 & pos) {this->_transformation.move({pos.x, pos.y, 0.f});} - inline void scale(const Vec2 & size) {this->_transformation.scale({size.x, size.y, 0.f});} - inline void rotate(float a) {this->_transformation.rotate(a, Transformable::Axis::Z);} - - inline void setSize(float w, float h) {this->_transformation.setScaling(w, h);} - - inline const Frame & frame() const {return this->_frame;} - inline const Texture & texture() const {return this->_texture;} - inline const Transformable & transformation() const {return this->_transformation;} + inline void move(float x, float y) {this->_transformation.move({x, y, 0.f});} + inline void scale(float w, float h) {this->_transformation.scale({w, h, 0.f});} + inline void rotate(float a) {this->_transformation.rotate(a, Transformable::Axis::Z);} void load(const std::filesystem::path &, bool = false); void load(const TextureBuffer &); diff --git a/source/engine/graphics/front/object/Text.cpp b/source/engine/graphics/front/object/Text.cpp deleted file mode 100644 index 6b16ea6..0000000 --- a/source/engine/graphics/front/object/Text.cpp +++ /dev/null @@ -1,28 +0,0 @@ -#include "Text.hpp" - -#include <exception> -#include <iostream> - -namespace megu { - Text::Text(const std::string & text) - : _text(text) {} - - Text::Text(const Text & src) - : _text(src._text), _characters(src._characters), _transformation(src._transformation) {} - - Text & Text::operator=(const Text & src) { - this->_text = src._text; - this->_characters = src._characters; - this->_transformation = src._transformation; - return *this; - } - - void Text::loadFont(const std::filesystem::path & file, bool smoothing) { - if(!std::filesystem::exists(file) || std::filesystem::is_directory(file)) { - throw std::runtime_error("Cannot load font file" + file.string() + "."); - } - - TextureBuffer buffer(file); - this->_texture.store(buffer); - } -} diff --git a/source/engine/graphics/front/object/Text.hpp b/source/engine/graphics/front/object/Text.hpp deleted file mode 100644 index 7fd1df3..0000000 --- a/source/engine/graphics/front/object/Text.hpp +++ /dev/null @@ -1,60 +0,0 @@ -#pragma once - -#include <utility/Identifiable.hpp> - -#include <string> -#include <filesystem> -#include <map> - -#include <engine/graphics/back/geometry/Transformable.hpp> -#include <engine/graphics/back/textures/Texture.hpp> -#include <engine/graphics/front/geometry/Quads.hpp> -#include <engine/utility/type.hpp> - -namespace megu { - class Text : public Quads { - public: - using Frame = Vec4Int; - using CharacterMap = std::map<unsigned char, Frame>; - - Text(const std::string & = ""); - Text(const Text &); - Text & operator=(const Text &); - ~Text() = default; - - inline Vec2 getPosition() const {return Vec2(this->_transformation.x(), this->_transformation.y());} - inline Vec2 getOrigine() const {return Vec2(this->_transformation.origine().x, this->_transformation.origine().y);} - inline Vec2 getSize() const {return Vec2(this->_transformation.scaling().x, this->_transformation.scaling().y);} - inline float getRotation() const {return this->_transformation.roll();} - inline float getLayer() const {return this->_transformation.z();} - - inline const Texture & texture() const {return this->_texture;} - inline const Transformable & transformation() const {return this->_transformation;} - inline const std::string & text() const {return this->_text;} - inline const CharacterMap & characters() const {return this->_characters;} - - inline void setPosition(const Vec2 & pos) {this->_transformation.setPosition(pos.x, pos.y);} - inline void setOrigine(const Vec2 & pos) {this->_transformation.setOrigine(pos.x, pos.y);} - inline void setSize(const Vec2 & size) {this->_transformation.setScaling(size.x, size.y);} - inline void setRotation(float a) {this->_transformation.setRotation(a, Transformable::Axis::Z);} - inline void setLayer(float l) {this->_transformation.setZ(l);} - - inline void move(const Vec2 & pos) {this->_transformation.move({pos.x, pos.y, 0.f});} - inline void scale(const Vec2 & size) {this->_transformation.scale({size.x, size.y, 0.f});} - inline void rotate(float a) {this->_transformation.rotate(a, Transformable::Axis::Z);} - - inline void addGlyph(unsigned char c, Frame f) {this->_characters.insert(std::pair<unsigned char, Frame>(c, f));} - inline void removeGlyph(unsigned char c) {this->_characters.erase(c);} - inline void clearGlyph() {return this->_characters.clear();} - - void loadFont(const std::filesystem::path &, bool = true); - - inline const Frame & operator[](unsigned char c) const {return this->_characters.at(c);} - - private: - std::string _text; - Texture _texture; - CharacterMap _characters; - Transformable _transformation; - }; -} \ No newline at end of file diff --git a/source/engine/graphics/front/object/TileArray.cpp b/source/engine/graphics/front/object/TileArray.cpp index 78953d5..e54216a 100644 --- a/source/engine/graphics/front/object/TileArray.cpp +++ b/source/engine/graphics/front/object/TileArray.cpp @@ -3,17 +3,17 @@ #include <iostream> namespace megu { - TileArray::TileArray(const std::filesystem::path & path, size_t width, size_t height, float tileSize, size_t lenght) - : _width(width), _height(height), _tileSize(tileSize) { + TileArray::TileArray(const std::filesystem::path & path, size_t row, size_t col, float tileSize, size_t lenght) + : _row(row), _col(col), _tileSize(tileSize) { megu::TextureBuffer buffer(path); this->_texture.store(buffer); float twidth = static_cast<float>(this->_texture.width()); float theight = static_cast<float>(this->_texture.height()); - for(size_t x = 0; x < width; ++x) { + for(size_t x = 0; x < row; ++x) { std::vector<glm::vec4> rows; - for(size_t y = 0; y < height; ++y) { + for(size_t y = 0; y < col; ++y) { rows.push_back({0.f, this->_texture.height() - lenght, lenght, lenght}); } this->_uvs.push_back(rows); diff --git a/source/engine/graphics/front/object/TileArray.hpp b/source/engine/graphics/front/object/TileArray.hpp index b8862f5..e90c922 100644 --- a/source/engine/graphics/front/object/TileArray.hpp +++ b/source/engine/graphics/front/object/TileArray.hpp @@ -13,35 +13,45 @@ namespace megu { class TileArray : public Quads { public: + TileArray() = delete; TileArray(const std::filesystem::path &, size_t, size_t, float, size_t); + virtual ~TileArray() = default; - inline void setPosition(const Vec2 & pos) {this->_transformation.setPosition(pos.x, pos.y);} - inline void setOrigine(const Vec2 & pos) {this->_transformation.setOrigine(pos.x, pos.y);} - inline void setSize(const Vec2 & size) {this->_transformation.setScaling(size.x, size.y);} + inline Vec2 getPosition() const {return Vec2(this->_transformation.x(), this->_transformation.y());} + inline Vec2 getOrigine() const {return Vec2(this->_transformation.origine().x, this->_transformation.origine().y);} + inline Vec2 getSize() const {return Vec2(this->_transformation.scaling().x, this->_transformation.scaling().y);} + inline float getrotation() const {return this->_transformation.rotation().z;} + + inline void setPosition(float x, float y) {this->_transformation.setPosition(x, y);} + inline void setOrigine(float x, float y) {this->_transformation.setOrigine(x, y);} + inline void setSize(float w, float h) {this->_transformation.setScaling(w, h);} inline void setRotation(float a) {this->_transformation.setRotation(a, Transformable::Axis::Z);} inline void setLayer(float l) {this->_transformation.setZ(l);} - inline void move(const Vec2 & pos) {this->_transformation.move({pos.x, pos.y, 0.f});} - inline void scale(const Vec2 & size) {this->_transformation.scale({size.x, size.y, 0.f});} - inline void rotate(float a) {this->_transformation.rotate(a, Transformable::Axis::Z);} + inline void move(float x, float y) {this->_transformation.move(x, y);} + inline void scale(float w, float h) {this->_transformation.scale(w, h);} + inline void rotate(float a) {this->_transformation.rotate(a, Transformable::Axis::Z);} - inline size_t width() const {return this->_width;} - inline size_t height() const {return this->_height;} - inline float getTileSize() const {return this->_tileSize;} - inline const Vec3 & getSize() const {return this->_transformation.scaling();} + inline size_t row() const {return this->_row;} + inline size_t collumn() const {return this->_col;} + inline float tileSize() const {return this->_tileSize;} inline void setUv(size_t x, size_t y, const glm::vec4 & uv) {this->_uvs[y][x] = uv;} + inline const glm::vec4 & getUv(size_t x, size_t y) const {return this->_uvs[y][x];} inline const Transformable & transformation() const {return this->_transformation;} inline const Texture & texture() const {return this->_texture;} + inline GLint getTextureWidth() const {return this->_texture.width();} + inline GLint getTextureHeight() const {return this->_texture.height();} + inline const std::vector<std::vector<glm::vec4>> & uvs() const {return this->_uvs;} std::vector<glm::vec4> & operator[](size_t index) {return this->_uvs[index];} private: Transformable _transformation; Texture _texture; - size_t _width, _height; + size_t _row, _col; float _tileSize; std::vector<std::vector<glm::vec4>> _uvs; }; diff --git a/source/engine/physic/back/Position.cpp b/source/engine/physic/back/Position.cpp index 5409292..a823329 100644 --- a/source/engine/physic/back/Position.cpp +++ b/source/engine/physic/back/Position.cpp @@ -18,10 +18,6 @@ namespace megu { return *this; } - void Position::setPosition(const glm::vec3 & position) { - this->_position = position; - } - void Position::move(const glm::vec3 & direction) { this->_position.x += direction.x; this->_position.y += direction.y; diff --git a/source/engine/physic/back/Position.hpp b/source/engine/physic/back/Position.hpp index 334a968..fef03d3 100644 --- a/source/engine/physic/back/Position.hpp +++ b/source/engine/physic/back/Position.hpp @@ -10,15 +10,14 @@ namespace megu { Position(const glm::vec3 &); Position(const Position &); Position operator=(const Position &); + virtual ~Position() = default; inline float x() const {return this->_position.x;} inline float y() const {return this->_position.y;} inline float z() const {return this->_position.z;} - inline const glm::vec3 & position() const {return this->_position;} - - void setPosition(const glm::vec3 &); - inline void setPosition(float x, float y, float z) {this->setPosition({x, y, z});} + inline void set(const glm::vec3 & position) {this->_position = position;} + inline void set(float x, float y, float z) {this->set({x, y, z});} void move(const glm::vec3 &); inline void move(float x, float y, float z) {this->move({x, y, z});} diff --git a/source/engine/physic/back/SquareBox.cpp b/source/engine/physic/back/SquareBox.cpp index 13927a5..58c8629 100644 --- a/source/engine/physic/back/SquareBox.cpp +++ b/source/engine/physic/back/SquareBox.cpp @@ -15,27 +15,13 @@ namespace megu { return *this; } - Cube SquareBox::asCube() const { - return { - this->_position, - this->_position + Position(this->_dimension.x, 0.f, 0.f), - this->_position + Position(0.f, 0.f, this->_dimension.z), - this->_position + Position(this->_dimension.x, 0.f, this->_dimension.z), - - this->_position + Position(0.f, this->_dimension.y, 0.f), - this->_position + Position(this->_dimension.x, this->_dimension.y, 0.f), - this->_position + Position(0.f, this->_dimension.y, this->_dimension.z), - this->_position + Position(this->_dimension.x, this->_dimension.y, this->_dimension.z) - }; - } - void SquareBox::move(const Direction & direction) { this->_position.move(direction.x(), direction.y(), direction.z()); } bool SquareBox::intersect(const SquareBox & squareBox) const { - const Position & a = squareBox.position(); - const Dimension & as = squareBox.dimension(); + const Position & a = squareBox._position; + const Dimension & as = squareBox._dimension; const Position & b = this->_position; const Dimension & bs = this->_dimension; @@ -57,4 +43,8 @@ namespace megu { bool SquareBox::operator!=(const SquareBox & squareBox) const { return !(*this == squareBox); } + + bool SquareBox::operator|(const SquareBox & squareBox) const { + return this->intersect(squareBox); + } } \ No newline at end of file diff --git a/source/engine/physic/back/SquareBox.hpp b/source/engine/physic/back/SquareBox.hpp index 47afd29..5f16f4d 100644 --- a/source/engine/physic/back/SquareBox.hpp +++ b/source/engine/physic/back/SquareBox.hpp @@ -5,8 +5,7 @@ #include "Position.hpp" namespace megu { - using Dimension = glm::vec3; - using Cube = std::array<Position, 8>; + using Dimension = glm::vec3; class SquareBox { public: @@ -15,23 +14,31 @@ namespace megu { SquareBox(const SquareBox &); SquareBox operator=(const SquareBox &); - inline const Position & position() const {return this->_position;} - inline const Dimension & dimension() const {return this->_dimension;} + inline const Position & getPosition() const {return this->_position;} + inline const Dimension & getDimension() const {return this->_dimension;} + + inline float x() const {return this->_position.x();} + inline float y() const {return this->_position.y();} + inline float z() const {return this->_position.z();} inline float width() const {return this->_dimension.x;} inline float height() const {return this->_dimension.y;} inline float depth() const {return this->_dimension.z;} inline void setPosition(const Position & position) {this->_position = position;} - inline void setDimension(const Dimension & dimension) {this->_dimension = dimension;} + inline void setPosition(float x, float y, float z = 0.f) {this->_position = Position(x, y, z);} - Cube asCube() const; + inline void setDimension(const Dimension & dimension) {this->_dimension = dimension;} + inline void setDimension(float x, float y, float z = 0.f) {this->_dimension = Dimension(x, y, z);} void move(const Direction &); + inline void move(float x, float y, float z = 0.f) {this->move(Direction(x, y, z));} + bool intersect(const SquareBox &) const; bool operator==(const SquareBox &) const; bool operator!=(const SquareBox &) const; + bool operator|(const SquareBox &) const; private: Position _position; diff --git a/source/engine/physic/front/engine/Engine.cpp b/source/engine/physic/front/engine/Engine.cpp index 2e39c9f..7458412 100644 --- a/source/engine/physic/front/engine/Engine.cpp +++ b/source/engine/physic/front/engine/Engine.cpp @@ -48,24 +48,24 @@ namespace megu { void PhysicEngine::step(double delta, Priority priority) { for(auto & source : this->_dynamic[priority]) { - source.get().update_physic(delta); + source.get().updatePhysic(delta); for(auto & target : this->_statics[priority]) { - if(source.get().isColliding(target)) { + if(source.get() | target) { this->_collisions.insert(Collision(source, target)); this->_collisions.insert(Collision(target, source)); } } for(auto & target : this->_dynamic[priority]) { - if(source.get().isColliding(target)) { + if(source.get() | target) { this->_collisions.insert(Collision(source, target)); } } } } - std::optional<SquareBox> PhysicEngine::makeCollision(const SquareBox & box, Priority priority) const { + std::optional<SquareBox> PhysicEngine::checkCollision(const SquareBox & box, Priority priority) const { for(const auto & source : this->_statics.at(priority)) { auto obox = source.get().isColliding(box); if(obox.has_value()) { diff --git a/source/engine/physic/front/engine/Engine.hpp b/source/engine/physic/front/engine/Engine.hpp index 7c8304d..51d152f 100644 --- a/source/engine/physic/front/engine/Engine.hpp +++ b/source/engine/physic/front/engine/Engine.hpp @@ -28,7 +28,7 @@ namespace megu { void step(double); void step(double, Priority); - std::optional<SquareBox> makeCollision(const SquareBox &, Priority) const; + std::optional<SquareBox> checkCollision(const SquareBox &, Priority) const; std::optional<std::reference_wrapper<const Tangible>> get(const Identifiable &) const; diff --git a/source/engine/physic/front/object/Tangible.cpp b/source/engine/physic/front/object/Tangible.cpp index 58708a0..bb258d7 100644 --- a/source/engine/physic/front/object/Tangible.cpp +++ b/source/engine/physic/front/object/Tangible.cpp @@ -4,6 +4,9 @@ #include <iostream> namespace megu { + Tangible::Tangible() + : _box({0, 0, 0}, {1, 1, 1}) {} + Tangible::Tangible(const Position & position, const Dimension & dimension) : _box(position, dimension) {} @@ -25,7 +28,11 @@ namespace megu { return this->_box == entity._box; } - /*bool Tangible::operator!=(const Tangible & entity) const { - return !(*this == entity); - }*/ + std::optional<SquareBox> Tangible::operator|(const Tangible & tangible) const { + return this->isColliding(tangible); + } + + std::optional<SquareBox> Tangible::operator|(const SquareBox & box) const { + return this->isColliding(box); + } } \ No newline at end of file diff --git a/source/engine/physic/front/object/Tangible.hpp b/source/engine/physic/front/object/Tangible.hpp index 9b98a61..a85b5ff 100644 --- a/source/engine/physic/front/object/Tangible.hpp +++ b/source/engine/physic/front/object/Tangible.hpp @@ -10,18 +10,20 @@ namespace megu { class Tangible : virtual public Identifiable { public: - Tangible() = delete; + Tangible(); Tangible(const Position &, const Dimension &); virtual ~Tangible() = default; - inline const Position & getPosition() const {return this->_box.position();} + inline const Position & getPosition() const {return this->_box.getPosition();} inline const SquareBox & getBox() const {return this->_box;} - inline float x() const {return this->_box.position().x();} - inline float y() const {return this->_box.position().y();} - inline float z() const {return this->_box.position().z();} + inline float x() const {return this->_box.getPosition().x();} + inline float y() const {return this->_box.getPosition().y();} + inline float z() const {return this->_box.getPosition().z();} + + inline void setPosition(float x, float y, float z = 0.f) {this->_box.setPosition(x, y, z);} + inline void setDimension(float x, float y, float z = 0.f) {this->_box.setDimension(x, y, z);} - inline void setPosition(const Position & position) {this->_box.setPosition(position);} inline void move(const Direction & direction) {this->_box.move(direction);} inline void move(float x, float y, float z = 0.f) {return this->move(Direction(x, y, z));} @@ -29,6 +31,8 @@ namespace megu { virtual std::optional<SquareBox> isColliding(const SquareBox &) const; bool operator==(const Tangible &) const; + std::optional<SquareBox> operator|(const Tangible &) const; + std::optional<SquareBox> operator|(const SquareBox &) const; using UpdateLambda = std::function<void(double)>; diff --git a/source/engine/physic/front/object/TangibleMovable.cpp b/source/engine/physic/front/object/TangibleMovable.cpp index e791729..186a684 100644 --- a/source/engine/physic/front/object/TangibleMovable.cpp +++ b/source/engine/physic/front/object/TangibleMovable.cpp @@ -5,6 +5,6 @@ namespace megu { : Tangible(position, dimension) {} void TangibleMovable::update(double delta) { - this->update_physic(delta); + this->updatePhysic(delta); } } \ No newline at end of file diff --git a/source/engine/physic/front/object/TangibleMovable.hpp b/source/engine/physic/front/object/TangibleMovable.hpp index 2d44fad..6bf1655 100644 --- a/source/engine/physic/front/object/TangibleMovable.hpp +++ b/source/engine/physic/front/object/TangibleMovable.hpp @@ -9,7 +9,7 @@ namespace megu { TangibleMovable(const Position &, const Dimension &); virtual ~TangibleMovable() = default; - virtual void update_physic(double) = 0; + virtual void updatePhysic(double) = 0; protected: void update(double) override; diff --git a/source/engine/physic/front/object/TangibleStatic.cpp b/source/engine/physic/front/object/TangibleStatic.cpp index 244d16c..3c4de7e 100644 --- a/source/engine/physic/front/object/TangibleStatic.cpp +++ b/source/engine/physic/front/object/TangibleStatic.cpp @@ -5,6 +5,6 @@ namespace megu { : Tangible(position, dimension) {} void TangibleStatic::update(double delta) { - this->update_physic(delta); + this->updatePhysic(delta); } } \ No newline at end of file diff --git a/source/engine/physic/front/object/TangibleStatic.hpp b/source/engine/physic/front/object/TangibleStatic.hpp index 2d4d335..711dec2 100644 --- a/source/engine/physic/front/object/TangibleStatic.hpp +++ b/source/engine/physic/front/object/TangibleStatic.hpp @@ -9,7 +9,7 @@ namespace megu { TangibleStatic(const Position &, const Dimension &); virtual ~TangibleStatic() = default; - virtual void update_physic(double) const = 0; + virtual void updatePhysic(double) const = 0; protected: void update(double) override; diff --git a/source/game/Game.cpp b/source/game/Game.cpp index e002268..5231a27 100644 --- a/source/game/Game.cpp +++ b/source/game/Game.cpp @@ -8,12 +8,9 @@ #include <game/back/object/Level.hpp> #include <game/back/object/Terrain.hpp> #include <game/back/object/tile/TileSolide.hpp> -#include <game/object/Test.hpp> #include <game/front/Layer.hpp> - #include <game/front/object/Klinck.hpp> - #include <game/utility/FrameCouter.hpp> namespace megu::game { @@ -54,8 +51,8 @@ namespace megu::game { terrain.setTileEvent(2, new TileSolide(32.f, physic::TERRAIN)); for(size_t i = 0; i < 11; ++i) { - terrain.graphic().addAnimation(i, 9, {18, 19, 20, 21}); - terrain.graphic().addAnimation(i, 10, {24, 25, 26, 27}); + terrain.graphic().pushAnimation(i, 9, {18, 19, 20, 21}); + terrain.graphic().pushAnimation(i, 10, {24, 25, 26, 27}); } for(size_t i = 0; i < 11; ++i) { @@ -63,7 +60,7 @@ namespace megu::game { terrain.setValue(j, i, layer0.at(i*11 + j)); } } - + terrain.getGraphicComponent()->setLayerPriority(graphic::TERRAIN); terrain.getPhysicComponent()->setLayer(physic::TERRAIN); diff --git a/source/game/back/GameObject.cpp b/source/game/back/GameObject.cpp new file mode 100644 index 0000000..beea43f --- /dev/null +++ b/source/game/back/GameObject.cpp @@ -0,0 +1,6 @@ +#include "GameObject.hpp" + +namespace megu::game { + GameProps::GameProps(kernel::Prop * props) + : _parent(props) {} +} \ No newline at end of file diff --git a/source/game/back/GameObject.hpp b/source/game/back/GameObject.hpp index 72aa6e9..dfa5954 100644 --- a/source/game/back/GameObject.hpp +++ b/source/game/back/GameObject.hpp @@ -21,13 +21,14 @@ namespace megu::game { class GameProps : public GameObject, public GameEvent { public: - GameProps(kernel::Prop * prop) - : _props(prop) {} + GameProps() = delete; + GameProps(kernel::Prop *); + virtual ~GameProps() = default; - inline kernel::Prop * get() {return this->_props;} + inline kernel::Prop * parent() const {return this->_parent;} private: - kernel::Prop * _props; + kernel::Prop * _parent; }; } \ No newline at end of file diff --git a/source/game/back/object/Damagable.cpp b/source/game/back/object/Damagable.cpp new file mode 100644 index 0000000..cea8177 --- /dev/null +++ b/source/game/back/object/Damagable.cpp @@ -0,0 +1,18 @@ +#include "Damagable.hpp" + +namespace megu::game { + Damagable::Damagable(uint32_t life, bool dead) + : _life(life), _dead(dead) {} + + void Damagable::damage(uint32_t damage) { + this->_life -= damage; + if(this->_life <= 0) { + this->_life = 0; + this->_dead = true; + } + } + + void Damagable::heal(uint32_t heal) { + this->_life += heal; + } +} \ No newline at end of file diff --git a/source/game/back/object/Damagable.hpp b/source/game/back/object/Damagable.hpp new file mode 100644 index 0000000..3f0bead --- /dev/null +++ b/source/game/back/object/Damagable.hpp @@ -0,0 +1,27 @@ +#pragma once + +#include <stdint.h> + +namespace megu::game { + class Damagable { + public: + Damagable(uint32_t = 0, bool = false); + virtual ~Damagable() = default; + + inline uint32_t getLife() const {return this->_life;} + inline bool isAlive() const {return !this->_dead;} + inline bool isDead() const {return this->_dead;} + + inline void setLife(uint32_t l) {this->_life = l;} + inline void setDead(bool s) {this->_dead = s;} + + inline void kill() {this->_dead = true;} + + void damage(uint32_t); + void heal(uint32_t); + + private: + uint32_t _life; + bool _dead; + }; +} \ No newline at end of file diff --git a/source/game/back/object/Enemy.cpp b/source/game/back/object/Enemy.cpp index 5e93f2b..b684689 100644 --- a/source/game/back/object/Enemy.cpp +++ b/source/game/back/object/Enemy.cpp @@ -1,33 +1,35 @@ #include "Enemy.hpp" #include <kernel/front/Kernel.hpp> +#include <game/back/object/Level.hpp> + +#include <game/front/Stats.hpp> namespace megu::game { Enemy::Enemy(float x, float y, float w, float h, std::filesystem::path & path) : kernel::PropsDynamic(this->_sprite, this->_movable), GameProps(this), _sprite(path), _movable(x, y, w, h) { - this->_sprite.setPosition({x, y}); - } - - void Enemy::move(float x, float y) { - this->_movable.move(x, y); - this->_movable.move(x, y); + this->_sprite.setPosition(x, y); } void Enemy::setup(kernel::Kernel & kernel, Level & level) { - this->_sprite.setFrame({0.f, 0.f, 51.f, 98.f}); - this->_sprite.setSize({51.f, 98.f}); + this->_sprite.setFrame(0.f, 0.f, 51.f, 98.f); + this->_sprite.setSize(51.f, 98.f); this->_movable.setCollideLambda([this, &level](kernel::Kernel &, kernel::PhysicEngine &, Identifiable & id, kernel::Physical<kernel::PhysicEngine> & comp, double) { auto object = level.get(id); if(object.has_value()) { auto event = object->get().on(); if(event.has_value()) { - this->on(*object->get().get(), event.value()); + this->on(*object->get().parent(), event.value()); } } }); } + void Enemy::destroy(kernel::Kernel & kernel, Level & level) { + + } + void Enemy::on(const kernel::Prop &, const Event & event) { if(event & Event::Type::SOLID) { this->onSolide(event); @@ -40,17 +42,13 @@ namespace megu::game { std::optional<Event> Enemy::on() const { Event b(Event::DAMAGE); - b.set(0, 10); + b.set(Stats::ATK, 10); return b; } - void Enemy::destroy(kernel::Kernel & kernel, Level & level) { - - } - void Enemy::apply(kernel::Kernel & kernel) { - kernel.add(this); + kernel.push(*this); } void Enemy::onDamage(const Event &) { diff --git a/source/game/back/object/Enemy.hpp b/source/game/back/object/Enemy.hpp index 89bacf9..9dc862c 100644 --- a/source/game/back/object/Enemy.hpp +++ b/source/game/back/object/Enemy.hpp @@ -2,23 +2,22 @@ #include <kernel/front/props/PropsDynamic.hpp> #include <game/back/GameObject.hpp> -#include <game/back/object/Level.hpp> namespace megu::game { class Enemy : public kernel::PropsDynamic, public GameProps { public: Enemy(float, float, float, float, std::filesystem::path &); - void move(float, float); - void setup(kernel::Kernel &, Level &) override; void destroy(kernel::Kernel &, Level &) override; - void apply(kernel::Kernel &) override; + void on(const kernel::Prop &, const Event &) override; std::optional<Event> on() const override; + void apply(kernel::Kernel &) override; + void onDamage(const Event &); void onSolide(const Event &); diff --git a/source/game/back/object/Level.cpp b/source/game/back/object/Level.cpp index 5fbbcfd..a36db16 100644 --- a/source/game/back/object/Level.cpp +++ b/source/game/back/object/Level.cpp @@ -14,12 +14,12 @@ namespace megu::game { } void Level::add(GameProps * prop) { - this->_objecs.insert({prop->get()->id(), prop}); + this->_objecs.insert({prop->parent()->id(), prop}); } void Level::apply(kernel::Kernel & kernel) { for(auto & [id, prop] : this->_objecs) { - kernel.add(prop->get()); + kernel.push(*prop->parent()); } } @@ -29,7 +29,7 @@ namespace megu::game { void Level::destroy(kernel::Kernel & kernel, Level & level) { for(auto & [id, prop] : this->_objecs) { - kernel.remove(prop->get()); + kernel.remove(*prop->parent()); } } } \ No newline at end of file diff --git a/source/game/back/object/Player.cpp b/source/game/back/object/Player.cpp index f78ddf3..464b931 100644 --- a/source/game/back/object/Player.cpp +++ b/source/game/back/object/Player.cpp @@ -6,13 +6,13 @@ namespace megu::game { : kernel::PropsPlayable(this->_sprite, this->_movable), GameProps(this), _sprite(path), _movable(x, y, w, h) {} void Player::move(float x, float y) { - this->_sprite.move({x, y}); + this->_sprite.move(x, y); this->_movable.move(x, y); } void Player::setPosition(float x, float y) { - this->_sprite.setPosition({x, y}); - this->_movable.setPosition({x, y}); + this->_sprite.setPosition(x, y); + this->_movable.setPosition(x, y); } const Position & Player::getPosition() const { @@ -26,7 +26,7 @@ namespace megu::game { if(object.has_value()) { auto event = object.value().get().on(); if(event.has_value()) { - this->on(*object.value().get().get(), event.value()); + this->on(*object.value().get().parent(), event.value()); } } }); @@ -53,6 +53,6 @@ namespace megu::game { } void Player::apply(kernel::Kernel & kernel) { - kernel.add(this); + kernel.push(*this); } } \ No newline at end of file diff --git a/source/game/back/object/Player.hpp b/source/game/back/object/Player.hpp index 9859acf..6823240 100644 --- a/source/game/back/object/Player.hpp +++ b/source/game/back/object/Player.hpp @@ -9,17 +9,16 @@ namespace megu::game { public: Player(float x, float y, float w, float h, std::filesystem::path); - void move(float, float); - void setPosition(float, float); - - const Position & getPosition() const; - void setup(kernel::Kernel &, Level &) override final; void destroy(kernel::Kernel &, Level &) override final; + + void setPosition(float, float); + void move(float, float); - void apply(kernel::Kernel &) override final; - + const Position & getPosition() const; + void on(const kernel::Prop &, const Event &) override final; + void apply(kernel::Kernel &) override final; std::optional<Event> on() const = 0; diff --git a/source/game/back/object/Terrain.cpp b/source/game/back/object/Terrain.cpp index eea0a86..d0ea840 100644 --- a/source/game/back/object/Terrain.cpp +++ b/source/game/back/object/Terrain.cpp @@ -7,7 +7,7 @@ namespace megu::game { Terrain::Terrain(float x, float y, float w, float h, const std::filesystem::path & path, size_t r, size_t c , float size, size_t tileSize) : PropsTileMap(this->_graphic, this->_physic), GameProps(this), _graphic(path, r, c, size, tileSize), _physic(x, y, r * w, c * h) { //! Taille Pour 1 tile ! - this->_graphic.setSize({w, h}); + this->_graphic.setSize(w, h); } void Terrain::setValue(size_t x, size_t y, size_t value) { @@ -16,7 +16,7 @@ namespace megu::game { this->_physic.push( { static_cast<float>(x) * this->_graphic.getSize().x, - (this->_graphic.getSize().y * (this->_graphic.height()- 1)) - static_cast<float>(y) * this->_graphic.getSize().y + (this->_graphic.getSize().y * (this->_graphic.collumn()- 1)) - static_cast<float>(y) * this->_graphic.getSize().y }, *this->_event[value] ); @@ -52,7 +52,7 @@ namespace megu::game { } void Terrain::apply(kernel::Kernel & kernel) { - kernel.add(this); + kernel.push(*this); } void Terrain::on(const kernel::Prop &, const Event & event) { diff --git a/source/game/back/object/Terrain.hpp b/source/game/back/object/Terrain.hpp index 44e9127..eedfe49 100644 --- a/source/game/back/object/Terrain.hpp +++ b/source/game/back/object/Terrain.hpp @@ -1,9 +1,6 @@ #pragma once #include <kernel/front/props/PropsTileMap.hpp> -#include <kernel/front/component/physic/TileArray.hpp> -#include <kernel/front/component/graphic/TileMap.hpp> - #include <game/back/GameObject.hpp> #include <game/back/object/tile/Tile.hpp> @@ -12,14 +9,16 @@ namespace megu::game { public: Terrain() = delete; Terrain(float, float, float, float, const std::filesystem::path &, size_t, size_t, float, size_t); - - void setValue(size_t, size_t, size_t); - void setTileEvent(size_t, Tile *); + virtual ~Terrain() = default; void setup(kernel::Kernel &, Level &) override; void destroy(kernel::Kernel &, Level &) override; - void apply(kernel::Kernel &) override; + void setValue(size_t, size_t, size_t); + void setTileEvent(size_t, Tile *); + + + void apply(kernel::Kernel &) override; void on(const kernel::Prop &, const Event &) override; std::optional<Event> on() const override; diff --git a/source/game/front/object/Klinck.cpp b/source/game/front/object/Klinck.cpp index b668e0b..5619d09 100644 --- a/source/game/front/object/Klinck.cpp +++ b/source/game/front/object/Klinck.cpp @@ -6,7 +6,7 @@ namespace megu::game { Klinck::Klinck(kernel::Kernel & k, float x, float y) - : Player(0.f, 0.f, 32.f, 32.f, "assets/game/objects/klinck.png"), _kernel(k), _life(100), _atk(10), _def(25), _vx(0.f), _vy(0.f) { + : Player(0.f, 0.f, 32.f, 32.f, "assets/game/objects/klinck.png"), Damagable(100), _kernel(k), _atk(10), _def(25), _vx(0.f), _vy(0.f) { this->getGraphic().setLayerObject(graphic::Layer::ENTITY); this->getPhysic().setLayer(physic::Layer::ENTITY); this->move(x, y); @@ -15,18 +15,18 @@ namespace megu::game { void Klinck::onSetup(kernel::Kernel & kernel, Level &) { auto & sprite = this->getGraphic(); - sprite.push(Animation::IDL_BACK, 0, 32, 16, 16); - sprite.push(Animation::IDL_FRONT, 16, 32, 16, 16); - sprite.push(Animation::IDL_LEFT, 32, 32, 16, 16); - sprite.push(Animation::IDL_RIGHT, 48, 32, 16, 16); + sprite.pushAnimation(Animation::IDL_BACK, 0, 32, 16, 16); + sprite.pushAnimation(Animation::IDL_FRONT, 16, 32, 16, 16); + sprite.pushAnimation(Animation::IDL_LEFT, 32, 32, 16, 16); + sprite.pushAnimation(Animation::IDL_RIGHT, 48, 32, 16, 16); - sprite.push(Animation::WALK_BACK, {{0, 16, 16, 16}, { 16, 16, 16, 16}}); - sprite.push(Animation::WALK_FRONT, {{32, 16, 16, 16}, { 48, 16, 16, 16}}); - sprite.push(Animation::WALK_LEFT, {{0, 0, 16, 16}, { 16, 0, 16, 16}}); - sprite.push(Animation::WALK_RIGHT, {{32, 0, 16, 16}, { 48, 0, 16, 16}}); + sprite.pushAnimation(Animation::WALK_BACK, {{0, 16, 16, 16}, { 16, 16, 16, 16}}); + sprite.pushAnimation(Animation::WALK_FRONT, {{32, 16, 16, 16}, { 48, 16, 16, 16}}); + sprite.pushAnimation(Animation::WALK_LEFT, {{0, 0, 16, 16}, { 16, 0, 16, 16}}); + sprite.pushAnimation(Animation::WALK_RIGHT, {{32, 0, 16, 16}, { 48, 0, 16, 16}}); - sprite.setAnimation(Animation::IDL_BACK); - sprite.setSize({32.f, 32.f}); + sprite.setCurrentAnimation(Animation::IDL_BACK); + sprite.setSize(32.f, 32.f); this->setControl(kernel.window(), new KlinckKeyProfile(*this, kernel)); @@ -34,15 +34,14 @@ namespace megu::game { this->_moving[DOWN] = false; this->_moving[LEFT] = false; this->_moving[RIGHT] = false; - } void Klinck::onDestroy(kernel::Kernel &, Level &) { } - void Klinck::onDamage(const Event &) { - + void Klinck::onDamage(const Event & event) { + this->damage(event.get(Stats::ATK).value_or(0)); } void Klinck::onSolide(const kernel::Prop &) { @@ -82,9 +81,9 @@ namespace megu::game { SquareBox box = this->getPhysic().getBox(); box.move({0.f, this->_vy, 0.f}); - std::optional<SquareBox> obox = this->_kernel.getPhysicEngine().get().makeCollision(box, physic::TERRAIN); + std::optional<SquareBox> obox = this->_kernel.getPhysicEngine().get().checkCollision(box, physic::TERRAIN); if(obox.has_value()) { - float pos_y = this->_vy > 0 ? obox.value().position().y() - obox.value().height() : obox.value().position().y() + obox.value().height(); + float pos_y = this->_vy > 0 ? obox.value().y() - obox.value().height() : obox.value().y() + obox.value().height(); this->setPosition(this->getPosition().x(), pos_y); this->_vy = 0.f; } @@ -97,9 +96,9 @@ namespace megu::game { SquareBox box = this->getPhysic().getBox(); box.move({this->_vx, 0.f, 0.f}); - std::optional<SquareBox> obox = this->_kernel.getPhysicEngine().get().makeCollision(box, physic::TERRAIN); + std::optional<SquareBox> obox = this->_kernel.getPhysicEngine().get().checkCollision(box, physic::TERRAIN); if(obox.has_value()) { - float pos_x = this->_vx > 0 ? obox.value().position().x() - obox.value().width() : obox.value().position().x() + obox.value().width(); + float pos_x = this->_vx > 0 ? obox.value().x() - obox.value().width() : obox.value().x() + obox.value().width(); this->setPosition(pos_x, this->getPosition().y()); this->_vx = 0.f; } diff --git a/source/game/front/object/Klinck.hpp b/source/game/front/object/Klinck.hpp index 1780469..51ca280 100644 --- a/source/game/front/object/Klinck.hpp +++ b/source/game/front/object/Klinck.hpp @@ -1,9 +1,10 @@ #pragma once #include <game/back/object/Player.hpp> +#include <game/back/object/Damagable.hpp> namespace megu::game { - class Klinck : public Player { + class Klinck : public Player, public Damagable { public: enum Animation { IDL_FRONT = 1, @@ -42,7 +43,6 @@ namespace megu::game { private: kernel::Kernel & _kernel; - unsigned int _life; unsigned int _atk; unsigned int _def; float _vx, _vy; diff --git a/source/game/front/profile/KlinckKeys.cpp b/source/game/front/profile/KlinckKeys.cpp index 2da47f3..25760f3 100644 --- a/source/game/front/profile/KlinckKeys.cpp +++ b/source/game/front/profile/KlinckKeys.cpp @@ -11,25 +11,25 @@ namespace megu::game { if(key == Keyboard::Key::ARROW_LEFT) { this->_player.setMovingDirection(Klinck::Direction::LEFT, action != Action::RELEASE); //this->_player.getGraphic().setAnimation(action == Action::RELEASE ? Klinck::Animation::IDL_LEFT : Klinck::Animation::WALK_LEFT); - this->_player.getGraphic().setAnimation(Klinck::Animation::IDL_LEFT); + this->_player.getGraphic().setCurrentAnimation(Klinck::Animation::IDL_LEFT); } if(key == Keyboard::Key::ARROW_RIGHT) { this->_player.setMovingDirection(Klinck::Direction::RIGHT, action != Action::RELEASE); //this->_player.getGraphic().setAnimation(action == Action::RELEASE ? Klinck::Animation::IDL_RIGHT : Klinck::Animation::WALK_RIGHT); - this->_player.getGraphic().setAnimation(Klinck::Animation::IDL_RIGHT); + this->_player.getGraphic().setCurrentAnimation(Klinck::Animation::IDL_RIGHT); } if(key == Keyboard::Key::ARROW_UP) { this->_player.setMovingDirection(Klinck::Direction::UP, action != Action::RELEASE); //this->_player.getGraphic().setAnimation(action == Action::RELEASE ? Klinck::Animation::IDL_FRONT : Klinck::Animation::WALK_FRONT); - this->_player.getGraphic().setAnimation(Klinck::Animation::IDL_FRONT); + this->_player.getGraphic().setCurrentAnimation(Klinck::Animation::IDL_FRONT); } if(key == Keyboard::Key::ARROW_DOWN) { this->_player.setMovingDirection(Klinck::Direction::DOWN, action != Action::RELEASE); //this->_player.getGraphic().setAnimation(action == Action::RELEASE ? Klinck::Animation::IDL_BACK : Klinck::Animation::WALK_BACK); - this->_player.getGraphic().setAnimation(Klinck::Animation::IDL_BACK); + this->_player.getGraphic().setCurrentAnimation(Klinck::Animation::IDL_BACK); } } } \ No newline at end of file diff --git a/source/game/object/Test.cpp b/source/game/object/Test.cpp deleted file mode 100644 index 8433087..0000000 --- a/source/game/object/Test.cpp +++ /dev/null @@ -1,46 +0,0 @@ -#include "Test.hpp" - -namespace megu::game { - Object::Object(std::filesystem::path & path) - : _physic(0, 0, 64, 64), _graphic(path), _map("assets/tilemap.png", 8, 8, 8.f, 16, 0.125) { - this->_graphic.setFrame({0.f, 0.f, 51.f, 98.f}); - this->_graphic.setSize({51.f, 98.f}); - - size_t tab[8][8] = { - {44, 45, 44, 47, 2, 1, 1, 1}, - {45, 45, 44, 47, 1, 1, 1, 1}, - {45, 44, 44, 47, 1, 1, 1, 1}, - {22, 22, 22, 23, 1, 1, 2, 1}, - {28, 28, 28, 29, 1, 1, 1, 1}, - { 1, 2, 1, 1, 1, 1, 1, 1}, - { 1, 2, 1, 1, 1, 1, 1, 1}, - { 1, 1, 1, 2, 1, 1, 1, 1} - }; - - for(size_t i = 0; i < 8; ++i) { - for(size_t j = 0; j < 8; ++j) { - this->_map.setValue(j, i, tab[i][j]); - } - } - - this->_map.addAnimation(0, 6, {18, 18, 20, 21}); - this->_map.addAnimation(1, 6, {18, 18, 20, 21}); - this->_map.addAnimation(2, 6, {18, 18, 20, 21}); - this->_map.addAnimation(3, 6, {18, 18, 20, 21}); - this->_map.addAnimation(4, 6, {18, 18, 20, 21}); - this->_map.addAnimation(5, 6, {18, 18, 20, 21}); - this->_map.addAnimation(6, 6, {18, 18, 20, 21}); - this->_map.addAnimation(7, 6, {18, 18, 20, 21}); - - this->_map.addAnimation(0, 7, {24, 25, 26, 27}); - this->_map.addAnimation(1, 7, {24, 25, 26, 27}); - this->_map.addAnimation(2, 7, {24, 25, 26, 27}); - this->_map.addAnimation(3, 7, {24, 25, 26, 27}); - this->_map.addAnimation(4, 7, {24, 25, 26, 27}); - this->_map.addAnimation(5, 7, {24, 25, 26, 27}); - this->_map.addAnimation(6, 7, {24, 25, 26, 27}); - this->_map.addAnimation(7, 7, {24, 25, 26, 27}); - - this->_map.setSize({360 / 8, 360 / 8}); - } -} \ No newline at end of file diff --git a/source/game/object/Test.hpp b/source/game/object/Test.hpp deleted file mode 100644 index a7b123f..0000000 --- a/source/game/object/Test.hpp +++ /dev/null @@ -1,21 +0,0 @@ -#pragma once - -#include <kernel/front/props/Props.hpp> -#include <kernel/front/component/physic/Fixed.hpp> -#include <kernel/front/component/graphic/Sprite.hpp> -#include <kernel/front/component/graphic/TileMap.hpp> - -namespace megu::game { - class Object : public kernel::Prop { - public: - Object(std::filesystem::path &); - - inline kernel::Prop::Physical_Component * getPhysicComponent() override {return &this->_physic;} - inline kernel::Prop::Graphical_Component * getGraphicComponent() override {return &this->_map;} - - private: - kernel::Fixed _physic; - kernel::Sprite _graphic; - kernel::Tilemap _map; - }; -} \ No newline at end of file diff --git a/source/kernel/back/component/Component.hpp b/source/kernel/back/component/Component.hpp index b95d280..c36d0cf 100644 --- a/source/kernel/back/component/Component.hpp +++ b/source/kernel/back/component/Component.hpp @@ -9,7 +9,7 @@ namespace megu::kernel { template <class E> class Component : public virtual Identifiable { public: - virtual void apply(Kernel & k, E &) = 0; - virtual void unapply(Kernel & k, E &) = 0; + virtual void apply(E &) = 0; + virtual void unapply(E &) = 0; }; } \ No newline at end of file diff --git a/source/kernel/back/component/Graphical.hpp b/source/kernel/back/component/Graphical.hpp index 0354e05..9f50729 100644 --- a/source/kernel/back/component/Graphical.hpp +++ b/source/kernel/back/component/Graphical.hpp @@ -4,11 +4,10 @@ #include <engine/utility/Priority.hpp> namespace megu::kernel { - template <class Ge> - class Graphical : public Component<Ge> { + template <class E> + class Graphical : public Component<E> { public: - inline Graphical(Priority l = 0, Priority o = 0) - : _layer(l), _object(o) {} + inline Graphical(Priority = 0, Priority = 0); inline Priority getLayerPriority() const {return this->_layer;} inline Priority getObjectPriority() const {return this->_object;} @@ -23,4 +22,6 @@ namespace megu::kernel { Priority _object; }; -} \ No newline at end of file +} + +#include "Graphical.tpp" \ No newline at end of file diff --git a/source/kernel/back/component/Graphical.tpp b/source/kernel/back/component/Graphical.tpp new file mode 100644 index 0000000..4f9b6ac --- /dev/null +++ b/source/kernel/back/component/Graphical.tpp @@ -0,0 +1,7 @@ +#include "Graphical.hpp" + +namespace megu::kernel { + template <class E> + Graphical<E>::Graphical(Priority layer, Priority object) + : _layer(layer), _object(object) {} +} \ No newline at end of file diff --git a/source/kernel/back/component/Physical.hpp b/source/kernel/back/component/Physical.hpp index 7701eb4..e427e6f 100644 --- a/source/kernel/back/component/Physical.hpp +++ b/source/kernel/back/component/Physical.hpp @@ -7,19 +7,22 @@ #include <engine/utility/Priority.hpp> namespace megu::kernel { - template <class Pe> - class Physical : public Component<Pe> { + template <class E> + class Physical : public Component<E> { public: - inline Physical(Priority p = 0) - : _layer(p) {} + Physical(Priority p = 0); + virtual ~Physical() = default; - virtual void on_collide(Kernel &, Pe &, Identifiable &, Physical &, double) = 0; - - using CollideLambda = std::function<void(Kernel &, Pe &, Identifiable &, Physical &, double)>; inline void setLayer(Priority p) {this->_layer = p;} inline Priority getLayer() const {return this->_layer;} + virtual void onCollide(Kernel &, E &, Identifiable &, Physical &, double) = 0; + + using CollideLambda = std::function<void(Kernel &, E &, Identifiable &, Physical &, double)>; + private: Priority _layer; }; -} \ No newline at end of file +} + +#include "Physical.tpp" \ No newline at end of file diff --git a/source/kernel/back/component/Physical.tpp b/source/kernel/back/component/Physical.tpp new file mode 100644 index 0000000..c04e5c0 --- /dev/null +++ b/source/kernel/back/component/Physical.tpp @@ -0,0 +1,7 @@ +#include "Physical.hpp" + +namespace megu::kernel { + template <class E> + Physical<E>::Physical(Priority layer) + : _layer(layer) {} +} \ No newline at end of file diff --git a/source/kernel/back/engine/Engine.hpp b/source/kernel/back/engine/Engine.hpp index 8842381..33f2bdf 100644 --- a/source/kernel/back/engine/Engine.hpp +++ b/source/kernel/back/engine/Engine.hpp @@ -7,14 +7,14 @@ namespace megu::kernel { template <class T, class C, class O> class Engine { public: - virtual void boot(Kernel &) = 0; - virtual void stop(Kernel &) = 0; - virtual void step(Kernel &, double) = 0; + virtual void boot() = 0; + virtual void stop() = 0; + virtual void step(double) = 0; virtual T & get() = 0; virtual const O & get(const C &) const = 0; - virtual void add(Kernel &, C &) = 0; - virtual void remove(Kernel &, C &) = 0; + virtual void push(C &) = 0; + virtual void remove(C &) = 0; }; } \ No newline at end of file diff --git a/source/kernel/back/engine/GraphicEngine.cpp b/source/kernel/back/engine/GraphicEngine.cpp index 1aa1931..81beaa1 100644 --- a/source/kernel/back/engine/GraphicEngine.cpp +++ b/source/kernel/back/engine/GraphicEngine.cpp @@ -6,26 +6,26 @@ namespace megu::kernel { GraphicEngine::GraphicEngine(Window & window) : _engine(window), _renderer(360, 360) {} - void GraphicEngine::boot(Kernel &) { + void GraphicEngine::boot() { this->_engine.push(0, this->_renderer); this->_engine.push(1, this->_renderer); this->_engine.push(2, this->_renderer); } - void GraphicEngine::stop(Kernel &) { + void GraphicEngine::stop() { } - void GraphicEngine::step(Kernel & kernel, double time) { + void GraphicEngine::step(double time) { this->_engine.step(); } - void GraphicEngine::add(Kernel & kernel, Graphical<GraphicEngine> & graphical) { - graphical.apply(kernel, *this); + void GraphicEngine::push(Graphical<GraphicEngine> & graphical) { + graphical.apply(*this); } - void GraphicEngine::remove(Kernel & kernel, Graphical<GraphicEngine> & graphical) { - graphical.unapply(kernel, *this); + void GraphicEngine::remove(Graphical<GraphicEngine> & graphical) { + graphical.unapply(*this); } const Renderable & GraphicEngine::get(const Graphical<GraphicEngine> & graphical) const { diff --git a/source/kernel/back/engine/GraphicEngine.hpp b/source/kernel/back/engine/GraphicEngine.hpp index 77ce58f..0ad5196 100644 --- a/source/kernel/back/engine/GraphicEngine.hpp +++ b/source/kernel/back/engine/GraphicEngine.hpp @@ -19,12 +19,12 @@ namespace megu::kernel { inline megu::GraphicEngine & get() {return this->_engine;} - void boot(Kernel &) override; - void stop(Kernel &) override; - void step(Kernel &, double) override; + void boot() override; + void stop() override; + void step(double) override; - void add(Kernel &, Graphical<GraphicEngine> &) override; - void remove(Kernel &, Graphical<GraphicEngine> &) override; + void push(Graphical<GraphicEngine> &) override; + void remove(Graphical<GraphicEngine> &) override; const megu::Renderable & get(const Graphical<GraphicEngine> &) const override; diff --git a/source/kernel/back/engine/PhysicEngine.cpp b/source/kernel/back/engine/PhysicEngine.cpp index 26476f5..781977e 100644 --- a/source/kernel/back/engine/PhysicEngine.cpp +++ b/source/kernel/back/engine/PhysicEngine.cpp @@ -6,24 +6,24 @@ namespace megu::kernel { PhysicEngine::PhysicEngine() : _engine() {} - void PhysicEngine::boot(Kernel &) { + void PhysicEngine::boot() { } - void PhysicEngine::stop(Kernel &) { + void PhysicEngine::stop() { } - void PhysicEngine::step(Kernel &, double time) { + void PhysicEngine::step(double time) { this->_engine.step(time); } - void PhysicEngine::add(Kernel & kernel, Physical<PhysicEngine> & props) { - props.apply(kernel, *this); + void PhysicEngine::push(Physical<PhysicEngine> & props) { + props.apply(*this); } - void PhysicEngine::remove(Kernel & kernel, Physical<PhysicEngine> & props) { - props.unapply(kernel, *this); + void PhysicEngine::remove(Physical<PhysicEngine> & props) { + props.unapply(*this); } const megu::Tangible & PhysicEngine::get(const Physical<PhysicEngine> & props) const { diff --git a/source/kernel/back/engine/PhysicEngine.hpp b/source/kernel/back/engine/PhysicEngine.hpp index 5992197..c4379ca 100644 --- a/source/kernel/back/engine/PhysicEngine.hpp +++ b/source/kernel/back/engine/PhysicEngine.hpp @@ -12,12 +12,14 @@ namespace megu::kernel { inline megu::PhysicEngine & get() override {return this->_engine;} - void boot(Kernel &) override; - void stop(Kernel &) override; - void step(Kernel &, double) override; + void boot() override; + void stop() override; + void step(double) override; - void add(Kernel &, Physical<PhysicEngine> &) override; - void remove(Kernel &, Physical<PhysicEngine> &) override; + void push(Physical<PhysicEngine> &) override; + void remove(Physical<PhysicEngine> &) override; + + inline std::optional<SquareBox> check(SquareBox box, Priority prio) const {return this->_engine.checkCollision(box, prio);} const megu::Tangible & get(const Physical<PhysicEngine> &) const override; diff --git a/source/kernel/front/Kernel.cpp b/source/kernel/front/Kernel.cpp index b69022e..f6cd84b 100644 --- a/source/kernel/front/Kernel.cpp +++ b/source/kernel/front/Kernel.cpp @@ -3,57 +3,57 @@ namespace megu::kernel { Kernel::Kernel(Window & window) : _window(window), _pEngine(), _gEngine(window) { - this->_pEngine.boot(*this); - this->_gEngine.boot(*this); + this->_pEngine.boot(); + this->_gEngine.boot(); } Kernel::~Kernel() { - this->_pEngine.stop(*this); - this->_pEngine.stop(*this); + this->_pEngine.stop(); + this->_pEngine.stop(); } void Kernel::step() { double time = Window::Time(); if(this->_window.isOpen()) { - this->_gEngine.step(*this, time); + this->_gEngine.step(time); this->_gResolver.resolve(*this, this->_gEngine, time); } - this->_pEngine.step(*this, time); + this->_pEngine.step(time); this->_pResolver.resolve(*this, this->_pEngine, time); } - void Kernel::add(Prop * props) { - this->_props[props->id()] = props; - auto * pComponent = props->getPhysicComponent(); + void Kernel::push(Prop & props) { + this->_props[props.id()] = &props; + auto * pComponent = props.getPhysicComponent(); if(pComponent != nullptr) { - this->_pEngine.add(*this, *pComponent); - this->_pResolver.add(*pComponent); + this->_pEngine.push(*pComponent); + this->_pResolver.push(*pComponent); } - auto * gComponent = props->getGraphicComponent(); + auto * gComponent = props.getGraphicComponent(); if(gComponent != nullptr) { - this->_gEngine.add(*this, *gComponent); - this->_gResolver.add(*gComponent); + this->_gEngine.push(*gComponent); + this->_gResolver.push(*gComponent); } } - void Kernel::remove(Prop * props) { - auto * pComponent = props->getPhysicComponent(); + void Kernel::remove(Prop & props) { + auto * pComponent = props.getPhysicComponent(); if(pComponent != nullptr) { - this->_pEngine.remove(*this, *pComponent); + this->_pEngine.remove(*pComponent); this->_pResolver.remove(*pComponent); } - auto * gComponent = props->getGraphicComponent(); + auto * gComponent = props.getGraphicComponent(); if(gComponent != nullptr) { - this->_gEngine.remove(*this, *gComponent); + this->_gEngine.remove(*gComponent); this->_gResolver.remove(*gComponent); } - this->_props.erase(props->id()); + this->_props.erase(props.id()); } Prop * Kernel::get(const Prop::Physical_Component & pc) { diff --git a/source/kernel/front/Kernel.hpp b/source/kernel/front/Kernel.hpp index 0593c91..541b459 100644 --- a/source/kernel/front/Kernel.hpp +++ b/source/kernel/front/Kernel.hpp @@ -15,14 +15,13 @@ namespace megu::kernel { class Kernel { public: + Kernel() = delete; Kernel(Window &); ~Kernel(); void step(); - void add(Prop *); - void remove(Prop *); - - inline Identifiable_Map<Prop> & props() {return this->_props;} + void push(Prop &); + void remove(Prop &); inline PhysicEngine & getPhysicEngine() {return this->_pEngine;} inline GraphicEngine & getGraphicEngine() {return this->_gEngine;} diff --git a/source/kernel/front/component/graphic/Sprite.cpp b/source/kernel/front/component/graphic/Sprite.cpp index 4545186..ae6824b 100644 --- a/source/kernel/front/component/graphic/Sprite.cpp +++ b/source/kernel/front/component/graphic/Sprite.cpp @@ -1,13 +1,10 @@ #include "Sprite.hpp" -//this->_sprite.setFrame({0.f, 0.f, 51.f, 98.f}); -//this->_sprite.setSize({50, 100}); - namespace megu::kernel { GraphicLinker<megu::Sprite> Sprite::_Linker = GraphicLinker<megu::Sprite>(); - Sprite::Sprite(const std::filesystem::path & path) - : Sprite(path, {0, 0, 0, 0}) {} + Sprite::Sprite() + : megu::Sprite() {} Sprite::Sprite(const std::filesystem::path & path, const Frame & frame) : megu::Sprite(path, frame), _animation(0), _index(0) { @@ -16,52 +13,52 @@ namespace megu::kernel { } } - const Frame_List & Sprite::getAnimations(size_t name) const { + const Frame_List & Sprite::getCurrentAnimations(size_t name) const { if(this->_frames.contains(name)) { return this->_frames.at(name); } - throw std::runtime_error("Cannot get inexisting animation"); + throw std::runtime_error("Missing animation : " + name); } - const Frame & Sprite::getFrame(size_t name, size_t index) const { - auto & frames = this->getAnimations(name); + const Frame & Sprite::getCurrentFrame(size_t name, size_t index) const { + auto & frames = this->getCurrentAnimations(name); if(frames.size() > index) { return frames.at(index); } - throw std::runtime_error("Cannot get inexisting frame"); + throw std::runtime_error("Missing frame for animation : " + name); } - void Sprite::setAnimation(size_t name) { + void Sprite::setCurrentAnimation(size_t name) { if(this->_frames.contains(name)) { this->_animation = name; this->_previous = 0.0; } else { - throw std::runtime_error("Cannot set inexisting animation"); + throw std::runtime_error("Cannot set inexisting animation : " + name); } } - void Sprite::push(size_t name, const Frame_List & frames) { + void Sprite::pushAnimation(size_t name, const Frame_List & frames) { for(auto & frame : frames) { - this->push(name, frame); + this->pushAnimation(name, frame); } } - void Sprite::push(size_t name, const Frame & frame) { + void Sprite::pushAnimation(size_t name, const Frame & frame) { this->_frames[name].push_back(frame); } - void Sprite::push(size_t name, float x, float y, float w, float h) { + void Sprite::pushAnimation(size_t name, float x, float y, float w, float h) { this->_frames[name].push_back({x, y, w, h}); } - void Sprite::remove(size_t name) { + void Sprite::removeAnimation(size_t name) { if(this->_frames.contains(name)) { this->_frames.erase(name); } } - void Sprite::remove(size_t name, size_t index) { + void Sprite::removeAnimation(size_t name, size_t index) { if(this->_frames.contains(name) && this->_frames[name].size() > index) { this->_frames[name].erase(this->_frames[name].begin() + index); } @@ -83,12 +80,12 @@ namespace megu::kernel { } } - void Sprite::apply(Kernel & kernel, GraphicEngine & engine) { + void Sprite::apply(GraphicEngine & engine) { Sprite::_Linker.link(*this, this->getLayerPriority(), this->getObjectPriority()); Sprite::_Linker.link(engine); } - void Sprite::unapply(Kernel & kernel, GraphicEngine & engine) { + void Sprite::unapply(GraphicEngine & engine) { Sprite::_Linker.unlink(*this); Sprite::_Linker.link(engine); } diff --git a/source/kernel/front/component/graphic/Sprite.hpp b/source/kernel/front/component/graphic/Sprite.hpp index f3e5e57..6c0c148 100644 --- a/source/kernel/front/component/graphic/Sprite.hpp +++ b/source/kernel/front/component/graphic/Sprite.hpp @@ -18,27 +18,28 @@ namespace megu::kernel { class Sprite : public Graphical<GraphicEngine>, public megu::Sprite { public: - Sprite(const std::filesystem::path &); - Sprite(const std::filesystem::path &, const Frame &); + Sprite(); + Sprite(const std::filesystem::path &, const Frame & = {0, 0, 0, 0}); + virtual ~Sprite() = default; - inline size_t getCurrentFrameIndex() const {return this->_index;} inline double getDuration() const {return this->_duration;} - inline void setDuration(double d) {this->_duration = d;} + inline size_t getCurrentFrameIndex() const {return this->_index;} + const Frame & getCurrentFrame(size_t, size_t) const; + const Frame_List & getCurrentAnimations(size_t) const; - const Frame_List & getAnimations(size_t) const; - const Frame & getFrame(size_t, size_t) const; + inline void setDuration(double d) {this->_duration = d;} + void setCurrentAnimation(size_t); - void setAnimation(size_t); - void push(size_t, const Frame_List & = {}); - void push(size_t, const Frame &); - void push(size_t, float, float, float, float); + void pushAnimation(size_t, const Frame_List & = {}); + void pushAnimation(size_t, const Frame &); + void pushAnimation(size_t, float, float, float, float); - void remove(size_t); - void remove(size_t, size_t); + void removeAnimation(size_t); + void removeAnimation(size_t, size_t); + void apply(GraphicEngine &) override; + void unapply(GraphicEngine &) override; void update(double) override; - void apply(Kernel &, GraphicEngine &) override; - void unapply(Kernel &, GraphicEngine &) override; static const GraphicLinker<megu::Sprite> & linker() {return Sprite::_Linker;} diff --git a/source/kernel/front/component/graphic/TileMap.cpp b/source/kernel/front/component/graphic/TileMap.cpp index 4e4acd3..2f79759 100644 --- a/source/kernel/front/component/graphic/TileMap.cpp +++ b/source/kernel/front/component/graphic/TileMap.cpp @@ -8,34 +8,32 @@ namespace megu::kernel { /*if(lenght % width != 0 && lenght % height != 0) { throw std::runtime_error("Tilemap dimension not matching tiles size."); }*/ - - size_t tileWidth = this->texture().width() / this->_tileSize; - size_t tileHeight = this->texture().height() / this->_tileSize; + size_t tileWidth = this->getTextureWidth() / lenght; + size_t tileHeight = this->getTextureHeight() / lenght; + for(size_t y = 0; y < tileHeight; ++y) { for(size_t x = 0; x < tileWidth; ++x) { - this->_tilesPosition.push_back({x * this->_tileSize, y * this->_tileSize}); + this->_tilesPosition.push_back({x * lenght, y * lenght}); } } size_t i = 0; - for(size_t x = 0; x < width * this->_tileSize; x += this->_tileSize) { + for(size_t x = 0; x < width * lenght; x += lenght) { this->_tilesValue.push_back({}); - for(size_t y = 0; y < height * this->_tileSize; y += this->_tileSize) { + for(size_t y = 0; y < height * lenght; y += lenght) { this->_tilesValue[i].push_back(0); } ++i; } if(!Tilemap::_Linker.haveModule()) { - Tilemap::_Linker.setModule(new TileArray_Module{}); + Tilemap::_Linker.setModule(new TileArray_Module{}); } - - //this->setSize({width * size, height * size}); } void Tilemap::setValue(size_t x, size_t y, size_t value) { - if(this->width() <= x || this->height() <= y) { + if(this->row() <= x || this->collumn() <= y) { throw std::runtime_error("Set Tilemap coords out of range."); } @@ -46,11 +44,11 @@ namespace megu::kernel { TilePosition position = this->_tilesPosition[value]; glm::vec4 uv = {position.x, - this->texture().height() - position.y - this->_tileSize, + this->texture().height() - position.y - this->_tileSize, this->_tileSize, this->_tileSize}; - this->setUv(this->height() - 1 - y, x, uv); + this->setUv(this->collumn() - 1 - y, x, uv); this->_tilesValue[x][y] = value; } @@ -66,8 +64,8 @@ namespace megu::kernel { throw std::runtime_error("Tilemap coords out of bound"); } - void Tilemap::addAnimation(size_t x, size_t y, const std::vector<size_t> & ids) { - if(x < this->width() && y < this->height()) { + void Tilemap::pushAnimation(size_t x, size_t y, const std::vector<size_t> & ids) { + if(x < this->row() && y < this->collumn()) { this->_animations[{x, y}] = std::pair<std::vector<size_t>, size_t>(ids, 0); } } @@ -91,12 +89,12 @@ namespace megu::kernel { } } - void Tilemap::apply(Kernel & kernel, GraphicEngine & engine) { + void Tilemap::apply(GraphicEngine & engine) { Tilemap::_Linker.link(*this, this->getLayerPriority(), this->getObjectPriority()); Tilemap::_Linker.link(engine); } - void Tilemap::unapply(Kernel & kernel, GraphicEngine & engine) { + void Tilemap::unapply(GraphicEngine & engine) { Tilemap::_Linker.unlink(*this); Tilemap::_Linker.link(engine); } diff --git a/source/kernel/front/component/graphic/TileMap.hpp b/source/kernel/front/component/graphic/TileMap.hpp index 648bedd..d4f72a6 100644 --- a/source/kernel/front/component/graphic/TileMap.hpp +++ b/source/kernel/front/component/graphic/TileMap.hpp @@ -16,28 +16,24 @@ namespace megu::kernel { struct TilePosition { size_t x = 0; size_t y = 0; - - bool operator<(const TilePosition & p) const { - if(this->x == p.x) { - return this->y < p.y; - } - return this->y < p.y; - } }; + Tilemap() = delete; Tilemap(const std::filesystem::path &, size_t, size_t, float, size_t, double = 0.1); + virtual ~Tilemap() = default; + inline void setDuration(double duration) {this->_duration = duration;} void setValue(size_t, size_t, size_t); + + inline double getDuration() const {return this->_duration;} size_t getValue(size_t, size_t) const; - void addAnimation(size_t, size_t, const std::vector<size_t> &); + void pushAnimation(size_t, size_t, const std::vector<size_t> &); void removeAnimation(size_t, size_t); - - const std::map<TilePosition, std::pair<std::vector<size_t>, size_t>, reference_sorter<TilePosition>> & animation() const {return this->_animations;} - + + void apply(GraphicEngine &) override; + void unapply(GraphicEngine &) override; void update(double) override; - void apply(Kernel &, GraphicEngine &) override; - void unapply(Kernel &, GraphicEngine &) override; private: std::vector<TilePosition> _tilesPosition; diff --git a/source/kernel/front/component/physic/Fixed.cpp b/source/kernel/front/component/physic/Fixed.cpp index fcaa667..df2bfe0 100644 --- a/source/kernel/front/component/physic/Fixed.cpp +++ b/source/kernel/front/component/physic/Fixed.cpp @@ -6,23 +6,23 @@ namespace megu::kernel { Fixed::Fixed(float x, float y, float w, float h, CollideLambda cl, UpdateLambda ul) : TangibleStatic(Position(x, y), Dimension(w, h, 0.f)), _collide(cl), _update(ul) {} - void Fixed::update_physic(double time) const { + void Fixed::updatePhysic(double time) const { if(this->_update != nullptr) { this->_update(time); } } - void Fixed::on_collide(Kernel & kernel, PhysicEngine & engine, Identifiable & id, Physical & physical, double time) { + void Fixed::onCollide(Kernel & kernel, PhysicEngine & engine, Identifiable & id, Physical & physical, double time) { if(this->_collide != nullptr) { this->_collide(kernel, engine, id, physical, time); } } - void Fixed::apply(Kernel & kernel, PhysicEngine & engine) { + void Fixed::apply(PhysicEngine & engine) { engine.get().push(this->getLayer(), *this); } - void Fixed::unapply(Kernel & kernel, PhysicEngine & engine) { + void Fixed::unapply(PhysicEngine & engine) { engine.get().remove(*this); } diff --git a/source/kernel/front/component/physic/Fixed.hpp b/source/kernel/front/component/physic/Fixed.hpp index 22fe2dd..8edb22e 100644 --- a/source/kernel/front/component/physic/Fixed.hpp +++ b/source/kernel/front/component/physic/Fixed.hpp @@ -10,12 +10,14 @@ namespace megu::kernel { class Fixed : public TangibleStatic, public Physical<PhysicEngine> { public: + Fixed() = delete; Fixed(float x, float y, float w, float h, CollideLambda = nullptr, UpdateLambda = nullptr); + virtual ~Fixed() = default; - void update_physic(double) const override; - void on_collide(Kernel &, PhysicEngine &, Identifiable &, Physical &, double) override; - void apply(Kernel & k, PhysicEngine &) override; - void unapply(Kernel & k, PhysicEngine &) override; + void updatePhysic(double) const override; + void onCollide(Kernel &, PhysicEngine &, Identifiable &, Physical &, double) override; + void apply(PhysicEngine &) override; + void unapply(PhysicEngine &) override; void setCollideLambda(CollideLambda); void setUpdateLambda(UpdateLambda); diff --git a/source/kernel/front/component/physic/Movable.cpp b/source/kernel/front/component/physic/Movable.cpp index c9aeaf2..49e05eb 100644 --- a/source/kernel/front/component/physic/Movable.cpp +++ b/source/kernel/front/component/physic/Movable.cpp @@ -4,23 +4,23 @@ namespace megu::kernel { Movable::Movable(float x, float y, float w, float h, CollideLambda cl, UpdateLambda ul) : TangibleMovable(Position(x, y), Dimension(w, h, 0.f)), _collide(cl), _update(ul) {} - void Movable::update_physic(double time) { + void Movable::updatePhysic(double time) { if(this->_update != nullptr) { this->_update(time); } } - void Movable::on_collide(Kernel & kernel, PhysicEngine & engine, Identifiable & id, Physical & physical, double time) { + void Movable::onCollide(Kernel & kernel, PhysicEngine & engine, Identifiable & id, Physical & physical, double time) { if(this->_collide != nullptr) { this->_collide(kernel, engine, id, physical, time); } } - void Movable::apply(Kernel & kernel, PhysicEngine & engine) { + void Movable::apply(PhysicEngine & engine) { engine.get().push(this->getLayer(), *this); } - void Movable::unapply(Kernel & kernel, PhysicEngine & engine) { + void Movable::unapply(PhysicEngine & engine) { engine.get().remove(*this); } diff --git a/source/kernel/front/component/physic/Movable.hpp b/source/kernel/front/component/physic/Movable.hpp index 45cd760..4ae79c0 100644 --- a/source/kernel/front/component/physic/Movable.hpp +++ b/source/kernel/front/component/physic/Movable.hpp @@ -10,12 +10,14 @@ namespace megu::kernel { class Movable : public TangibleMovable, public Physical<PhysicEngine> { public: + Movable() = delete; Movable(float x, float y, float w, float h, CollideLambda = nullptr, UpdateLambda = nullptr); + virtual ~Movable() = default; - void update_physic(double) override; - void on_collide(Kernel &, PhysicEngine &, Identifiable &, Physical &, double) override; - void apply(Kernel & k, PhysicEngine &) override; - void unapply(Kernel & k, PhysicEngine &) override; + void updatePhysic(double) override; + void onCollide(Kernel &, PhysicEngine &, Identifiable &, Physical &, double) override; + void apply(PhysicEngine &) override; + void unapply(PhysicEngine &) override; void setCollideLambda(CollideLambda); void setUpdateLambda(UpdateLambda); diff --git a/source/kernel/front/component/physic/Tile.cpp b/source/kernel/front/component/physic/Tile.cpp index 47e0e34..1ef1b88 100644 --- a/source/kernel/front/component/physic/Tile.cpp +++ b/source/kernel/front/component/physic/Tile.cpp @@ -1,6 +1,9 @@ #include "Tile.hpp" namespace megu::kernel { + Tile::Tile() + : Fixed(0, 0, 1, 1) {} + Tile::Tile(float x, float y, float d, Priority p) : Fixed(x, y, d, d) { this->setLayer(p); diff --git a/source/kernel/front/component/physic/Tile.hpp b/source/kernel/front/component/physic/Tile.hpp index 3b914c4..ac13aea 100644 --- a/source/kernel/front/component/physic/Tile.hpp +++ b/source/kernel/front/component/physic/Tile.hpp @@ -5,7 +5,9 @@ namespace megu::kernel { class Tile : public Fixed { public: + Tile(); Tile(float x, float y, float d, Priority p); + virtual ~Tile() = default; bool operator==(const Tile &) const; bool operator>=(const Tile &) const; diff --git a/source/kernel/front/component/physic/TileArray.cpp b/source/kernel/front/component/physic/TileArray.cpp index 7a2e455..fddf358 100644 --- a/source/kernel/front/component/physic/TileArray.cpp +++ b/source/kernel/front/component/physic/TileArray.cpp @@ -20,7 +20,7 @@ namespace megu::kernel { this->_tiles.insert({position, tile}); } - void TileArray::erase(const Tile & tile) { + void TileArray::remove(const Tile & tile) { for(auto it = this->_tiles.begin(); it != this->_tiles.end();) { if(it->second.get().id() == tile.id()) { it = this->_tiles.erase(it); @@ -31,14 +31,14 @@ namespace megu::kernel { } } - void TileArray::on_collide(Kernel & kernel, PhysicEngine & engine, Identifiable & id, Physical & physical, double time) { + void TileArray::onCollide(Kernel & kernel, PhysicEngine & engine, Identifiable & id, Physical & physical, double time) { if(this->_collide == nullptr) { return; } auto & tangible = engine.get(physical); for(auto & [positon, tile] : this->_tiles) { - SquareBox box = SquareBox(positon, tile.get().getBox().dimension()); + SquareBox box = SquareBox(positon, tile.get().getBox().getDimension()); if(tangible.isColliding(box)) { this->_collide(kernel, engine, id, tile, time); } @@ -47,7 +47,7 @@ namespace megu::kernel { std::optional<SquareBox> TileArray::isColliding(const SquareBox & box) const { for(auto & [positon, tile] : this->_tiles) { - SquareBox tbox = SquareBox(positon, tile.get().getBox().dimension()); + SquareBox tbox = SquareBox(positon, tile.get().getBox().getDimension()); if(box.intersect(tbox)) { return tbox; } @@ -55,17 +55,17 @@ namespace megu::kernel { return {}; } - void TileArray::update_physic(double time) const { + void TileArray::updatePhysic(double time) const { if(this->_update != nullptr) { this->_update(time); } } - void TileArray::apply(Kernel & kernel, PhysicEngine & engine) { + void TileArray::apply(PhysicEngine & engine) { engine.get().push(this->getLayer(), *this); } - void TileArray::unapply(Kernel & kernel, PhysicEngine & engine) { + void TileArray::unapply(PhysicEngine & engine) { engine.get().remove(*this); } diff --git a/source/kernel/front/component/physic/TileArray.hpp b/source/kernel/front/component/physic/TileArray.hpp index 3bd4631..2578bd6 100644 --- a/source/kernel/front/component/physic/TileArray.hpp +++ b/source/kernel/front/component/physic/TileArray.hpp @@ -10,22 +10,24 @@ namespace megu::kernel { class TileArray : public Physical<PhysicEngine>, public TangibleStatic { public: + TileArray() = delete; TileArray(float, float, float, float, CollideLambda = nullptr, UpdateLambda = nullptr); + virtual ~TileArray() = default; std::optional<std::reference_wrapper<const Tile>> at(const Position &) const; void push(const Position &, Tile &); - void erase(const Tile &); + void remove(const Tile &); using TileCollideLambda = std::function<void(Kernel &, PhysicEngine &, Identifiable &, Tile &, double)>; void setCollideLambda(TileCollideLambda); void setUpdateLambda(UpdateLambda); - void update_physic(double) const override; - void apply(Kernel & k, PhysicEngine &) override; - void unapply(Kernel & k, PhysicEngine &) override; - void on_collide(Kernel &, PhysicEngine &, Identifiable &, Physical &, double) override; + void updatePhysic(double) const override; + void apply(PhysicEngine &) override; + void unapply(PhysicEngine &) override; + void onCollide(Kernel &, PhysicEngine &, Identifiable &, Physical &, double) override; virtual std::optional<SquareBox> isColliding(const SquareBox &) const override; diff --git a/source/kernel/front/props/Props.hpp b/source/kernel/front/props/Props.hpp index d86d795..8ab0804 100644 --- a/source/kernel/front/props/Props.hpp +++ b/source/kernel/front/props/Props.hpp @@ -9,11 +9,11 @@ #include <kernel/back/engine/GraphicEngine.hpp> namespace megu::kernel { - template <class Pe, class Ge> + template <class P, class G> class BaseProps : virtual public Identifiable { public: - using Graphical_Component = Graphical<Ge>; - using Physical_Component = Physical<Pe>; + using Graphical_Component = Graphical<G>; + using Physical_Component = Physical<P>; virtual Graphical_Component * getGraphicComponent() = 0; virtual Physical_Component * getPhysicComponent() = 0; diff --git a/source/kernel/front/props/PropsDynamic.hpp b/source/kernel/front/props/PropsDynamic.hpp index b86d815..8eb0699 100644 --- a/source/kernel/front/props/PropsDynamic.hpp +++ b/source/kernel/front/props/PropsDynamic.hpp @@ -7,7 +7,9 @@ namespace megu::kernel { class PropsDynamic : public Prop { public: + PropsDynamic() = delete; PropsDynamic(Sprite &, Movable &); + virtual ~PropsDynamic() = default; inline Prop::Graphical_Component * getGraphicComponent() {return &this->_graphic;} inline Prop::Physical_Component * getPhysicComponent() {return &this->_physic;} diff --git a/source/kernel/front/props/PropsPlayable.hpp b/source/kernel/front/props/PropsPlayable.hpp index 8857cd2..e0a811b 100644 --- a/source/kernel/front/props/PropsPlayable.hpp +++ b/source/kernel/front/props/PropsPlayable.hpp @@ -13,13 +13,15 @@ namespace megu { namespace megu::kernel { class PropsPlayable : public Prop { public: + PropsPlayable() = delete; PropsPlayable(Sprite &, Movable &); + virtual ~PropsPlayable() = default; void setControl(Window &, Keyboard *); void setControl(Window &, Mouse *); - virtual Graphical_Component * getGraphicComponent() {return &this->_graphic;} - virtual Physical_Component * getPhysicComponent() {return &this->_physic;} + virtual Prop::Graphical_Component * getGraphicComponent() {return &this->_graphic;} + virtual Prop::Physical_Component * getPhysicComponent() {return &this->_physic;} private: Sprite & _graphic; diff --git a/source/kernel/front/props/PropsStatic.hpp b/source/kernel/front/props/PropsStatic.hpp index 3210fcd..b65b8e8 100644 --- a/source/kernel/front/props/PropsStatic.hpp +++ b/source/kernel/front/props/PropsStatic.hpp @@ -7,7 +7,9 @@ namespace megu::kernel { class PropsStatic : public Prop { public: + PropsStatic() = delete; PropsStatic(Sprite &, Fixed &); + virtual ~PropsStatic() = default; inline Prop::Graphical_Component * getGraphicComponent() override {return &this->_graphic;} inline Prop::Physical_Component * getPhysicComponent() override {return &this->_physic;} diff --git a/source/kernel/front/props/PropsTileMap.hpp b/source/kernel/front/props/PropsTileMap.hpp index 993e9b5..bc8408b 100644 --- a/source/kernel/front/props/PropsTileMap.hpp +++ b/source/kernel/front/props/PropsTileMap.hpp @@ -7,7 +7,9 @@ namespace megu::kernel { class PropsTileMap : public Prop { public: + PropsTileMap() = delete; PropsTileMap(Tilemap &, TileArray &); + virtual ~PropsTileMap() = default; inline Prop::Graphical_Component * getGraphicComponent() override {return &this->_graphic;} inline Prop::Physical_Component * getPhysicComponent() override {return &this->_physic;} diff --git a/source/kernel/front/resolver/PhysicResolver.cpp b/source/kernel/front/resolver/PhysicResolver.cpp index 593ab0a..0eeb855 100644 --- a/source/kernel/front/resolver/PhysicResolver.cpp +++ b/source/kernel/front/resolver/PhysicResolver.cpp @@ -11,7 +11,7 @@ namespace megu::kernel { auto target_comp = this->get(collision.target()); if(source_comp.has_value() && target_comp.has_value()) { - source_comp.value().get().on_collide(kernel, engine, *kernel.get(target_comp.value()), target_comp.value(), time); + source_comp.value().get().onCollide(kernel, engine, *kernel.get(target_comp.value()), target_comp.value(), time); } } diff --git a/source/kernel/front/resolver/Resolver.hpp b/source/kernel/front/resolver/Resolver.hpp index 40ac293..8b73424 100644 --- a/source/kernel/front/resolver/Resolver.hpp +++ b/source/kernel/front/resolver/Resolver.hpp @@ -11,7 +11,7 @@ namespace megu::kernel { public: inline ref_set<O> & components() {return this->_components;} - void add(O &); + void push(O &); void remove(const Identifiable &); std::optional<std::reference_wrapper<O>> get(const Identifiable &); diff --git a/source/kernel/front/resolver/Resolver.tpp b/source/kernel/front/resolver/Resolver.tpp index 89f265d..36e80da 100644 --- a/source/kernel/front/resolver/Resolver.tpp +++ b/source/kernel/front/resolver/Resolver.tpp @@ -2,7 +2,7 @@ namespace megu::kernel { template <class E, class O> - void Resolver<E, O>::add(O & c) { + void Resolver<E, O>::push(O & c) { this->_components.insert(c); } -- GitLab