diff --git a/Crawler/Crawler.cpp b/Crawler/Crawler.cpp index 1705ca68..90aacca1 100644 --- a/Crawler/Crawler.cpp +++ b/Crawler/Crawler.cpp @@ -401,13 +401,10 @@ void Crawler::UpdateBullets(float fElapsedTime){ b->animation.UpdateState(b->internal_animState,fElapsedTime); if(!b->deactivated){ float totalDistance=(b->vel*fElapsedTime).mag(); - vf2d moveStep=b->vel*fElapsedTime; - if((b->vel*fElapsedTime).mag()>1){ - moveStep=(b->vel*fElapsedTime).norm(); - } - while(totalDistance>0){ - totalDistance=std::max(0.f,totalDistance-1); - b->pos+=moveStep; + int iterations=std::max(1.f,(b->vel*fElapsedTime).mag()); + int totalIterations=iterations; + vf2d finalBulletPos=b->pos+b->vel*fElapsedTime; + const auto CollisionCheck=[&](){ if(b->friendly){ for(Monster&m:MONSTER_LIST){ if(geom2d::overlaps(geom2d::circle(m.GetPos(),12*m.GetSizeMult()),geom2d::circle(b->pos,b->radius))){ @@ -415,7 +412,7 @@ void Crawler::UpdateBullets(float fElapsedTime){ if(!b->hitsMultiple){ if(b->MonsterHit(m)){ b->dead=true; - continue; + return false; } } b->hitList[&m]=true; @@ -427,13 +424,26 @@ void Crawler::UpdateBullets(float fElapsedTime){ if(player->Hurt(b->damage,b->OnUpperLevel(),0)){ if(b->PlayerHit(player.get())){ b->dead=true; - continue; + return false; } } } } + return true; + }; + + while(iterations>0){ + iterations--; + b->pos+=(b->vel*fElapsedTime)/float(totalIterations); + if(!CollisionCheck()){ + goto nextBullet; + } } - } else { + b->pos=finalBulletPos; + if(!CollisionCheck()){ + goto nextBullet; + } + }else{ b->pos+=b->vel*fElapsedTime; } if(b->pos.x+b->radiuspos.x-b->radius>view.GetWorldBR().x+WINDOW_SIZE.x||b->pos.y+b->radiuspos.y-b->radius>view.GetWorldBR().y+WINDOW_SIZE.y){ @@ -445,6 +455,8 @@ void Crawler::UpdateBullets(float fElapsedTime){ b->dead=true; continue; } + nextBullet: + int a; } outsideBulletLoop: std::erase_if(BULLET_LIST,[](std::unique_ptr&b){return b->dead;}); diff --git a/Crawler/Version.h b/Crawler/Version.h index 246f9b9e..05c993bc 100644 --- a/Crawler/Version.h +++ b/Crawler/Version.h @@ -2,7 +2,7 @@ #define VERSION_MAJOR 0 #define VERSION_MINOR 2 #define VERSION_PATCH 0 -#define VERSION_BUILD 1349 +#define VERSION_BUILD 1362 #define stringify(a) stringify_(a) #define stringify_(a) #a diff --git a/x64/Release/Crawler.exe b/x64/Release/Crawler.exe index fe1065ee..a44e7b0e 100644 Binary files a/x64/Release/Crawler.exe and b/x64/Release/Crawler.exe differ