void Weapon::EndContact(PhysicsActor *actThisPtr, PhysicsActor *actOtherPtr) { // We're not interested in the wielder or other actors if ((actThisPtr != m_HitRegionPtr) || ((m_WielderPtr != nullptr) && (m_WielderPtr->GetActor() == actOtherPtr))) { return; } // Check whether it is the player, // Else check whether it is an enemy. Level* level = Singleton<Level>::GetInstance(); if ((level->GetPlayer() != nullptr) && (actOtherPtr == level->GetPlayer()->GetActor())) { RemoveTarget(level->GetPlayer()); } else { const std::vector<Enemy*>& enemies = level->GetEnemies(); for (std::vector<Enemy*>::const_iterator it = enemies.cbegin(); it != enemies.cend(); ++it) { if ((*it)->GetActor() == actOtherPtr) { RemoveTarget(*it); } } } }
void Door::Update(Level& level, const sf::Time& timePassed) { if(IsActive() && !IsFinished()) { if(level.GetPlayer().HasKey(doorName)) { level.SetHUDText("Used " + description + "."); soundManager.PlaySound("open"); isOpened = true; Finish(); } else { level.SetHUDText("Locked; need " + description + "."); soundManager.PlaySound("locked"); isActive = false; } isCollidable = !isOpened && !isBroken; } if(isOpened) { PlayAnim("open", timePassed); } else if(isBroken) { PlayAnim("broken", timePassed); } else { PlayAnim("idle", timePassed); } }