From 8f3840b602ce78806382e4d52252248c9e78ef70 Mon Sep 17 00:00:00 2001 From: "Zed A. Shaw" Date: Sat, 27 Apr 2024 21:36:38 -0400 Subject: [PATCH] Add a fun little meh face guy for a sprite. --- sfmldemo/main.cpp | 44 ++++++++++++++++++++++++++------------------ sfmldemo/sprite.png | Bin 0 -> 2745 bytes 2 files changed, 26 insertions(+), 18 deletions(-) create mode 100644 sfmldemo/sprite.png diff --git a/sfmldemo/main.cpp b/sfmldemo/main.cpp index d7f33b8..da90068 100644 --- a/sfmldemo/main.cpp +++ b/sfmldemo/main.cpp @@ -4,7 +4,8 @@ #include #include #include -#include +#include +#include #include #include #include @@ -30,9 +31,9 @@ void ImGui_update(sf::RenderWindow &window, sf::Clock &deltaClock, sf::Time &tic ImGui::End(); } -void Window_update(sf::RenderWindow &window, sf::Shape &shape) { +void Window_update(sf::RenderWindow &window, sf::Sprite &player) { window.clear(); - window.draw(shape); + window.draw(player); ImGui::SFML::Render(window); window.display(); } @@ -88,9 +89,11 @@ void Handle_events(sf::RenderWindow &window, BoxTest &box) { if(sf::Keyboard::isKeyPressed(sf::Keyboard::Left)) { b2Vec2 force(-200, 1000); box.body->ApplyForceToCenter(force, true); + box.body->ApplyTorque(100.0f, true); } else if(sf::Keyboard::isKeyPressed(sf::Keyboard::Right)) { b2Vec2 force(200, 1000); box.body->ApplyForceToCenter(force, true); + box.body->ApplyTorque(-100.0f, true); } break; case sf::Event::MouseButtonPressed: @@ -108,7 +111,7 @@ void Handle_events(sf::RenderWindow &window, BoxTest &box) { } } -sf::Time Update_entities(sf::RenderWindow &window, b2World &world, sf::Clock &clock, sf::Clock &deltaClock, sf::Time &tick, BoxTest &box, sf::Shape &shape) { +sf::Time Update_entities(sf::RenderWindow &window, b2World &world, sf::Clock &clock, sf::Clock &deltaClock, sf::Time &tick, BoxTest &box, sf::Sprite &player) { sf::Vector2u winSize = window.getSize(); float timeStep = 1.0f / 60.0f; int velocityIterations = 6; @@ -120,26 +123,29 @@ sf::Time Update_entities(sf::RenderWindow &window, b2World &world, sf::Clock &cl b2Vec2 position = box.body->GetPosition(); float angle = box.body->GetAngle(); - shape.setPosition(position.x * 100.0f, winSize.y - position.y * 100.0f); - shape.setRotation(angle * 180.0f / M_PI); + player.setPosition(position.x * 100.0f, winSize.y - position.y * 100.0f); + player.setRotation(angle * 180.0f / M_PI); ImGui_update(window, deltaClock, tick); - Window_update(window, shape); + Window_update(window, player); return nextTick; } -sf::CircleShape Create_player(sf::RenderWindow &window) { - sf::CircleShape shape(50.f, 4); - sf::Vector2u winSize = window.getSize(); - shape.setPosition(winSize.x / 2, winSize.y / 2); - shape.setOrigin(50.f, 50.f); - shape.setFillColor(sf::Color(150, 50, 250)); - shape.setOutlineThickness(10.f); - shape.setOutlineColor(sf::Color(250, 150, 100)); +void Create_player(sf::RenderWindow &window, sf::Sprite &player, sf::Texture &texture) { + if(!texture.loadFromFile("sprite.png")) { + fmt::print("Error loading sprite!"); + } - return shape; + texture.setSmooth(true); + + player.setTexture(texture); + + // position the prite + sf::Vector2u winSize = window.getSize(); + player.setPosition(winSize.x / 2, winSize.y / 2); + player.setOrigin(50.f, 50.f); } int main() { @@ -155,7 +161,9 @@ int main() { sf::Clock clock; sf::Time tick = clock.getElapsedTime(); - sf::CircleShape shape = Create_player(window); + sf::Sprite player; + sf::Texture texture; + Create_player(window, player, texture); b2Vec2 gravity(0.0f, -10.0f); b2World world(gravity); @@ -164,7 +172,7 @@ int main() { while (window.isOpen()) { Handle_events(window, box); // preparing for refactoring this into a class or struct for everything - tick = Update_entities(window, world, clock, deltaClock, tick, box, shape); + tick = Update_entities(window, world, clock, deltaClock, tick, box, player); } ImGui::SFML::Shutdown(); diff --git a/sfmldemo/sprite.png b/sfmldemo/sprite.png new file mode 100644 index 0000000000000000000000000000000000000000..eec9fe99ab3d79419a61def38007591316a6821e GIT binary patch literal 2745 zcmV;q3P$ybP)ey2?M=?t=O+`VW`l%LaHq_JibuzS=AUC{ZZO&`eUJW6o0`?v2CL>yO0YY z7Zi*HLV@B;)m+@HC#piP_HSN-OE42O6aW@G);iyH1k^nTh&fB}xdDoqic3{5R_W7f zuM_^+Jk6O{1qcQT1;l7*09`ZbaArJ37pve*#oRsN?aPDL#VAKvK4wRsSEwOd6@M56`6Hq#>EBIy= z?5ir>rTrPIE_PAO)Pjx`h&yokEz`|Eb9tBDINkMkOtb##kN1&t5*B`FPeWIBhvfF4XyB1I~#a zoX0E|_p!x(OR<*bJsKKSLj$kZMM*L-Tz1oReX#Jl88m=+DZA{No}5?CNK`(ER6Ap> zV9Y395d1N} z>y38)A2`JI*XYT)_BaLdpeeu}Pyurk2-GGHEWnoQF46~Et^ar)6=KVcdU9_1cob2F z$2wXvN25C4(wG&_O70W9{^j=@sZD@z?S9?%4+MN2&RqtaBRx3xdLYRnQw^A{TDoF3 z`WapWHeY*@_wRm>Veo;y@3Hxm#-t(e=IakQUpFM@+XkE)FUm8-g7~*-m^Jd%*V`34 zDG-OGD#Y2_b2fZjt<67PvxL^-sO>}h+~d7_->Y`{DuQFr*?hn`GT^*C;hZ<%eCvR- zn~f&-AcAc6lG2XwL&YbQV9-V0p#E%CAd)Zd{ZZt)R$JKz}W%Lw1zB zU?SI$G!2$iiy9TTX~UJQ^T8w+OH0{_y_ZbOk}_Q9w*B7c(#AoJWk?)l}_;hbZbRiNcFoNII>fD(Jwv=W=#*z6)dme{>q7_qvi)nVGO z8cG!A_<=Qfo2T!h5kP9wfNt)Z9f$J9|jozW6q2{)l7ANa))uw;Cf=d^2`E^t6 zhFjTUV_yDzc6b?EZw`q2C=?Qb~Fm||y=m_JE` z9$Ca8XL9>}EVJZPoB15p8x3OcfcHNp`OyLVU|&A)20r^vW-J-k`X73f&;NiU##rzh zUj8Ce925NIP`>ybj@q9Wzc9%eDvB}e`V5ocXwA;za52skD!1OvkB?x#Q+UNTY_T3U z+|GRu^Qqr3Z&$uBm*tnq1C@{ekbk*~iw|alwNVi-bCy|(Uw(r( za_r$pnKqqgJxi?a!Ywox;YIM@CIIvC0wD1I1-SWcKJk0b|0$cUg(7x#6^*So;H+PB z$f>;U3v9j~uicRwZe!o$_~r-La>IaQ$Ov)irNwbb0de%me1Os(2aK7axLUDhrUCEy zC95pUH|7QV0rO&s@d*w(nNu%eqqW)PrMz(KWPgxM8*+_F3NN>)HpZgG1pp_RtN4p} z$A{Kf<1L)?BQ{(k-Nn^oqg2m9=9@0_^9riD*bks~qOt?9P`oF{#3b+BnGIGC)NPoU zy!219dU1j@msyAd0id+UERIv`syKmU#*!A+5-aqW-9Qtf!e+i-Ff@r>F$S>)G%$uU zgWSGfoL}TOT3e4&Tc8;!CPU3QQ*%;hynz6=*Dz0U7ei!MUF0RRyjmkFf(&_G>3{CR zTuqAw&~3BagnjTg(4bGnxTEqdo6#)w4hEFxBoW53w@Ejfq}!@V!uAU1Yu+6WUNCF% zVB%t`eA9G{M6)Kv^#I^KnhP{E5)BC2%k7IF2RBZWJp?`K0HFYTR-|fD7%hIJ*;gYM zK-P*+<7n~%L|%Ldj`uB#*FZRV>HTPYh8z_+USdM?YR!+t+fG2fBcsQFhrPcqjYWQl zSDQ3plB5OOmITN%VYA;vs+;^nBXDXhTdHeoOFl*bm8M8IJVxcCF+H!}P zf0lT87Akhd>~NhQqLp@=Cx^?8DBi62hH5RuDlE$8dS!my2PeOzI`HrD;AD(z%uu{r z@p{z@lfm^*iJ_vpNHrh7!=k_Eqq8|~wmSAu%u&r&Ov}n<$x|lds?!w5D2{u29-h9| z(~CPTt(c`+f3e5rtN8Kx|NdNEk2CPFrxE`Ns%Ip(5$P&O00000NkvXXu0mjf`~_