Fix bullet collision and movement code yet again... On slower frame rates bullets were speeding up.

pull/28/head
sigonasr2 1 year ago
parent 064d717e27
commit 0d6b6584d5
  1. 32
      Crawler/Crawler.cpp
  2. 2
      Crawler/Version.h
  3. BIN
      x64/Release/Crawler.exe

@ -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->radius<view.GetWorldTL().x-WINDOW_SIZE.x||b->pos.x-b->radius>view.GetWorldBR().x+WINDOW_SIZE.x||b->pos.y+b->radius<view.GetWorldTL().y-WINDOW_SIZE.y||b->pos.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<Bullet>&b){return b->dead;});

@ -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

Binary file not shown.
Loading…
Cancel
Save