예제 #1
0
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);
			}
		}

	}
}
예제 #2
0
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);
	}
}