コード例 #1
0
void InitNx()
{
	// Create a memory allocator
    gAllocator = new UserAllocator;

    // Create the physics SDK
	gPhysicsSDK = CreatePhysics();

    // Create the scene
    NxSceneDesc sceneDesc;
    sceneDesc.gravity               = gDefaultGravity;
	sceneDesc.simType				= NX_SIMULATION_HW;
    gScene = gPhysicsSDK->createScene(sceneDesc);	
	if(!gScene){ 
		sceneDesc.simType				= NX_SIMULATION_SW; 
		gScene = gPhysicsSDK->createScene(sceneDesc);  
		if(!gScene) return;
	}

	// Create the default material
	NxMaterial* defaultMaterial = gScene->getMaterialFromIndex(0); 
	defaultMaterial->setRestitution(0.5);
	defaultMaterial->setStaticFriction(0.5);
	defaultMaterial->setDynamicFriction(0.5);

    // Set Core Dump directory
	char buff[512];
	FindMediaFile(fnameCD, buff);
#ifdef WIN32
	SetCurrentDirectory(buff);
#elif LINUX
	chdir(buff);
#endif

	// Create the objects in the scene
	NxActor* groundPlane = CreateGroundPlane();

	NxActor* box = CreateBox(NxVec3(5,0,0), NxVec3(0.5,1,0.5), 20);
	NxActor* sphere = CreateSphere(NxVec3(0,0,0), 1, 10);
	NxActor* capsule = CreateCapsule(NxVec3(-5,0,0), 2, 0.5, 10);
//	pyramid = CreatePyramid(NxVec3(0,0,0), NxVec3(1,0.5,1.5), 10);

	AddUserDataToActors(gScene);

	gSelectedActor = capsule;
//	gSelectedActor = pyramid;

	// Initialize HUD
	InitializeHUD();

	// Get the current time
	getElapsedTime();

	// Start the first frame of the simulation
	if (gScene)  StartPhysics();
}
コード例 #2
0
ファイル: masterentity.cpp プロジェクト: rsk78n/zoya
    void MasterEntity::InitEntity( EntityID id, bool hidden, bool dummy )
    {
        m_EntityID = id;

        if( !dummy )
        {
            CreatePhysics();
            m_Physics->SetMaster( this );
            gGame->GetWorld()->AddEntity( GetEntityID(), m_Physics.Self() );
        }

        if( !hidden )
            CreateGraphics();
    }
