bryansijs / Gamedevelopment

42IN13SAe
0 stars 0 forks source link

Enemy raken met kogels #61

Closed rgjvanriel closed 8 years ago

rgjvanriel commented 8 years ago

Enemy kan geraakt worden door kogels. Als de enemy geraakt wordt gaat er HP af. Als de enemy onder of gelijk is aan de 0 HP wordt deze verwijdert.

Gnpiwano commented 8 years ago

Ik weet niet waarom maar in jou branch lijken de bullets te colliden met sensors. Deze sensors zijn juist bedoelt om wel de collide mee te detecteren maar niet daadwerkelijk mee te colliden.

AndyScherrenberg commented 8 years ago

Enemies kunnen inderdaad worden geraakt en worden dan verwijderd. Zou cool zijn als we hier dan een explosie overleggen : P

Sensor probleem bestaat inderdaad.

Ik heb het zo opgelost bij mij:

void Bullet::startContact(b2Fixture * fixture)
{
    GameObject* pal = static_cast<Player*>(fixture->GetBody()->GetUserData());
    if (!dynamic_cast<Player*> (pal) && !fixture->IsSensor()) {
        Destroy();
    }
}

Dit zit er nu:

```c++
void Bullet::startContact(b2Fixture * fixture)
{
    GameObject* pal = static_cast<Player*>(fixture->GetBody()->GetUserData());

    if (dynamic_cast<Player*> (pal))
    {
        if (dynamic_cast<Player*> (pal)->GetGodMode())
        {
            return;
        }
    }

    if (dynamic_cast<Unit*> (pal))
    {
        Unit* enemy = dynamic_cast<Unit*> (pal);
        enemy->Damage(this->damage);
    }

    Destroy();
}

Op deze manier zou het dus moeten werken. 

```c++
void Bullet::startContact(b2Fixture * fixture)
{
    GameObject* pal = static_cast<Player*>(fixture->GetBody()->GetUserData());

        if (fixture->IsSensor())
           return

    if (dynamic_cast<Player*> (pal))
    {
        if (dynamic_cast<Player*> (pal)->GetGodMode())
        {
            return;
        }
    }

    if (dynamic_cast<Unit*> (pal))
    {
        Unit* enemy = dynamic_cast<Unit*> (pal);
        enemy->Damage(this->damage);
    }

    Destroy();
}

Het gedeelte van de player moet dan natuurlijk even weg.