Ejemplo n.º 1
0
void btWheelInfoFromSWheelInfo(const SWheelInfo &info, btWheelInfo &btInfo)
{
    btTransform transform;
    btTransformFromIrrlichtMatrix(info.worldTransform, transform);
    btInfo.m_worldTransform = transform;
    btInfo.m_chassisConnectionPointCS = irrlichtToBulletVector(info.chassisConnectionPointCS);
    btInfo.m_wheelDirectionCS = irrlichtToBulletVector(info.wheelDirectionCS);
    btInfo.m_wheelAxleCS = irrlichtToBulletVector(info.wheelAxleCS);
    btInfo.m_suspensionRestLength1 = btScalar(info.suspensionRestLength);
    btInfo.m_maxSuspensionTravelCm = btScalar(info.maxSuspensionTravelCm);
    btInfo.m_wheelsRadius = btScalar(info.wheelRadius);
    btInfo.m_suspensionStiffness = btScalar(info.suspensionStiffness);
    btInfo.m_wheelsDampingCompression = btScalar(info.wheelDampingCompression);
    btInfo.m_wheelsDampingRelaxation = btScalar(info.wheelDampingRelaxation);
    btInfo.m_frictionSlip = btScalar(info.frictionSlip);
    btInfo.m_steering = btScalar(info.steering);
    btInfo.m_rotation = btScalar(info.wheelRotation);
    btInfo.m_deltaRotation = btScalar(info.deltaRotation);
    btInfo.m_rollInfluence = btScalar(info.rollInfluence);
    btInfo.m_engineForce = btScalar(info.engineForce);
    btInfo.m_brake = btScalar(info.brake);
    btInfo.m_bIsFrontWheel = info.isFrontWheel;
    btInfo.m_clippedInvContactDotSuspension = btScalar(info.clippedInvContactDotSuspension);
    btInfo.m_suspensionRelativeVelocity = btScalar(info.suspensionRelativeVelocity);
    btInfo.m_wheelsSuspensionForce = btScalar(info.wheelSuspensionForce);
    btInfo.m_skidInfo = btScalar(info.skidInfo);
}
Ejemplo n.º 2
0
void CGWIC_BodyPart::UpdatePosition()
{
	if ((!root) || (!collider) || (!colbody)) return;
	root->updateAbsolutePosition();
	colbody->updateObject();
	btTransform btt = colbody->getPointer()->getCenterOfMassTransform();
	btt.setOrigin(irrlichtToBulletVector(root->getPosition()));
	colbody->getPointer()->setCenterOfMassTransform(btt);
	if (colbody->getActivationState() == EAS_SLEEPING)
		colbody->setActivationState(EAS_ACTIVE);
}
Ejemplo n.º 3
0
void CGWIC_BodyPart::SetActive(bool activate, bool chain)
{
	if (!success) return;
	//if (activate == active) return;
	if (activate) {
		if (collider) colbody = phy_world->addRigidBody(collider);
		if (!colbody)
			std::cerr << "colbody is NULL during bodypart " << name.c_str() << " activation!!!" << std::endl;
		UpdatePosition();
		if ((colbody) && (slots[0]) && (slots[0]->GetRigidBodyPtr())) {
			std::cout << "Creating slot's hinge constraint!" << std::endl;
			btRigidBody* pt1 = slots[0]->GetRigidBodyPtr()->getPointer();
			btRigidBody* pt2 = colbody->getPointer();
			GWIC_BPSlot parslot = slots[0]->GetSlotByChild(this);
	//		GWIC_BPSlot ourslot = slot_in;
			btVector3 mypivotA(irrlichtToBulletVector(parslot.posit*scale));
			btVector3 myaxisA(irrlichtToBulletVector(parslot.axis*scale));
			btVector3 mypivotB(irrlichtToBulletVector(slot_in.posit*scale));
			btVector3 myaxisB(irrlichtToBulletVector(slot_in.axis*scale));
			hinge = new btHingeConstraint(*pt1,*pt2,mypivotA,mypivotB,myaxisA,myaxisB);
		}
		if ((colbody) && (hinge)) {
			std::cout << "enabling slot hinge" << std::endl;
			phy_world->getPointer()->addConstraint(hinge,true);
		}
	} else {
		if (hinge) {
			phy_world->getPointer()->removeConstraint(hinge);
//			delete hinge;
		}
		if (colbody) phy_world->removeCollisionObject(colbody,true);
	}
	if (chain) {
		for (u32 i=1; i<slots.size(); i++)
			if (slots[i]) slots[i]->SetActive(activate,true);
	}
	active = activate;
}
void IKinematicCharacterController::setVelocityForTimeInterval(const irr::core::vector3df& velocity, irr::f32 timeInterval)
{
    Character->setVelocityForTimeInterval(irrlichtToBulletVector(velocity), timeInterval);
}
void IKinematicCharacterController::setPositionIncrementPerSimulatorStep(const irr::core::vector3df& increment)
{
    Character->setWalkDirection(irrlichtToBulletVector(increment));
}
void IKinematicCharacterController::warp(const irr::core::vector3df& origin)
{
    Character->warp(irrlichtToBulletVector(origin));
}