From 277bedf12216da80a6d52d0f51bd947293a3367e Mon Sep 17 00:00:00 2001 From: swim67667 <150874399+Swim67667@users.noreply.github.com> Date: Sun, 28 Jun 2026 14:40:40 -0400 Subject: [PATCH] fully fixed collision --- src/collision.c | 44 +++++++++++++++++++++++++++++--------------- wrldboxMacOS | Bin 52336 -> 52336 bytes 2 files changed, 29 insertions(+), 15 deletions(-) diff --git a/src/collision.c b/src/collision.c index 7e099c82..0e5b7822 100644 --- a/src/collision.c +++ b/src/collision.c @@ -17,26 +17,40 @@ void checkCollision(){ if(!en2->active){ continue; } - printf("%d\n", en1->headgrounded); - + //calculate overlap float half = (en1->size + en2->size) * 0.5f; - float overlapX = half - fabsf(en1->position.x - en2->position.x); + float overlapXcheck = half - fabsf(en1->position.x - en2->position.x); + float overlapXapply = ((en1->size + en2->size) * 0.43f) - fabsf(en1->position.x - en2->position.x); float overlapY = half - fabsf(en1->position.y - en2->position.y); - - if (overlapX > 0 && overlapY > 0) + // check if any overlap + if (overlapXcheck > 0 && overlapY > 0) { - if (overlapY < overlapX && en1->position.y < en2->position.y) + if (overlapY < overlapXapply) { - // top collision - en1->position.y = en2->position.y - half; - en1->velocity.y = 0; - en1->velocity.x *= en2->drag; - en1->headgrounded = true; - } else { - en1->headgrounded = false; - float forcex=fabsf(((en1->mass+en2->mass)/2)*((((en1->velocity.x)+(scale))+((en2->velocity.x)+(scale)))/2))*(scale*1.5); - float forcey=fabsf(((en1->mass+en2->mass)/2)*((((en1->velocity.y)+(scale))+((en2->velocity.y)+(scale)))/2))*(scale/4); + if (en1->position.y < en2->position.y) + { + // if the first entity is above the second put norml force on first entity + en1->position.y = en2->position.y - half; + en1->velocity.y = 0; + en1->velocity.x *= en2->drag; + en1->headgrounded = true; + } + else + { + // if the second entity is above the fisrt put norml force on second entity + en2->position.y = en1->position.y - half; + en2->velocity.y = 0; + en2->velocity.x *= en1->drag; + en2->headgrounded = true; + } + } + else + { + // push apart calculation + float forcex = fabsf(((en1->mass+en2->mass)/2)*((((en1->velocity.x)+(scale))+((en2->velocity.x)+(scale)))/2))*(scale*1.5); + //direction resolution if(en1->position.x < en2->position.x){ + //kill velocity so they cant go throughe achother en1->velocity.x=0; en2->velocity.x=0; ApplyForce( diff --git a/wrldboxMacOS b/wrldboxMacOS index d0a1f3554693c5da87b178003a7066a097196bb4..6cdb3ae31dfc60a96104e4d7907dd872e96c49c1 100755 GIT binary patch delta 1588 zcmZuxeN0nV6hF5u_Cfi2($YfVwNJ3%kdHzH#4S8Dh?^3OV*yEofnc(^L1d`l1nS(x zpvfSYWSwpc8ncy6iP~&qiEkUAh#xT+&BVnmZGwO3Dpbd|PBHAfzDMMbz2u&If4_6i z@0{Cvd;Lze->L4IB+lNuC9IzVAOOHf20uTwlR`FNk=a?9gaAE&tj{X5$qMVEH<69z zW!9mv(QaP#i7NW{^v=uOky)F&`_>%(KC7*sj%)Hss+)vVs^}w=N%LI0YZKkA%^`Q` zfHukCi-U4(LGK!^85$U^9%4x7&VK6E=4gIEmgX};flFNzfKWknsjCA7XGrBai6ap* zr^0#J?UNnj*N<))zxP!$At@Xj<}Ll}=pKg4_T+%re{kCc#%krxuyQp|jvz`neGxvf zZrcU0@?6LgI>x+Ru9upUDzk!kViaBZQq^k25bOk|AQR%GHFjc`I{^cB$M75&Kpeo> zRB&ubjeynC2Fs=Gyd1iMoTEEJbM>m|CXQ$7IACfy5b8KjCWtgVY>5 z_ht$rFYuf<1w>C8jub)krU_z%2KqcY0b{CzF&H-(Np4 zKT4=sm$BSa*vp1MpF``|V#awtwuJX(0<6$$Ma3$^SAT5rlCwBUE zL>Kv)W=9?;_vnqtG?GA{Ms6e<==!KmvY(DcHIdsiH+o~}R#k5(z}Xe)v^)A6(n53D z64FmQ*gW)qht@==(NOhq*GR!o&NW$Jgtv6@~&@bK{bBZz!Q zu(h)cO9%B9!qOXhGunsxt~mRP$ZP6Fk#^c`NFuy@(6E!>8OIw-_(h_{ifAhS)12e{-VjZ;){v%qazTDG33q9MG;{jUw=|f@c-~DG6gG zr&*3ar{Kz^G9Fg&6n${9hV?61Cd`o93a48ySx72vL+f*YdMQ4n(}@YvNA}{cUf0xG zTD!gMbx2RET6cO?!&L2?gYA98Jry&RPmY}~{oDN0YbV2&|61JDoaVdV^4rCgcjm4> ztC&2t>HL}u&iCjvTavps@J(qss2J7f*fr zaBu#Z&eP{Bo5mjOaA#jLl9ZRO{2Tw}Olu3S%k>M delta 1608 zcmZuxdrVVj6hGg+ExkM{6bdb`+g>XV#{yB}D6+`~vw$(EaZAQX0L3a(oCxY1Fr>uS z;udZBSag|L%CaR^+yXRl{y`Z~bWEoKw&@?Ys&&hPxr z>)vy6gBRG~1=jI1aX5b|(*<|{0sx#O@Cnd0q*xa;$<~l;gdpuiYrrg9S1Hy2okVMl zAY1K>=t(CXHn#m)bP$B_DBq<1<~u z()vrj+H2gBrYVLV(d3hR)UB~3UP*@6pK)$q%{7ihHte8&P5!E{r3kh*#A(IChb%Zb zB6ejH_#0d3gW+Q5oEo~RkrTJLeAR=JBhiW8OKeSu!CUz8vtwWtc-O}CLD%u>LC$RE zE8^u+u8lIjt$U7p&nvf-#{u-I0Cum~gR`LS60f$Zc z(gvwMDx)J6ypRatmym83rs!d-2L(~!{RQBiF2YkFdi_PBSF3{V=~NMYYQjGLJmm86 zTpPQjeUD6-tS>cIJ^mn1E(1=hdS5K zIsrci46oz^IAq+@rLfOI&)Mi9LQc{Ot&IqDKzo|>(e*1nA>Y%xD{@E-WnwoIE8P;? zLH5%-v5jPmZiw3)xruQ`;(n}7r(JQq#6~yh%7}xW(iI>-gp#8RD9dSX{I{f^F2qyf zr)LtjGLKpMTSAp|73lX6LO<0TP+rxW(uv9`%}e?W(t>0Vd1>;tY z*#EEs?Mk!|o#$#|1HlEVG4fP2tj4ta3??!{&lu257Zg2{zHAi2UJYc@bJLisQDxYo zz!Nf+6B3{$LRRuP3rr{qh&2Jgst2|^5g?cdB+b()oaCK5RGtX&_s)n=39#Uxk4I9X zPn4oMSBPSsCXJe2om+$IqQsA{myGKGm;-wcztPyd-v-r(%9 z;B;egaU3Z!#vO%N6@W^RF}j8MxilHSsNloOKdk5(kAav5Hc1%c7tJ!RQuy+88Sj>H z9n32Qo0NcgC7@lwpfqq!!9j)pT*6YrsdB=81#gR&@rZ)&(}!cVx;Z7vh!Ij-9DVb; ziI`~%%7EwN>nZ9E2L?zFIf`GsuJPT9ox8Ta2IX)4pd0!iySz8)!~Cg7ZDeSwx<)@A z8u&<8_g8zRn7w%D9a~9#>duS3g~KJyZ0jF;Pp!K&2rm0~ ZCD&(~4&L#ecjU|#1`8sfC`oP+{sjju%&7nX