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(); }
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(); }
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; }
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; }
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; }
// 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; }
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(); }
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(); }
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; }
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()); } }