Ejemplo n.º 1
0
void Vehicle::evaluate()
{
	float m[16];
	
	for (int i=0;i<m_vehicle->getNumWheels();i++)
	{
		if (wheels[i]->getSteering())
		{
			m_vehicle->setSteeringValue(gVehicleSteering,i);
		}
		
		if (wheels[i]->getBraking())
		{
			m_vehicle->setBrake(gBreakingForce,i);
		}

		if (wheels[i]->getDriving())
		{
			m_vehicle->applyEngineForce(gEngineForce,i);	
		}
		
		//synchronize the wheels with the (interpolated) chassis worldtransform
		m_vehicle->updateWheelTransform(i,true);
		m_vehicle->getWheelTransformWS(i).getOpenGLMatrix(m);
		wheels[i]->wheelObj.setMatrix(m);
		wheels[i]->wheelObj.clearTransform();
		wheels[i]->wheelRef.clearTransform();
		wheels[i]->wheelObj.calcAABB();
	}

	RigidSceneObject::evaluate();
	
	calcAABB();	
}
Ejemplo n.º 2
0
void CCollider::Init(E_COLLIDER_TYPE type, CTransform & transform, E_X_START xStart,  E_Y_START yStart, bool active)
{
	this->m_type = type;
	this->m_xStart = xStart;
	this->m_yStart = yStart;
	this->m_active = active;
	calcAABB(transform);
	calcDist(transform);
}
Ejemplo n.º 3
0
void Mesh::normalizeSize(float scale) {
  AABB& aabb = calcAABB();
  float width = aabb.width(), height = aabb.height(), depth = aabb.depth();
  float avg = (width + height + depth) / 3.0f;
  for (unsigned i=0; i<vertices.size(); ++i) {
    Vector& v = vertices[i];
    if (width) v.x /= avg;
    if (height) v.y /= avg;
    if (depth) v.z /= avg;
    v.x *= scale;
    v.y *= scale;
    v.z *= scale;
  }
}
Ejemplo n.º 4
0
void CCollider::Update(CTransform & transform)
{
	calcAABB(transform);
	calcDist(transform);
}
Ejemplo n.º 5
0
void CCollider::SetType(E_COLLIDER_TYPE type, CTransform& transform)
{
	this->m_type = type;
	calcAABB(transform);
	calcDist(transform);
}