void NewtonDemos::LoadDemo (int index) { BEGIN_MENU_OPTION(); m_scene->Cleanup(); m_demosSelection[index].m_launchDemoCallback (m_scene); m_scene->SwapBuffers(); RestoreSettings (); m_scene->ResetTimer(); // clean up all caches the engine have saved NewtonInvalidateCache(m_scene->GetNewton()); END_MENU_OPTION(); }
void LaunchPuck() { if (!m_launched) { m_launched = true; NewtonInvalidateCache (NewtonBodyGetWorld(m_puckBody)); dVector zeros(0.0f, 0.0f, 0.0f, 0.0f); NewtonBodySetVelocity(m_puckBody, &zeros.m_x); NewtonBodySetOmega(m_puckBody, &zeros.m_x); NewtonBodySetForce(m_puckBody, &zeros.m_x); NewtonBodySetTorque(m_puckBody, &zeros.m_x); dVector vel(171.299469f, 0.0f, 0.0f); NewtonBodySetVelocity(m_puckBody, &vel.m_x); } }
void DemoEntityManager::LoadScene (const char* const fileName) { dScene database (GetNewton()); database.Deserialize(fileName); // this will apply all global the scale to the mesh database.FreezeScale(); // this will apply all local scale and transform to the mesh //database.FreezePivot(); // Load the Visual Scene EntityDictionary entDictionary; LoadVisualScene(&database, entDictionary); //Load the physics world dList<NewtonBody*> bodyList; database.SceneToNewtonWorld(m_world, bodyList); // bind every rigidBody loaded to the scene entity for (dList<NewtonBody*>::dListNode* bodyNode = bodyList.GetFirst(); bodyNode; bodyNode = bodyNode->GetNext()) { // find the user data and set to the visual entity in the scene NewtonBody* const body = bodyNode->GetInfo(); dScene::dTreeNode* const sceneNode = (dScene::dTreeNode*)NewtonBodyGetUserData(body); DemoEntity* const entity = entDictionary.Find(sceneNode)->GetInfo(); NewtonBodySetUserData(body, entity); // see if this body have some special setups dScene::dTreeNode* const node = database.FindChildByType(sceneNode, dRigidbodyNodeInfo::GetRttiType()); dAssert (node); dRigidbodyNodeInfo* const bodyData = (dRigidbodyNodeInfo*) database.GetInfoFromNode(node); dVariable* bodyType = bodyData->FindVariable("rigidBodyType"); // set the default call backs if (!bodyType || !strcmp (bodyType->GetString(), "default gravity")) { NewtonBodySetTransformCallback(body, DemoEntity::TransformCallback); NewtonBodySetForceAndTorqueCallback(body, PhysicsApplyGravityForce); NewtonBodySetDestructorCallback (body, PhysicsBodyDestructor); } } // clean up all caches the engine have saved NewtonInvalidateCache (m_world); }
void DemoEntityManager::Cleanup () { // is we are run asynchronous we need make sure no update in on flight. if (m_world) { NewtonWaitForUpdateToFinish (m_world); } // destroy all remaining visual objects while (dList<DemoEntity*>::GetFirst()) { RemoveEntity (dList<DemoEntity*>::GetFirst()); } m_sky = NULL; // destroy the Newton world if (m_world) { // get serialization call back before destroying the world NewtonDestroy (m_world); m_world = NULL; } // memset (&demo, 0, sizeof (demo)); // check that there are no memory leak on exit dAssert (NewtonGetMemoryUsed () == 0); // create the newton world m_world = NewtonCreate(); // link the work with this user data NewtonWorldSetUserData(m_world, this); // set joint serialization call back CustomJoint::Initalize(m_world); // add all physics pre and post listeners // m_preListenerManager.Append(new DemoVisualDebugerListener("visualDebuger", m_world)); new DemoEntityListener (this); m_cameraManager = new DemoCameraListener(this); // m_postListenerManager.Append (new DemoAIListener("aiManager")); // set the default parameters for the newton world // set the simplified solver mode (faster but less accurate) NewtonSetSolverModel (m_world, 4); // newton 300 does not have world size, this is better controlled by the client application //dVector minSize (-500.0f, -500.0f, -500.0f); //dVector maxSize ( 500.0f, 500.0f, 500.0f); //NewtonSetWorldSize (m_world, &minSize[0], &maxSize[0]); // set the performance track function //NewtonSetPerformanceClock (m_world, dRuntimeProfiler::GetTimeInMicrosenconds); // clean up all caches the engine have saved NewtonInvalidateCache (m_world); // Set the Newton world user data NewtonWorldSetUserData(m_world, this); // we start without 2d render m_renderHood = NULL; m_renderHoodContext = NULL; }
void world::clearCache() const { NewtonInvalidateCache(_world); }