コード例 #1
0
void PhysicsSystem::ResolveContacts(float deltaTime)
{
     if(contacts.size() == 0)
        return;

    ComponentFactory& CF = ComponentFactory::Instance();
    if(!CF.hasComponentCache<PhysicsComponent>() || !CF.hasComponentCache<PositionalComponent>() ) //check for any graphicsComponents
        return;
    GameObjectCache& GOC = GameObjectCache::Instance();

    for (unsigned i=0; i < contacts.size(); i++)
    {
        Contact& c = contacts[i];

        GameObject* A = GOC.Get(c.ObjIDs[0]);
        GameObject* B = GOC.Get(c.ObjIDs[1]);

        PhysicsComponent& APhys = *A->getComponent<PhysicsComponent>();
        PositionalComponent& APos = *A->getComponent<PositionalComponent>();
        PhysicsComponent& BPhys = *B->getComponent<PhysicsComponent>();
        PositionalComponent& BPos = *B->getComponent<PositionalComponent>();

        if(APhys.IsGhost || BPhys.IsGhost) //do not move ghost objects
            continue;

        ResolvePosition(c, APhys, APos, BPhys, BPos);
        ResolveVelocities(c, APhys, APos, BPhys, BPos, deltaTime);
    }
}
コード例 #2
0
	void ContactResolver::ResolveContacts()
	{
		if(!m_contacts.empty())
		{
			InitContacts();
			ResolvePosition();
			ResolveVelocity();
		}
	}
コード例 #3
0
ファイル: skin.hpp プロジェクト: alexz89ua/omim
 void ForEach(ToDo todo)
 {
   for (auto node : m_resolvers)
     todo(node.first, ResolvePosition(node.first));
 }