Skip to content

Commit

Permalink
Fix error (kraken and surfer are not crashed)
Browse files Browse the repository at this point in the history
  • Loading branch information
foba1 committed Dec 6, 2020
1 parent a6b6c7d commit 75f33fa
Show file tree
Hide file tree
Showing 5 changed files with 35 additions and 0 deletions.
11 changes: 11 additions & 0 deletions src/GameManager.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -170,6 +170,17 @@ void GameManager::Update()
else
m_ObjectManager.RemoveMovable(vec_movable[i]);
}
if (vec_movable[i]->GameObject::IsVisible())
{
for (int j = 0; j < vec_movable.size(); j++)
{
if (i != j && vec_movable[j]->GameObject::IsVisible())
{
if (vec_movable[i]->HasIntersected_(vec_movable[j]))
vec_movable[i]->HitBy(vec_movable[j]);
}
}
}
}

// check collision between movable and immovable
Expand Down
12 changes: 12 additions & 0 deletions src/GameObject/MovableObject.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -74,3 +74,15 @@ void MovableObject::ResetRotate()
//this->velocity_y = 1.0f;
}

bool MovableObject::HasIntersected_(MovableObject* object)
{
// collision detected!
float dx = this->GetCenterX() - object->GetCenterX();
float dy = this->GetCenterY() - object->GetCenterY();
int dw = this->GetWidth() + object->GetWidth();
int dh = this->GetHeight() + object->GetHeight();
if (dx < 0) dx *= -1;
if (dy < 0) dy *= -1;
if (dx <= dw && dy <= dh) return true;
else return false;
}
1 change: 1 addition & 0 deletions src/GameObject/MovableObject.h
Original file line number Diff line number Diff line change
Expand Up @@ -35,6 +35,7 @@ class MovableObject : public GameObject {
virtual void ResetRotate();
void SetSpeedByFactor(float factor);
void Stop();
bool HasIntersected_(MovableObject* object);
};

#endif
10 changes: 10 additions & 0 deletions src/ObjectGenerator.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -22,6 +22,13 @@ void ObjectGenerator::Generate(ObjectManager& objectManager)

void ObjectGenerator::Generate(ObjectManager& objectManager, SceneManager& sceneManager)
{
// Kraken check
extern int score;
if (kraken_score + 400 < score) {
kraken_score = 0;
objectManager.SetKraken(false);
}

/* Generate objects */

vector<MovableObject*> generated_movable;
Expand All @@ -48,6 +55,9 @@ void ObjectGenerator::Generate(ObjectManager& objectManager, SceneManager& scene
)
); // add to temporary vector
objectManager.SetKraken(true);
kraken_score = score;
extern int life_count;
life_count--;
}

// Left bottom x-position of boundary (out of frame)
Expand Down
1 change: 1 addition & 0 deletions src/ObjectGenerator.h
Original file line number Diff line number Diff line change
Expand Up @@ -23,6 +23,7 @@ class ObjectGenerator{
{0.002f, 0.025f, 0.02f, 0.02f, 0.025f},
{0.003f, 0.03f, 0.025f, 0.015f, 0.03f},
};
int kraken_score = 0;
public:
ObjectGenerator();
void Generate(ObjectManager& objectManager);
Expand Down

0 comments on commit 75f33fa

Please sign in to comment.