示例#1
0
文件: object.cpp 项目: Solexid/BMOD
void bmodMotionState::getWorldTransform(btTransform &worldTrans) const {
	if(obj->getEntities()->size() == 0) {
		worldTrans = btTransform(btQuaternion(0, 0, 0, 1));
		return;
	}

	edict_t * entity = INDEXENT(obj->getEntities()->front());

	worldTrans = btTransform(btQuaternion(0, 0, 0, 1), btVector3(entity->v.origin.x, entity->v.origin.y, entity->v.origin.z));
	btVector3 angles;
	entity->v.angles.CopyToArray(angles.m_floats);
	EulerMatrix(angles, worldTrans.getBasis());
}
示例#2
0
void LoadDockInfo(uint client)
{
	CLIENT_DATA &cd = clients[client];

	// How many docking modules do we have?
	cd.iDockingModules = 0;
	cd.mapDockedShips.clear();

	for (list<EquipDesc>::iterator item = Players[client].equipDescList.equip.begin();
		item != Players[client].equipDescList.equip.end(); item++)
	{
		if (item->bMounted && item->iArchID == 0xB85AB480)
		{
			cd.iDockingModules++;
		}
	}

	// Load docked ships until we run out of docking module space.
	uint count = HookExt::IniGetI(client, "dock.docked_ships_count");
	for (uint i=1; i<=count && cd.mapDockedShips.size()<=cd.iDockingModules; i++)
	{
		char key[100];
		sprintf(key, "dock.docked_ship.%u", i);
		wstring charname = HookExt::IniGetWS(client, key);
		if (charname.length())
		{
			if (HkGetAccountByCharname(charname))
			{
				cd.mapDockedShips[charname] = charname;
			}
		}
	}

	cd.wscDockedWithCharname = HookExt::IniGetWS(client, "dock.docked_with_charname");
	if (cd.wscDockedWithCharname.length())
		cd.mobile_docked = true;
						
	cd.iLastBaseID = HookExt::IniGetI(client, "dock.last_base");
	cd.iCarrierSystem = HookExt::IniGetI(client, "dock.carrier_system");
	cd.vCarrierLocation.x = HookExt::IniGetF(client, "dock.carrier_pos.x");
	cd.vCarrierLocation.y = HookExt::IniGetF(client, "dock.carrier_pos.y");
	cd.vCarrierLocation.z = HookExt::IniGetF(client, "dock.carrier_pos.z");

	Vector vRot;
	vRot.x = HookExt::IniGetF(client, "dock.carrier_rot.x");
	vRot.y = HookExt::IniGetF(client, "dock.carrier_rot.y");
	vRot.z = HookExt::IniGetF(client, "dock.carrier_rot.z");
	cd.mCarrierLocation = EulerMatrix(vRot);
}
示例#3
0
文件: object.cpp 项目: Solexid/BMOD
/*
copy entity's position&stuff to rigidbody
*/
void bmodObject::update() {
	if(entities.size() == 0)
		return;

	//TODO: use getWorldTransform instead!
	edict_t * entity = INDEXENT(entities.front());

	btTransform worldTrans(btQuaternion(0, 0, 0, 1), btVector3(entity->v.origin.x, entity->v.origin.y, entity->v.origin.z));
	btVector3 angles;
	entity->v.angles.CopyToArray(angles.m_floats);
	EulerMatrix(angles, worldTrans.getBasis());

	rigidBody->setWorldTransform(worldTrans);

	rigidBody->setLinearVelocity(btVector3(entity->v.velocity.x, entity->v.velocity.y, entity->v.velocity.z));
	rigidBody->setAngularVelocity(btVector3(entity->v.avelocity.z, -entity->v.avelocity.x, entity->v.avelocity.y) * SIMD_RADS_PER_DEG);
}