Пример #1
0
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);
}
Пример #2
0
void GameScene::onExit()
{
	Scene::onExit();
	this->unscheduleUpdate();

	for (auto& shape : shapes)
		cpShapeFree(shape);
	shapes.clear();

	cpSpaceRemoveCollisionHandler(space, collisionTypeBall, collisionTypeWall);
	cpSpaceFree(space);
}
Пример #3
0
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;
}
Пример #4
0
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;
}
Пример #5
0
void Space::removeCollisionHandler(cpCollisionType a,cpCollisionType b)
{
		collisionHandlers.erase(std::make_pair(a, b));
cpSpaceRemoveCollisionHandler(get(),a,b);
}