void OptimizedMeshLevelCollision (NewtonFrame& system) { NewtonWorld* world; world = system.m_world; // create the sky box and the floor, //LoadLevelAndSceneRoot (system, "flatplane.dae", 1); //LoadLevelAndSceneRoot (system, "dungeon.dae", 1); //LoadLevelAndSceneRoot (system, "pitpool.dae", 1); LoadLevelAndSceneRoot (system, "pitpool.dae", 1); //LoadLevelAndSceneRoot (system, "dungeon.dae", 1); // create a material to collide with this object int defaultMaterialID; defaultMaterialID = NewtonMaterialGetDefaultGroupID (world); dVector posit (0.0f, 0.0f, 0.0f, 0.0f); posit.m_y = FindFloor (world, posit.m_x, posit.m_z) + 5.0f; InitEyePoint (dVector (1.0f, 0.0f, 0.0f), posit); dVector size (1.0f, 1.0f, 1.0f); dVector location (cameraEyepoint + cameraDir.Scale (10.0f)); AddBoxes(&system, 10.0f, location, size, 3, 3, 10.0f, _SPHERE_PRIMITIVE, defaultMaterialID); AddBoxes(&system, 10.0f, location, size, 3, 3, 10.0f, _BOX_PRIMITIVE, defaultMaterialID); AddBoxes(&system, 10.0f, location, size, 3, 3, 10.0f, _CONE_PRIMITIVE, defaultMaterialID); AddBoxes(&system, 10.0f, location, size, 3, 3, 10.0f, _CYLINDER_PRIMITIVE, defaultMaterialID); AddBoxes(&system, 10.0f, location, size, 3, 3, 10.0f, _CAPSULE_PRIMITIVE, defaultMaterialID); AddBoxes(&system, 10.0f, location, size, 3, 3, 10.0f, _CHAMFER_CYLINDER_PRIMITIVE, defaultMaterialID); AddBoxes(&system, 10.0f, location, size, 3, 3, 10.0f, _RANDOM_CONVEX_HULL_PRIMITIVE, defaultMaterialID); AddBoxes(&system, 10.0f, location, size, 3, 3, 10.0f, _REGULAR_CONVEX_HULL_PRIMITIVE, defaultMaterialID); }
static void Magnets (NewtonFrame& system, dFloat strength) { NewtonWorld* world; LevelPrimitive* scene; world = system.m_world; // create the sky box and the floor, scene = LoadLevelAndSceneRoot (system, "playground.dae", 1); dVector posit (0.0f, 0.0f, 0.0f, 1.0f); posit.m_y = FindFloor (world, posit.m_x, posit.m_z) + 5.0f; InitEyePoint (dVector (1.0f, 0.0f, 0.0f), posit); // create a material carrier to colliding with this objects int defaultMaterialID; int magneticFieldID; int magneticPicesID; defaultMaterialID = NewtonMaterialGetDefaultGroupID (world); magneticFieldID = NewtonMaterialCreateGroupID (world); magneticPicesID = NewtonMaterialCreateGroupID (world); NewtonMaterialSetCollisionCallback (world, magneticPicesID, magneticFieldID, NULL, NULL, Magnet::MagneticField); // create a spherical object to serve are the magnet core dMatrix matrix (GetIdentityMatrix()); matrix.m_posit = posit; matrix.m_posit.m_x += 7.0f; new Magnet (system, matrix, 20.0f, defaultMaterialID, magneticFieldID, strength); // add a material to control the buoyancy dVector size (1.0f, 0.25f, 0.5f); dVector sphSize (1.0f, 1.0f, 1.0f); dVector capSize (1.25f, 0.4f, 1.0f); dVector location (cameraEyepoint + cameraDir.Scale (10.0f)); AddBoxes (&system, 1.0f, location, sphSize, 3, 3, 5.0f, _SPHERE_PRIMITIVE, magneticPicesID); AddBoxes (&system, 1.0f, location, size, 3, 3, 5.0f, _BOX_PRIMITIVE, magneticPicesID); AddBoxes (&system, 1.0f, location, size, 3, 3, 5.0f, _CONE_PRIMITIVE, magneticPicesID); AddBoxes (&system, 1.0f, location, size, 3, 3, 5.0f, _CYLINDER_PRIMITIVE, magneticPicesID); AddBoxes (&system, 1.0f, location, capSize, 3, 3, 5.0f, _CAPSULE_PRIMITIVE, magneticPicesID); AddBoxes (&system, 1.0f, location, size, 3, 3, 5.0f, _CHAMFER_CYLINDER_PRIMITIVE, magneticPicesID); AddBoxes (&system, 1.0f, location, size, 3, 3, 5.0f, _RANDOM_CONVEX_HULL_PRIMITIVE, magneticPicesID); AddBoxes (&system, 1.0f, location, size, 3, 3, 5.0f, _REGULAR_CONVEX_HULL_PRIMITIVE, magneticPicesID); posit.m_x -= 10.0f; InitEyePoint (dVector (1.0f, 0.0f, 0.0f), posit); }
// Parses the text string as a box file and adds any discovered boxes that // match the page number. Returns false on error. bool ImageData::AddBoxes(const char* box_text) { if (box_text != NULL && box_text[0] != '\0') { GenericVector<TBOX> boxes; GenericVector<STRING> texts; GenericVector<int> box_pages; if (ReadMemBoxes(page_number_, false, box_text, &boxes, &texts, NULL, &box_pages)) { AddBoxes(boxes, texts, box_pages); return true; } else { tprintf("Error: No boxes for page %d from image %s!\n", page_number_, imagefilename_.string()); } } return false; }
void SimplePlaneCollision (NewtonFrame& system) { NewtonWorld* world; LevelPrimitive *level; NewtonCollision* planeColl; world = system.m_world; // create a material carrier to collision with this object int defaultMaterialID; defaultMaterialID = NewtonMaterialGetDefaultGroupID (world); // create the sky box and the floor, level = LoadLevelAndSceneRoot (system, "flatplane.dae", 1); // Find the world mesh and replace the collision for a custom plane collision mesh dMatrix matrix; NewtonBodyGetMatrix (level->m_level, &matrix[0][0]); dVector plane (matrix.m_up); plane.m_w = - (plane % matrix.m_posit); planeColl = CreatePlaneCollidion (world, plane); NewtonBodySetCollision(level->m_level, planeColl); NewtonReleaseCollision(world, planeColl); dVector posit (0.0f, 0.0f, 0.0f, 0.0f); posit.m_y = FindFloor (world, posit.m_x, posit.m_z) + 5.0f; InitEyePoint (dVector (1.0f, 0.0f, 0.0f), posit); dVector size (1.0f, 1.0f, 1.0f); dVector location (cameraEyepoint + cameraDir.Scale (10.0f)); AddBoxes (&system, 10.0f, location, size, 3, 3, 10.0f, _SPHERE_PRIMITIVE, defaultMaterialID); AddBoxes (&system, 10.0f, location, size, 3, 3, 10.0f, _BOX_PRIMITIVE, defaultMaterialID); AddBoxes (&system, 10.0f, location, size, 3, 3, 10.0f, _CONE_PRIMITIVE, defaultMaterialID); AddBoxes (&system, 10.0f, location, size, 3, 3, 10.0f, _CYLINDER_PRIMITIVE, defaultMaterialID); AddBoxes (&system, 10.0f, location, size, 3, 3, 10.0f, _CAPSULE_PRIMITIVE, defaultMaterialID); AddBoxes (&system, 10.0f, location, size, 3, 3, 10.0f, _CHAMFER_CYLINDER_PRIMITIVE, defaultMaterialID); AddBoxes (&system, 10.0f, location, size, 3, 3, 10.0f, _RANDOM_CONVEX_HULL_PRIMITIVE, defaultMaterialID); AddBoxes (&system, 10.0f, location, size, 3, 3, 10.0f, _REGULAR_CONVEX_HULL_PRIMITIVE, defaultMaterialID); }
//Generates a random level : NETWORK PLAY, WHEN THIS IS CALLED YOU JUST ASK THE HOST FOR A RESYNC void GameWorld::GenerateRandomLevel() { //Clear the background of any decals SDL_BlitSurface(gConMgr.GetSurface("sprites/grid.fif"), 0, m_surf_background, &renderarea); //Clear game grid (of all but the players) for(int y = 0; y < 11; y++) { for(int x = 0; x < 17; x++) { if(m_gamegrid[x][y].ent != NULL) { if(m_gamegrid[x][y].ent->m_ident != IDENT_MAN){m_gamegrid[x][y].ent = NULL;} } } } //Clear arrays for(int i = 0; i < MAX_CELLS; i++){m_mushrooms[i].SetVisible(0);} m_totalmushrooms = 0; m_totalboxes = 0; m_totalbutterflys = 0; m_totalhats = 0; m_totalwells = 0; m_well[0].SetVisible(0); m_hat[0].SetVisible(0); //Add Entities (If normal level) if(m_isbonus == 0) //Normal { //AddWell(); AddBoxes(10, 50, 1); AddBoxes(3, 28, 0); AddMushrooms(2, 30, 1); AddMushrooms(2, 40, 2); AddMushrooms(0, 8, 3); AddMushrooms(0, 3, 4); for(int i = 0; i < qRand(0, 5); i++){AddButterfly(i);} } //Add Entities (If bonus level) if(m_isbonus == 1) { if(m_bonustype == 1) //Field of Red Mushrooms { AddMushrooms(10, 50, 1); AddEscapeMushroom(0, 0); //0,0 = Random Position } if(m_bonustype == 2) //Whack-a-Mole { // AddEscapeMushroom(8, 10); //Top Right Corner } } //Increment Level if(m_isbonus != 1){m_level++;} //Get Ready!! if(firstgen == 0) { m_readyreg = GetTicks(); m_ready = 0; }else{firstgen=0;} }