コード例 #3
0
bool MainScene::init()
{
   
   // Create physical world
   CreatePhysics();
   
   // Create the body with fixtures
   CreateBody();
   
   // Adding the debug lines so that we can draw the path followed.
   addChild(DebugLinesLayer::create());
   
   // Box2d Debug
   addChild(Box2DDebugDrawLayer::create(_world));
   
   // Grid
   addChild(GridLayer::create());
   
   return true;
}
コード例 #4
0
ファイル: motionspider.cpp プロジェクト: Tellus/colobot
bool CMotionSpider::Create(Math::Vector pos, float angle, ObjectType type,
                           float power)
{
    int         rank, i, j, parent;
    char        name[50];

    float           table[] =
    {
    //    x       y       z
         0.6f,   0.0f,   0.0f,  // back leg
         0.0f,   0.0f,  -2.0f,
         0.0f,   0.0f,  -2.0f,
         0.0f,   0.0f,  -2.0f,

         0.8f,   0.0f,  -0.2f,  // middle-back leg
         0.0f,   0.0f,  -2.0f,
         0.0f,   0.0f,  -2.0f,
         0.0f,   0.0f,  -2.0f,

         1.0f,   0.0f,  -0.2f,  // middle-front leg
         0.0f,   0.0f,  -2.0f,
         0.0f,   0.0f,  -2.0f,
         0.0f,   0.0f,  -2.0f,

         1.2f,   0.0f,   0.0f,  // front leg
         0.0f,   0.0f,  -2.0f,
         0.0f,   0.0f,  -2.0f,
         0.0f,   0.0f,  -2.0f,
    };

    Gfx::CModelManager* modelManager = Gfx::CModelManager::GetInstancePointer();

    m_object->SetType(type);

    // Creates the main base.
    rank = m_engine->CreateObject();
    m_engine->SetObjectType(rank, Gfx::ENG_OBJTYPE_VEHICLE);  // this is a moving object
    m_object->SetObjectRank(0, rank);
    // This is an "empty" object, without triangles
    m_object->SetPosition(0, pos);
    m_object->SetAngleY(0, angle);

    // A vehicle must have a obligatory collision
    // with a sphere of center (0, y, 0) (see GetCrashSphere).
    m_object->CreateCrashSphere(Math::Vector(0.0f, -2.0f, 0.0f), 4.0f, SOUND_BOUM, 0.20f);
    m_object->SetGlobalSphere(Math::Vector(-0.5f, 1.0f, 0.0f), 4.0f);

    // Creates the abdomen.
    rank = m_engine->CreateObject();
    m_engine->SetObjectType(rank, Gfx::ENG_OBJTYPE_DESCENDANT);
    m_object->SetObjectRank(1, rank);
    m_object->SetObjectParent(1, 0);
    modelManager->AddModelReference("spider1.mod", false, rank);
    m_object->SetPosition(1, Math::Vector(1.0f, 0.0f, 0.0f));

    // Creates the head.
    rank = m_engine->CreateObject();
    m_engine->SetObjectType(rank, Gfx::ENG_OBJTYPE_DESCENDANT);
    m_object->SetObjectRank(2, rank);
    m_object->SetObjectParent(2, 0);
    modelManager->AddModelReference("spider2.mod", false, rank);
    m_object->SetPosition(2, Math::Vector(1.0f, 0.0f, 0.0f));

    // Creates legs.
    for ( i=0 ; i<4 ; i++ )
    {
        for ( j=0 ; j<4 ; j++ )
        {
            sprintf(name, "spider%d.mod", j+3);  // 3..6

            // Creates the right leg.
            rank = m_engine->CreateObject();
            m_engine->SetObjectType(rank, Gfx::ENG_OBJTYPE_DESCENDANT);
            m_object->SetObjectRank(3+i*4+j, rank);
            if ( j == 0 )  parent = 0;
            else           parent = 3+i*4+j-1;
            m_object->SetObjectParent(3+i*4+j, parent);
            modelManager->AddModelReference(name, false, rank);
            pos.x = table[i*12+j*3+0];
            pos.y = table[i*12+j*3+1];
            pos.z = table[i*12+j*3+2];
            m_object->SetPosition(3+i*4+j, pos);

            // Creates the left leg.
            rank = m_engine->CreateObject();
            m_engine->SetObjectType(rank, Gfx::ENG_OBJTYPE_DESCENDANT);
            m_object->SetObjectRank(19+i*4+j, rank);
            if ( j == 0 )  parent = 0;
            else           parent = 19+i*4+j-1;
            m_object->SetObjectParent(19+i*4+j, parent);
            modelManager->AddModelReference(name, true, rank);
            pos.x =  table[i*12+j*3+0];
            pos.y =  table[i*12+j*3+1];
            pos.z = -table[i*12+j*3+2];
            m_object->SetPosition(19+i*4+j, pos);
        }
    }

    // Creates the right mandible.
    rank = m_engine->CreateObject();
    m_engine->SetObjectType(rank, Gfx::ENG_OBJTYPE_DESCENDANT);
    m_object->SetObjectRank(35, rank);
    m_object->SetObjectParent(35, 1);
    modelManager->AddModelReference("spider7.mod", false, rank);
    m_object->SetPosition(35, Math::Vector(0.0f, 0.0f, -0.3f));

    // Creates the left mandible.
    rank = m_engine->CreateObject();
    m_engine->SetObjectType(rank, Gfx::ENG_OBJTYPE_DESCENDANT);
    m_object->SetObjectRank(36, rank);
    m_object->SetObjectParent(36, 1);
    modelManager->AddModelReference("spider7.mod", true, rank);
    m_object->SetPosition(36, Math::Vector(0.0f, 0.0f, 0.3f));

    m_object->CreateShadowCircle(4.0f, 0.5f);

    CreatePhysics();
    m_object->SetFloorHeight(0.0f);

    pos = m_object->GetPosition(0);
    m_object->SetPosition(0, pos);  // to display the shadows immediately

    m_engine->LoadAllTextures();

    return true;
}
コード例 #5
0
ファイル: motionant.cpp プロジェクト: Tellus/colobot
bool CMotionAnt::Create(Math::Vector pos, float angle, ObjectType type,
                        float power)
{
    Gfx::CModelManager* modelManager = Gfx::CModelManager::GetInstancePointer();
    int rank;

    m_object->SetType(type);

    // Creates the main base.
    rank = m_engine->CreateObject();
    m_engine->SetObjectType(rank, Gfx::ENG_OBJTYPE_VEHICLE);  // this is a moving object
    m_object->SetObjectRank(0, rank);
    modelManager->AddModelReference("ant1.mod", false, rank);
    m_object->SetPosition(0, pos);
    m_object->SetAngleY(0, angle);

    // A vehicle must have necessarily a collision
    //with a sphere of center (0, y, 0) (see GetCrashSphere).
    m_object->CreateCrashSphere(Math::Vector(0.0f, -2.0f, 0.0f), 4.0f, SOUND_BOUM, 0.20f);
    m_object->SetGlobalSphere(Math::Vector(-0.5f, 1.0f, 0.0f), 4.0f);

    // Creates the head.
    rank = m_engine->CreateObject();
    m_engine->SetObjectType(rank, Gfx::ENG_OBJTYPE_DESCENDANT);
    m_object->SetObjectRank(1, rank);
    m_object->SetObjectParent(1, 0);
    modelManager->AddModelReference("ant2.mod", false, rank);
    m_object->SetPosition(1, Math::Vector(2.0f, 0.0f, 0.0f));

    // Creates the tail.
    rank = m_engine->CreateObject();
    m_engine->SetObjectType(rank, Gfx::ENG_OBJTYPE_DESCENDANT);
    m_object->SetObjectRank(2, rank);
    m_object->SetObjectParent(2, 0);
    modelManager->AddModelReference("ant3.mod", false, rank);
    m_object->SetPosition(2, Math::Vector(-1.0f, 0.0f, 0.0f));

    // Creates a right-back thigh.
    rank = m_engine->CreateObject();
    m_engine->SetObjectType(rank, Gfx::ENG_OBJTYPE_DESCENDANT);
    m_object->SetObjectRank(3, rank);
    m_object->SetObjectParent(3, 0);
    modelManager->AddModelReference("ant4.mod", false, rank);
    m_object->SetPosition(3, Math::Vector(-0.4f, -0.1f, -0.3f));

    // Creates a right-back leg.
    rank = m_engine->CreateObject();
    m_engine->SetObjectType(rank,Gfx::ENG_OBJTYPE_DESCENDANT);
    m_object->SetObjectRank(4, rank);
    m_object->SetObjectParent(4, 3);
    modelManager->AddModelReference("ant5.mod", false, rank);
    m_object->SetPosition(4, Math::Vector(0.0f, 0.0f, -1.0f));

    // Creates a right-back foot.
    rank = m_engine->CreateObject();
    m_engine->SetObjectType(rank, Gfx::ENG_OBJTYPE_DESCENDANT);
    m_object->SetObjectRank(5, rank);
    m_object->SetObjectParent(5, 4);
    modelManager->AddModelReference("ant6.mod", false, rank);
    m_object->SetPosition(5, Math::Vector(0.0f, 0.0f, -2.0f));

    // Creates two middle-right thighs.
    rank = m_engine->CreateObject();
    m_engine->SetObjectType(rank, Gfx::ENG_OBJTYPE_DESCENDANT);
    m_object->SetObjectRank(6, rank);
    m_object->SetObjectParent(6, 0);
    modelManager->AddModelReference("ant4.mod", false, rank);
    m_object->SetPosition(6, Math::Vector(0.1f, -0.1f, -0.4f));

    // Creates two middle-right legs.
    rank = m_engine->CreateObject();
    m_engine->SetObjectType(rank, Gfx::ENG_OBJTYPE_DESCENDANT);
    m_object->SetObjectRank(7, rank);
    m_object->SetObjectParent(7, 6);
    modelManager->AddModelReference("ant5.mod", false, rank);
    m_object->SetPosition(7, Math::Vector(0.0f, 0.0f, -1.0f));

    // Creates two middle-right foots.
    rank = m_engine->CreateObject();
    m_engine->SetObjectType(rank, Gfx::ENG_OBJTYPE_DESCENDANT);
    m_object->SetObjectRank(8, rank);
    m_object->SetObjectParent(8, 7);
    modelManager->AddModelReference("ant6.mod", false, rank);
    m_object->SetPosition(8, Math::Vector(0.0f, 0.0f, -2.0f));

    // Creates the right front thigh.
    rank = m_engine->CreateObject();
    m_engine->SetObjectType(rank, Gfx::ENG_OBJTYPE_DESCENDANT);
    m_object->SetObjectRank(9, rank);
    m_object->SetObjectParent(9, 0);
    modelManager->AddModelReference("ant4.mod", false, rank);
    m_object->SetPosition(9, Math::Vector(1.4f, -0.1f, -0.6f));

    // Creates the right front leg.
    rank = m_engine->CreateObject();
    m_engine->SetObjectType(rank, Gfx::ENG_OBJTYPE_DESCENDANT);
    m_object->SetObjectRank(10, rank);
    m_object->SetObjectParent(10, 9);
    modelManager->AddModelReference("ant5.mod", false, rank);
    m_object->SetPosition(10, Math::Vector(0.0f, 0.0f, -1.0f));

    // Creates the right front foot.
    rank = m_engine->CreateObject();
    m_engine->SetObjectType(rank, Gfx::ENG_OBJTYPE_DESCENDANT);
    m_object->SetObjectRank(11, rank);
    m_object->SetObjectParent(11, 10);
    modelManager->AddModelReference("ant6.mod", false, rank);
    m_object->SetPosition(11, Math::Vector(0.0f, 0.0f, -2.0f));

    // Creates a left-back thigh.
    rank = m_engine->CreateObject();
    m_engine->SetObjectType(rank, Gfx::ENG_OBJTYPE_DESCENDANT);
    m_object->SetObjectRank(12, rank);
    m_object->SetObjectParent(12, 0);
    modelManager->AddModelReference("ant4.mod", true, rank);
    m_object->SetPosition(12, Math::Vector(-0.4f, -0.1f, 0.3f));

    // Creates a left-back leg.
    rank = m_engine->CreateObject();
    m_engine->SetObjectType(rank, Gfx::ENG_OBJTYPE_DESCENDANT);
    m_object->SetObjectRank(13, rank);
    m_object->SetObjectParent(13, 12);
    modelManager->AddModelReference("ant5.mod", true, rank);
    m_object->SetPosition(13, Math::Vector(0.0f, 0.0f, 1.0f));

    // Creates a left-back foot.
    rank = m_engine->CreateObject();
    m_engine->SetObjectType(rank, Gfx::ENG_OBJTYPE_DESCENDANT);
    m_object->SetObjectRank(14, rank);
    m_object->SetObjectParent(14, 13);
    modelManager->AddModelReference("ant6.mod", true, rank);
    m_object->SetPosition(14, Math::Vector(0.0f, 0.0f, 2.0f));

    // Creates two middle-left thighs.
    rank = m_engine->CreateObject();
    m_engine->SetObjectType(rank, Gfx::ENG_OBJTYPE_DESCENDANT);
    m_object->SetObjectRank(15, rank);
    m_object->SetObjectParent(15, 0);
    modelManager->AddModelReference("ant4.mod", true, rank);
    m_object->SetPosition(15, Math::Vector(0.1f, -0.1f, 0.4f));

    // Creates two middle-left legs.
    rank = m_engine->CreateObject();
    m_engine->SetObjectType(rank, Gfx::ENG_OBJTYPE_DESCENDANT);
    m_object->SetObjectRank(16, rank);
    m_object->SetObjectParent(16, 15);
    modelManager->AddModelReference("ant5.mod", true, rank);
    m_object->SetPosition(16, Math::Vector(0.0f, 0.0f, 1.0f));

    // Creates two middle-left foot.
    rank = m_engine->CreateObject();
    m_engine->SetObjectType(rank, Gfx::ENG_OBJTYPE_DESCENDANT);
    m_object->SetObjectRank(17, rank);
    m_object->SetObjectParent(17, 16);
    modelManager->AddModelReference("ant6.mod", true, rank);
    m_object->SetPosition(17, Math::Vector(0.0f, 0.0f, 2.0f));

    // Creates the left front thigh.
    rank = m_engine->CreateObject();
    m_engine->SetObjectType(rank, Gfx::ENG_OBJTYPE_DESCENDANT);
    m_object->SetObjectRank(18, rank);
    m_object->SetObjectParent(18, 0);
    modelManager->AddModelReference("ant4.mod", true, rank);
    m_object->SetPosition(18, Math::Vector(1.4f, -0.1f, 0.6f));

    // Creates the left front leg.
    rank = m_engine->CreateObject();
    m_engine->SetObjectType(rank, Gfx::ENG_OBJTYPE_DESCENDANT);
    m_object->SetObjectRank(19, rank);
    m_object->SetObjectParent(19, 18);
    modelManager->AddModelReference("ant5.mod", true, rank);
    m_object->SetPosition(19, Math::Vector(0.0f, 0.0f, 1.0f));

    // Creates the left front foot.
    rank = m_engine->CreateObject();
    m_engine->SetObjectType(rank, Gfx::ENG_OBJTYPE_DESCENDANT);
    m_object->SetObjectRank(20, rank);
    m_object->SetObjectParent(20, 19);
    modelManager->AddModelReference("ant6.mod", true, rank);
    m_object->SetPosition(20, Math::Vector(0.0f, 0.0f, 2.0f));

    m_object->CreateShadowCircle(4.0f, 0.5f);

    CreatePhysics();
    m_object->SetFloorHeight(0.0f);

    pos = m_object->GetPosition(0);
    m_object->SetPosition(0, pos);  // to display the shadows immediately

    m_engine->LoadAllTextures();

    return true;
}
コード例 #6
0
ファイル: VDSSceneEntity.cpp プロジェクト: ShadyEM/Twister3D
//	loading a robot from a file
bool VDSSceneEntity::Load( const char* _pFileName, bool _bCreatePhysics )
{
	//	Create a file pointer
	TSRFileStream*		fPtr	=	NULL;

	unsigned int k;	//	looping indices

	//	open the file for loading as read, binary
	fPtr	=	TSRFileSystem::OpenFileStream( _pFileName, "rb" );

	//	on failure.. return failure and do nothing
	if ( !fPtr )
    {
        return false;
    }

	//	destroy any existing data
	//SelfDestruct();

	//	two float data might be nedded
	float Length1, Length2;

	//	clear the already existing robot
	//SelfDestruct();

	//	pointer to iterate with through blocks
	VDSBuildingBlock* pCurBlock;

	//	block type of the loaded block
	eBlockType	BlockType;

	TSRVector3 Dimensions;

	//	first read the number of blocks coming
	unsigned int NumBlocks;
	fread( &NumBlocks, sizeof( int ), 1, fPtr );

	unsigned int NumInputs;
	fread( &NumInputs, sizeof( int ), 1, fPtr );

		
	//	number of rows and columns is needed before creating the blocks being loaded
	int NumRows;
	int NumCols;

	//	now loop and read them one by one
	for ( k = 0; k < NumBlocks; k++ )
	{
		//	first read the type of the block found
		fread( &BlockType, sizeof( BlockType ), 1, fPtr );


		//	then read the number of rows and columns 
		fread( &NumRows, sizeof( NumRows ), 1, fPtr );
		fread( &NumCols, sizeof( NumRows ), 1, fPtr );


		//	according to the type
		//	switch and create a new object
		switch ( BlockType )
		{
			case BLOCK_FIXEDBASE:
				int ThickNess;
				fread( &ThickNess, sizeof( int ), 1, fPtr );
				pCurBlock = new VDSBrick( NumRows, NumCols, ThickNess );
				break;


			case BLOCK_LEVER:
				float MaxTrans;
				fread( &MaxTrans, sizeof( float ), 1, fPtr );
				pCurBlock = new VDSLeverBrick( NumRows, NumCols, MaxTrans );
				break;


			case BLOCK_ROTBASE:
				pCurBlock = new VDSRotatingBrick( NumRows, NumCols );
				break;

			case BLOCK_PYRAMID:
				pCurBlock = new VDSPyramidBrick;
				break;

			case BLOCK_WHEEL:
				{
					//	read the radius and thickness of the wheel
					float Radius, Thickness;
					//	additional data for the double arm (second joint response)
					fread( &Radius, sizeof( float ), 1, fPtr );
					fread( &Thickness, sizeof( float ), 1, fPtr );
					pCurBlock = new VDSWheelBrick( NumRows, NumCols, Radius, Thickness );
					break;
				}
			case BLOCK_DOUBLEWHEEL:
				{
					//	read the radius and thickness of the wheel
					float Radius, Thickness;
					//	additional data for the double arm (second joint response)
					fread( &Radius, sizeof( float ), 1, fPtr );
					fread( &Thickness, sizeof( float ), 1, fPtr );
					pCurBlock = new VDSDoubleWheelBrick( NumRows, NumCols, Radius, Thickness );
					break;
				}

			case BLOCK_SINGLEARM:
				{
					//	cast into a single arm to get the data
					fread( &Length1, sizeof( float ), 1, fPtr );
					pCurBlock = new VDSArmBrick( Length1, NumRows, NumCols );
					VDSArmBrick* pArm = ( VDSDoubleArmBrick* ) pCurBlock;
					fread( &pArm->m_AlignedEnd, sizeof( bool ), 1, fPtr );
				}
				break;

			case BLOCK_DOUBLEARM:
				{
					//	cast into a single arm to get the data
					fread( &Length1, sizeof( float ), 1, fPtr );
					fread( &Length2, sizeof( float ), 1, fPtr );

					pCurBlock = new VDSDoubleArmBrick( Length1, Length2, NumRows, NumCols );

					//	put omega and zeta in the 2nd arm
					VDSDoubleArmBrick* pArm = ( VDSDoubleArmBrick* ) pCurBlock;

					fread( &pArm->m_Arm2Response.m_Wn, sizeof( float ), 1, fPtr );
					fread( &pArm->m_Arm2Response.m_Zeta, sizeof( float ), 1, fPtr );
					fread( &pArm->m_AlignedEnd, sizeof( bool ), 1, fPtr );
				}
				break;

			case BLOCK_IKARM:
				break;

			case BLOCK_EYE:
				{
					pCurBlock = new VDSCameraBrick( NumRows, NumCols );

					//	cast into a eye to get the data..put it in file..
					VDSCameraBrick* pEye = ( VDSCameraBrick* ) pCurBlock;

					//	additional data for the eye
					fread( &pEye->m_PitchResponse.m_Wn, sizeof( float ), 1, fPtr );
					fread( &pEye->m_PitchResponse.m_Zeta, sizeof( float ), 1, fPtr );

					fread( &pEye->m_RollResponse.m_Wn, sizeof( float ), 1, fPtr );
					fread( &pEye->m_RollResponse.m_Zeta, sizeof( float ), 1, fPtr );
				}
				break;
			default:
				break;
		}

		//	put omega and zeta from the file (response parameters)
		//	only do this if this not a fixed plate
		if ( pCurBlock->m_Type != BLOCK_FIXEDBASE )
		{
			float W, Z;
			fread( &Z, sizeof( float ), 1, fPtr );
			fread( &W, sizeof( float ), 1, fPtr );
			pCurBlock->SetResponseParams( W, Z );
		}

		//	load the block name
		fread( pCurBlock->m_Name, sizeof( pCurBlock->m_Name ), 1, fPtr );

		//	load the parent index, which will be -1 for the root block
		fread( &pCurBlock->m_ParentIndex, sizeof( pCurBlock->m_ParentIndex ), 1, fPtr );

		//	load the relation between the object and its parent
		fread( &pCurBlock->m_bParentIsUp, sizeof( pCurBlock->m_bParentIsUp ), 1, fPtr );

		//	load the pivot position
		fread( &pCurBlock->m_PivotX, sizeof( pCurBlock->m_PivotX ), 1, fPtr );
		fread( &pCurBlock->m_PivotY, sizeof( pCurBlock->m_PivotX ), 1, fPtr );


		//	now load the slot map data
		//	starting and ending positions, and dimensions
		
		//	load the upper slot first
		fread( &pCurBlock->m_UpSlots.m_uiRowsCount, sizeof( pCurBlock->m_UpSlots.m_uiRowsCount ), 1, fPtr );
		fread( &pCurBlock->m_UpSlots.m_NumColumns, sizeof( pCurBlock->m_UpSlots.m_uiRowsCount ), 1, fPtr );
		fread( &pCurBlock->m_UpSlots.m_StartX, sizeof( pCurBlock->m_UpSlots.m_uiRowsCount ), 1, fPtr );
		fread( &pCurBlock->m_UpSlots.m_StartY, sizeof( pCurBlock->m_UpSlots.m_uiRowsCount ), 1, fPtr );

		//	allocate places in the upper slots
		pCurBlock->m_UpSlots.Create( pCurBlock->m_UpSlots.m_uiRowsCount, pCurBlock->m_UpSlots.m_NumColumns );
		//pCurBlock->m_UpSlots.m_EndX = pCurBlock->m_UpSlots.m_StartX + pCurBlock->m_UpSlots.m_uiRowsCount;
		//pCurBlock->m_UpSlots.m_EndY = pCurBlock->m_UpSlots.m_StartY + pCurBlock->m_UpSlots.m_NumColumns;

		//	load the lowers slots
		fread( &pCurBlock->m_DownSlots.m_uiRowsCount, sizeof( pCurBlock->m_UpSlots.m_uiRowsCount ), 1, fPtr );
		fread( &pCurBlock->m_DownSlots.m_NumColumns, sizeof( pCurBlock->m_UpSlots.m_uiRowsCount), 1, fPtr );
		fread( &pCurBlock->m_DownSlots.m_StartX, sizeof( pCurBlock->m_UpSlots.m_uiRowsCount), 1, fPtr );
		fread( &pCurBlock->m_DownSlots.m_StartY, sizeof( pCurBlock->m_UpSlots.m_uiRowsCount), 1, fPtr );

		//pCurBlock->m_DownSlots.m_EndX = pCurBlock->m_DownSlots.m_StartX + pCurBlock->m_DownSlots.m_uiRowsCount;
		//pCurBlock->m_DownSlots.m_EndY = pCurBlock->m_DownSlots.m_StartY + pCurBlock->m_DownSlots.m_NumColumns;
		//	allocate places in the lower slots
		pCurBlock->m_DownSlots.Create( pCurBlock->m_DownSlots.m_uiRowsCount, pCurBlock->m_DownSlots.m_NumColumns );


		//	the slots will be automatically filled when we call put on/put below
		//	finally load the matrix

		//	load the bounding box matrix
		fread( pCurBlock->m_BoundBox.m_Transform.d, sizeof( TSRMatrix4 ), 1, fPtr );

		// and the bounding box dimensions
		fread( &pCurBlock->m_BoundBox.m_Dimensions, sizeof( TSRVector3 ), 1, fPtr );

		//	Load the material
		fread( &pCurBlock->m_Material, sizeof( sVDSMaterialDescriptor ), 1, fPtr );

		//	load the density
		fread( &pCurBlock->m_Density, sizeof( float ), 1, fPtr );
		pCurBlock->SetDensity( pCurBlock->m_Density );

		//	block loaded, add it
		m_AllBlocks.push_back( pCurBlock );
	}//	

	eVDSInputType InputType;

	//	now we should load the input objects
	for ( k = 0; k < NumInputs; k++ )
	{
		// save the block type first
		fread( &InputType, sizeof( eVDSInputType ), 1, fPtr );

		//	accoring to the type
		//	save additional data..
		switch ( InputType )
		{
			case KEYS_INPUT:
			{
				VDSKeyBoardInput* pKey = new VDSKeyBoardInput;
				fread( &pKey->m_BlockIndex, sizeof( int ), 1, fPtr );
				fread( &pKey->m_Key, sizeof( unsigned long ), 1, fPtr );
				fread( &pKey->m_Value1, sizeof( float ), 1, fPtr );
				fread( &pKey->m_Value2, sizeof( float ), 1, fPtr );
				fread( &pKey->m_Value3, sizeof( float ), 1, fPtr );
				m_AllInputs.push_back( pKey );
			}
			break;
			case MOUS_INPUT:
			{
				VDSMouseInput* pMous=new VDSMouseInput;
				fread( &pMous->m_BlockIndex, sizeof( int ), 1, fPtr );
				fread( &pMous->m_Scale1, sizeof( float ), 1, fPtr );
				fread( &pMous->m_Scale2, sizeof( float ), 1, fPtr );
				fread( &pMous->m_Scale3, sizeof( float ), 1, fPtr );
				fread( &pMous->m_bUseX, sizeof( bool ), 1, fPtr );
				m_AllInputs.push_back(pMous);
			}
			break;
		}
	}


	//	after loading everything..
	//	its time to assemble the block together
	for ( k = 0; k < m_AllBlocks.size(); k++ )
	{
		//	if the block has a parent
		if ( m_AllBlocks[ k ]->m_ParentIndex != -1 )
		{
			//	call puton/putbelow according to the boolean (m_bParentIsUp)
			if ( m_AllBlocks[ k ]->m_bParentIsUp )
			{
				m_AllBlocks[ k ]->PutBelow( *m_AllBlocks[ m_AllBlocks[ k ]->m_ParentIndex ] );
			}
			else
			{
				m_AllBlocks[ k ]->PutOn( *m_AllBlocks[ m_AllBlocks[ k ]->m_ParentIndex ] );
			}
		}
	}

	//	point to the root
	if ( m_AllBlocks.size() )
	{
		m_pRootBlock	=	m_AllBlocks[ 0 ];
		//	get pointers to all eyes in the robot
		for ( unsigned int i = 0; i < m_AllBlocks.size(); i++ )
		{
			if ( m_AllBlocks[ i ]->m_Type == BLOCK_EYE )
			{
				m_aCameras.push_back( ( VDSCameraBrick* ) m_AllBlocks[ i ] );
			}
		}
	}
	else
	{
        m_pRootBlock	=	NULL;	
    }
	//	done..close the file and return success
	fclose( fPtr );



    if ( _bCreatePhysics )
    {
        Translate( 0.0f, 50.0f, 0.0f );
        GenerateRigidBodiesDescriptors();
        CreatePhysics();
    }
	return true;
}
コード例 #7
0
ファイル: motionworm.cpp プロジェクト: 2asoft/colobot
void CMotionWorm::Create(Math::Vector pos, float angle, ObjectType type,
                         float power, Gfx::COldModelManager* modelManager)
{
    int         rank, i;
    float       px;

    m_object->SetType(type);

    // Creates the main base.
    rank = m_engine->CreateObject();
    m_engine->SetObjectType(rank, Gfx::ENG_OBJTYPE_VEHICLE);  // this is a moving object
    m_object->SetObjectRank(0, rank);
    // This is an "empty" object, without triangles
    m_object->SetPosition(pos);
    m_object->SetRotationY(angle);

    // A vehicle must have a obligatory collision with a sphere of center (0, y, 0) (see GetCrashSphere).
    m_object->AddCrashSphere(CrashSphere(Math::Vector(0.0f, 0.0f, 0.0f), 4.0f, SOUND_BOUM, 0.20f));
    m_object->SetCameraCollisionSphere(Math::Sphere(Math::Vector(0.0f, 0.0f, 0.0f), 5.0f));

    px = 1.0f+WORM_PART/2;

    // Creates the head.
    rank = m_engine->CreateObject();
    m_engine->SetObjectType(rank, Gfx::ENG_OBJTYPE_DESCENDANT);
    m_object->SetObjectRank(1, rank);
    m_object->SetObjectParent(1, 0);
    modelManager->AddModelReference("worm1.mod", false, rank);
    m_object->SetPartPosition(1, Math::Vector(px, 0.0f, 0.0f));
    px -= 1.0f;

    // Creates the body.
    for ( i=0 ; i<WORM_PART ; i++ )
    {
        rank = m_engine->CreateObject();
        m_engine->SetObjectType(rank, Gfx::ENG_OBJTYPE_DESCENDANT);
        m_object->SetObjectRank(2+i, rank);
        m_object->SetObjectParent(2+i, 0);
        modelManager->AddModelReference("worm2.mod", false, rank);
        m_object->SetPartPosition(2+i, Math::Vector(px, 0.0f, 0.0f));
        px -= 1.0f;
    }

    // Creates the tail.
    rank = m_engine->CreateObject();
    m_engine->SetObjectType(rank, Gfx::ENG_OBJTYPE_DESCENDANT);
    m_object->SetObjectRank(2+WORM_PART, rank);
    m_object->SetObjectParent(2+WORM_PART, 0);
    modelManager->AddModelReference("worm3.mod", false, rank);
    m_object->SetPartPosition(2+WORM_PART, Math::Vector(px, 0.0f, 0.0f));

    m_object->CreateShadowCircle(0.0f, 1.0f, Gfx::ENG_SHADOW_WORM);

    CreatePhysics();
    m_object->SetFloorHeight(0.0f);

    pos = m_object->GetPosition();
    m_object->SetPosition(pos);  // to display the shadows immediately

    m_engine->LoadAllTextures();
}
コード例 #8
0
ファイル: MainScene.cpp プロジェクト: ChaitanyaGP/SensorTest
void MainScene::onEnter()
{
   CCScene::onEnter();
   // Create physical world
   CreatePhysics();
   
   // Add a color background.  This will make it easier on the eyes.
   addChild(SunBackgroundLayer::create());
   
   // Adding the debug lines so that we can draw the path followed.
   DebugLinesLayer* linesLayer = DebugLinesLayer::create();
   assert(linesLayer != NULL);
   addChild(DebugLinesLayer::create());
   linesLayer->setTag(TAG_DEBUG_LINES);
   addChild(linesLayer);
   
   // Grid
   // This should be at the bottom of the layer stack.
   GridLayer* gridLayer = GridLayer::create(5);
   assert(gridLayer != NULL);
   gridLayer->setTag(TAG_DEBUG_GRID);
   addChild(gridLayer);
   
   // Box2d Debug
   Box2DDebugDrawLayer* debugLayer = Box2DDebugDrawLayer::create(_world);
   assert(debugLayer != NULL);
   debugLayer->setTag(TAG_DEBUG_BOX2D);
   addChild(debugLayer);
   
   // Asteroids
   _asteroidLayer = SpriteBatchLayer::create("Asteroids_ImgData.png", "Asteroids_ImgData.plist");
   assert(_asteroidLayer != NULL);
   addChild(_asteroidLayer);
   
   // Space Ships
   _shipLayer = SpriteBatchLayer::create("EntitySpriteImages.png", "EntitySpriteImages.plist");
   assert(_shipLayer != NULL);
   addChild(_shipLayer);
   
   
   // Touch Input
   addChild(TapDragPinchInput::create(this));
   
   // User Controls
   addChild(PlayerGameControlsLayer::create());
   
   
   // Create the Anchor
   CreateAnchor();
   
   // Asteroids
   CreateAsteroids();
   
   // Populate physical world
   CreateEntity();
   
   // Create the sensor grid
   CreateSensors();
   
   // Contact Counts
   //   addChild(GraphSensorContactLayer::create());
   
   // Register for events
   Notifier::Instance().Attach(this, NE_VIEWPORT_CHANGED);
   Notifier::Instance().Attach(this, NE_GAME_COMMAND_ZOOM_IN);
   Notifier::Instance().Attach(this, NE_GAME_COMMAND_ZOOM_OUT);
   Notifier::Instance().Attach(this, NE_GAME_COMMAND_TRACK);
   
   // Kickstart all sizes
   ViewportChanged();
}
コード例 #9
0
ファイル: motionmother.cpp プロジェクト: Tellus/colobot
bool CMotionMother::Create(Math::Vector pos, float angle, ObjectType type,
                          float power)
{
    Gfx::CModelManager* modelManager = Gfx::CModelManager::GetInstancePointer();
    int rank;

    m_object->SetType(type);

    // Creates main base.
    rank = m_engine->CreateObject();
    m_engine->SetObjectType(rank, Gfx::ENG_OBJTYPE_VEHICLE);  // this is a moving object
    m_object->SetObjectRank(0, rank);
    modelManager->AddModelReference("mother1.mod", false, rank);
    m_object->SetPosition(0, pos);
    m_object->SetAngleY(0, angle);

    // A vehicle must have a obligatory collision
    //with a sphere of center (0, y, 0) (see GetCrashSphere).
    m_object->CreateCrashSphere(Math::Vector(0.0f, 0.0f, 0.0f), 20.0f, SOUND_BOUM, 0.20f);
    m_object->SetGlobalSphere(Math::Vector(-2.0f, 10.0f, 0.0f), 25.0f);

    // Creates the head.
    rank = m_engine->CreateObject();
    m_engine->SetObjectType(rank, Gfx::ENG_OBJTYPE_DESCENDANT);
    m_object->SetObjectRank(1, rank);
    m_object->SetObjectParent(1, 0);
    modelManager->AddModelReference("mother2.mod", false, rank);
    m_object->SetPosition(1, Math::Vector(16.0f, 3.0f, 0.0f));

    // Creates a right-back leg.
    rank = m_engine->CreateObject();
    m_engine->SetObjectType(rank, Gfx::ENG_OBJTYPE_DESCENDANT);
    m_object->SetObjectRank(2, rank);
    m_object->SetObjectParent(2, 0);
    modelManager->AddModelReference("mother3.mod", false, rank);
    m_object->SetPosition(2, Math::Vector(-5.0f, -1.0f, -12.0f));

    // Creates a right-back foot.
    rank = m_engine->CreateObject();
    m_engine->SetObjectType(rank, Gfx::ENG_OBJTYPE_DESCENDANT);
    m_object->SetObjectRank(3, rank);
    m_object->SetObjectParent(3, 2);
    modelManager->AddModelReference("mother4.mod", false, rank);
    m_object->SetPosition(3, Math::Vector(0.0f, 0.0f, -8.5f));

    // Creates a middle-right leg.
    rank = m_engine->CreateObject();
    m_engine->SetObjectType(rank, Gfx::ENG_OBJTYPE_DESCENDANT);
    m_object->SetObjectRank(4, rank);
    m_object->SetObjectParent(4, 0);
    modelManager->AddModelReference("mother3.mod", false, rank);
    m_object->SetPosition(4, Math::Vector(3.5f, -1.0f, -12.0f));

    // Creates a middle-right foot.
    rank = m_engine->CreateObject();
    m_engine->SetObjectType(rank, Gfx::ENG_OBJTYPE_DESCENDANT);
    m_object->SetObjectRank(5, rank);
    m_object->SetObjectParent(5, 4);
    modelManager->AddModelReference("mother4.mod", false, rank);
    m_object->SetPosition(5, Math::Vector(0.0f, 0.0f, -8.5f));

    // Creates a right-front leg.
    rank = m_engine->CreateObject();
    m_engine->SetObjectType(rank, Gfx::ENG_OBJTYPE_DESCENDANT);
    m_object->SetObjectRank(6, rank);
    m_object->SetObjectParent(6, 0);
    modelManager->AddModelReference("mother3.mod", false, rank);
    m_object->SetPosition(6, Math::Vector(10.0f, -1.0f, -10.0f));

    // Creates a right-front foot.
    rank = m_engine->CreateObject();
    m_engine->SetObjectType(rank, Gfx::ENG_OBJTYPE_DESCENDANT);
    m_object->SetObjectRank(7, rank);
    m_object->SetObjectParent(7, 6);
    modelManager->AddModelReference("mother4.mod", false, rank);
    m_object->SetPosition(7, Math::Vector(0.0f, 0.0f, -8.5f));

    // Creates a left-back leg.
    rank = m_engine->CreateObject();
    m_engine->SetObjectType(rank, Gfx::ENG_OBJTYPE_DESCENDANT);
    m_object->SetObjectRank(8, rank);
    m_object->SetObjectParent(8, 0);
    modelManager->AddModelReference("mother3.mod", false, rank);
    m_object->SetPosition(8, Math::Vector(-5.0f, -1.0f, 12.0f));
    m_object->SetAngleY(8, Math::PI);

    // Creates a left-back foot.
    rank = m_engine->CreateObject();
    m_engine->SetObjectType(rank, Gfx::ENG_OBJTYPE_DESCENDANT);
    m_object->SetObjectRank(9, rank);
    m_object->SetObjectParent(9, 8);
    modelManager->AddModelReference("mother4.mod", false, rank);
    m_object->SetPosition(9, Math::Vector(0.0f, 0.0f, -8.5f));

    // Creates a middle-left leg.
    rank = m_engine->CreateObject();
    m_engine->SetObjectType(rank, Gfx::ENG_OBJTYPE_DESCENDANT);
    m_object->SetObjectRank(10, rank);
    m_object->SetObjectParent(10, 0);
    modelManager->AddModelReference("mother3.mod", false, rank);
    m_object->SetPosition(10, Math::Vector(3.5f, -1.0f, 12.0f));
    m_object->SetAngleY(10, Math::PI);

    // Creates a middle-left foot.
    rank = m_engine->CreateObject();
    m_engine->SetObjectType(rank, Gfx::ENG_OBJTYPE_DESCENDANT);
    m_object->SetObjectRank(11, rank);
    m_object->SetObjectParent(11, 10);
    modelManager->AddModelReference("mother4.mod", false, rank);
    m_object->SetPosition(11, Math::Vector(0.0f, 0.0f, -8.5f));

    // Creates a left-front leg.
    rank = m_engine->CreateObject();
    m_engine->SetObjectType(rank, Gfx::ENG_OBJTYPE_DESCENDANT);
    m_object->SetObjectRank(12, rank);
    m_object->SetObjectParent(12, 0);
    modelManager->AddModelReference("mother3.mod", false, rank);
    m_object->SetPosition(12, Math::Vector(10.0f, -1.0f, 10.0f));
    m_object->SetAngleY(12, Math::PI);

    // Creates a left-front foot.
    rank = m_engine->CreateObject();
    m_engine->SetObjectType(rank, Gfx::ENG_OBJTYPE_DESCENDANT);
    m_object->SetObjectRank(13, rank);
    m_object->SetObjectParent(13, 12);
    modelManager->AddModelReference("mother4.mod", false, rank);
    m_object->SetPosition(13, Math::Vector(0.0f, 0.0f, -8.5f));

    // Creates the right antenna.
    rank = m_engine->CreateObject();
    m_engine->SetObjectType(rank, Gfx::ENG_OBJTYPE_DESCENDANT);
    m_object->SetObjectRank(14, rank);
    m_object->SetObjectParent(14, 1);
    modelManager->AddModelReference("mother5.mod", false, rank);
    m_object->SetPosition(14, Math::Vector(6.0f, 1.0f, -2.5f));

    rank = m_engine->CreateObject();
    m_engine->SetObjectType(rank, Gfx::ENG_OBJTYPE_DESCENDANT);
    m_object->SetObjectRank(15, rank);
    m_object->SetObjectParent(15, 14);
    modelManager->AddModelReference("mother6.mod", false, rank);
    m_object->SetPosition(15, Math::Vector(8.0f, 0.0f, 0.0f));

    // Creates the left antenna.
    rank = m_engine->CreateObject();
    m_engine->SetObjectType(rank, Gfx::ENG_OBJTYPE_DESCENDANT);
    m_object->SetObjectRank(16, rank);
    m_object->SetObjectParent(16, 1);
    modelManager->AddModelReference("mother5.mod", false, rank);
    m_object->SetPosition(16, Math::Vector(6.0f, 1.0f, 2.5f));

    rank = m_engine->CreateObject();
    m_engine->SetObjectType(rank, Gfx::ENG_OBJTYPE_DESCENDANT);
    m_object->SetObjectRank(17, rank);
    m_object->SetObjectParent(17, 16);
    modelManager->AddModelReference("mother6.mod", false, rank);
    m_object->SetPosition(17, Math::Vector(8.0f, 0.0f, 0.0f));

    // Creates the right claw.
    rank = m_engine->CreateObject();
    m_engine->SetObjectType(rank, Gfx::ENG_OBJTYPE_DESCENDANT);
    m_object->SetObjectRank(18, rank);
    m_object->SetObjectParent(18, 1);
    modelManager->AddModelReference("mother7.mod", false, rank);
    m_object->SetPosition(18, Math::Vector(-4.0f, -3.5f, -8.0f));
    m_object->SetZoomX(18, 1.2f);

    // Creates the left claw.
    rank = m_engine->CreateObject();
    m_engine->SetObjectType(rank, Gfx::ENG_OBJTYPE_DESCENDANT);
    m_object->SetObjectRank(19, rank);
    m_object->SetObjectParent(19, 1);
    modelManager->AddModelReference("mother7.mod", true, rank);
    m_object->SetPosition(19, Math::Vector(-4.0f, -3.5f, 8.0f));
    m_object->SetZoomX(19, 1.2f);

    m_object->CreateShadowCircle(18.0f, 0.8f);

    CreatePhysics();
    m_object->SetFloorHeight(0.0f);

    pos = m_object->GetPosition(0);
    m_object->SetPosition(0, pos);  // to display the shadows immediately

    m_engine->LoadAllTextures();

    return true;
}
コード例 #10
0
void ProcessInputs()
{
    ProcessForceKeys();

	// Core dump
	if (bCoreDump)
	{
		bool ok = NXU::coreDump(gPhysicsSDK, fnameCD, NXU::FT_XML, true, false);
		if(ok) {
			printf("Output core dump successfully!\n");
		} else {
			printf("Output core dump failed!\n");
		}
		bCoreDump = false;
	}

	// Load core to core container
	if (bLoadCore)
	{
		if(gPhysicsCollection) {
			NXU::releaseCollection(gPhysicsCollection);
			gPhysicsCollection = NULL;
		}
		gPhysicsCollection = LoadCoreDump(fnameCD);
		if(!gPhysicsCollection) {
			printf("Unable to load the core dump, please first save a core dump.\n");
		}
		else
		{
			printf("Core dump has been loaded into container.\n");
		}
		bLoadCore = false;
	}

	// instantiate a core dump
	if(bInstantiateCore) {
		if(gPhysicsCollection) {
			if(gPhysicsSDK) {
				ReleasePhysicsSDK(gPhysicsSDK);
				gPhysicsSDK = CreatePhysics();
			}
			if(InstantiateCoreDump(gPhysicsSDK, gPhysicsCollection)) {
				if(gPhysicsSDK->getNbScenes()) {
					gScene = gPhysicsSDK->getScene(0);
					AddUserDataToActors(gScene);
					NxActor** actors = gScene->getActors();
					gSelectedActor = *actors;
					while(!IsSelectable(gSelectedActor))
					{
						gSelectedActor = *actors++;
					}
				}
				printf("Core dump instantiated\n");
			}
			else
			{
				printf("Error in instantiating the core dump\n");
			}
		}
		else
		{
				printf("Unable to instantiate the core dump with an empty container\n");
		}
		bInstantiateCore = false;
	}

    // Show debug wireframes
	if (bDebugWireframeMode)
	{
		if (gScene)  gDebugRenderer.renderData(*gScene->getDebugRenderable());
	}
}