From d18e6ffc710ab6bcc8d75c1972eacaff7308845c Mon Sep 17 00:00:00 2001 From: Cadecraft Date: Mon, 1 Apr 2024 19:26:21 -0700 Subject: [PATCH 01/13] style: todo messages --- src/worldobjects/player.h | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/src/worldobjects/player.h b/src/worldobjects/player.h index 226c7e5..8d6d058 100644 --- a/src/worldobjects/player.h +++ b/src/worldobjects/player.h @@ -56,9 +56,10 @@ class Player : public WorldObject { locy += vely; // Check collision and update onGround = false; - // todo: refactor - // todo: only check with types enabling collision - // todo: when hitting multiple? + // TODO: refactor + // TODO: only check with types enabling collision + // TODO: polygonal collisions + // TODO: when hitting multiple? // TODO: impart velocity on collisions (ex. moving platforms) for (WorldObject* object : objects) { if (object == this) continue; From 6eb86ab76c6bef97884ebb439444124a0da7c9dd Mon Sep 17 00:00:00 2001 From: Cadecraft Date: Tue, 2 Apr 2024 19:29:20 -0700 Subject: [PATCH 02/13] fix: bottom corner collisions --- src/main.cpp | 9 ++++++--- src/renderer.cpp | 8 ++++++-- src/renderer.h | 2 +- src/worldobjects/player.h | 29 +++++++++++++++++++++-------- 4 files changed, 34 insertions(+), 14 deletions(-) diff --git a/src/main.cpp b/src/main.cpp index 36b38a2..7a8983b 100644 --- a/src/main.cpp +++ b/src/main.cpp @@ -13,6 +13,7 @@ // Entry point int main() { auto window = sf::RenderWindow{ { 1920u, 1080u }, "PlatScifi" }; + // TODO: better framerate limit ? window.setFramerateLimit(144); // TODO: build not working on Linux? @@ -84,11 +85,11 @@ int main() { keysPressed.erase(sf::Keyboard::P); } + // Update the game and world if (LEVEL_DESIGN_MODE) { // Level Design Mode: keep reloading the world without updating it worldSpawner.spawnWorld(gameState, gameState.getLevelName()); } - // Update the game and world UpdateResult updateResult = gameState.update(); if (updateResult == UpdateResult::NextLevel) { // Load the next level, if possible @@ -96,10 +97,12 @@ int main() { worldSpawner.spawnWorld(gameState, gameState.getNextLevelName()); } + // Render + window.clear(sf::Color(0, 0, 0)); // Render the game and world - window.clear(sf::Color(111, 201, 252)); renderer.setCamera(player->getLocx(), player->getLocy(), 0.8); - renderer.renderWorldObjects(gameState); + renderer.renderWorld(gameState); + // Update window.display(); } } diff --git a/src/renderer.cpp b/src/renderer.cpp index b033750..81f08b8 100644 --- a/src/renderer.cpp +++ b/src/renderer.cpp @@ -73,9 +73,13 @@ void Renderer::setCamera(double newWorldCameraCenterX, double newWorldCameraCent worldCameraCenterY = worldCameraCenterY * percentEasing + newWorldCameraCenterY * (1 - percentEasing); } -void Renderer::renderWorldObjects(GameState& gameState) { - // todo: fix on mac/linux +void Renderer::renderWorld(GameState& gameState) { + // Clear/render sky + window.clear(sf::Color(111, 201, 252)); + // Render world objects for (std::vector::iterator it = gameState.objectsBegin(); it != gameState.objectsEnd(); it++) { renderFromData((*it)->getRenderData()); } + // TODO: Render UI + } diff --git a/src/renderer.h b/src/renderer.h index e8f5ea6..c3013a6 100644 --- a/src/renderer.h +++ b/src/renderer.h @@ -26,5 +26,5 @@ class Renderer { void setCamera(double newWorldCameraCenterX, double newWorldCameraCenterY, double percentEasing = 0.0); // Render the entire world - void renderWorldObjects(GameState& worldState); + void renderWorld(GameState& worldState); }; diff --git a/src/worldobjects/player.h b/src/worldobjects/player.h index 8d6d058..020177c 100644 --- a/src/worldobjects/player.h +++ b/src/worldobjects/player.h @@ -67,7 +67,7 @@ class Player : public WorldObject { bool overlapped = false; if (object->hasAttribute(ObjectAttribute::Collision)) { // X movement pushout - // todo: better way of doing the 0.1 thing + // todo: better way of doing the 0.1 thing (subtract velocity instead?) if (locy + height - 0.1 >= object->getLocy() && locy + 0.1 < object->getLocy() + object->getHeight()) { // Within the y if (locx + width > object->getLocx() && locx < object->getLocx() + object->getWidth()) { @@ -81,13 +81,26 @@ class Player : public WorldObject { if (locx + width >= object->getLocx() && locx < object->getLocx() + object->getWidth()) { // Within the x if (locy + height > object->getLocy() && locy < object->getLocy() + object->getHeight()) { - // Floor/ceiling - locy -= vely; - vely = 0; - collided = true; - overlapped = true; - // todo: should not be on ground on a bottom corner - onGround = true; + if (locy > object->getLocy() + object->getHeight() / 2.0) { + // Ceiling + if (vely >= 0) { + // Already traveling down: do nothing + } else { + // Traveling up: stop + locy -= vely; + vely = 0; + } + collided = true; + overlapped = true; + } else { + // Floor + locy -= vely; + vely = 0; + collided = true; + overlapped = true; + // todo: should not be on ground on a bottom corner + onGround = true; + } } } } From bff60a5f8c46b8622fb5a5b698199d33b4848374 Mon Sep 17 00:00:00 2001 From: Cadecraft Date: Sat, 6 Apr 2024 19:56:56 -0700 Subject: [PATCH 03/13] feat: bird animations --- CMakeLists.txt | 27 ++--- src/assethandler.cpp | 15 +++ src/assethandler.h | 4 + src/assets/LiberationSans-Regular.ttf | Bin 0 -> 350200 bytes src/assets/enemy_bird_0.png | Bin 0 -> 19413 bytes src/assets/enemy_bird_1.png | Bin 0 -> 19356 bytes src/assets/level_1.csv | 4 +- src/main.cpp | 3 +- src/renderer.cpp | 9 +- src/worldobjectincludes.h | 1 + src/worldobjects/animal.h | 146 ++++++++++++++++++++++++++ src/worldobjects/player.h | 2 +- src/worldspawner.cpp | 7 +- 13 files changed, 201 insertions(+), 17 deletions(-) create mode 100644 src/assets/LiberationSans-Regular.ttf create mode 100644 src/assets/enemy_bird_0.png create mode 100644 src/assets/enemy_bird_1.png create mode 100644 src/worldobjects/animal.h diff --git a/CMakeLists.txt b/CMakeLists.txt index 388fb5c..930d73c 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -55,22 +55,25 @@ install(TARGETS PlatScifi) # Copy over the assets folder # TODO: use a GLOB set(ASSETS - essential.txt - tiv_logo.png - grass1.png - yellowpad.png - spike.png - level_0.csv - level_1.csv - level_2.csv - level_design.csv + essential.txt + tiv_logo.png + grass1.png + yellowpad.png + spike.png + level_0.csv + level_1.csv + level_2.csv + level_design.csv + LiberationSans-Regular.ttf + enemy_bird_0.png + enemy_bird_1.png ) foreach(ASSET ${ASSETS}) # This makes files, but corrupts image files # file(GENERATE OUTPUT "bin/Debug/assets/${ASSET}" INPUT "src/assets/${ASSET}") # file(GENERATE OUTPUT "bin/Release/assets/${ASSET}" INPUT "src/assets/${ASSET}") - # This copies the asset into the build assets folder: - file(COPY "src/assets/${ASSET}" DESTINATION "${CMAKE_CURRENT_BINARY_DIR}/bin/Debug/assets/") - file(COPY "src/assets/${ASSET}" DESTINATION "${CMAKE_CURRENT_BINARY_DIR}/bin/Release/assets/") + # This correctly copies the asset into the build assets folder: + file(COPY "src/assets/${ASSET}" DESTINATION "${CMAKE_CURRENT_BINARY_DIR}/bin/Debug/assets/") + file(COPY "src/assets/${ASSET}" DESTINATION "${CMAKE_CURRENT_BINARY_DIR}/bin/Release/assets/") endforeach() diff --git a/src/assethandler.cpp b/src/assethandler.cpp index 0d2d68e..d15fa3b 100644 --- a/src/assethandler.cpp +++ b/src/assethandler.cpp @@ -1,4 +1,6 @@ #include "assethandler.h" +#include // DEBUGGING + // ONLY sf::Image AssetHandler::getImage(std::string path) { // Return if image already exists @@ -14,3 +16,16 @@ sf::Image AssetHandler::getImage(std::string path) { images[path] = img; return img; } + +// Get a reference to the font, not a copy +sf::Font& AssetHandler::getMainFont() { + if (mainFontLoaded) return mainFont; + if (!mainFont.loadFromFile("assets/LiberationSans-Regular.ttf")) { + // Error + std::cout << "ERR: Failed to load 'assets/LiberationSans-Regular.ttf'" << std::endl; + // TODO: handle + } + std::cout << "Main font loaded" << std::endl; + mainFontLoaded = true; + return mainFont; +} diff --git a/src/assethandler.h b/src/assethandler.h index 75e584c..bda542a 100644 --- a/src/assethandler.h +++ b/src/assethandler.h @@ -8,8 +8,12 @@ class AssetHandler { private: std::map images; + bool mainFontLoaded = false; + sf::Font mainFont; public: // Get the image from a path (ex. "assets/tiv_logo.png") sf::Image getImage(std::string path); + // Get the main font + sf::Font& getMainFont(); }; diff --git a/src/assets/LiberationSans-Regular.ttf b/src/assets/LiberationSans-Regular.ttf new file mode 100644 index 0000000000000000000000000000000000000000..626dd9364f12c6036ec8eae38c4fc73735b9ed23 GIT binary patch literal 350200 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�BewIm~1i1qDi>|wQD|Q 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≦`0o(@JB0sERu3zfUsRNu(xa|rA`ieJ z55OT0z#$L7ArHVI55OT0z#$L7ArHVI55OT0z#$L7ArHVI55OT0z#$L7ArHVI55OT0 zz#$L7ArHVI55OT0z#$L7ArHVI55OT0z#$L7ArHVI55OT0z#$L7ArHVI55OT0z#$L7 zArHVI55P|zfS)`7KY0Lt@&Nqg0r<%S@RJANClA0+9)O=b06%#Ee)0hPs`@Kej-rUiagSd2a~V1U0>=D(GWD6&)2gc~_1s_qmKbVSMVMEhl>}!7^VN!A zejc8z%$sTO#fKPZKu3We%*wKST(6#KRhMH)-xPicBM^BNNVt6ab`Nuf&4hBLYOpvj zpP|E|6%>`^6>GUTuTt>6d{%IlHZM50sFb0r!m98$w=CDpFDeZd&j{u-{Ao}%k1mzu zl`#Cdzn4~*GW_Y4_4%rY1R3sr6k`Z%+62*>~Y z0HHem_@RLJPzx;_@J(rMk;tahEcac(QH*%tD7;5H3`gOur)IhD3XUY-eOGW!@?CEk=Oo|tmT^w< zU2hrZB;S3va8B~wcMInv-}RPpPV!xEIW^1mmT@HeU2hrZWWVbzn-C*_PgFP&dGk)TgExr?|REPC;MG*8Rulb>n-D)?03Co zoRj^ox15^gddoPH{jRr+bF$y{mT^w@yWTR+$$r;c#yQ#VddoN``(1At=VZU@E#sW* zcfIA*EZ1Ack?eQ9Wt@}!uD6VHvfuTVaZdKT-ZIX~e%D*ZIoa=e%Qz?dU2i!x%k`FV zB>P=&8Rulb>n-D)?03CooRj^ow~TYL-}RPpPWHRrGS10<*IULp+3$MGsadYKj3e3a zddoN``(1At=VZU@E#sW*cfDntll`u@jB~Qz^_Fo?_PgG4YL@FQ<4E?qn1^$+-^Dzf zll?B{;hgMuF%Rctzl(V|C;MH@!#UaSVjj-Pei!pnvs}!>k?eOd59egRi+MOF`(4b# zIoa=G9?r>r7xQpV_PdyebF$y{mQ%A_Zy86j-}RPpPWHRrGS10<*IULp+3$MGI4ApE zZyD!gzw0gIoa}eKWt@}!uD6_;<$B9FlKrl?jB~Qz^_Fo?_PgFP&dGk)TgExr@A_n^ zS*}l(8X%kr5Y7Y$X99#X0m7L8;Y@&VCO|k7Ae;#h&IAZ&0)#UG!kGZ!On`7EKsXa1 zoCy%l1PEsWgfjucnE>HTfN&;2I1?b82@uW%2xkI>GXcVx0O3r4a3(-F6Cj)k5Y7Y$ zX99#X0m7L8;Y@&VCO|k7Ae;#h&IAZ&0)#UG!kGZ!On`7EKsXa1oCy%l1PEsWgfjuc znE>HTfN&;2I1?b82@uW%2xkI>GXcVx0O3r4a3(-F6Cj)k5Y7Y$X99#X0m7L8;Y@&V zCO|k7Ae;#h&IAZ&0)#UG!kGZ!On`7EKsXa1oCy%l1PEsWgfjucnE>HTfN&;2I1?b8 z2@uW%2xkI>GXcVx0O3r4a3(-F6Cj)k5Y7Y$X99#X0m7L8;Y@&VCO|k7Ae;#h&IAZ& z0)#UG!kGZ!On`7EKsXa1oCy%l1PEsWgfjucnE>HT;QzJvHE>o{*M8^Tb7$tBJD&(q zAo%f8Yt#@51H*^$S#)N0)DUBhQ8Y&R8Zx5;jC?rw`DkiieKtg&wP|Xt&zDl>BWarQ zsI|PQHHk@}4?!F>J_ij5@(}?6i4vZ2-+%qrI`{5-X9h=&ucp5;?6ub3XYaMwUVEQ& z*8Vtm*?XqZ-ZPE%o@uoAOryPL8tpyPXz!Uud(Sl5d!})UE4`L`ou%!HuH}AbX**GL zZM@(fwa1j0*%KP=J=19KnMQlhG}?Qn(cUwS_MU09_e`U`XBzE2(`fIRMtjdR+Iyza z-ZPE%o@uoAOryPL8tpyPXz!Uud(Sl5d#2IeGmZA1X`I#=U5q&b_ba2>F_pPEw=ET%uo_R`2Cv!f=mQ+>YU1rZ_EgS&nI@ zB}Yb=#n+>j9QBnPwJ4@CI5KNz12Q-_Yh=w=ikrTuIKj)Iy6|$SF1#E$#v{C3xkSG< z)rFT!b>Z=fB_Hl(iqoVui}e({v?eB*N})8BWEE3$LR2w-E~=bZxt1Y`1MFZL*MxuV-+Dsx?){p~rj^g6OGy`6~9U}rX)Gn>ts&F0Kzb7r$S zv)P>4Y|d;pXEvKNo6VWc=FDbuX0ti7*__#I&TKYkHk&h>&6&;S%w}_DvpKWboY`p3 zY&2&!nll^CnT_VmMssG9IkU-}*<{XaGG{iKGn>qrP3Fudb7qq{v&o#qr4d%=Sb7q4%v%#F%V9snXXEv8Jo6DKa<;>=CW^*~S zxt!Tt&TKAcww5y+%b9KE%%*Z?Q#rG#oY_>)Y$|6ql{1^lnN8))rgCOeIkTyp*;LMK zDrYv8Gn>kpP36p{a%NLGv#FffRL*QFXEv2Ho64C@<;Yz{shrtV&TJ}YHkC7* z%Gq4q*<9V(T;17R-Pv5-*<9V34du*+a%Mw0v!R^XP|j>9XEu~G8_Jmt<;;e1Wza$x{VBw)9^IEh-0IPNDa5TF-Iqe#>d}2E#90r% z)Zo!dV6O21vwgs<518!(<{A$$>jmZ-4>0Qm<{A$$>jmZ-4>0Qmrhb9rdZ}N0A!7CE zdlK=*BW$&jPFvcHTu*=+-lILF5*_hWLGhN z(Xz!$mSJC}Wzph_`S=0JI8wO;!Y|Cln&elD<5-kS*Lw9ShVNdiH}olnxb=oU#qd3h z^_o6y5U)+Owk)2lO!N_h#L1;?P55=lIN5sY;%TMW(Ym#%H8l_4>!svZC9Rxwkv>{b z-qfs*7JPhTLg}LgaT7`(Er{C?(JfYdgro5ZY7*5>&}A#&DdAU|7er0?g-h(4S*K3W z7jx}|NsVcI-n$f=Y4f6`?f89M5KAH?QE|-`OPlfSsnSczMbAc8P|X%$gCYFXR7g%ws{-oiOcn#j*SQ-X`xx(t35 zvsu2RoZVW{vJm4F1519qx4h}rWi7X194(yNRMNa?*^;J84Bgg6-;}|H)0P>@4C}Xb zX5RdE8;ZtY#PMumpwRLI<0qgLoQ%eYO z9X@qx2_de-rA{p&#PtbNr2)4|}r$%jVre9L;ZOZEc!2XOZ6dw!d6!`@_JOU{h0aEJhEP;kRCAe{)%z;>8x9 zw@~A)^Gju-+Nz_aPTyd)b@eW4S$Nx=Wni*YD9w|>ud*(*#3c(_Fhpn1ZNgZ(Ef)!w zV4rn9K1pwFN(m@g(gwLxb6c0qDQRw+joRn6%wB-US^0uxOKf~KRe3a?YaCgV)h4X1 zx1OlCo~XB;sJEV|x1OlCo~XB;sJEV|x1OlCo~XB;sJEV|x2I#hJss=S_N=W}+Y?xO zyk2cj#I?uk)%HYOd)(HwFP@_7+rS)wz#IX<9D%@m#{hE#0&@fc^QjEX2iV0^bS?$V z5qR+wwKai_pW2#;8$Y!*VNx+aFz*O2)5THl9o+y=EFuguY&VUZLQ0e$gdWc%NDww z2*{A;seoZj;xPidSmUKIOC$nOR2+hCny*I$n7CkeTg$BxjtJ;EgmNAfFq*z_vvY z=P-6Ksmk&7NBp}D5x>VDH~03%HT<66yEM$B7t0~@rZiVT#x0wh=JE@O%KRFaB$EY* z@_6N061n^VqT2tmUoL3X%jRa3Ek@0RJXxD3CuX!dX2_AX`P7M3xkZ<8lBqCSTNs^~ zQGv)UN7iOk8cD788YS_{c%6sL^VLqulXZD%C*{ey!kQ-)M(gr|crs1Or+OJC=ToQT z$*BdB)fU7i7Q`kM#OexS9`9)d7p4@%3M-pdRiKpdh0zIx(b~f3#KP#L!f0K2u2UwA z_vi^8UF*?osC@X_!tSY-&t&ld7s8}*b7!}C@d-uo`l9%FFFvKH{KSHIEjGV2OeX() zd`eM#YEgWe7oRLVisC*$x$g6mxX(}G)5@j2{biXVX&!Hh`@ALY^Om^JTjD-%Kkrmr z^Lb0$=PmK#{625F?(_DqO)KIpai6!ueclo;F7NY>^-W!SyyJMxJC4V^<9N(Fj>o(i zH~k7dP~7Jw*L_|R_hl1($2yg368B}3xX(}GK0k^3viW)a{-PX3y#4-)ulv0H{^E77 z-F|<`HNU^&xG#&}U-5Nc?pP<%9^PYCR~(OZ631iSaXgkgj>o(i_jpO&vA*S+#C_fp z_jya)=Phxcw_monF7o&4mblML;(ojR{$gHS_xbz%6<_!H`TbQ~m)~Ekw}`h~_uK9F zSDfE(cPuw$M%h@WaXgkgj>o*?cr14uk9jk0Iuly-?emtn&s*X?Z;AW7CGPX~%SyX^ z-V!gq?(>%GK5y#9p2H%mpSQRjY>U^ff%5x0_4`ZmO5B&t@2~i}FPmKV+a2>JUtEjZ z9miwdaXfBI9FKX&@t8N`)-It%-#%}N`@ALY^Om^JTjD-%zpUS1QkUOfaop$a_g8$~ z=k4be9r|)h+^<{W#rb`?*#|Zjq%QxO#C_fp_jyw`Pls9_ra5NvEpu;Lv{d{!@j7f9 z*dxBZB5~io5qqULKGm~tCgA!MFJ5017kgyZN5N0UD$YGYzz`i`c>i{x4vR$z&-CM!7NI;>D> zS@~813n0w1q-8nta7mUF*JYV$VT&^I=7to)i*puRm7hDxoYcF_S&hyzSyD+B(n+}F z*F)cAtZDTGPiy2h#nw8Z{xnj86v9;sI zEx~b!rRDq}Tj?6EH*i(LRxa`hxg```u+g;;ELre-l;N_Hqj_^5rc~w9`1wgb%5PF? z&{y#?6$^4PNNeSDwhoV@x=R|2#*cI5X#Bj#B@L;s-gHT$x&aE|?I#KUK8b8rd`cp* z3Sl`s(}?GwVL^~u5097|QojvC`~v;kpx;To1NvC%80g=n-UEFibpmuY1r8-a8ooI3 zTeiOpLj0cX5zud?-wKlHqZ!nJUlSb>B<0scL7$cx6@>Ub(b1?i#o7YaFEU8Tz!%SV zgA^Y1t-)ygO64s@7@J0%s8UV^$3kHWXoRCq(0 z0Z&J>;8kcTyae5c-$-5s-$YLbF9*AjF#}IPXTZZxEj;%)c;k6U_+(BClISI&M&_td zIqFnUM_J#?IjS#5ZOc)wkV>Kz73nuYA5OoTyY}lGwcX3LLumARGPNK2N<&8@(AUY- z-b@YPq4aBVoi*YpUVKh8t$;e3pe+C@JB1o}BP(qIl zQM2*B< zQ3G*jR8QOyT@2ibeA9`$qkl@=66=8d(I+qLGEf-O&Q#uBer`GrEPiBWeK_jWiQ?N8cpwisln{Moq*W z(Oh8B$Qf=1x{0_Wx)E43@(tqd=mz4h=4lEjZkhnW~fVeCA4smC+lDH#!4DIiVI;oL|sFCk|M2$QH&Od;b ze@5ID{gk*f`U!DI^uK{c6HgI$NB@hsE9xQcjQ*OqBl@4fqLC+wyQBX>+!Z}R+!_6M z;*RLAfJGx~h`XczM%)$sn7A|guf!eEe*qSa{E!&Gz)p!^{Z0lT9g zQ6p=q5m*OOp6~k0<(Z48_E@|xrsK&h@4=Vw{6Ccb6`=ScPo)omdWY2E9Cai|t+#xI z&w90IR-eS4!P{~GdnRwg$U9_kdnUXE24OIQaJ0;c@zxXD1r{8j{Hp;@(mpB~#LMGo zwD}@+*duEFoc4>6BS+pmvPWa1f>Fyy9Upy{#zyb{ z^wdw^|LJWS8*|o}@1H*U^hdS)8Dd}I^>)@%ivQ8g%#}Xp)N}4V=he?n{p>@Z-G8n- z_i?6Hp1bY5it{c!ul2k~&)az3yXTKR|AzCweSXjR`#(2^*OQ+c`#C&Ch5p<I zp-1_C;TgpjwJE;D?7hZT&3Bo++wphVB$O9?C0@DR7()SkfQqN$)?icO9(dWC3?GuM z$?f59g4WcGZWhD)HYDy}yzsmlq zVQLC->eG9?~6BuOi%|Na_2 zh3USYPh-j`Le=>Op$jy>i7CGRdzrG8@CCvb3H$fUE~fYIoi~_%fN-#$s*2#2kMJPjA;QCiM+9OV3uKMK=La1XX~|V^ z-&HW>|Lw8yY179i`A$v*6LKB|OFiF#RrDJ;96kfpUm&~%(l3#CB@&-R#U6>a!4uJI z@ItiLJP#epd5_^r4}7vNgoX7e{7KKiT=j9-6F+3;aJ9#+PM@JW0rd=Fm@|H8B2OSlytgO|fQ@V)Q@{2+Y(J_`T7o$%$m z7Jhr5hL7Hj@W=ZSeDCgppWQ?7srxSc=ceH+cLe<6o&_JcW8v?1Dty~Ez>n>f@L78U z-rX0Le76V&`IJP8w3kwlU(*S*_vA}q(ti@3gK@BQk7og&E6G#gypq2hTxKmbfIJ@O z?2q&9GP=JW{FI@z$mg%x@Jso$a`scavL?SLp|6J%TSan(mM&#su@|hRtWU2G&g6>9 zSs1rRf^#u8hrz=*Y_-&3z<}#@Qc_kwMNA0L94Rg9NBJ5O!7t!*JOPj572tjj<`}hD>$?bk&o76M z^K0PGd=C7HFT|SP9l;9tF#k6A-Jk3M>`bn}3hgG+4~J)g$MPg<*OcrgNl^&j%QKPx z9C$oWB<^DV+XN<_Og;?wqvUgdk1&0g!0?GAELnwEyDEd<&}w)L{gnC$#d=iUADP|x zY?rL(S-XS_R)#lW6?2T-;aHWNnz#u5!!O6mR!?*E;@MC-_d=_5~|HQN4i?|hDhnK^{@V)RQ{2+V= zKMMcAo$v*`7Jh%9hL7Kk@aOvyeE05xpWZ|8$@?z+@225vcLel>?-(~{V{yXLVL--C~<%fm##wJ92Gio zlyo!cW}%Z~m}d;>nWSejPZjf2kzPf574tmIJmi`5=!BpDLFRvuWjz{WSmYspzie0` z>0w2`dZ&}mbk@6qWmk~)`3y#;D7xbwWqGLcLQIZsceoOmgHH z^!weT6JDQs^w8fR!*af!#nbavdU*cZ)b`X)_;cQaeX@743nuF?4ng*-u0oiJa3jJz zgqsoC5N<=b3*lP`_aS@-;bDYF@RWTVcs1~D8S8il3G5aKizJ_->5ofF_R)UndUZrW zIxMpItyx+X)Ak%6_y3>cAL=?5P5nCcT52zLdw-L9Beg$uAa#&C zwQr?Wu zGzLNVO0FOn4v75`y!)`*P%sy>eeIy?WbaMP!;;{5A$h7id5($qDLZhD?;|75sjSD| zyUY#~oE`oV>i$?|9H2&#@p85~fpZ^m|Bm_qBQqYC1M46WWCr5JS?|YNZ}lK|QY`Q9 zwdDh7HWB>amtZj6Cvk4bAL*ZZ-;sCndrNdV$wra%Y7o3X$HB&n-otV?egqi@=#LL6 z;{cpuU5JdAV>e8mLi)szHJJ}{@4Ww58CY8?!JOZV1OtzilhykV*75=R;2)&r1Js+a zRprNJuJQ?9RX)U7mk+<~rK~6Ir)W+;U1^=e=~d0I>3)7c#n0*USK8;GrF`h~^!fPd zgUO?u^{P*6*}5l zjrXdaq?IRPUzfUV49}Zn732Lc8 z8!7{9A5;U{c27dT)w|P>Wn0`uI(zUP$4*6Gm+YLCy>Xq7j9EAY=AyNS+8U z6_{)wJjRr#1qN#g4>5(SA0eTpr)nfU$^6*a0G*nehyLn8DD$+0u5YA%O!{7d$z7z+ zB0ZCk+Yu&vLB{O!DV!PyuiTi$iEpufGd7#N2(j2UJPmX*B_-b9+Dind zmLyBUk`nCwMI{y37ay7a8}5SlrMIPDP5(N*1N+{)vG4t+?0KWM5Z?!!9h?u|r%Kxp z{Q459{YXos_R96&GiN#b|8a5_$v+;M4}5H#<-F#{BlDpT!CBTdK7(=tjl=}M-T0ug zCT*<69A*Eyl=FOD$TK+z8Nu&-8IluBBdVb}9aLD|hr#wT?zlr(Z95R2o z8xyHRL(Z@F@X+(CJVVc~?Hzi4)#uRjZ~K7l)&5ofpTUzgiD%mwd%BGxFXi|OX*pGq zC^?1NeE-}>Eq9_?PS^%POR!D8S-~lS>4_T?ZHaFsHsb8gq~v1k^xuzN{`-@U$=-fA zCOijw_P1e=el_;uPhkIj9QNIxDj8dHK{%#lUdg(WjislSjw!vW^uCgHrE5xGD&1YO zuB-;>_$#}p?CP@X%Vw3WF58}-obF8jG`%tXb~G{?7hM?5i5`rOWX5NHRDNms&E@x% zKUDr``RelR6;&0}E3T?|u;TfOcPmRP$5vic*;@JC%Ev2zRQX)xk*ZYHxT?0Q?^La= z`bE{&s#mLn>NBd(t#;Kjs;|de=Tyt<8u3wLEL$?As2V9XxH1g* zbl@`(&c>AngiBeX4<-6gLbPx&!21@Iw5kU6Ny|=0$uqKddUZ9Jqz%DWQTNrzHxqfT zLr4afi6(=8OifCQA3$sd(yNhk7=lnt52El(*%!jA5U$BKqqmyFnc1JC$C|??^xPtZ z+aXB;SDp$+g!Msph?b& zMcOiikTm2!6D>It60L$n4Unh-(lnsPPH>-z zvrmQm{)}xyyMhwr??e7RId( z|I*%`T>dYy4blUBkh%{&&!jfKFA(861hwhW;? zdnHk>;^gZ_fFHWD8wlH}xLp$Tm|`FOaU;~_-b zexB=-3|g}WtyqJ8Sc5+JTS&bIQm=u;YoPx%D6Rg=NiT>CL z4Q&Wcfkf>X<$aK<9lGs?WNXo~K1lZ%^xKEgE_Y2gByC5@Zb;jX(%q1_9TK-g;&w>f zjynpxgUXYRw51qb1C2H*wF46DK1WK zfoO9BN^L-?4H(rMP;vuGZa~QmD7gWpHlV}?JQHq2d*>oFBixFx6k!>{a)dh(R%CYu zp|2fs*D~{Q{bc3J`^ix(!<{MzYT1DAO{%k{!7zjc(AwSE_Of4RdxHd?0<#F)gJI#% zgNAT@c3-$L_&UYkVIS!I2nP@jBD{&T!@x&@-vxdTA)8%^+Ek~d;a2G5 z1-5h@X21>Mn}{F9-fWU}9)VOD(@-yJg@$l_D|Ft6AbQ=6@%kpx(Uu@>T9BR)UG_o? z`>4y8Ktq3c4*S~Hy4PV;iN0TB&8J}`O6(;B@<*!3bVRR0SNqU^rv>HgySN8L`&&`R zi_nYK)eD{UvcI6=U?iTqcjHNRH=bm@!5Ij5Lld!fe~Hq04NE^-TR9qfDUWd8j`SVu z!&zweYP5TGcp}>iZT8?@B4bJ9;iyEeXTeoC^@5hs@FHq_3Aiu2j^jyMw+C88i|~DP zZ2c_Au7+%@!A-_jPxwpZQjWdgwhFTJm>jFn^Q$4pO7!~b@C}6hxPAcmO^o|Pz|!+a z5RM|ejrehdcM;x0$YxhV?v=c=&VhCgK|6sRm$oSiZ znqNn)G6we`&t9bML)vdZzX7}-=?8!hBFLCL1bi6b2O(@hKxp zwJP_Q+*d21$+(Btfoo4tM%m&!PqgzY^s6Hh-@LO2c5pn4zI9~d&cXfPZuh^Ap&rxn zI`o@pT1J5M-9#Hx@+6UGz$!k4%C&DW_T%1u5w(g&UWWvGP!nX6`y4IV7gShpuIAHX zBU+Gu-mEnK@?;P_Ne}J|QqZ70BlMYd4CA#LBX0}y?8cQn2zzl=^Y=oJd@hB*1%4Yf zPgCH1042dH&=%$P;ag)JTm97p=3GoQ^>naA6xV@v{k>q?N0{rI%9f z2YwUb2=4^^jseQ_@*a(>#$Hd}9`DK5D{`W(cIWfn{yX$ld9IvDDw>ezuJoz46Hjr_ z+QwcypU}VH@%eB!^uAYgj}SjI-U59TL7o{&riwO0)*zg54Wmq+6{=IIt2d{4eLD9t z#}<=hUGY`wC&gZuTH_~_XpA!&>R!eL^^Rw(YRp=L`fHGLBHnisgS%0lJq4UEA)~3+ zdT9^t8!ah1(EiBKv~hjO2i+?j>RnbY9#!jz~lN(FxPlY2TBE?BkJ%4%o@x|on2#W`E=E|6a1Vm) z``wT5Ai{SM9!2;*f@norx)xy_!qW)9K#-n!9^oZ~R}pq0{089=!rM5nF%@sJA;A+* z^vhYpln)EhbC3b>#M8p(#19F#3bgz9iBI}{Ec^R-dJ5!81^WhyU&`1wL965{o`yMS z=?}6LVX`xSRnKHtp6N_qL1 z{XRbV$!2+aT!1hg!6D2*7}|GBiNto1GFVSpRpS0B)TXtE`qlgcz(XbYM(GdgUFbje zUxwar#|X4H(Aa#6zU>lsF=Y(%$P*4@pDBDdXdZk6oa12cNb)TBE`9{H=lyyul*J>K#%tJ{Wp Y&|?BN{_*!W3tm6{caJds=Lh%wJ%~ewUjP6A literal 0 HcmV?d00001 diff --git a/src/assets/enemy_bird_0.png b/src/assets/enemy_bird_0.png new file mode 100644 index 0000000000000000000000000000000000000000..4c8595971a040933e7970c19db2f469ec799da58 GIT binary patch literal 19413 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 H&jbGtfMRvy literal 0 HcmV?d00001 diff --git a/src/assets/enemy_bird_1.png b/src/assets/enemy_bird_1.png new file mode 100644 index 0000000000000000000000000000000000000000..40a2ab09bef1f7acbc2a3d94101f5441810560c4 GIT binary patch literal 19356 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.0, 10.0); } if (keysPressed.find(sf::Keyboard::P) != keysPressed.end()) { @@ -99,7 +100,7 @@ int main() { // Render window.clear(sf::Color(0, 0, 0)); - // Render the game and world + // Game and world renderer.setCamera(player->getLocx(), player->getLocy(), 0.8); renderer.renderWorld(gameState); // Update diff --git a/src/renderer.cpp b/src/renderer.cpp index 81f08b8..a6533df 100644 --- a/src/renderer.cpp +++ b/src/renderer.cpp @@ -81,5 +81,12 @@ void Renderer::renderWorld(GameState& gameState) { renderFromData((*it)->getRenderData()); } // TODO: Render UI - + // TODO: refactor/abstract this + sf::Text levelName; + levelName.setFont(assetHandler.getMainFont()); + levelName.setString(gameState.getLevelName()); // TODO: use display name instead + levelName.setCharacterSize(10); + levelName.setFillColor(sf::Color::White); + levelName.setPosition(24, 24); + window.draw(levelName); } diff --git a/src/worldobjectincludes.h b/src/worldobjectincludes.h index 667edd3..4c7c393 100644 --- a/src/worldobjectincludes.h +++ b/src/worldobjectincludes.h @@ -9,3 +9,4 @@ #include "worldobjects/staticdeadly.h" #include "worldobjects/leveltp.h" #include "worldobjects/movingcollider.h" +#include "worldobjects/animal.h" diff --git a/src/worldobjects/animal.h b/src/worldobjects/animal.h new file mode 100644 index 0000000..a2dc07f --- /dev/null +++ b/src/worldobjects/animal.h @@ -0,0 +1,146 @@ +#pragma once + +#include "../worldobject.h" +#include "../constants.h" + +// The data for an animal in the world +class Animal : public WorldObject { +private: + double velx = 0; + double vely = 0; + bool onGround = false; + long frameCount = 0; + int animFrameNum = 0; + int animFrameMax = 1; + +public: + // Constructor + Animal(double spawnx, double spawny) : WorldObject() { + locx = spawnx; + locy = spawny; + width = 2.0; + height = 2.0; + objectAttributes.insert(ObjectAttribute::Collision); + } + + // TODO: different AI based on animal type (enum? stringly typed?) + + // Input: acceleration + void accelerate(double deltax, double deltay) { + velx += deltax; + vely += deltay; + } + + // Input: jump + void jump() { + if (onGround) { + vely = -0.5; + } + } + + double getLocx() { + return locx; + } + + double getLocy() { + return locy; + } + + void teleport(double locx, double locy) { + this->locx = locx; + this->locy = locy; + } + + // Override update: gravity and acceleration, and AI logic + UpdateResult update(WorldState& worldState, std::vector& objects) { + // AI Logic + accelerate(-0.01, 0); + jump(); + // Physics + if (!LEVEL_DESIGN_MODE) { + vely += worldState.getGravityStrength(); + } + velx *= 0.88; + vely *= 0.96; + locx += velx; + locy += vely; + // Check collision and update + onGround = false; + // TODO: refactor + // TODO: update all collisions from player + for (WorldObject* object : objects) { + if (object == this) continue; + bool collided = false; + bool overlapped = false; + if (object->hasAttribute(ObjectAttribute::Collision)) { + // X movement pushout + // todo: better way of doing the 0.1 thing (subtract velocity instead?) + if (locy + height - 0.1 >= object->getLocy() && locy + 0.1 < object->getLocy() + object->getHeight()) { + // Within the y + if (locx + width > object->getLocx() && locx < object->getLocx() + object->getWidth()) { + // Side wall + locx -= velx; + velx = 0; + collided = true; + overlapped = true; + } + } + if (locx + width >= object->getLocx() && locx < object->getLocx() + object->getWidth()) { + // Within the x + if (locy + height > object->getLocy() && locy < object->getLocy() + object->getHeight()) { + if (locy > object->getLocy() + object->getHeight() / 2.0) { + // Ceiling + if (vely >= 0) { + // Already traveling down: do nothing + } else { + // Traveling up: stop + locy -= vely; + vely = 0; + } + collided = true; + overlapped = true; + } else { + // Floor + locy -= vely; + vely = 0; + collided = true; + overlapped = true; + // todo: should not be on ground on a bottom corner + onGround = true; + } + } + } + } + if (object->hasAttribute(ObjectAttribute::OverlapDetect)) { + // Check overlap only + if (locy + height >= object->getLocy() && locy < object->getLocy() + object->getHeight()) { + if (locx + width > object->getLocx() && locx < object->getLocx() + object->getWidth()) { + // Hit + overlapped = true; + } + } + } + } + // TODO: out of bounds respawn/death + return UpdateResult::None; + } + + // Override rendering + RenderData getRenderData() { + frameCount++; + if (frameCount % 10 == 0) { + animFrameNum++; + if (animFrameNum > animFrameMax) animFrameNum = 0; + } + return { + RenderType::Image, + coordType, + locx, + locy, + width, + height, + { 255, 0, 0 }, + "assets/enemy_bird_" + std::to_string(animFrameNum) + ".png" + }; + } +}; diff --git a/src/worldobjects/player.h b/src/worldobjects/player.h index 020177c..718db03 100644 --- a/src/worldobjects/player.h +++ b/src/worldobjects/player.h @@ -19,7 +19,6 @@ class Player : public WorldObject { } // Input: acceleration - // TODO: accelerate instead of move void accelerate(double deltax, double deltay) { velx += deltax; vely += deltay; @@ -126,6 +125,7 @@ class Player : public WorldObject { return UpdateResult::NextLevel; } } + // TODO: out of bounds respawn/death return UpdateResult::None; } diff --git a/src/worldspawner.cpp b/src/worldspawner.cpp index b7c55cd..e2b254f 100644 --- a/src/worldspawner.cpp +++ b/src/worldspawner.cpp @@ -63,7 +63,12 @@ void WorldSpawner::spawnWorld(GameState& gameState, std::string levelName) { std::stoi(parsed[4]), std::stol(parsed[5]), std::stoi(parsed[6]), std::stoi(parsed[7]) )); - } + } else if (parsed[0] == "Animal") { + if (parsed.size() < 3) throw; + gameState.spawnObject(new Animal( + std::stoi(parsed[1]), std::stoi(parsed[2]) + )); + } } } catch (std::exception& e) { // Failed: re-clear the world From 94a33167d0ac5bfc97f54f12ff02db7efd69e1e3 Mon Sep 17 00:00:00 2001 From: Cadecraft Date: Sun, 7 Apr 2024 08:23:47 -0700 Subject: [PATCH 04/13] refactor: named animal data --- CMakeLists.txt | 2 ++ src/assets/enemy_fipa_0.png | Bin 0 -> 24538 bytes src/assets/level_1.csv | 3 ++- src/renderer.cpp | 2 +- src/worldobjects/animal.cpp | 33 +++++++++++++++++++++++++++ src/worldobjects/animal.h | 44 ++++++++++++++++++++++++++++++++---- src/worldspawner.cpp | 18 +++++++++++---- 7 files changed, 92 insertions(+), 10 deletions(-) create mode 100644 src/assets/enemy_fipa_0.png create mode 100644 src/worldobjects/animal.cpp diff --git a/CMakeLists.txt b/CMakeLists.txt index 930d73c..4632eee 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -38,6 +38,7 @@ add_executable(PlatScifi src/worldobjects/staticdeadly.h src/worldobjects/leveltp.h src/worldobjects/spike.h + src/worldobjects/animal.cpp ) target_link_libraries(PlatScifi PRIVATE sfml-graphics) target_compile_features(PlatScifi PRIVATE cxx_std_17) @@ -67,6 +68,7 @@ set(ASSETS LiberationSans-Regular.ttf enemy_bird_0.png enemy_bird_1.png + enemy_fipa_0.png ) foreach(ASSET ${ASSETS}) diff --git a/src/assets/enemy_fipa_0.png b/src/assets/enemy_fipa_0.png new file mode 100644 index 0000000000000000000000000000000000000000..3cdf90989eccadaa21f0f3a097601e383482b102 GIT binary patch literal 24538 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::iterator it = gameState.objectsBegin(); it != gameState.objectsEnd(); it++) { renderFromData((*it)->getRenderData()); } - // TODO: Render UI + // TODO: render on-screen debug messages (ex. "enemy_fipa spawned") // TODO: refactor/abstract this sf::Text levelName; levelName.setFont(assetHandler.getMainFont()); diff --git a/src/worldobjects/animal.cpp b/src/worldobjects/animal.cpp new file mode 100644 index 0000000..abdbbeb --- /dev/null +++ b/src/worldobjects/animal.cpp @@ -0,0 +1,33 @@ +#include "animal.h" + +// Define the default data for all named animals () +const std::map Animal::animalDefaults = { + { + "bird", // Name + { + "Bird", // Display name + "enemy_bird", // Texture prefix + 1, // Animation frame max + 2.0, // Width + 2.0, // Height + { + // Object attributes + ObjectAttribute::Collision + } + } + }, + { + "fipa", + { + "Fipa", + "enemy_fipa", + 0, + 3.0, + 3.0, + { + ObjectAttribute::Collision, + ObjectAttribute::Deadly + } + } + } +}; diff --git a/src/worldobjects/animal.h b/src/worldobjects/animal.h index a2dc07f..adfb665 100644 --- a/src/worldobjects/animal.h +++ b/src/worldobjects/animal.h @@ -1,8 +1,20 @@ #pragma once +#include +#include #include "../worldobject.h" #include "../constants.h" +// The default data for a specific animal type +struct AnimalData { + std::string displayName; + std::string texturePrefix; + int animFrameMax; + double width; + double height; + std::set objectAttributes; +}; + // The data for an animal in the world class Animal : public WorldObject { private: @@ -10,19 +22,41 @@ class Animal : public WorldObject { double vely = 0; bool onGround = false; long frameCount = 0; + std::string texturePrefix; int animFrameNum = 0; int animFrameMax = 1; + bool moveRight = false; public: - // Constructor - Animal(double spawnx, double spawny) : WorldObject() { + // Define the default data for all named animals () + static const std::map animalDefaults; + + // Constructor (define everything specifically) + Animal(std::string texturePrefix, int animFrameMax, double spawnx, double spawny) : WorldObject() { locx = spawnx; locy = spawny; width = 2.0; height = 2.0; + this->texturePrefix = texturePrefix; + this->animFrameMax = animFrameMax; objectAttributes.insert(ObjectAttribute::Collision); } + // Constructor for named animals + Animal(std::string name, double spawnx, double spawny) : WorldObject() { + locx = spawnx; + locy = spawny; + if (animalDefaults.find(name) == animalDefaults.end()) { + // Could not find the animal + name = "bird"; + } + width = (*animalDefaults.find(name)).second.width; + height = (*animalDefaults.find(name)).second.height; + this->texturePrefix = (*animalDefaults.find(name)).second.texturePrefix; + this->animFrameMax = (*animalDefaults.find(name)).second.animFrameMax; + objectAttributes = (*animalDefaults.find(name)).second.objectAttributes; + } + // TODO: different AI based on animal type (enum? stringly typed?) // Input: acceleration @@ -54,7 +88,7 @@ class Animal : public WorldObject { // Override update: gravity and acceleration, and AI logic UpdateResult update(WorldState& worldState, std::vector& objects) { // AI Logic - accelerate(-0.01, 0); + accelerate(moveRight ? 0.01 : -0.01, 0); jump(); // Physics if (!LEVEL_DESIGN_MODE) { @@ -83,6 +117,8 @@ class Animal : public WorldObject { velx = 0; collided = true; overlapped = true; + // For AI + moveRight = !moveRight; } } if (locx + width >= object->getLocx() && locx < object->getLocx() + object->getWidth()) { @@ -140,7 +176,7 @@ class Animal : public WorldObject { width, height, { 255, 0, 0 }, - "assets/enemy_bird_" + std::to_string(animFrameNum) + ".png" + "assets/" + texturePrefix + "_" + std::to_string(animFrameNum) + ".png" }; } }; diff --git a/src/worldspawner.cpp b/src/worldspawner.cpp index e2b254f..35af812 100644 --- a/src/worldspawner.cpp +++ b/src/worldspawner.cpp @@ -1,3 +1,4 @@ +#include #include "worldspawner.h" void WorldSpawner::spawnWorld(GameState& gameState, std::string levelName) { @@ -64,14 +65,23 @@ void WorldSpawner::spawnWorld(GameState& gameState, std::string levelName) { std::stoi(parsed[7]) )); } else if (parsed[0] == "Animal") { - if (parsed.size() < 3) throw; - gameState.spawnObject(new Animal( - std::stoi(parsed[1]), std::stoi(parsed[2]) - )); + if (parsed.size() < 4) throw; + if (parsed.size() < 5) { + // Size of 4: spawn a named animal + gameState.spawnObject(new Animal( + parsed[1], std::stoi(parsed[2]), std::stoi(parsed[3]) + )); + } else { + // Size of 5 or more: spawn a specific animal + gameState.spawnObject(new Animal( + parsed[1], std::stoi(parsed[2]), std::stoi(parsed[3]), std::stoi(parsed[4]) + )); + } } } } catch (std::exception& e) { // Failed: re-clear the world + std::cout << "ERR: Failed to re-clear the world (level: " << levelName << ")" << std::endl; gameState.clear(); return; } From a7aa18efa5f59c4572abb681dc6d718babf2b39f Mon Sep 17 00:00:00 2001 From: Cadecraft Date: Sun, 7 Apr 2024 09:11:03 -0700 Subject: [PATCH 05/13] refator: death and ui messages --- src/gamestate.cpp | 29 +++++++++++++++++++++++------ src/gamestate.h | 12 ++++++++---- src/main.cpp | 9 +++++++-- src/renderer.cpp | 32 ++++++++++++++++++++++---------- src/renderer.h | 3 +++ src/uimessage.h | 17 +++++++++++++++++ src/worldobject.h | 1 + src/worldobjects/player.h | 23 +++++++++++++++++++---- 8 files changed, 100 insertions(+), 26 deletions(-) create mode 100644 src/uimessage.h diff --git a/src/gamestate.cpp b/src/gamestate.cpp index 314b7e9..be2ea88 100644 --- a/src/gamestate.cpp +++ b/src/gamestate.cpp @@ -5,11 +5,24 @@ void GameState::spawnObject(WorldObject* object) { } UpdateResult GameState::update() { + // Update world objects for (WorldObject* object : objects) { UpdateResult updateResult = object->update(worldState, objects); if (updateResult == UpdateResult::NextLevel) { // TODO: improve this return UpdateResult::NextLevel; + } else if (updateResult == UpdateResult::DieReset) { + // Died + return UpdateResult::DieReset; + } + } + // Update UI messages + for (std::vector::iterator it = uiMessages.begin(); it != uiMessages.end();) { + if (it->update()) { + // Delete the message + it = uiMessages.erase(it); + } else { + it++; } } return UpdateResult::None; @@ -26,14 +39,18 @@ std::string GameState::getNextLevelName() { void GameState::updateLevelNames(std::string newLevelName, std::string newNextLevelName) { levelName = newLevelName; nextLevelName = newNextLevelName; + // Add the message + // TODO: use level display names + addUIMessage("Teleported to " + newLevelName, { 255, 255, 255 }); } -std::vector::iterator GameState::objectsBegin() { - return objects.begin(); -} - -std::vector::iterator GameState::objectsEnd() { - return objects.end(); +void GameState::addUIMessage(std::string message, Color color, int fontSize, long durationFrames) { + uiMessages.push_back({ + message, + color, + fontSize, + durationFrames + }); } void GameState::clear() { diff --git a/src/gamestate.h b/src/gamestate.h index 822c4a8..e929867 100644 --- a/src/gamestate.h +++ b/src/gamestate.h @@ -3,6 +3,7 @@ #include #include "worldobject.h" #include "worldstate.h" +#include "uimessage.h" // Store the full state of the world and all objects class GameState { @@ -10,9 +11,13 @@ class GameState { WorldState worldState; std::string levelName; std::string nextLevelName; - std::vector objects; public: + // All world objects (public) + std::vector objects; + // All UI messages (public) + std::vector uiMessages; + // Spawn an object void spawnObject(WorldObject* object); // Update @@ -23,9 +28,8 @@ class GameState { std::string getNextLevelName(); // Update the current level name void updateLevelNames(std::string newLevelName, std::string newNextLevelName); - // Get all objects - std::vector::iterator objectsBegin(); - std::vector::iterator objectsEnd(); + // Add a UI message + void addUIMessage(std::string message, Color color, int fontSize = 14, long durationFrames = 150); // Clear all objects from the world, aside from Persisting objects void clear(); // Destructor to free memory diff --git a/src/main.cpp b/src/main.cpp index e549ca4..e241104 100644 --- a/src/main.cpp +++ b/src/main.cpp @@ -84,9 +84,10 @@ int main() { // Debug: spawn blue cubes gameState.spawnObject(new BlueCube(player->getLocx(), player->getLocy())); keysPressed.erase(sf::Keyboard::P); + gameState.addUIMessage("Player spawned a debug blue cube", { 0, 0, 255 }); } - // Update the game and world + // Update the game and world if (LEVEL_DESIGN_MODE) { // Level Design Mode: keep reloading the world without updating it worldSpawner.spawnWorld(gameState, gameState.getLevelName()); @@ -96,6 +97,10 @@ int main() { // Load the next level, if possible // TODO: impl better worldSpawner.spawnWorld(gameState, gameState.getNextLevelName()); + } else if (updateResult == UpdateResult::DieReset) { + // Died: re-load the same level + worldSpawner.spawnWorld(gameState, gameState.getLevelName()); + gameState.addUIMessage("Death #" + std::to_string(player->getDeathCounter()), { 255, 0, 0 }); } // Render @@ -103,7 +108,7 @@ int main() { // Game and world renderer.setCamera(player->getLocx(), player->getLocy(), 0.8); renderer.renderWorld(gameState); - // Update + // Update window.display(); } } diff --git a/src/renderer.cpp b/src/renderer.cpp index 8c5a10a..4331e52 100644 --- a/src/renderer.cpp +++ b/src/renderer.cpp @@ -68,6 +68,16 @@ void Renderer::renderFromData(RenderData data) { } } +void Renderer::renderMessage(UIMessage& uiMessage, int locx, int locy) { + sf::Text text; + text.setFont(assetHandler.getMainFont()); + text.setString(uiMessage.message); + text.setCharacterSize(uiMessage.fontSize); + text.setFillColor(sf::Color(uiMessage.color.r, uiMessage.color.g, uiMessage.color.b)); + text.setPosition(locx, locy); + window.draw(text); +} + void Renderer::setCamera(double newWorldCameraCenterX, double newWorldCameraCenterY, double percentEasing) { worldCameraCenterX = worldCameraCenterX * percentEasing + newWorldCameraCenterX * (1 - percentEasing); worldCameraCenterY = worldCameraCenterY * percentEasing + newWorldCameraCenterY * (1 - percentEasing); @@ -77,16 +87,18 @@ void Renderer::renderWorld(GameState& gameState) { // Clear/render sky window.clear(sf::Color(111, 201, 252)); // Render world objects - for (std::vector::iterator it = gameState.objectsBegin(); it != gameState.objectsEnd(); it++) { - renderFromData((*it)->getRenderData()); + for (WorldObject* object : gameState.objects) { + renderFromData(object->getRenderData()); } + // TODO: render on-screen debug messages (ex. "enemy_fipa spawned") - // TODO: refactor/abstract this - sf::Text levelName; - levelName.setFont(assetHandler.getMainFont()); - levelName.setString(gameState.getLevelName()); // TODO: use display name instead - levelName.setCharacterSize(10); - levelName.setFillColor(sf::Color::White); - levelName.setPosition(24, 24); - window.draw(levelName); + // Render UI messages + int level = 0; + for (int i = gameState.uiMessages.size() - 1; i >= 0; i--) { + renderMessage(gameState.uiMessages[i], 24, 24 + level * 20); + level++; + } + // Render other UI + UIMessage levelName = { gameState.getLevelName(), { 255, 255, 255 }, 24 }; + renderMessage(levelName, window.getSize().x - 140, 18); } diff --git a/src/renderer.h b/src/renderer.h index c3013a6..c92e315 100644 --- a/src/renderer.h +++ b/src/renderer.h @@ -22,6 +22,9 @@ class Renderer { // Render from a RenderData object void renderFromData(RenderData data); + // Render a message + void renderMessage(UIMessage& message, int locx, int locy); + // Set the camera void setCamera(double newWorldCameraCenterX, double newWorldCameraCenterY, double percentEasing = 0.0); diff --git a/src/uimessage.h b/src/uimessage.h new file mode 100644 index 0000000..69712ff --- /dev/null +++ b/src/uimessage.h @@ -0,0 +1,17 @@ +#pragma once + +#include +#include "renderdata.h" + +// A message with a designated text color +struct UIMessage { + std::string message; + Color color; + int fontSize = 14; + long durationFramesRemaining = 150; + // Update the UI message, returning whether it should be deleted + bool update() { + durationFramesRemaining--; + return durationFramesRemaining <= 0; + } +}; diff --git a/src/worldobject.h b/src/worldobject.h index 6d60783..6cf0647 100644 --- a/src/worldobject.h +++ b/src/worldobject.h @@ -9,6 +9,7 @@ enum class UpdateResult { None, Destroy, + DieReset, NextLevel // TODO: better naming }; diff --git a/src/worldobjects/player.h b/src/worldobjects/player.h index 718db03..a6f7d31 100644 --- a/src/worldobjects/player.h +++ b/src/worldobjects/player.h @@ -9,6 +9,7 @@ class Player : public WorldObject { double velx = 0; double vely = 0; bool onGround = false; + int deathCounter = 0; public: // Constructor @@ -39,6 +40,19 @@ class Player : public WorldObject { return locy; } + int getDeathCounter() { + return deathCounter; + } + + void die() { + deathCounter++; + // Reset position and physics + teleport(5, 10); + velx = 0; + vely = 0; + onGround = false; + } + void teleport(double locx, double locy) { this->locx = locx; this->locy = locy; @@ -54,6 +68,7 @@ class Player : public WorldObject { locx += velx; locy += vely; // Check collision and update + UpdateResult updateResultToReturn = UpdateResult::None; onGround = false; // TODO: refactor // TODO: only check with types enabling collision @@ -115,8 +130,8 @@ class Player : public WorldObject { // Collision stuff if (collided && object->hasAttribute(ObjectAttribute::Deadly)) { // Die - // todo: impl - teleport(5, 10); + die(); + updateResultToReturn = UpdateResult::DieReset; } if (overlapped && object->hasAttribute(ObjectAttribute::LevelTeleport)) { // Teleport to the next level @@ -125,8 +140,8 @@ class Player : public WorldObject { return UpdateResult::NextLevel; } } - // TODO: out of bounds respawn/death - return UpdateResult::None; + // TODO: out of bounds respawn/death (and restart level/message on die) + return updateResultToReturn; } // Override rendering From ac0d8c1699cf4f63bcf4b627abb854ab34733ade Mon Sep 17 00:00:00 2001 From: Cadecraft Date: Sun, 7 Apr 2024 13:48:09 -0700 Subject: [PATCH 06/13] feat: replicators --- CMakeLists.txt | 3 +++ src/assets/enemy_replicator_0.png | Bin 0 -> 22149 bytes src/assets/enemy_replicator_1.png | Bin 0 -> 32203 bytes src/assets/enemy_replicator_2.png | Bin 0 -> 37968 bytes src/assets/level_2.csv | 34 +++++++++++++++++++----- src/gamestate.cpp | 28 +++++++++++++++++--- src/gamestate.h | 1 + src/main.cpp | 9 ++++--- src/worldobject.h | 3 ++- src/worldobjects/animal.cpp | 17 ++++++++++++ src/worldobjects/animal.h | 42 +++++++++++++++++++++++++----- src/worldobjects/player.h | 5 ++-- 12 files changed, 118 insertions(+), 24 deletions(-) create mode 100644 src/assets/enemy_replicator_0.png create mode 100644 src/assets/enemy_replicator_1.png create mode 100644 src/assets/enemy_replicator_2.png diff --git a/CMakeLists.txt b/CMakeLists.txt index 4632eee..dcef25f 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -69,6 +69,9 @@ set(ASSETS enemy_bird_0.png enemy_bird_1.png enemy_fipa_0.png + enemy_replicator_0.png + enemy_replicator_1.png + enemy_replicator_2.png ) foreach(ASSET ${ASSETS}) diff --git a/src/assets/enemy_replicator_0.png b/src/assets/enemy_replicator_0.png new file mode 100644 index 0000000000000000000000000000000000000000..e1c5e40cd2c8d3c80dc5185ac01a298d03039595 GIT binary patch literal 22149 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, objects); + std::vector newToSpawn; + for (std::vector::iterator it = objects.begin(); it != objects.end();) { + UpdateResult updateResult = (*it)->update(worldState, objects); if (updateResult == UpdateResult::NextLevel) { // TODO: improve this return UpdateResult::NextLevel; } else if (updateResult == UpdateResult::DieReset) { - // Died + // Player died return UpdateResult::DieReset; + } else if (updateResult == UpdateResult::ReplicateAndDestroy) { + // Replicate it (spawn two replicators) + Animal* animal1 = new Animal( + "replicator", (*it)->getLocx(), (*it)->getLocy() + ); + animal1->teleport(animal1->getLocx() - 0.7, animal1->getLocy()); + animal1->setDimensions((*it)->getWidth() * 0.8, (*it)->getHeight() * 0.8); + newToSpawn.push_back(animal1); + Animal* animal2 = new Animal( + "replicator", (*it)->getLocx(), (*it)->getLocy() + ); + animal2->teleport(animal2->getLocx() + 0.7, animal2->getLocy()); + animal2->setDimensions((*it)->getWidth() * 0.8, (*it)->getHeight() * 0.8); + animal2->reverseDirection(); + newToSpawn.push_back(animal2); + // Destroy the previous enemy + it = objects.erase(it); + } else { + // Move on + it++; } } + for (WorldObject* newObject : newToSpawn) objects.push_back(newObject); // Update UI messages for (std::vector::iterator it = uiMessages.begin(); it != uiMessages.end();) { if (it->update()) { diff --git a/src/gamestate.h b/src/gamestate.h index e929867..b3d04f9 100644 --- a/src/gamestate.h +++ b/src/gamestate.h @@ -2,6 +2,7 @@ #include #include "worldobject.h" +#include "worldobjectincludes.h" #include "worldstate.h" #include "uimessage.h" diff --git a/src/main.cpp b/src/main.cpp index e241104..3946175 100644 --- a/src/main.cpp +++ b/src/main.cpp @@ -59,6 +59,7 @@ int main() { } // Use input + bool resetPlayer = false; if (keysPressed.find(sf::Keyboard::A) != keysPressed.end()) { player->accelerate(-0.05, 0); } @@ -76,9 +77,10 @@ int main() { player->accelerate(0, 0.05); } if (keysPressed.find(sf::Keyboard::R) != keysPressed.end()) { - // Restart to spawn location - // TODO: also restart level ? - player->teleport(5.0, 10.0); + // Restart to spawn location (counts as a death) + player->die(); + resetPlayer = true; + keysPressed.erase(sf::Keyboard::R); } if (keysPressed.find(sf::Keyboard::P) != keysPressed.end()) { // Debug: spawn blue cubes @@ -93,6 +95,7 @@ int main() { worldSpawner.spawnWorld(gameState, gameState.getLevelName()); } UpdateResult updateResult = gameState.update(); + if (resetPlayer) updateResult = UpdateResult::DieReset; if (updateResult == UpdateResult::NextLevel) { // Load the next level, if possible // TODO: impl better diff --git a/src/worldobject.h b/src/worldobject.h index 6cf0647..0b85515 100644 --- a/src/worldobject.h +++ b/src/worldobject.h @@ -10,7 +10,8 @@ enum class UpdateResult { None, Destroy, DieReset, - NextLevel // TODO: better naming + NextLevel, // TODO: better naming + ReplicateAndDestroy, }; // The attributes that an object can have diff --git a/src/worldobjects/animal.cpp b/src/worldobjects/animal.cpp index abdbbeb..7fb7cee 100644 --- a/src/worldobjects/animal.cpp +++ b/src/worldobjects/animal.cpp @@ -7,6 +7,7 @@ const std::map Animal::animalDefaults = { { "Bird", // Display name "enemy_bird", // Texture prefix + 1.0, // Texture scale 1, // Animation frame max 2.0, // Width 2.0, // Height @@ -21,6 +22,7 @@ const std::map Animal::animalDefaults = { { "Fipa", "enemy_fipa", + 1.2, 0, 3.0, 3.0, @@ -29,5 +31,20 @@ const std::map Animal::animalDefaults = { ObjectAttribute::Deadly } } + }, + { + "replicator", + { + "Replicator", + "enemy_replicator", + 2.0, + 0, + 3.0, + 3.0, + { + ObjectAttribute::OverlapDetect, + ObjectAttribute::Deadly + } + } } }; diff --git a/src/worldobjects/animal.h b/src/worldobjects/animal.h index adfb665..ecfce65 100644 --- a/src/worldobjects/animal.h +++ b/src/worldobjects/animal.h @@ -9,6 +9,7 @@ struct AnimalData { std::string displayName; std::string texturePrefix; + double textureScale; int animFrameMax; double width; double height; @@ -23,9 +24,11 @@ class Animal : public WorldObject { bool onGround = false; long frameCount = 0; std::string texturePrefix; + double textureScale = 1.0; int animFrameNum = 0; int animFrameMax = 1; bool moveRight = false; + std::string name = "unnamed"; public: // Define the default data for all named animals () @@ -50,9 +53,11 @@ class Animal : public WorldObject { // Could not find the animal name = "bird"; } + this->name = name; width = (*animalDefaults.find(name)).second.width; height = (*animalDefaults.find(name)).second.height; this->texturePrefix = (*animalDefaults.find(name)).second.texturePrefix; + this->textureScale = (*animalDefaults.find(name)).second.textureScale; this->animFrameMax = (*animalDefaults.find(name)).second.animFrameMax; objectAttributes = (*animalDefaults.find(name)).second.objectAttributes; } @@ -85,11 +90,35 @@ class Animal : public WorldObject { this->locy = locy; } + void reverseDirection() { + moveRight = !moveRight; + } + + void setDimensions(double newWidth, double newHeight) { + this->width = newWidth; + this->height = newHeight; + } + // Override update: gravity and acceleration, and AI logic UpdateResult update(WorldState& worldState, std::vector& objects) { // AI Logic + UpdateResult updateResultToReturn = UpdateResult::None; accelerate(moveRight ? 0.01 : -0.01, 0); jump(); + // Special named animal abilities + // TODO: change from stringly typed? + if (name == "replicator") { + // Replicate after 300 frames + if (frameCount >= 300) { + // Replicate + updateResultToReturn = UpdateResult::ReplicateAndDestroy; + } else if (frameCount >= 293) { + animFrameNum = 2; + } else if (frameCount >= 285) { + animFrameNum = 1; + } + } + // Physics if (!LEVEL_DESIGN_MODE) { vely += worldState.getGravityStrength(); @@ -146,8 +175,7 @@ class Animal : public WorldObject { } } } - } - if (object->hasAttribute(ObjectAttribute::OverlapDetect)) { + } else if (object->hasAttribute(ObjectAttribute::OverlapDetect)) { // Check overlap only if (locy + height >= object->getLocy() && locy < object->getLocy() + object->getHeight()) { if (locx + width > object->getLocx() && locx < object->getLocx() + object->getWidth()) { @@ -158,7 +186,7 @@ class Animal : public WorldObject { } } // TODO: out of bounds respawn/death - return UpdateResult::None; + return updateResultToReturn; } // Override rendering @@ -171,10 +199,10 @@ class Animal : public WorldObject { return { RenderType::Image, coordType, - locx, - locy, - width, - height, + locx - width * ((textureScale - 1.0) / 2.0), + locy - height * ((textureScale - 1.0) / 2.0), + width * textureScale, + height * textureScale, { 255, 0, 0 }, "assets/" + texturePrefix + "_" + std::to_string(animFrameNum) + ".png" }; diff --git a/src/worldobjects/player.h b/src/worldobjects/player.h index a6f7d31..297bd8e 100644 --- a/src/worldobjects/player.h +++ b/src/worldobjects/player.h @@ -117,8 +117,7 @@ class Player : public WorldObject { } } } - } - if (object->hasAttribute(ObjectAttribute::OverlapDetect)) { + } else if (object->hasAttribute(ObjectAttribute::OverlapDetect)) { // Check overlap only if (locy + height >= object->getLocy() && locy < object->getLocy() + object->getHeight()) { if (locx + width > object->getLocx() && locx < object->getLocx() + object->getWidth()) { @@ -128,7 +127,7 @@ class Player : public WorldObject { } } // Collision stuff - if (collided && object->hasAttribute(ObjectAttribute::Deadly)) { + if (overlapped && object->hasAttribute(ObjectAttribute::Deadly)) { // Die die(); updateResultToReturn = UpdateResult::DieReset; From 2d2649f51f6d40e5ba81f6551e5d9c0577ee30dd Mon Sep 17 00:00:00 2001 From: Cadecraft Date: Sun, 7 Apr 2024 14:04:18 -0700 Subject: [PATCH 07/13] fix: local velocity imparting on platform --- src/assethandler.cpp | 1 - src/worldobject.cpp | 10 ++++++++++ src/worldobject.h | 4 ++++ src/worldobjects/movingcollider.h | 8 ++++++-- src/worldobjects/player.h | 13 ++++++++++++- 5 files changed, 32 insertions(+), 4 deletions(-) diff --git a/src/assethandler.cpp b/src/assethandler.cpp index d15fa3b..0c721c1 100644 --- a/src/assethandler.cpp +++ b/src/assethandler.cpp @@ -25,7 +25,6 @@ sf::Font& AssetHandler::getMainFont() { std::cout << "ERR: Failed to load 'assets/LiberationSans-Regular.ttf'" << std::endl; // TODO: handle } - std::cout << "Main font loaded" << std::endl; mainFontLoaded = true; return mainFont; } diff --git a/src/worldobject.cpp b/src/worldobject.cpp index aa267c6..fca5561 100644 --- a/src/worldobject.cpp +++ b/src/worldobject.cpp @@ -6,6 +6,8 @@ WorldObject::WorldObject() { locy = 0.0; width = 1.0; height = 1.0; + velx = 0.0; + vely = 0.0; } UpdateResult WorldObject::update(WorldState& worldState, std::vector& objects) { @@ -33,6 +35,14 @@ double WorldObject::getHeight() { return height; } +double WorldObject::getVelx() { + return velx; +} + +double WorldObject::getVely() { + return vely; +} + bool WorldObject::hasAttribute(ObjectAttribute attribute) { return objectAttributes.find(attribute) != objectAttributes.end(); } diff --git a/src/worldobject.h b/src/worldobject.h index 0b85515..29d0718 100644 --- a/src/worldobject.h +++ b/src/worldobject.h @@ -31,6 +31,8 @@ class WorldObject { double locy; double width; double height; + double velx; + double vely; std::set objectAttributes; public: @@ -47,6 +49,8 @@ class WorldObject { double getLocy(); double getWidth(); double getHeight(); + double getVelx(); + double getVely(); bool hasAttribute(ObjectAttribute attribute); diff --git a/src/worldobjects/movingcollider.h b/src/worldobjects/movingcollider.h index 7d77114..fa85503 100644 --- a/src/worldobjects/movingcollider.h +++ b/src/worldobjects/movingcollider.h @@ -34,8 +34,12 @@ class MovingCollider : public WorldObject { UpdateResult update(WorldState& worldState, std::vector& objects) { double alpha = sin(2 * 3.14159 * frameCount / periodFrames) * 0.5 + 0.5; // Interpolate between positions - this->locx = spawnx * (1.0 - alpha) + targetx * (alpha); - this->locy = spawny * (1.0 - alpha) + targety * (alpha); + double locxnew = spawnx * (1.0 - alpha) + targetx * (alpha); + double locynew = spawny * (1.0 - alpha) + targety * (alpha); + this->velx = locxnew - this->locx; + this->vely = locynew - this->locy; + this->locx = locxnew; + this->locy = locynew; frameCount++; return UpdateResult::None; } diff --git a/src/worldobjects/player.h b/src/worldobjects/player.h index 297bd8e..57673e8 100644 --- a/src/worldobjects/player.h +++ b/src/worldobjects/player.h @@ -109,7 +109,18 @@ class Player : public WorldObject { } else { // Floor locy -= vely; - vely = 0; + if (object->getVely() < 0) { + vely = object->getVely(); // Impart the others' velocity + locy += vely; + } else { + vely = 0; + } + if ( + object->getVelx() > 0 && object->getVelx() > velx + || object->getVelx() < 0 && object->getVelx() < velx + ) { + locx += object->getVelx(); + } collided = true; overlapped = true; // todo: should not be on ground on a bottom corner From e277e840ed7df8aab0e3efea49d12d0aee7d4a8d Mon Sep 17 00:00:00 2001 From: Cadecraft Date: Sun, 7 Apr 2024 14:46:15 -0700 Subject: [PATCH 08/13] feat: ui improve --- src/assets/level_1.csv | 19 ++++++++++++------- src/gamestate.cpp | 2 +- src/main.cpp | 3 ++- src/renderer.cpp | 19 +++++++++++-------- src/renderer.h | 3 ++- src/worldobjects/animal.h | 2 -- src/worldobjects/player.h | 6 ++---- 7 files changed, 30 insertions(+), 24 deletions(-) diff --git a/src/assets/level_1.csv b/src/assets/level_1.csv index 64c3688..6551ae0 100644 --- a/src/assets/level_1.csv +++ b/src/assets/level_1.csv @@ -7,16 +7,21 @@ StaticCollider, 19, 25, 6, 2 // Vertical colliders StaticCollider, 0, 0, 2, 25 StaticCollider, 25, 0, 2, 19 -// Extra blocks -StaticCollider, 23, 29, 44, 19 +// Main large bottom block +StaticCollider, 23, 29, 80, 19 +// Rightmost barrier +StaticCollider, 103, 26, 2, 3 +// Ending teleporter +LevelTp, 100, 28 // Spike Spike, 28, 28 // Static deadly section StaticDeadly, 33, 28, 5, 2 -// Ending teleporter -LevelTp, 55, 28 -// Moving Platform +// Moving Platforms MovingCollider, 8, 32, 5, 2, 300, 20, 32 -// Animal +MovingCollider, 40, 24, 5, 2, 300, 40, 15 +MovingCollider, 47, 15, 5, 2, 300, 45, 15 +// Animals Animal, bird, 50, 15 -Animal, fipa, 55, 15 \ No newline at end of file +Animal, fipa, 55, 15 +Animal, replicator, 58, 15 \ No newline at end of file diff --git a/src/gamestate.cpp b/src/gamestate.cpp index f875550..3ef0594 100644 --- a/src/gamestate.cpp +++ b/src/gamestate.cpp @@ -63,7 +63,7 @@ void GameState::updateLevelNames(std::string newLevelName, std::string newNextLe nextLevelName = newNextLevelName; // Add the message // TODO: use level display names - addUIMessage("Teleported to " + newLevelName, { 255, 255, 255 }); + addUIMessage("Teleported to " + newLevelName, { 0, 160, 0 }); } void GameState::addUIMessage(std::string message, Color color, int fontSize, long durationFrames) { diff --git a/src/main.cpp b/src/main.cpp index 3946175..be2b970 100644 --- a/src/main.cpp +++ b/src/main.cpp @@ -109,7 +109,8 @@ int main() { // Render window.clear(sf::Color(0, 0, 0)); // Game and world - renderer.setCamera(player->getLocx(), player->getLocy(), 0.8); + double cameraZoom = 1.0 - 0.1 * sqrt(pow(player->getVelx(), 2) + 0.3 * pow(player->getVely(), 2)); + renderer.setCamera(player->getLocx(), player->getLocy(), 0.8, cameraZoom); renderer.renderWorld(gameState); // Update window.display(); diff --git a/src/renderer.cpp b/src/renderer.cpp index 4331e52..27e4f77 100644 --- a/src/renderer.cpp +++ b/src/renderer.cpp @@ -10,6 +10,7 @@ Renderer::Renderer(sf::RenderWindow& window, AssetHandler& assetHandler) void Renderer::renderFromData(RenderData data) { // TODO: implement other types (like images) + double worldScale = zoomFactor * screenPixPerWorld; if (data.type == RenderType::Rectangle) { // Rectangle sf::RectangleShape toRender; @@ -21,8 +22,8 @@ void Renderer::renderFromData(RenderData data) { // Convert from world to screen coordinates // TODO: render from the center position? // TODO: do not render if out of screen range - toRender.setSize(sf::Vector2f(data.width * screenPixPerWorld, data.height * screenPixPerWorld)); - toRender.setPosition(sf::Vector2f((data.locx - worldCameraCenterX) * screenPixPerWorld + window.getSize().x / 2.0, (data.locy - worldCameraCenterY) * screenPixPerWorld + window.getSize().y / 2.0)); + toRender.setSize(sf::Vector2f(data.width * worldScale, data.height * worldScale)); + toRender.setPosition(sf::Vector2f((data.locx - worldCameraCenterX) * worldScale + window.getSize().x / 2.0, (data.locy - worldCameraCenterY) * worldScale + window.getSize().y / 2.0)); } toRender.setFillColor(sf::Color(data.color.r, data.color.g, data.color.b)); window.draw(toRender); @@ -36,8 +37,8 @@ void Renderer::renderFromData(RenderData data) { } else { // Convert from world to screen coordinates // TODO: render from the center position? - toRender.setRadius((data.width + data.height) / 4 * screenPixPerWorld); - toRender.setPosition(sf::Vector2f((data.locx - worldCameraCenterX) * screenPixPerWorld + window.getSize().x / 2.0, (data.locy - worldCameraCenterY) * screenPixPerWorld + window.getSize().y / 2.0)); + toRender.setRadius((data.width + data.height) / 4 * worldScale); + toRender.setPosition(sf::Vector2f((data.locx - worldCameraCenterX) * worldScale + window.getSize().x / 2.0, (data.locy - worldCameraCenterY) * worldScale + window.getSize().y / 2.0)); } toRender.setFillColor(sf::Color(data.color.r, data.color.g, data.color.b)); window.draw(toRender); @@ -61,8 +62,8 @@ void Renderer::renderFromData(RenderData data) { tex.create(img.getSize().x, img.getSize().y); tex.update(img); toRender.setTexture(tex); - toRender.setPosition(sf::Vector2f((data.locx - worldCameraCenterX) * screenPixPerWorld + window.getSize().x / 2.0, (data.locy - worldCameraCenterY) * screenPixPerWorld + window.getSize().y / 2.0)); - toRender.setScale(data.width * screenPixPerWorld / img.getSize().x, data.height * screenPixPerWorld / img.getSize().y); + toRender.setPosition(sf::Vector2f((data.locx - worldCameraCenterX) * worldScale + window.getSize().x / 2.0, (data.locy - worldCameraCenterY) * worldScale + window.getSize().y / 2.0)); + toRender.setScale(data.width * worldScale / img.getSize().x, data.height * worldScale / img.getSize().y); } window.draw(toRender); } @@ -73,14 +74,16 @@ void Renderer::renderMessage(UIMessage& uiMessage, int locx, int locy) { text.setFont(assetHandler.getMainFont()); text.setString(uiMessage.message); text.setCharacterSize(uiMessage.fontSize); - text.setFillColor(sf::Color(uiMessage.color.r, uiMessage.color.g, uiMessage.color.b)); + double alpha = std::min(sqrt(uiMessage.durationFramesRemaining) / 12.0, 1.0); + text.setFillColor(sf::Color(uiMessage.color.r, uiMessage.color.g, uiMessage.color.b, alpha * 255)); text.setPosition(locx, locy); window.draw(text); } -void Renderer::setCamera(double newWorldCameraCenterX, double newWorldCameraCenterY, double percentEasing) { +void Renderer::setCamera(double newWorldCameraCenterX, double newWorldCameraCenterY, double percentEasing, double zoomFactor) { worldCameraCenterX = worldCameraCenterX * percentEasing + newWorldCameraCenterX * (1 - percentEasing); worldCameraCenterY = worldCameraCenterY * percentEasing + newWorldCameraCenterY * (1 - percentEasing); + this->zoomFactor = this->zoomFactor * percentEasing + zoomFactor * (1 - percentEasing); } void Renderer::renderWorld(GameState& gameState) { diff --git a/src/renderer.h b/src/renderer.h index c92e315..5e79238 100644 --- a/src/renderer.h +++ b/src/renderer.h @@ -14,6 +14,7 @@ class Renderer { double worldCameraCenterX = 0; double worldCameraCenterY = 0; int screenPixPerWorld = 32; + double zoomFactor = 1.0; public: // Create the renderer @@ -26,7 +27,7 @@ class Renderer { void renderMessage(UIMessage& message, int locx, int locy); // Set the camera - void setCamera(double newWorldCameraCenterX, double newWorldCameraCenterY, double percentEasing = 0.0); + void setCamera(double newWorldCameraCenterX, double newWorldCameraCenterY, double percentEasing = 0.0, double zoomFactor = 1.0); // Render the entire world void renderWorld(GameState& worldState); diff --git a/src/worldobjects/animal.h b/src/worldobjects/animal.h index ecfce65..b40fab4 100644 --- a/src/worldobjects/animal.h +++ b/src/worldobjects/animal.h @@ -19,8 +19,6 @@ struct AnimalData { // The data for an animal in the world class Animal : public WorldObject { private: - double velx = 0; - double vely = 0; bool onGround = false; long frameCount = 0; std::string texturePrefix; diff --git a/src/worldobjects/player.h b/src/worldobjects/player.h index 57673e8..4f39a6c 100644 --- a/src/worldobjects/player.h +++ b/src/worldobjects/player.h @@ -6,8 +6,6 @@ // The data for the player class Player : public WorldObject { private: - double velx = 0; - double vely = 0; bool onGround = false; int deathCounter = 0; @@ -63,7 +61,7 @@ class Player : public WorldObject { if (!LEVEL_DESIGN_MODE) { vely += worldState.getGravityStrength(); } - velx *= 0.88; + velx *= 0.90; // Friction (0.88) vely *= 0.96; locx += velx; locy += vely; @@ -82,7 +80,7 @@ class Player : public WorldObject { if (object->hasAttribute(ObjectAttribute::Collision)) { // X movement pushout // todo: better way of doing the 0.1 thing (subtract velocity instead?) - if (locy + height - 0.1 >= object->getLocy() && locy + 0.1 < object->getLocy() + object->getHeight()) { + if (locy + height - 0.2 >= object->getLocy() && locy + 0.2 < object->getLocy() + object->getHeight()) { // Within the y if (locx + width > object->getLocx() && locx < object->getLocx() + object->getWidth()) { // Side wall From b80ca06e148e8508bba1048bf965a82b6b904726 Mon Sep 17 00:00:00 2001 From: Cadecraft Date: Sun, 7 Apr 2024 20:34:49 -0700 Subject: [PATCH 09/13] feat: animal tweaks --- CMakeLists.txt | 3 +++ src/assets/enemy_addax_0.png | Bin 0 -> 43381 bytes src/assets/enemy_addax_1.png | Bin 0 -> 43754 bytes src/assets/level_2.csv | 34 ++++++------------------------ src/assets/sand.png | Bin 0 -> 24109 bytes src/gamestate.cpp | 4 ++-- src/main.cpp | 1 + src/worldobjects/animal.cpp | 16 +++++++++++++- src/worldobjects/animal.h | 1 + src/worldobjects/staticcollider.h | 2 +- 10 files changed, 30 insertions(+), 31 deletions(-) create mode 100644 src/assets/enemy_addax_0.png create mode 100644 src/assets/enemy_addax_1.png create mode 100644 src/assets/sand.png diff --git a/CMakeLists.txt b/CMakeLists.txt index dcef25f..f20b2a2 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -59,6 +59,7 @@ set(ASSETS essential.txt tiv_logo.png grass1.png + sand.png yellowpad.png spike.png level_0.csv @@ -72,6 +73,8 @@ set(ASSETS enemy_replicator_0.png enemy_replicator_1.png enemy_replicator_2.png + enemy_addax_0.png + enemy_addax_1.png ) foreach(ASSET ${ASSETS}) diff --git a/src/assets/enemy_addax_0.png b/src/assets/enemy_addax_0.png new file mode 100644 index 0000000000000000000000000000000000000000..e9fd83ca90c6b56294899767685a3739488f3d7a GIT binary patch literal 43381 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 literal 0 HcmV?d00001 diff --git a/src/assets/enemy_addax_1.png b/src/assets/enemy_addax_1.png new file mode 100644 index 0000000000000000000000000000000000000000..aca6e553a454b08d5dc873fe30f1455530f249c2 GIT binary patch literal 43754 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 A5&!@I literal 0 HcmV?d00001 diff --git a/src/assets/level_2.csv b/src/assets/level_2.csv index 6551ae0..45c5028 100644 --- a/src/assets/level_2.csv +++ b/src/assets/level_2.csv @@ -1,27 +1,7 @@ -// First Level (level_1) -nextLevelName, level_2 -// Bottom colliders -StaticCollider, 3, 25, 6, 2 -//StaticCollider, 9, 27, 10, 2 -StaticCollider, 19, 25, 6, 2 -// Vertical colliders -StaticCollider, 0, 0, 2, 25 -StaticCollider, 25, 0, 2, 19 -// Main large bottom block -StaticCollider, 23, 29, 80, 19 -// Rightmost barrier -StaticCollider, 103, 26, 2, 3 -// Ending teleporter -LevelTp, 100, 28 -// Spike -Spike, 28, 28 -// Static deadly section -StaticDeadly, 33, 28, 5, 2 -// Moving Platforms -MovingCollider, 8, 32, 5, 2, 300, 20, 32 -MovingCollider, 40, 24, 5, 2, 300, 40, 15 -MovingCollider, 47, 15, 5, 2, 300, 45, 15 -// Animals -Animal, bird, 50, 15 -Animal, fipa, 55, 15 -Animal, replicator, 58, 15 \ No newline at end of file +// Second level (level_2) +// Cycle back to the start +nextLevelName, level_1 +// Bottom collider +StaticCollider, 2, 30, 30, 2 +// Next level +LevelTp, 50, 29 \ No newline at end of file diff --git a/src/assets/sand.png b/src/assets/sand.png new file mode 100644 index 0000000000000000000000000000000000000000..19651d637e7701158f7374f82bb4bbcdb6bb2fc2 GIT binary patch literal 24109 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, (*it)->getLocy() ); - animal1->teleport(animal1->getLocx() - 0.7, animal1->getLocy()); + animal1->teleport(animal1->getLocx() - 1.5, animal1->getLocy()); // -0.7 animal1->setDimensions((*it)->getWidth() * 0.8, (*it)->getHeight() * 0.8); newToSpawn.push_back(animal1); Animal* animal2 = new Animal( "replicator", (*it)->getLocx(), (*it)->getLocy() ); - animal2->teleport(animal2->getLocx() + 0.7, animal2->getLocy()); + animal2->teleport(animal2->getLocx() + 1.5, animal2->getLocy()); animal2->setDimensions((*it)->getWidth() * 0.8, (*it)->getHeight() * 0.8); animal2->reverseDirection(); newToSpawn.push_back(animal2); diff --git a/src/main.cpp b/src/main.cpp index be2b970..56eb5b3 100644 --- a/src/main.cpp +++ b/src/main.cpp @@ -46,6 +46,7 @@ int main() { // Main game loop while (window.isOpen()) { + // TODO: Frame acceleration thing (for consistent speed/timing) // Poll events for (auto event = sf::Event{}; window.pollEvent(event);) { if (event.type == sf::Event::Closed) { diff --git a/src/worldobjects/animal.cpp b/src/worldobjects/animal.cpp index 7fb7cee..5c4de36 100644 --- a/src/worldobjects/animal.cpp +++ b/src/worldobjects/animal.cpp @@ -42,9 +42,23 @@ const std::map Animal::animalDefaults = { 3.0, 3.0, { - ObjectAttribute::OverlapDetect, + ObjectAttribute::Collision, ObjectAttribute::Deadly } } + }, + { + "addax", + { + "Addax", + "enemy_addax", + 2.0, + 0, + 3.0, + 3.0, + { + ObjectAttribute::Collision + } + } } }; diff --git a/src/worldobjects/animal.h b/src/worldobjects/animal.h index b40fab4..810bab8 100644 --- a/src/worldobjects/animal.h +++ b/src/worldobjects/animal.h @@ -135,6 +135,7 @@ class Animal : public WorldObject { bool overlapped = false; if (object->hasAttribute(ObjectAttribute::Collision)) { // X movement pushout + // todo: improve time complexity (O(n^2) :skull:) // todo: better way of doing the 0.1 thing (subtract velocity instead?) if (locy + height - 0.1 >= object->getLocy() && locy + 0.1 < object->getLocy() + object->getHeight()) { // Within the y diff --git a/src/worldobjects/staticcollider.h b/src/worldobjects/staticcollider.h index 148258f..1f400cb 100644 --- a/src/worldobjects/staticcollider.h +++ b/src/worldobjects/staticcollider.h @@ -30,7 +30,7 @@ class StaticCollider : public WorldObject { width, height, { 14, 92, 81 }, - "assets/grass1.png" + "assets/grass1.png" // TODO: allow rendering sand }; } }; From 075a0117f9599184f23ee9070b610592ea1443f8 Mon Sep 17 00:00:00 2001 From: Cadecraft Date: Mon, 8 Apr 2024 13:10:50 -0700 Subject: [PATCH 10/13] refactor: cyclical dependency --- CMakeLists.txt | 5 +- src/gamestate.cpp | 6 +- src/gamestate.h | 2 + src/main.cpp | 1 + src/worldobject.cpp | 8 ++- src/worldobject.h | 7 ++- src/worldobjects/animal.cpp | 91 ++++++++++++++++++++++++++++ src/worldobjects/animal.h | 90 +-------------------------- src/worldobjects/bluecube.h | 4 +- src/worldobjects/leveltp.h | 6 +- src/worldobjects/movingcollider.h | 4 +- src/worldobjects/player.cpp | 97 ++++++++++++++++++++++++++++++ src/worldobjects/player.h | 95 +---------------------------- src/worldobjects/redcube.h | 2 +- src/worldobjects/spike.h | 2 +- src/worldobjects/staticcollider.h | 2 +- src/worldobjects/staticdeadly.h | 2 +- src/worldobjects/stationaryimage.h | 2 +- 18 files changed, 226 insertions(+), 200 deletions(-) create mode 100644 src/worldobjects/player.cpp diff --git a/CMakeLists.txt b/CMakeLists.txt index f20b2a2..22b9102 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -24,8 +24,6 @@ add_executable(PlatScifi src/renderer.h src/worldstate.cpp src/worldstate.h - src/gamestate.cpp - src/gamestate.h src/worldspawner.cpp src/worldspawner.h src/worldobjectincludes.h @@ -39,6 +37,9 @@ add_executable(PlatScifi src/worldobjects/leveltp.h src/worldobjects/spike.h src/worldobjects/animal.cpp + src/worldobjects/player.cpp + src/gamestate.cpp + src/gamestate.h ) target_link_libraries(PlatScifi PRIVATE sfml-graphics) target_compile_features(PlatScifi PRIVATE cxx_std_17) diff --git a/src/gamestate.cpp b/src/gamestate.cpp index b63eff9..422908a 100644 --- a/src/gamestate.cpp +++ b/src/gamestate.cpp @@ -8,7 +8,7 @@ UpdateResult GameState::update() { // Update world objects std::vector newToSpawn; for (std::vector::iterator it = objects.begin(); it != objects.end();) { - UpdateResult updateResult = (*it)->update(worldState, objects); + UpdateResult updateResult = (*it)->update(*this); if (updateResult == UpdateResult::NextLevel) { // TODO: improve this return UpdateResult::NextLevel; @@ -58,6 +58,10 @@ std::string GameState::getNextLevelName() { return nextLevelName; } +WorldState& GameState::getWorldState() { + return worldState; +} + void GameState::updateLevelNames(std::string newLevelName, std::string newNextLevelName) { levelName = newLevelName; nextLevelName = newNextLevelName; diff --git a/src/gamestate.h b/src/gamestate.h index b3d04f9..749bdd2 100644 --- a/src/gamestate.h +++ b/src/gamestate.h @@ -27,6 +27,8 @@ class GameState { std::string getLevelName(); // Get the next level name std::string getNextLevelName(); + // Get the current world state + WorldState& getWorldState(); // Update the current level name void updateLevelNames(std::string newLevelName, std::string newNextLevelName); // Add a UI message diff --git a/src/main.cpp b/src/main.cpp index 56eb5b3..4654b77 100644 --- a/src/main.cpp +++ b/src/main.cpp @@ -5,6 +5,7 @@ #include "assethandler.h" #include "renderer.h" #include "renderdata.h" +//class GameState; #include "gamestate.h" #include "worldspawner.h" #include "worldobject.h" diff --git a/src/worldobject.cpp b/src/worldobject.cpp index fca5561..c7e330e 100644 --- a/src/worldobject.cpp +++ b/src/worldobject.cpp @@ -1,4 +1,5 @@ #include "worldobject.h" +#include "gamestate.h" WorldObject::WorldObject() { coordType = CoordType::World; @@ -10,7 +11,7 @@ WorldObject::WorldObject() { vely = 0.0; } -UpdateResult WorldObject::update(WorldState& worldState, std::vector& objects) { +UpdateResult WorldObject::update(GameState& gameState) { // Update return UpdateResult::None; } @@ -43,6 +44,11 @@ double WorldObject::getVely() { return vely; } +// TODO: remove this debug +void WorldObject::debugCyclical(GameState& gameState) { + gameState.getLevelName(); +} + bool WorldObject::hasAttribute(ObjectAttribute attribute) { return objectAttributes.find(attribute) != objectAttributes.end(); } diff --git a/src/worldobject.h b/src/worldobject.h index 29d0718..906ae40 100644 --- a/src/worldobject.h +++ b/src/worldobject.h @@ -5,6 +5,9 @@ #include "renderdata.h" #include "worldstate.h" +// To fix the cyclical dependency error +class GameState; + // The result of an update function enum class UpdateResult { None, @@ -40,7 +43,7 @@ class WorldObject { WorldObject(); // Update each frame - virtual UpdateResult update(WorldState& worldState, std::vector& objects); + virtual UpdateResult update(GameState& gameState); // Get whether a point is inside of this object double isPointInside(double x, double y); @@ -52,6 +55,8 @@ class WorldObject { double getVelx(); double getVely(); + void debugCyclical(GameState& gameState); + bool hasAttribute(ObjectAttribute attribute); // TODO: get whether a rectangle is inside of this object diff --git a/src/worldobjects/animal.cpp b/src/worldobjects/animal.cpp index 5c4de36..85ac869 100644 --- a/src/worldobjects/animal.cpp +++ b/src/worldobjects/animal.cpp @@ -1,4 +1,5 @@ #include "animal.h" +#include "../gamestate.h" // Define the default data for all named animals () const std::map Animal::animalDefaults = { @@ -62,3 +63,93 @@ const std::map Animal::animalDefaults = { } } }; + +UpdateResult Animal::update(GameState& gameState) { + // AI Logic + UpdateResult updateResultToReturn = UpdateResult::None; + accelerate(moveRight ? 0.01 : -0.01, 0); + jump(); + // Special named animal abilities + // TODO: change from stringly typed? + if (name == "replicator") { + // Replicate after 300 frames + if (frameCount >= 300) { + // Replicate + updateResultToReturn = UpdateResult::ReplicateAndDestroy; + } else if (frameCount >= 293) { + animFrameNum = 2; + } else if (frameCount >= 285) { + animFrameNum = 1; + } + } + + // Physics + if (!LEVEL_DESIGN_MODE) { + vely += gameState.getWorldState().getGravityStrength(); + } + velx *= 0.88; + vely *= 0.96; + locx += velx; + locy += vely; + // Check collision and update + onGround = false; + // TODO: refactor + // TODO: update all collisions from player + for (WorldObject* object : gameState.objects) { + if (object == this) continue; + bool collided = false; + bool overlapped = false; + if (object->hasAttribute(ObjectAttribute::Collision)) { + // X movement pushout + // todo: improve time complexity (O(n^2) :skull:) + // todo: better way of doing the 0.1 thing (subtract velocity instead?) + if (locy + height - 0.1 >= object->getLocy() && locy + 0.1 < object->getLocy() + object->getHeight()) { + // Within the y + if (locx + width > object->getLocx() && locx < object->getLocx() + object->getWidth()) { + // Side wall + locx -= velx; + velx = 0; + collided = true; + overlapped = true; + // For AI + moveRight = !moveRight; + } + } + if (locx + width >= object->getLocx() && locx < object->getLocx() + object->getWidth()) { + // Within the x + if (locy + height > object->getLocy() && locy < object->getLocy() + object->getHeight()) { + if (locy > object->getLocy() + object->getHeight() / 2.0) { + // Ceiling + if (vely >= 0) { + // Already traveling down: do nothing + } else { + // Traveling up: stop + locy -= vely; + vely = 0; + } + collided = true; + overlapped = true; + } else { + // Floor + locy -= vely; + vely = 0; + collided = true; + overlapped = true; + // todo: should not be on ground on a bottom corner + onGround = true; + } + } + } + } else if (object->hasAttribute(ObjectAttribute::OverlapDetect)) { + // Check overlap only + if (locy + height >= object->getLocy() && locy < object->getLocy() + object->getHeight()) { + if (locx + width > object->getLocx() && locx < object->getLocx() + object->getWidth()) { + // Hit + overlapped = true; + } + } + } + } + // TODO: out of bounds respawn/death + return updateResultToReturn; +} diff --git a/src/worldobjects/animal.h b/src/worldobjects/animal.h index 810bab8..b99b243 100644 --- a/src/worldobjects/animal.h +++ b/src/worldobjects/animal.h @@ -98,95 +98,7 @@ class Animal : public WorldObject { } // Override update: gravity and acceleration, and AI logic - UpdateResult update(WorldState& worldState, std::vector& objects) { - // AI Logic - UpdateResult updateResultToReturn = UpdateResult::None; - accelerate(moveRight ? 0.01 : -0.01, 0); - jump(); - // Special named animal abilities - // TODO: change from stringly typed? - if (name == "replicator") { - // Replicate after 300 frames - if (frameCount >= 300) { - // Replicate - updateResultToReturn = UpdateResult::ReplicateAndDestroy; - } else if (frameCount >= 293) { - animFrameNum = 2; - } else if (frameCount >= 285) { - animFrameNum = 1; - } - } - - // Physics - if (!LEVEL_DESIGN_MODE) { - vely += worldState.getGravityStrength(); - } - velx *= 0.88; - vely *= 0.96; - locx += velx; - locy += vely; - // Check collision and update - onGround = false; - // TODO: refactor - // TODO: update all collisions from player - for (WorldObject* object : objects) { - if (object == this) continue; - bool collided = false; - bool overlapped = false; - if (object->hasAttribute(ObjectAttribute::Collision)) { - // X movement pushout - // todo: improve time complexity (O(n^2) :skull:) - // todo: better way of doing the 0.1 thing (subtract velocity instead?) - if (locy + height - 0.1 >= object->getLocy() && locy + 0.1 < object->getLocy() + object->getHeight()) { - // Within the y - if (locx + width > object->getLocx() && locx < object->getLocx() + object->getWidth()) { - // Side wall - locx -= velx; - velx = 0; - collided = true; - overlapped = true; - // For AI - moveRight = !moveRight; - } - } - if (locx + width >= object->getLocx() && locx < object->getLocx() + object->getWidth()) { - // Within the x - if (locy + height > object->getLocy() && locy < object->getLocy() + object->getHeight()) { - if (locy > object->getLocy() + object->getHeight() / 2.0) { - // Ceiling - if (vely >= 0) { - // Already traveling down: do nothing - } else { - // Traveling up: stop - locy -= vely; - vely = 0; - } - collided = true; - overlapped = true; - } else { - // Floor - locy -= vely; - vely = 0; - collided = true; - overlapped = true; - // todo: should not be on ground on a bottom corner - onGround = true; - } - } - } - } else if (object->hasAttribute(ObjectAttribute::OverlapDetect)) { - // Check overlap only - if (locy + height >= object->getLocy() && locy < object->getLocy() + object->getHeight()) { - if (locx + width > object->getLocx() && locx < object->getLocx() + object->getWidth()) { - // Hit - overlapped = true; - } - } - } - } - // TODO: out of bounds respawn/death - return updateResultToReturn; - } + UpdateResult update(GameState& gameState); // Override rendering RenderData getRenderData() { diff --git a/src/worldobjects/bluecube.h b/src/worldobjects/bluecube.h index a0d8cf5..f9aba01 100644 --- a/src/worldobjects/bluecube.h +++ b/src/worldobjects/bluecube.h @@ -15,8 +15,8 @@ class BlueCube : public WorldObject { objectAttributes.insert(ObjectAttribute::Collision); } - // Override the update function - UpdateResult update(WorldState& worldState, std::vector& objects) { + // Override update: bounce around the screen + UpdateResult update(GameState& gameState) { locx += velx; if (locx > 64 || locx < 0) velx *= -1; locy += vely; diff --git a/src/worldobjects/leveltp.h b/src/worldobjects/leveltp.h index 46b0597..129ef84 100644 --- a/src/worldobjects/leveltp.h +++ b/src/worldobjects/leveltp.h @@ -18,9 +18,9 @@ class LevelTp : public WorldObject { this->objectAttributes.insert(ObjectAttribute::LevelTeleport); } - // Override update: check with player - UpdateResult update(WorldState& worldState, std::vector& objects) { - // TODO: stuff + // Override update: check with player ? + UpdateResult update(GameState& gameState) { + // TODO: stuff return UpdateResult::None; } diff --git a/src/worldobjects/movingcollider.h b/src/worldobjects/movingcollider.h index fa85503..0a57e98 100644 --- a/src/worldobjects/movingcollider.h +++ b/src/worldobjects/movingcollider.h @@ -30,8 +30,8 @@ class MovingCollider : public WorldObject { objectAttributes.insert(ObjectAttribute::Collision); } - // Override update: gravity - UpdateResult update(WorldState& worldState, std::vector& objects) { + // Override update: interpolation + UpdateResult update(GameState& gameState) { double alpha = sin(2 * 3.14159 * frameCount / periodFrames) * 0.5 + 0.5; // Interpolate between positions double locxnew = spawnx * (1.0 - alpha) + targetx * (alpha); diff --git a/src/worldobjects/player.cpp b/src/worldobjects/player.cpp new file mode 100644 index 0000000..b2210da --- /dev/null +++ b/src/worldobjects/player.cpp @@ -0,0 +1,97 @@ +#include "player.h" +#include "../gamestate.h" + +UpdateResult Player::update(GameState& gameState) { + if (!LEVEL_DESIGN_MODE) { + vely += gameState.getWorldState().getGravityStrength(); + } + velx *= 0.90; // Friction (0.88) + vely *= 0.96; + locx += velx; + locy += vely; + // Check collision and update + UpdateResult updateResultToReturn = UpdateResult::None; + onGround = false; + // TODO: refactor + // TODO: only check with types enabling collision + // TODO: polygonal collisions + // TODO: when hitting multiple? + // TODO: impart velocity on collisions (ex. moving platforms) + for (WorldObject* object : gameState.objects) { + if (object == this) continue; + bool collided = false; + bool overlapped = false; + if (object->hasAttribute(ObjectAttribute::Collision)) { + // X movement pushout + // todo: better way of doing the 0.1 thing (subtract velocity instead?) + if (locy + height - 0.2 >= object->getLocy() && locy + 0.2 < object->getLocy() + object->getHeight()) { + // Within the y + if (locx + width > object->getLocx() && locx < object->getLocx() + object->getWidth()) { + // Side wall + locx -= velx; + velx = 0; + collided = true; + overlapped = true; + } + } + if (locx + width >= object->getLocx() && locx < object->getLocx() + object->getWidth()) { + // Within the x + if (locy + height > object->getLocy() && locy < object->getLocy() + object->getHeight()) { + if (locy > object->getLocy() + object->getHeight() / 2.0) { + // Ceiling + if (vely >= 0) { + // Already traveling down: do nothing + } else { + // Traveling up: stop + locy -= vely; + vely = 0; + } + collided = true; + overlapped = true; + } else { + // Floor + locy -= vely; + if (object->getVely() < 0) { + vely = object->getVely(); // Impart the others' velocity + locy += vely; + } else { + vely = 0; + } + if ( + object->getVelx() > 0 && object->getVelx() > velx + || object->getVelx() < 0 && object->getVelx() < velx + ) { + locx += object->getVelx(); + } + collided = true; + overlapped = true; + // todo: should not be on ground on a bottom corner + onGround = true; + } + } + } + } else if (object->hasAttribute(ObjectAttribute::OverlapDetect)) { + // Check overlap only + if (locy + height >= object->getLocy() && locy < object->getLocy() + object->getHeight()) { + if (locx + width > object->getLocx() && locx < object->getLocx() + object->getWidth()) { + // Hit + overlapped = true; + } + } + } + // Collision stuff + if (overlapped && object->hasAttribute(ObjectAttribute::Deadly)) { + // Die + die(); + updateResultToReturn = UpdateResult::DieReset; + } + if (overlapped && object->hasAttribute(ObjectAttribute::LevelTeleport)) { + // Teleport to the next level + // TODO: impl better + teleport(5, 10); + return UpdateResult::NextLevel; + } + } + // TODO: out of bounds respawn/death (and restart level/message on die) + return updateResultToReturn; +} diff --git a/src/worldobjects/player.h b/src/worldobjects/player.h index 4f39a6c..4d81d2f 100644 --- a/src/worldobjects/player.h +++ b/src/worldobjects/player.h @@ -57,100 +57,7 @@ class Player : public WorldObject { } // Override update: gravity and acceleration - UpdateResult update(WorldState& worldState, std::vector& objects) { - if (!LEVEL_DESIGN_MODE) { - vely += worldState.getGravityStrength(); - } - velx *= 0.90; // Friction (0.88) - vely *= 0.96; - locx += velx; - locy += vely; - // Check collision and update - UpdateResult updateResultToReturn = UpdateResult::None; - onGround = false; - // TODO: refactor - // TODO: only check with types enabling collision - // TODO: polygonal collisions - // TODO: when hitting multiple? - // TODO: impart velocity on collisions (ex. moving platforms) - for (WorldObject* object : objects) { - if (object == this) continue; - bool collided = false; - bool overlapped = false; - if (object->hasAttribute(ObjectAttribute::Collision)) { - // X movement pushout - // todo: better way of doing the 0.1 thing (subtract velocity instead?) - if (locy + height - 0.2 >= object->getLocy() && locy + 0.2 < object->getLocy() + object->getHeight()) { - // Within the y - if (locx + width > object->getLocx() && locx < object->getLocx() + object->getWidth()) { - // Side wall - locx -= velx; - velx = 0; - collided = true; - overlapped = true; - } - } - if (locx + width >= object->getLocx() && locx < object->getLocx() + object->getWidth()) { - // Within the x - if (locy + height > object->getLocy() && locy < object->getLocy() + object->getHeight()) { - if (locy > object->getLocy() + object->getHeight() / 2.0) { - // Ceiling - if (vely >= 0) { - // Already traveling down: do nothing - } else { - // Traveling up: stop - locy -= vely; - vely = 0; - } - collided = true; - overlapped = true; - } else { - // Floor - locy -= vely; - if (object->getVely() < 0) { - vely = object->getVely(); // Impart the others' velocity - locy += vely; - } else { - vely = 0; - } - if ( - object->getVelx() > 0 && object->getVelx() > velx - || object->getVelx() < 0 && object->getVelx() < velx - ) { - locx += object->getVelx(); - } - collided = true; - overlapped = true; - // todo: should not be on ground on a bottom corner - onGround = true; - } - } - } - } else if (object->hasAttribute(ObjectAttribute::OverlapDetect)) { - // Check overlap only - if (locy + height >= object->getLocy() && locy < object->getLocy() + object->getHeight()) { - if (locx + width > object->getLocx() && locx < object->getLocx() + object->getWidth()) { - // Hit - overlapped = true; - } - } - } - // Collision stuff - if (overlapped && object->hasAttribute(ObjectAttribute::Deadly)) { - // Die - die(); - updateResultToReturn = UpdateResult::DieReset; - } - if (overlapped && object->hasAttribute(ObjectAttribute::LevelTeleport)) { - // Teleport to the next level - // TODO: impl better - teleport(5, 10); - return UpdateResult::NextLevel; - } - } - // TODO: out of bounds respawn/death (and restart level/message on die) - return updateResultToReturn; - } + UpdateResult update(GameState& gameState); // Override rendering RenderData getRenderData() { diff --git a/src/worldobjects/redcube.h b/src/worldobjects/redcube.h index 9cc7440..00eb022 100644 --- a/src/worldobjects/redcube.h +++ b/src/worldobjects/redcube.h @@ -12,7 +12,7 @@ class RedCube : public WorldObject { } // Override update: move right over time - UpdateResult update(WorldState& worldState, std::vector& objects) { + UpdateResult update(GameState& gameState) { locx += 0.1; if (locx > 30) { locy += 1; diff --git a/src/worldobjects/spike.h b/src/worldobjects/spike.h index e88acfe..fdcce2c 100644 --- a/src/worldobjects/spike.h +++ b/src/worldobjects/spike.h @@ -20,7 +20,7 @@ class Spike : public WorldObject { } // Override update: do nothing - UpdateResult update(WorldState& worldState, std::vector& objects) { + UpdateResult update(GameState& gameState) { return UpdateResult::None; } diff --git a/src/worldobjects/staticcollider.h b/src/worldobjects/staticcollider.h index 1f400cb..6e7c86e 100644 --- a/src/worldobjects/staticcollider.h +++ b/src/worldobjects/staticcollider.h @@ -15,7 +15,7 @@ class StaticCollider : public WorldObject { } // Override update: gravity - UpdateResult update(WorldState& worldState, std::vector& objects) { + UpdateResult update(GameState& gameState) { return UpdateResult::None; } diff --git a/src/worldobjects/staticdeadly.h b/src/worldobjects/staticdeadly.h index 6258048..c9adf21 100644 --- a/src/worldobjects/staticdeadly.h +++ b/src/worldobjects/staticdeadly.h @@ -17,7 +17,7 @@ class StaticDeadly : public WorldObject { } // Override update - UpdateResult update(WorldState& worldState, std::vector& objects) { + UpdateResult update(GameState& gameState) { return UpdateResult::None; } diff --git a/src/worldobjects/stationaryimage.h b/src/worldobjects/stationaryimage.h index a7e231e..76f8381 100644 --- a/src/worldobjects/stationaryimage.h +++ b/src/worldobjects/stationaryimage.h @@ -18,7 +18,7 @@ class StationaryImage : public WorldObject { } // Override update: do nothing - UpdateResult update(WorldState& worldState, std::vector& objects) { + UpdateResult update(GameState& gameState) { return UpdateResult::None; } From dd0c45d61cf40431f4f273a303cabbdbebd9da48 Mon Sep 17 00:00:00 2001 From: Cadecraft Date: Mon, 8 Apr 2024 16:19:17 -0700 Subject: [PATCH 11/13] perf: world collision matrix --- src/constants.h | 4 +- src/gamestate.cpp | 14 +++++- src/gamestate.h | 6 ++- src/renderdata.h | 1 + src/renderer.cpp | 23 ++++++++- src/renderer.h | 2 +- src/worldcollisionmatrix.h | 93 +++++++++++++++++++++++++++++++++++++ src/worldobjects/animal.cpp | 3 +- 8 files changed, 138 insertions(+), 8 deletions(-) create mode 100644 src/worldcollisionmatrix.h diff --git a/src/constants.h b/src/constants.h index 59b634d..dc100e7 100644 --- a/src/constants.h +++ b/src/constants.h @@ -6,5 +6,5 @@ const bool LEVEL_DESIGN_MODE = false; // REM info -const std::string RECENT_VERSION = "0.1.0"; -const std::string EDIT_DATE = "2024/03/31"; +const std::string RECENT_VERSION = "0.1.1"; +const std::string EDIT_DATE = "2024/04/08"; diff --git a/src/gamestate.cpp b/src/gamestate.cpp index 422908a..522d6b3 100644 --- a/src/gamestate.cpp +++ b/src/gamestate.cpp @@ -5,6 +5,12 @@ void GameState::spawnObject(WorldObject* object) { } UpdateResult GameState::update() { + // Update the collision matrix with every world object + collisionMatrix.clear(); + for (WorldObject* object : objects) { + collisionMatrix.addObject(object); + } + // Update world objects std::vector newToSpawn; for (std::vector::iterator it = objects.begin(); it != objects.end();) { @@ -62,6 +68,10 @@ WorldState& GameState::getWorldState() { return worldState; } +WorldCollisionMatrix& GameState::getCollisionMatrix() { + return collisionMatrix; +} + void GameState::updateLevelNames(std::string newLevelName, std::string newNextLevelName) { levelName = newLevelName; nextLevelName = newNextLevelName; @@ -70,13 +80,15 @@ void GameState::updateLevelNames(std::string newLevelName, std::string newNextLe addUIMessage("Teleported to " + newLevelName, { 0, 160, 0 }); } -void GameState::addUIMessage(std::string message, Color color, int fontSize, long durationFrames) { +void GameState::addUIMessage(std::string message, Color color, int fontSize, long durationFrames, bool debug) { + // TODO: do not add debug messages in a release build uiMessages.push_back({ message, color, fontSize, durationFrames }); + if (uiMessages.size() > 5) uiMessages.erase(uiMessages.begin()); } void GameState::clear() { diff --git a/src/gamestate.h b/src/gamestate.h index 749bdd2..c627032 100644 --- a/src/gamestate.h +++ b/src/gamestate.h @@ -3,6 +3,7 @@ #include #include "worldobject.h" #include "worldobjectincludes.h" +#include "worldcollisionmatrix.h" #include "worldstate.h" #include "uimessage.h" @@ -10,6 +11,7 @@ class GameState { private: WorldState worldState; + WorldCollisionMatrix collisionMatrix; std::string levelName; std::string nextLevelName; @@ -29,10 +31,12 @@ class GameState { std::string getNextLevelName(); // Get the current world state WorldState& getWorldState(); + // Get the current collision matrix + WorldCollisionMatrix& getCollisionMatrix(); // Update the current level name void updateLevelNames(std::string newLevelName, std::string newNextLevelName); // Add a UI message - void addUIMessage(std::string message, Color color, int fontSize = 14, long durationFrames = 150); + void addUIMessage(std::string message, Color color, int fontSize = 14, long durationFrames = 150, bool debug = false); // Clear all objects from the world, aside from Persisting objects void clear(); // Destructor to free memory diff --git a/src/renderdata.h b/src/renderdata.h index 29bcfc4..29790ca 100644 --- a/src/renderdata.h +++ b/src/renderdata.h @@ -32,4 +32,5 @@ struct RenderData { double height; Color color; std::string imageSource; // Source image from src + int alpha = 255; }; diff --git a/src/renderer.cpp b/src/renderer.cpp index 27e4f77..c4cf5ec 100644 --- a/src/renderer.cpp +++ b/src/renderer.cpp @@ -25,7 +25,7 @@ void Renderer::renderFromData(RenderData data) { toRender.setSize(sf::Vector2f(data.width * worldScale, data.height * worldScale)); toRender.setPosition(sf::Vector2f((data.locx - worldCameraCenterX) * worldScale + window.getSize().x / 2.0, (data.locy - worldCameraCenterY) * worldScale + window.getSize().y / 2.0)); } - toRender.setFillColor(sf::Color(data.color.r, data.color.g, data.color.b)); + toRender.setFillColor(sf::Color(data.color.r, data.color.g, data.color.b, data.alpha)); window.draw(toRender); } else if (data.type == RenderType::Circle) { // Circle @@ -37,6 +37,7 @@ void Renderer::renderFromData(RenderData data) { } else { // Convert from world to screen coordinates // TODO: render from the center position? + // TODO: do not render if off screen range toRender.setRadius((data.width + data.height) / 4 * worldScale); toRender.setPosition(sf::Vector2f((data.locx - worldCameraCenterX) * worldScale + window.getSize().x / 2.0, (data.locy - worldCameraCenterY) * worldScale + window.getSize().y / 2.0)); } @@ -59,6 +60,7 @@ void Renderer::renderFromData(RenderData data) { } else { // Convert from world to screen coordinates // TODO: render from the center position? + // TODO: do not render if off screen range tex.create(img.getSize().x, img.getSize().y); tex.update(img); toRender.setTexture(tex); @@ -94,7 +96,24 @@ void Renderer::renderWorld(GameState& gameState) { renderFromData(object->getRenderData()); } - // TODO: render on-screen debug messages (ex. "enemy_fipa spawned") + // Render debug info, if needed + /*for (int y = 0; y < 40; y++) { + for (int x = 0; x < 40; x++) { + int cellSat = gameState.getCollisionMatrix().getCellSaturation(x, y); + renderFromData({ + RenderType::Rectangle, + CoordType::World, + (double) x * gameState.getCollisionMatrix().getCellSize(), + (double) y * gameState.getCollisionMatrix().getCellSize(), + (double) gameState.getCollisionMatrix().getCellSize(), + (double) gameState.getCollisionMatrix().getCellSize(), + { 255, 255, 0 }, + "", + std::min(255, cellSat * 20) + }); + } + }*/ + // Render UI messages int level = 0; for (int i = gameState.uiMessages.size() - 1; i >= 0; i--) { diff --git a/src/renderer.h b/src/renderer.h index 5e79238..4edc95d 100644 --- a/src/renderer.h +++ b/src/renderer.h @@ -13,7 +13,7 @@ class Renderer { AssetHandler& assetHandler; double worldCameraCenterX = 0; double worldCameraCenterY = 0; - int screenPixPerWorld = 32; + int screenPixPerWorld = 24; // 32, 24 double zoomFactor = 1.0; public: diff --git a/src/worldcollisionmatrix.h b/src/worldcollisionmatrix.h new file mode 100644 index 0000000..53a45d2 --- /dev/null +++ b/src/worldcollisionmatrix.h @@ -0,0 +1,93 @@ +#pragma once + +#include +#include "worldobject.h" + +class WorldCollisionMatrix { +private: + std::vector>> matrix; + std::vector outside; + int matrixWidth = 100; + int matrixHeight = 100; + // Number of world units per cell + int matrixCellSize = 2; + +public: + // Create a default cleared collision matrix + WorldCollisionMatrix() { + for (int i = 0; i < matrixHeight; i++) { + matrix.push_back(std::vector>(matrixWidth)); + } + } + + // Clear the matrix to a width x height grid; does not deallocate any objects + void clear() { + for (int i = 0; i < matrixHeight; i++) { + for (int j = 0; j < matrixWidth; j++) { + matrix[i][j].clear(); + } + } + outside.clear(); + } + + // Add an object to the correct location based on its collision rectangle + void addObject(WorldObject* object) { + // Determine which cells the object is in + int x0 = object->getLocx() / matrixCellSize; + int y0 = object->getLocy() / matrixCellSize; + int x1 = (object->getLocx() + object->getWidth()) / matrixCellSize; + int y1 = (object->getLocy() + object->getHeight()) / matrixCellSize; + bool addedOutside = false; + for (int y = y0; y <= y1; y++) { + for (int x = x0; x <= x1; x++) { + if (y < 0 || x < 0 || y >= matrixHeight || x >= matrixWidth) { + // Outside + if (!addedOutside) { + outside.push_back(object); + addedOutside = true; + } + } else { + // In cell + matrix[y][x].push_back(object); + } + } + } + } + + // Get the saturation of a cell (number of items in it) + int getCellSaturation(int x, int y) { + if (y < 0 || x < 0 || y >= matrixHeight || x >= matrixWidth) return 0; + return matrix[y][x].size(); + } + + // Get the size of the matrix cells (in world units) + int getCellSize() { + return matrixCellSize; + } + + // Get all objects in the matrix potentially colliding with an object based on its collision rectangle + std::set searchMatrix(WorldObject* object) { + std::set res; + // Determine which cells the object is in + int x0 = object->getLocx() / matrixCellSize; + int y0 = object->getLocy() / matrixCellSize; + int x1 = (object->getLocx() + object->getWidth()) / matrixCellSize; + int y1 = (object->getLocy() + object->getHeight()) / matrixCellSize; + bool addedOutside = false; + for (int y = y0; y <= y1; y++) { + for (int x = x0; x <= x1; x++) { + if (y < 0 || x < 0 || y >= matrixHeight || x >= matrixWidth) { + // Outside + if (!addedOutside) { + for (WorldObject* other : outside) res.insert(other); + addedOutside = true; + } + } else { + // In cell + for (WorldObject* other : matrix[y][x]) res.insert(other); + } + } + } + return res; + } +}; diff --git a/src/worldobjects/animal.cpp b/src/worldobjects/animal.cpp index 85ac869..c050cf5 100644 --- a/src/worldobjects/animal.cpp +++ b/src/worldobjects/animal.cpp @@ -95,7 +95,8 @@ UpdateResult Animal::update(GameState& gameState) { onGround = false; // TODO: refactor // TODO: update all collisions from player - for (WorldObject* object : gameState.objects) { + std::set nearby = gameState.getCollisionMatrix().searchMatrix(this); + for (WorldObject* object : nearby) { if (object == this) continue; bool collided = false; bool overlapped = false; From 5fb3088b7c32fcd0d36c5364339e995b832179fb Mon Sep 17 00:00:00 2001 From: Cadecraft Date: Wed, 10 Apr 2024 13:44:49 -0700 Subject: [PATCH 12/13] feat: level 1-4 design --- src/assets/level_1.csv | 33 +++++++-------------------------- src/assets/level_2.csv | 13 +++++++------ src/assets/level_3.csv | 10 ++++++++++ src/assets/level_4.csv | 27 +++++++++++++++++++++++++++ 4 files changed, 51 insertions(+), 32 deletions(-) create mode 100644 src/assets/level_3.csv create mode 100644 src/assets/level_4.csv diff --git a/src/assets/level_1.csv b/src/assets/level_1.csv index 6551ae0..badda47 100644 --- a/src/assets/level_1.csv +++ b/src/assets/level_1.csv @@ -1,27 +1,8 @@ -// First Level (level_1) +// First level (level_1) +// Go to the next level at the end +// For debugging, change this to any level; by default, should be level_2 nextLevelName, level_2 -// Bottom colliders -StaticCollider, 3, 25, 6, 2 -//StaticCollider, 9, 27, 10, 2 -StaticCollider, 19, 25, 6, 2 -// Vertical colliders -StaticCollider, 0, 0, 2, 25 -StaticCollider, 25, 0, 2, 19 -// Main large bottom block -StaticCollider, 23, 29, 80, 19 -// Rightmost barrier -StaticCollider, 103, 26, 2, 3 -// Ending teleporter -LevelTp, 100, 28 -// Spike -Spike, 28, 28 -// Static deadly section -StaticDeadly, 33, 28, 5, 2 -// Moving Platforms -MovingCollider, 8, 32, 5, 2, 300, 20, 32 -MovingCollider, 40, 24, 5, 2, 300, 40, 15 -MovingCollider, 47, 15, 5, 2, 300, 45, 15 -// Animals -Animal, bird, 50, 15 -Animal, fipa, 55, 15 -Animal, replicator, 58, 15 \ No newline at end of file +// Bottom grass +StaticCollider, 2, 16, 40, 4 +// Next level +LevelTp, 38, 15 \ No newline at end of file diff --git a/src/assets/level_2.csv b/src/assets/level_2.csv index 45c5028..8ecf247 100644 --- a/src/assets/level_2.csv +++ b/src/assets/level_2.csv @@ -1,7 +1,8 @@ -// Second level (level_2) -// Cycle back to the start -nextLevelName, level_1 -// Bottom collider -StaticCollider, 2, 30, 30, 2 +// Platforms (level_2) +nextLevelName, level_3 +// Grass has a hole in it +StaticCollider, 2, 16, 40, 4 +MovingCollider, 42, 16, 8, 2, 300, 74, 16 +StaticCollider, 82, 16, 40, 4 // Next level -LevelTp, 50, 29 \ No newline at end of file +LevelTp, 100, 15 \ No newline at end of file diff --git a/src/assets/level_3.csv b/src/assets/level_3.csv new file mode 100644 index 0000000..aa06f94 --- /dev/null +++ b/src/assets/level_3.csv @@ -0,0 +1,10 @@ +// Enemies (level_3) +nextLevelName, level_4 +// Uphill +StaticCollider, 2, 16, 28, 4 +StaticCollider, 30, 12, 30, 8 +StaticCollider, 60, 8, 40, 8 +// Enemies +Animal, fipa, 55, 6 +// Next level +LevelTp, 80, 7 \ No newline at end of file diff --git a/src/assets/level_4.csv b/src/assets/level_4.csv new file mode 100644 index 0000000..a115f2c --- /dev/null +++ b/src/assets/level_4.csv @@ -0,0 +1,27 @@ +// Insane Level (level_4) +nextLevelName, level_1 +// Bottom colliders +StaticCollider, 3, 25, 6, 2 +//StaticCollider, 9, 27, 10, 2 +StaticCollider, 19, 25, 6, 2 +// Vertical colliders +StaticCollider, 0, 0, 2, 25 +StaticCollider, 25, 0, 2, 19 +// Main large bottom block +StaticCollider, 23, 29, 80, 19 +// Rightmost barrier +StaticCollider, 103, 26, 2, 3 +// Ending teleporter +LevelTp, 100, 28 +// Spike +Spike, 28, 28 +// Static deadly section +StaticDeadly, 33, 28, 5, 2 +// Moving Platforms +MovingCollider, 8, 32, 5, 2, 300, 20, 32 +MovingCollider, 40, 24, 5, 2, 300, 40, 15 +MovingCollider, 47, 15, 5, 2, 300, 45, 15 +// Animals +Animal, bird, 50, 15 +Animal, fipa, 55, 15 +Animal, replicator, 58, 15 \ No newline at end of file From 2e3aeb1eb0d0eb931c8a2810ffdce35ee5f7878d Mon Sep 17 00:00:00 2001 From: Cadecraft Date: Sun, 21 Apr 2024 12:39:42 -0700 Subject: [PATCH 13/13] feat: level 0 update --- README.md | 4 +++- src/assets/level_0.csv | 2 +- 2 files changed, 4 insertions(+), 2 deletions(-) diff --git a/README.md b/README.md index c9be4bf..be24b47 100644 --- a/README.md +++ b/README.md @@ -1,6 +1,8 @@ # PlatScifi -A platformer game by the tivect team +A simple but challenging platformer game by the tivect team (with some silly graphics). + +The game isn't finished--but it will be one day. ## Building: diff --git a/src/assets/level_0.csv b/src/assets/level_0.csv index dd0e5f1..c1a321c 100644 --- a/src/assets/level_0.csv +++ b/src/assets/level_0.csv @@ -14,4 +14,4 @@ Spike, 28, 28 // Static deadly section StaticDeadly, 33, 28, 5, 2 // Ending teleporter -LevelTp, 55, 28 \ No newline at end of file +Level, 55, 28