Remove hashing requirement by using a set for hamster checkpoints instead.

sigonasr2 7 months ago
parent baf7ca769c
commit 12739dcf3c
  1. 10
      src/Checkpoint.h
  2. 6
      src/Hamster.cpp
  3. 2
      src/Hamster.h

@ -56,14 +56,4 @@ public:
static std::vector<Checkpoint>&GetCheckpoints(); static std::vector<Checkpoint>&GetCheckpoints();
const vf2d&GetPos()const; const vf2d&GetPos()const;
void OnCheckpointCollect(); void OnCheckpointCollect();
friend const bool operator==(const Checkpoint&cp1,const Checkpoint&cp2){return cp1.pos==cp2.pos;}
};
template <>
struct std::hash<Checkpoint>
{
int_fast64_t operator()(const Checkpoint&checkpoint)const
{
return (int_fast64_t)(*(int_fast32_t*)(&checkpoint.pos.x))<<32|*(int_fast32_t*)(&checkpoint.pos.y);
}
}; };

@ -356,8 +356,8 @@ void Hamster::HandleCollision(){
} }
} }
for(Checkpoint&checkpoint:Checkpoint::GetCheckpoints()){ for(Checkpoint&checkpoint:Checkpoint::GetCheckpoints()){
if(z<=0.1f&&geom2d::overlaps(geom2d::rect<float>(checkpoint.GetPos()-vf2d{62,60},{122.f,113.f}),geom2d::circle<float>(GetPos(),collisionRadius))&&!checkpointsCollected.count(checkpoint)){ if(z<=0.1f&&geom2d::overlaps(geom2d::rect<float>(checkpoint.GetPos()-vf2d{62,60},{122.f,113.f}),geom2d::circle<float>(GetPos(),collisionRadius))&&!checkpointsCollected.count(checkpoint.GetPos())){
checkpointsCollected.insert(checkpoint); checkpointsCollected.insert(checkpoint.GetPos());
FloatingText::CreateFloatingText(pos,std::format("{} / {}",checkpointsCollected.size(),Checkpoint::GetCheckpoints().size()),{WHITE,GREEN},{1.5f,2.f}); FloatingText::CreateFloatingText(pos,std::format("{} / {}",checkpointsCollected.size(),Checkpoint::GetCheckpoints().size()),{WHITE,GREEN},{1.5f,2.f});
checkpoint.OnCheckpointCollect(); checkpoint.OnCheckpointCollect();
} }
@ -583,7 +583,7 @@ const bool Hamster::CollectedAllCheckpoints()const{
} }
const bool Hamster::HasCollectedCheckpoint(const Checkpoint&cp)const{ const bool Hamster::HasCollectedCheckpoint(const Checkpoint&cp)const{
return checkpointsCollected.contains(cp); return checkpointsCollected.contains(cp.GetPos());
} }
const std::vector<Hamster>&Hamster::GetHamsters(){ const std::vector<Hamster>&Hamster::GetHamsters(){
return HAMSTER_LIST; return HAMSTER_LIST;

@ -111,7 +111,7 @@ class Hamster{
float jetFuel{0.f}; float jetFuel{0.f};
float jetFuelDisplayAmt{0.f}; float jetFuelDisplayAmt{0.f};
float knockoutTimer{0.f}; float knockoutTimer{0.f};
std::unordered_set<Checkpoint>checkpointsCollected; std::set<vf2d>checkpointsCollected;
float raceFinishAnimTimer{0.f}; float raceFinishAnimTimer{0.f};
std::pair<Timer,vf2d>collectedCheckpointInfo{INFINITY,{}}; std::pair<Timer,vf2d>collectedCheckpointInfo{INFINITY,{}};
public: public:

Loading…
Cancel
Save