Пример #1
0
int AddNodalLink(const CKBehaviorContext& behcontext)
{
	CKBehavior* beh = behcontext.Behavior;
	CKContext* ctx = behcontext.Context;
	CKAttributeManager* attman = ctx->GetAttributeManager();
	beh->ActivateInput(0,FALSE);
	beh->ActivateOutput(0);

	CKGroup* group = (CKGroup*)beh->GetInputParameterObject(0);			
	CKParameterOut* param = group->GetAttributeParameter(attman->GetAttributeTypeByName(Network3dName));
	if(!param) throw "Given Group isn't a Network";
	N3DGraph* graph;
	param->GetValue(&graph);

	CK3dEntity* s = (CK3dEntity*)beh->GetInputParameterObject(1);
	CK3dEntity* e = (CK3dEntity*)beh->GetInputParameterObject(2);
	float b;
	beh->GetInputParameterValue(3,&b);
	graph->InsertEdge(s,e,b);
	beh->ActivateOutput(0);





	return CKBR_OK;
}
int SetCIConnectionDetails(const CKBehaviorContext& behcontext)
{
	/************************************************************************/
	/*  collecting data : 													*/
	/*  																	*/
	CKBehavior* beh = behcontext.Behavior;
  	CKContext* ctx = behcontext.Context;


	GBLConfigurationManager* cman=(GBLConfigurationManager*)ctx->GetManagerByGuid(CONFIGURATION_MAN_GUID);
	CGBLSyncInterface *CINetworkInterface = cman->GetSynInterface();

    
	
	/************************************************************************/
	/*  check interface :													*/
	/*  																	*/
	if (!CINetworkInterface->isValidInterface())
	{
		//try to init the network interface : 
		if (!CINetworkInterface->Init(ctx))
		{
			return CKBR_BEHAVIORERROR;
		}
	}

	/************************************************************************/
	/*  process building block events	:						*/
	/*  																	*/
	if( beh->IsInputActive(0) )
	{
		beh->ActivateInput(0,FALSE);
		XString message((CKSTRING) beh->GetInputParameterReadDataPtr(0));
		int connectionID = -1; 
		beh->GetInputParameterValue(1,&CINetworkInterface->connectionID);
		CKAttributeManager *aMan = static_cast<CKAttributeManager*>(ctx->GetAttributeManager());
		
		//////////////////////////////////////////////////////////////////////////
		//store connection details in the scipt dummies attribute :
		CKAttributeType gblNetworkAtt = aMan->GetAttributeTypeByName( GBL_API_ENTRY("NetworkDetails"));
		if (!CINetworkInterface->messageDummy->HasAttribute(gblNetworkAtt) )
		{		
			CINetworkInterface->messageDummy->SetAttribute(gblNetworkAtt);
		}
		GBLCommon::ParameterTools::SetParameterStructureValue<int>(CINetworkInterface->messageDummy->GetAttributeParameter(gblNetworkAtt),0,CINetworkInterface->connectionID);
		GBLCommon::ParameterTools::SetParameterStructureValue<CKSTRING>(CINetworkInterface->messageDummy->GetAttributeParameter(gblNetworkAtt),1,CINetworkInterface->messageName.Str());
		
		//////////////////////////////////////////////////////////////////////////
		//activate and execute the script :
		behcontext.CurrentScene->Activate(CINetworkInterface->synchronizeScript,true);
		behcontext.CurrentScene->Activate(CINetworkInterface->messageDummy,FALSE);
		CINetworkInterface->synchronizeScript->Execute(1);
		
		beh->ActivateOutput(0);
	}
	return CKBR_OK;
}
void PhysicManager::_checkObjectsByAttribute(CKScene *newScene)
{

	CKAttributeManager* attman = m_Context->GetAttributeManager();
	int sizeJFuncMap = ATT_FUNC_TABLE_SIZE;//(sizeof(*getRegistrationTable()) / sizeof((getRegistrationTable())[0]));
	for (int fIndex = 0  ; fIndex  < sizeJFuncMap ; fIndex ++)
	{

		std::vector<int>attributeIdList;
		pFactory::Instance()->findAttributeIdentifiersByGuid(getRegistrationTable()[fIndex].guid,attributeIdList);
		int attCount = attributeIdList.size();

		for (int i = 0 ; i < attCount ; i++ )
		{
			int currentAttType = attributeIdList.at(i);
			const XObjectPointerArray& Array = attman->GetAttributeListPtr( attributeIdList.at(i) );
			for (CKObject** it = Array.Begin(); it != Array.End(); ++it)
			{	
				CK3dEntity *target = static_cast<CK3dEntity*>(*it);
				if (target)
				{
					XString error;
					error.Format("Registering :%s with %s",target->GetName(),attman->GetAttributeNameByType(currentAttType));
					//if(!strcmp( target->GetName(),"smutan3-3" ) )					{					//		xLogger::xLog(XL_START,ELOGTRACE,E_LI_MANAGER,"problem case" );					}

//					CKScene *levelScene = GetContext()->GetCurrentLevel()->GetCurrentScene();
					// we check as no scene is current in use 
					if (		(	
								GetContext()->GetCurrentLevel()->GetLevelScene() == newScene &&
								!isSceneObject2(target) 
							)
							||
							(	newScene && newScene->IsObjectHere(target) && newScene !=GetContext()->GetCurrentLevel()->GetLevelScene() )
							||
							(	
								newScene &&
								GetContext()->GetCurrentLevel()->GetCurrentScene() && 
								GetContext()->GetCurrentLevel()->GetCurrentScene() == newScene &&
								newScene !=GetContext()->GetCurrentLevel()->GetLevelScene() &&
								newScene->IsObjectHere(target)
							)
							||
							(
								(physicFlags & PMF_DONT_DELETE_SCENES) 
							)
						)
					{
							xLogger::xLog(XL_START,ELOGTRACE,E_LI_MANAGER,error.CStr() );
							(*getRegistrationTable()[fIndex].rFunc)(target,currentAttType,true,false);
							GetPMan()->getCheckList().PushBack(target->GetID());
					}
				}
			}
		}
	}
}
void PhysicManager::_RegisterAttributeCallbacks()
{
	if (!getAttributeFunctions().Size())
	{
		return;
	}

	CKAttributeManager* attman = m_Context->GetAttributeManager();
	AttributeFunctionArrayIteratorType it  = getAttributeFunctions().Begin();

	while(it != getAttributeFunctions().End())
	{
		ObjectRegisterFunction myFn = (ObjectRegisterFunction)*it;
		if (myFn)
		{
			attman->SetAttributeCallbackFunction(it.GetKey(),PObjectAttributeCallbackFunc,myFn);
		}
		it++;
	}
}
Пример #5
0
//************************************
// Method:    RegisterAttributeType
// FullName:  RegisterAttributeType
// Access:    public
// Returns:   int
// Qualifier:
// Parameter: const CKBehaviorContext& behcontext
//************************************
int RegisterAttributeType(const CKBehaviorContext& behcontext)
{
	CKBehavior* beh = behcontext.Behavior;
  	CKContext* ctx = behcontext.Context;
	PhysicManager *pm = GetPMan();

	CKAttributeManager* attman = ctx->GetAttributeManager();
	CKParameterManager *pMan  = ctx->GetParameterManager();

	using namespace vtTools::BehaviorTools;

	if( beh->IsInputActive(0) )
	{
		beh->ActivateInput(0,FALSE);

		
		CKSTRING name = GetInputParameterValue<CKSTRING>(beh,bbI_Name);
		CKSTRING category = GetInputParameterValue<CKSTRING>(beh,bbI_Category);
		CKSTRING defValue = GetInputParameterValue<CKSTRING>(beh,bbI_DefValue);
		int pType = GetInputParameterValue<int>(beh,bbI_PType);
		CK_CLASSID classId = GetInputParameterValue<CK_CLASSID>(beh,bbI_Class);

		int attFlags = 0 ;
		int user = GetInputParameterValue<int>(beh,bbI_User);
		int save = GetInputParameterValue<int>(beh,bbI_Save);

		if(user)
			attFlags|=CK_ATTRIBUT_USER;

		if(save)
			attFlags|=CK_ATTRIBUT_TOSAVE;

		attFlags|=CK_ATTRIBUT_CAN_DELETE;

		CKAttributeType aIType = attman->GetAttributeTypeByName(name);
		if (aIType!=-1)
		{
			beh->ActivateOutput(1);
		}

		int att =  attman->RegisterNewAttributeType(name,pMan->ParameterTypeToGuid(pType),classId,(CK_ATTRIBUT_FLAGS)attFlags);

		if (strlen(category))
		{
			attman->AddCategory(category);
			attman->SetAttributeCategory(att,category);
		}
		if (strlen(defValue))
		{
			attman->SetAttributeDefaultValue(att,defValue);
		}

	}
	pm->populateAttributeFunctions();
	pm->_RegisterAttributeCallbacks();

	beh->ActivateOutput(0);
	return 0;
}
int SetCIConnectionDetails(const CKBehaviorContext& behcontext)
{
	/************************************************************************/
	/*  collecting data : 													*/
	/*  																	*/
	CKBehavior* beh = behcontext.Behavior;
  	CKContext* ctx = behcontext.Context;


	MeasuredObjectiveControllerMgr* mman=(MeasuredObjectiveControllerMgr*)ctx->GetManagerByGuid(MeasuredObjectiveControllerMgrGUID);
	
	CGBLSyncInterface * syninterface = CGBLLOArrayHandler::Instance()->GetSynInterface();

    
	/************************************************************************/
	/*  check interface :													*/
	/* 
	*/

	if (!syninterface->isValidInterface())
	{
		Logger::ShowDebugMessage(ctx,Logger::ELOGERROR,"interface wrong");
		//try to init the network interface : 
		if (!syninterface->Init(ctx))
		{
			Logger::ShowDebugMessage(ctx,Logger::ELOGERROR,"not loaded");
			return CKBR_BEHAVIORERROR;
		}
	}				  

	/************************************************************************/
	/*  process building block events	:						*/
	/*  																	*/
	
	if( beh->IsInputActive(0) )
	{
		beh->ActivateInput(0,FALSE);
		XString message((CKSTRING) beh->GetInputParameterReadDataPtr(0));
		int connectionID = -1; 
		beh->GetInputParameterValue(1,&syninterface->connectionID);
		CKAttributeManager *aMan = static_cast<CKAttributeManager*>(ctx->GetAttributeManager());
		
		//////////////////////////////////////////////////////////////////////////
		//store connection details in the scipt dummies attribute :
		CKAttributeType gblNetworkAtt = aMan->GetAttributeTypeByName( GBL_API_ENTRY("NetworkDetails"));
		if (!syninterface->messageDummy->HasAttribute(gblNetworkAtt) )
		{		
			syninterface->messageDummy->SetAttribute(gblNetworkAtt);
		}
		GBLCommon::ParameterTools::SetParameterStructureValue<int>(syninterface->messageDummy->GetAttributeParameter(gblNetworkAtt),0,syninterface->connectionID);
		GBLCommon::ParameterTools::SetParameterStructureValue<CKSTRING>(syninterface->messageDummy->GetAttributeParameter(gblNetworkAtt),1,syninterface->messageName.Str());
		
		//////////////////////////////////////////////////////////////////////////
		//activate and execute the script :
		behcontext.CurrentScene->Activate(syninterface->synchronizeScript,true);
		behcontext.CurrentScene->Activate(syninterface->messageDummy,FALSE);
		syninterface->synchronizeScript->Execute(1);
																		   
		beh->ActivateOutput(0);
	}
	return CKBR_OK;
}
void PhysicManager::_RegisterBodyParameters()
{


	CKParameterManager *pm = m_Context->GetParameterManager();
	CKAttributeManager* attman = m_Context->GetAttributeManager();


	int attRef=0;
	//################################################################
	//
	// Geometry Related 
	//

	//	Object and Axis Related Length :
	REGISTER_CUSTOM_STRUCT("pAxisReferencedLength",PS_AXIS_REFERENCED_LENGTH,VTS_AXIS_REFERENCED_LENGTH,axisReferencedLength,false);
	REGISTER_CUSTOM_STRUCT("pCustomConvexCylinder",PS_CUSTOM_CONVEX_CYLINDER_DESCR,VTS_PHYSIC_CONVEX_CYLDINDER_WHEEL_DESCR,customConvexCylinder,false);
	REGISTER_STRUCT_AS_ATTRIBUTE("pCustomConvexCylinder",PS_CUSTOM_CONVEX_CYLINDER_DESCR,PHYSIC_BODY_CAT,VTS_PHYSIC_CONVEX_CYLDINDER_WHEEL_DESCR,CKCID_3DOBJECT,customConvexCylinder,true);

	
	REGISTER_CUSTOM_STRUCT("pCapsule",PS_CAPSULE,VTS_CAPSULE_SETTINGS_EX,customCapsule,false);
	REGISTER_STRUCT_AS_ATTRIBUTE("pCapsule",PS_CAPSULE,PHYSIC_BODY_CAT,VTS_CAPSULE_SETTINGS_EX,CKCID_3DOBJECT,customCapsule,true);
    	

	//////////////////////////////////////////////////////////////////////////
	//
	//		Collision Common Structs : 
	//
	
	pm->RegisterNewFlags(VTF_COLLISIONS_EVENT_MASK,"pCollisionEventMask","Ignore=1,Start Touch=2,End Touch=4,Touch=8,Impact=16,Roll=32,Slide=64,Forces=128,Start Touch Force Threshold=256,End Touch Force Threshold=512,Touch Force Threshold=1024,Contact Modification=65536");
	
	pm->RegisterNewFlags(VTF_WHEEL_CONTACT_MODIFY_FLAGS,"pWheelContactModifyFlags","Point=1,Normal=2,Position=4,Force=8,Material=16");


	
	pm->RegisterNewFlags(VTF_CONTACT_MODIFY_FLAGS,"pContactModifyFlags","None=0,Min Impulse=1,Max Impulse=2,Error=4,Target=8,Local Position0=16,Local Position1=32,Local Orientation0=64,Local Orientation1=128,Static Friction0=256,Static Friction1=512,Dynamic Friction0=1024,Dynamic Friction1=2048,Restitution=4096,Force32=2147483648");
	pm->RegisterNewFlags(VTF_CONVEX_FLAGS,"pConvexFlags","Flip Normals=1,16 Bit Indices=2,Compute Convex=4,Inflate Convex=8,Uncompressed Normals=64");
	pm->RegisterNewFlags(VTF_TRIGGER,"pTriggerFlags","Disable=8,OnEnter=1,OnLeave=2,OnStay=4");
	pm->RegisterNewEnum(VTE_FILTER_OPS,"pFilterOp","And=0,Or=1,Xor=2,Nand=3,Nor=4,NXor=5");
	pm->RegisterNewFlags(VTE_FILTER_MASK,"pFilterMask","0,1,2,3");
	pm->RegisterNewStructure(VTS_FILTER_GROUPS,"pFilterGroups","bits0,bits1,bits2,bits3",VTE_FILTER_MASK,VTE_FILTER_MASK,VTE_FILTER_MASK,VTE_FILTER_MASK);
	pm->RegisterNewFlags(VTF_SHAPES_TYPE,"pShapesTypes","Static=1,Dynamic=2");

	//////////////////////////////////////////////////////////////////////////
	//
	//		Body Sub Structs : 
	//

	pm->RegisterNewFlags(VTF_BODY_FLAGS,"pBFlags","Moving Object=1,World Gravity=2,Collision=4,Kinematic Object=8,Sub Shape=16,Hierarchy=32,Add Attributes=64,Trigger Shape=128,Deformable=256,Collision Notify=512,Collisions Force=1024,Contact Modify=2048,Sleep=4096");
	pm->RegisterNewFlags(VTF_BODY_TRANS_FLAGS,"pBTFlags","FrozenPositionX=2,FrozenPositionY=4,FrozenPositionZ=8,FrozenRotationX=16,FrozenRotationY=32,FrozenRotationZ=64");
	pm->RegisterNewEnum(VTE_COLLIDER_TYPE,"pBHullType","Sphere=0,Box=1,Capsule=2,Plane=3,Mesh=4,Convex Mesh=5,Height Field=6,Wheel=7,Cloth=8,Convex Cylinder");

	pm->RegisterNewStructure(VTS_PHYSIC_PARAMETER,"pObject", "Geometry,Physic Flags,Density,Skin Width,Mass Offset,Pivot Offset,Hierarchy,World,New Density,Total Mass,Collision Group",VTE_COLLIDER_TYPE,VTF_BODY_FLAGS,CKPGUID_FLOAT,CKPGUID_FLOAT,CKPGUID_VECTOR,CKPGUID_VECTOR,CKPGUID_BOOL,CKPGUID_3DENTITY,CKPGUID_FLOAT,CKPGUID_FLOAT,CKPGUID_INT);

	int currentAttributeType = -1;

	att_physic_object= attman->RegisterNewAttributeType("Object",VTS_PHYSIC_PARAMETER,CKCID_3DOBJECT);
	attman->SetAttributeDefaultValue(att_physic_object,"1;Moving Object,World Gravity,Enabled,Collision;1;-1;0,0,0;0,0,0;FALSE,pDefaultWorld");
	
	attman->SetAttributeCategory(att_physic_object,"Physic");


	pm->RegisterNewEnum(VTE_BODY_FORCE_MODE,"pBForceMode","Force=0,Impulse=1,Velocity Change=2,Smooth Impulse=3,Smooth Velocity Change=4,Acceleration=5");
	attman->SetAttributeCategory(att_physic_limit,"Physic");

	//////////////////////////////////////////////////////////////////////////
	//
	//	Capsule : 
	//
	pm->RegisterNewStructure(VTS_CAPSULE_SETTINGS,"Capsule", "Local Length Axis,Local Radius Axis,Length,Radius",CKPGUID_AXIS,CKPGUID_AXIS,CKPGUID_FLOAT,CKPGUID_FLOAT);

	CKParameterTypeDesc* param_type=pm->GetParameterTypeDescription(VTS_CAPSULE_SETTINGS);
	if (param_type) param_type->dwFlags|=CKPARAMETERTYPE_HIDDEN;


	/*
	att_capsule = attman->RegisterNewAttributeType("Capsule",VTS_CAPSULE_SETTINGS,CKCID_BEOBJECT);
	attman->SetAttributeDefaultValue(att_capsule,"1;0;-1.0;-1.0f");
	attman->SetAttributeCategory(att_capsule,"Physic");
	*/

	//----------------------------------------------------------------
	//
	// copy flags
	//
	pm->RegisterNewFlags(VTF_PHYSIC_ACTOR_COPY_FLAGS,"pBCopyFlags","Physics=1,Shared=2,Pivot=4,Mass=8,Collision=16,CCD=32,Material=64,Optimization=128,Capsule=256,Convex Cylinder=512,Force=1024,Velocities=2048,Joints=4096,Limit Planes=8192,Swap Joint References=16384,Override Body Flags=32768,Copy IC=65536,Restore IC=131072");
	/*
	param_type=pm->GetParameterTypeDescription(VTF_PHYSIC_ACTOR_COPY_FLAGS);
	if (param_type) param_type->dwFlags|=CKPARAMETERTYPE_HIDDEN;
	if (param_type) param_type->dwFlags|=CKPARAMETERTYPE_TOSAVE;
	*/

    
	//////////////////////////////////////////////////////////////////////////
	//
	//		Body Collision Setup 
	//


	//////////////////////////////////////////////////////////////////////////	//////////////////////////////////////////////////////////////////////////
	//
	//		CCD Settings : 
	//	
	//  Custom Enumeration to setup ccd flags
	pm->RegisterNewFlags(VTF_PHYSIC_CCD_FLAGS,"pBCCDFlags","None=1,Shared=2,DynamicDynamic=4");
	REGISTER_CUSTOM_STRUCT("pBCCDSettings",PS_B_CCD,VTS_PHYSIC_CCD_SETTINGS,bodyCCDSettings,GC_SHOWPARAMETER);
	REGISTER_STRUCT_AS_ATTRIBUTE("pBCCDSettings",PS_B_CCD,PHYSIC_BODY_CAT,VTS_PHYSIC_CCD_SETTINGS,CKCID_3DOBJECT,bodyCCDSettings,true,attRef);


	//////////////////////////////////////////////////////////////////////////// //////////////////////////////////////////////////////////////////////////
	//
	// Collisions Settings
	//
	pm->RegisterNewEnum(VTE_PHYSIC_BODY_COLL_GROUP,"pBCollisionsGroup","All=0,MyObstacles=1,MyWheels=2");
	param_type=pm->GetParameterTypeDescription(VTE_PHYSIC_BODY_COLL_GROUP);
	if (param_type) param_type->dwFlags|=CKPARAMETERTYPE_USER;
	if (param_type) param_type->dwFlags|=CKPARAMETERTYPE_TOSAVE;


	REGISTER_CUSTOM_STRUCT("pBCollisionSettings",PS_B_COLLISON,VTS_PHYSIC_COLLISIONS_SETTINGS,bodyCollisionsSettings,GC_SHOWPARAMETER);
	REGISTER_STRUCT_AS_ATTRIBUTE("pBCollisionSettings",PS_B_COLLISON,PHYSIC_BODY_CAT,VTS_PHYSIC_COLLISIONS_SETTINGS,CKCID_3DOBJECT,bodyCollisionsSettings,true,attRef);


	/*		Merged */
	REGISTER_CUSTOM_STRUCT("pBCSetup",PS_B_COLLISION_SETUP,VTS_PHYSIC_COLLISIONS_SETUP,bodyCollisionsSetup,GC_SHOWPARAMETER );

	//////////////////////////////////////////////////////////////////////////
	//
	// XML Setup 
	pm->RegisterNewFlags(VTS_PHYSIC_ACTOR_XML_IMPORT_FLAGS,"pBXMLFlags","None=0,Stub=1");
	param_type=pm->GetParameterTypeDescription(VTS_PHYSIC_ACTOR_XML_IMPORT_FLAGS);
	if (param_type) param_type->dwFlags|=CKPARAMETERTYPE_HIDDEN;

	REGISTER_CUSTOM_STRUCT("pBXMLSetup",PS_BODY_XML_SETUP,VTS_PHYSIC_ACTOR_XML_SETUP,bodyXMLSetup,false);

	//////////////////////////////////////////////////////////////////////////
	//
	//	Common
	REGISTER_CUSTOM_STRUCT("pBCommon",PS_BODY_COMMON,VTF_PHYSIC_BODY_COMMON_SETTINGS,bodyCommonSettings,false);

	//////////////////////////////////////////////////////////////////////////
	//
	//	Sleep
	REGISTER_CUSTOM_STRUCT("pBSleepSettings",PS_B_SLEEPING,VTS_PHYSIC_SLEEP_SETTINGS,bodySleeping,GC_SHOWPARAMETER);


	//////////////////////////////////////////////////////////////////////////
	//
	//	Damping
	REGISTER_CUSTOM_STRUCT("pBDamping",PS_B_DAMPING,VTS_PHYSIC_DAMPING_PARAMETER,bodyDamping,GC_SHOWPARAMETER);

	//////////////////////////////////////////////////////////////////////////
	//
	//	Optimization
	REGISTER_CUSTOM_STRUCT("pBOptimisation",PS_B_OPTIMISATION,VTS_PHYSIC_ACTOR_OPTIMIZATION,bodyOptimistationSettings,GC_SHOWPARAMETER);
	REGISTER_STRUCT_AS_ATTRIBUTE("pBOptimisation",PS_B_OPTIMISATION,PHYSIC_BODY_CAT,VTS_PHYSIC_ACTOR_OPTIMIZATION,CKCID_3DOBJECT,bodyOptimistationSettings,true,attRef);

	

	//////////////////////////////////////////////////////////////////////////
	//
	//	Geometry
	REGISTER_CUSTOM_STRUCT("pBPivotSettings",PS_B_PIVOT,VTS_PHYSIC_PIVOT_OFFSET,bodyGeomtryOverride,GC_SHOWPARAMETER);
	REGISTER_STRUCT_AS_ATTRIBUTE("pBPivotSettings",PS_B_PIVOT,PHYSIC_BODY_CAT,VTS_PHYSIC_PIVOT_OFFSET,CKCID_3DOBJECT,bodyGeomtryOverride,true,attRef);


	//////////////////////////////////////////////////////////////////////////
	//
	//	Mass Override
	REGISTER_CUSTOM_STRUCT("pBMassSettings",PS_B_MASS,VTS_PHYSIC_MASS_SETUP,bodyMassSetup,false);
	param_type=pm->GetParameterTypeDescription(VTS_PHYSIC_MASS_SETUP);
	if (param_type) param_type->dwFlags|=CKPARAMETERTYPE_USER;
	if (param_type) param_type->dwFlags|=CKPARAMETERTYPE_TOSAVE;
	if (param_type) param_type->dwFlags|=CKPARAMETERTYPE_HIDDEN;

	REGISTER_STRUCT_AS_ATTRIBUTE("pBMassSettings",PS_B_MASS,PHYSIC_BODY_CAT,VTS_PHYSIC_MASS_SETUP,CKCID_3DOBJECT,bodyMassSetup,true,attRef);






	//////////////////////////////////////////////////////////////////////////
	//
	// this is the new replacement for the "Object" attribute.	
	//	
	REGISTER_CUSTOM_STRUCT("pBSetup",PS_BODY_SETUP,VTS_PHYSIC_ACTOR,bodySetup,FALSE);
	REGISTER_STRUCT_AS_ATTRIBUTE("pBSetup",PS_BODY_SETUP,PHYSIC_BODY_CAT,VTS_PHYSIC_ACTOR,CKCID_3DOBJECT,bodySetup,attRef);


}
Пример #8
0
/*
 *******************************************************************
 * Function:Init()
 *
 * Description :	For using virtools network functionalities from SDK, you need to add your wished packet here.
						The building block HIDDEN_PacketIterator will pass all entries to the virtools network building 
						blocks in the GBLCustomisationNetDummy.nmo - script   
 *
 * Parameters : CKContext *ctx, r : the virtools context
 * Returns : CKBOOL = True, if a valid script was loaded.
  *******************************************************************
*/ 
CKBOOL 
CGBLSyncInterface::Init(CKContext *ctx)
{
	assert(ctx);

	context = ctx;
	
	CKBOOL result = false;
    
	//get the handle to this dll :
	HMODULE resourceModule = GBLCommon::ResourceTools::GetParentModule(CKPLUGIN_MANAGER_DLL,MeasuredObjectiveControllerMgrGUID);	
	
	if(!resourceModule)
	{
		Logger::ShowDebugMessage(ctx,Logger::ELOGERROR,"MOController : wrong dll handle for sync script ");
		return result;
	}else
	{
		//loads the schematic script as dynamic :
		CK_LOAD_FLAGS loadoptions = CK_LOAD_FLAGS(CK_LOAD_DEFAULT|CK_LOAD_AUTOMATICMODE|CK_LOAD_AS_DYNAMIC_OBJECT);
		

		CKObjectArray *loadedObjects = CreateCKObjectArray();
					
		/* The Loading by self : 
			Remarks : +	for debuging purposes, you can load the script from a file as follows :
								if(GBLCommon::ResourceTools::LoadFromFile(ctx,"c:\\yourFile.nmo",false,loadoptions,loadedObjects))
							 +  you should save a new script as hidden inside virtools
		*/
		//if(GBLCommon::ResourceTools::LoadFromFile(ctx,"C:\\NetworkScriptDebug.nmo",true,loadoptions,loadedObjects))
		if(GBLCommon::ResourceTools::LoadFromResource
			(
			resourceModule,
			context,
			GBLDebugBuild ?  RES_MOCONTROLLER_NETSCRIPT_DEBUG : RES_MOCONTROLLER_NETSCRIPT ,	//loads a hidden script or not
			true,
			loadoptions,
			loadedObjects)
			)
		{
		
			
			//we iterate through the loaded objects to get the dummy and also the script :
			for( loadedObjects->Reset() ; !loadedObjects->EndOfList() ;  )
			{
				CKObject *tmpObj = loadedObjects->GetData( ctx );
				// is the  script ? : 
				if(	tmpObj->GetClassID() == CKCID_BEHAVIOR )
				{
					synchronizeScript = static_cast<CKBehavior*>(tmpObj);
				}

				//is the script holder ? : 
				CK3dEntity *tmpEnt = static_cast<CK3dEntity*>(tmpObj);
				if (tmpEnt && (tmpEnt->GetFlags()&CK_3DENTITY_FRAME))
				{
					messageDummy = tmpEnt;		
					//adds the GBLConnectionDetails :
					CKAttributeManager *aMan = static_cast<CKAttributeManager*>(ctx->GetAttributeManager());
					CKAttributeType gblNetworkAtt = aMan->GetAttributeTypeByName(GBL_API_ENTRY("NetworkDetails"));
					if (!messageDummy->HasAttribute(gblNetworkAtt) )
					{		
						messageDummy->SetAttribute(gblNetworkAtt);
					}
					GBLCommon::ParameterTools::SetParameterStructureValue<int>(messageDummy->GetAttributeParameter(gblNetworkAtt),0,connectionID);
					GBLCommon::ParameterTools::SetParameterStructureValue<CKSTRING>(messageDummy->GetAttributeParameter(gblNetworkAtt),1,messageName.Str());
				

					//yo, everything is gone fine :
					result = true;
				}
				loadedObjects->Next();
			}
			if( !messageDummy || !synchronizeScript)
			{
				Logger::ShowDebugMessage(ctx,Logger::ELOGERROR,"MOController : script dosnt contains any valid object \n\t Please check virtools network connection !");
				return false;
			}
			DeleteCKObjectArray(loadedObjects);
		}else
		{
			Logger::ShowDebugMessage(ctx,Logger::ELOGERROR,"MOController: couldn't load script");
			return false;
		}
	}
	return result;
}
void PhysicManager::_RegisterVehicleParameters()
{
	CKParameterManager *pm = m_Context->GetParameterManager();
	CKAttributeManager* attman = m_Context->GetAttributeManager();

	CKParameterTypeDesc* param_type = NULL;

	//################################################################
	//
	// Tire Function 
	//
	pm->RegisterNewStructure(VTF_VWTIRE_SETTINGS,"pTireFunction",
		"XML Link,Extremum Slip,Extremum Value,Asymptote Slip,Asymptote Value,Stiffness Factor",
		VTE_XML_TIRE_SETTINGS,CKPGUID_FLOAT,CKPGUID_FLOAT,CKPGUID_FLOAT,CKPGUID_FLOAT,CKPGUID_FLOAT);	


	//################################################################
	//
	// Motor related 
	//
	pm->RegisterNewStructure(VTS_VMOTOR_ENTRY,"RPM / Newton Meter","RPM,Newton Meter",CKPGUID_FLOAT,CKPGUID_FLOAT);
	param_type=pm->GetParameterTypeDescription(VTS_VMOTOR_ENTRY);
	if (param_type) param_type->dwFlags|=CKPARAMETERTYPE_HIDDEN;

	pm->RegisterNewStructure(VTS_VMOTOR_TVALUES,"pVehicleMotor Torques","1,2,3,4,5,6,7",		VTS_VMOTOR_ENTRY,VTS_VMOTOR_ENTRY,		VTS_VMOTOR_ENTRY,VTS_VMOTOR_ENTRY,		VTS_VMOTOR_ENTRY,VTS_VMOTOR_ENTRY,		VTS_VMOTOR_ENTRY);


	pm->RegisterNewStructure(VTS_VGEAR_RATIO_ENTRY,"Gear / Ratio","Gear,Ratio",CKPGUID_INT,CKPGUID_FLOAT);
	param_type=pm->GetParameterTypeDescription(VTS_VGEAR_RATIO_ENTRY);
	if (param_type) param_type->dwFlags|=CKPARAMETERTYPE_HIDDEN;
	pm->RegisterNewStructure(VTS_VGEAR_RATIOS,"pVehicleGear List","1,2,3,4,5,6,7",		VTS_VGEAR_RATIO_ENTRY,VTS_VGEAR_RATIO_ENTRY,		VTS_VGEAR_RATIO_ENTRY,VTS_VGEAR_RATIO_ENTRY,		VTS_VGEAR_RATIO_ENTRY,VTS_VGEAR_RATIO_ENTRY,		VTS_VGEAR_RATIO_ENTRY);

	//################################################################
	//
	// Vehicle Common
	//
	pm->RegisterNewFlags(VTF_VSTATE_FLAGS,"pVehicleStateFlags","Is Moving=1,Is Accelerated=2,Is Accelerated Forward=4,Is Accelerated Backward=8,All Wheels On Ground=16,Is Falling=32,Handbrake=64,Is Braking=128,Is Steering=256,Has Gearbox=512,Has Motor=1024");
	pm->RegisterNewEnum(VTE_BRAKE_LEVEL,"pVehicleBreakLevel","No Break=-1,Small=0,Medium=1,High=2");
	pm->RegisterNewEnum(VTE_BRAKE_XML_LINK,"pVehicleXMLBrakeSettings","Stub=1");
	pm->RegisterNewEnum(VTE_VEHICLE_XML_LINK,"pVehicleXMLLink","Stub=1");

	pm->RegisterNewFlags(VTF_BRAKE_FLAGS,"pVehicleBreakFlags","Use Table=1,Auto Break=2");

	REGISTER_CUSTOM_STRUCT("pVehicleBreakTable",E_VBT_STRUCT,VTS_BRAKE_TABLE,breakTable,FALSE);



	//################################################################
	//
	// Wheel 
	//

	REGISTER_CUSTOM_STRUCT("pWheelContactData",E_WCD_STRUCT,VTS_WHEEL_CONTACT,myStructWheelContactData,FALSE);

	pm->RegisterNewFlags(VTS_PHYSIC_WHEEL_FLAGS,"pWheelFlags","Steerable Input=1,Steerable Auto=2,Affected By Handbrake=4,Accelerated=8,Controlled by Vehicle=16,Affected by Differential=32,Ignore Tire Function=64");
	//pm->RegisterNewFlags(VTS_PHYSIC_WHEEL_FLAGS,"pWheelFlags","Steerable Input=1,Steerable Auto=2,Affected By Handbrake=4,Accelerated=8,Build Lower Half=256,Use Wheel Shape=512,Controlled by Vehicle");
	pm->RegisterNewFlags(VTF_VWSHAPE_FLAGS,"pWheelShapeFlags","AxisContactNormal=1,InputLateralSlip=2,InputLongitudinal=4,UnscaledSpringBehavior=8,EmulateLegacyWheel=32,ClampedFriction=64");

	pm->RegisterNewStructure(VTS_PHYSIC_WHEEL_DESCR,"pWheelDescr",
		"XML Link,Suspension,Spring Restitution,Spring Bias,Spring Damping,Maximum Brake Force,Friction To Side,Friction To Front,Inverse Wheel Mass,Wheel Flags,Wheel Shape Flags,Lateral Force Settings,Longitudinal Force Settings",
		VTE_XML_WHEEL_SETTINGS,
		CKPGUID_FLOAT,
		CKPGUID_FLOAT,
		CKPGUID_FLOAT,
		CKPGUID_FLOAT,
		CKPGUID_FLOAT,
		CKPGUID_FLOAT,
		CKPGUID_FLOAT,
		CKPGUID_FLOAT,
		VTS_PHYSIC_WHEEL_FLAGS,
		VTF_VWSHAPE_FLAGS,
		VTF_VWTIRE_SETTINGS,
		VTF_VWTIRE_SETTINGS);	

	att_wheelDescr = attman->RegisterNewAttributeType("pWheel",VTS_PHYSIC_WHEEL_DESCR,CKCID_BEOBJECT);
	attman->SetAttributeCategory(att_wheelDescr ,"Physic");

}