void cpSpaceAddCollisionHandler( cpSpace *space, cpCollisionType a, cpCollisionType b, cpCollisionBeginFunc begin, cpCollisionPreSolveFunc preSolve, cpCollisionPostSolveFunc postSolve, cpCollisionSeparateFunc separate, void *data ){ cpAssertSpaceUnlocked(space); // Remove any old function so the new one will get added. cpSpaceRemoveCollisionHandler(space, a, b); cpCollisionHandler handler = { a, b, begin ? begin : alwaysCollide, preSolve ? preSolve : alwaysCollide, postSolve ? postSolve : nothing, separate ? separate : nothing, data }; cpHashSetInsert(space->collFuncSet, CP_HASH_PAIR(a, b), &handler, NULL); }
void GameScene::onExit() { Scene::onExit(); this->unscheduleUpdate(); for (auto& shape : shapes) cpShapeFree(shape); shapes.clear(); cpSpaceRemoveCollisionHandler(space, collisionTypeBall, collisionTypeWall); cpSpaceFree(space); }
void destroyEditor(void) { int i; cpArray *bodies; cpBody *pb; domino_t *dom; bodies = g_Space->bodies; for (i = 0; i < bodies->num; ++i) { pb = (cpBody *)bodies->arr[i]; pb->w_limit = INFINITY; dom = (domino_t *)pb->data; if (dom) { /* sometimes the mass and vertices change in the editor, so update MoI */ cpBodySetMoment(pb, momentForDomino(dom)); } } destroyControlPoints(); cpSpaceRemoveCollisionHandler(g_Space, DOMINO_OBJECT_TYPE, PALETTE_TYPE); destroyEditorPalette(); cpSpaceRemoveBody(g_Space, editorBody); editorBody = NULL; }
void maingame_cleanup(void) { SPRITESPTR stman = search_sprite_list_for_element("STICKMAN"); SPRITESPTR ground = search_sprite_list_for_element("GROUND"); GDATAPTR game = get_game_data(); cpSpace *space = get_global_cpSpace(); cpSpaceRemoveCollisionHandler(space, 1, 2); remove_physics_object(stman); remove_element_from_sprite_list_ptr(stman); remove_element_from_sprite_list("CLOUD"); ground->sdata.x = 0; ground->sdata.y = 510; remove_all_enemies(); game->gamestarted = false; start = false; lives = 3; score = 0; minutes = 0; seconds = 0; }
void Space::removeCollisionHandler(cpCollisionType a,cpCollisionType b) { collisionHandlers.erase(std::make_pair(a, b)); cpSpaceRemoveCollisionHandler(get(),a,b); }