Esempio n. 1
0
    public void informBelongToObj(ContactInfo info)
    {
        SCENE_OBJ belongTo = belongToObj;

        while (belongTo != null)
        {
            belongTo.collideAction(info);
            belongTo = belongTo.belongToObj;
        }
    }
    public static void collideSceneObjProcess()
    {
        SCENE_OBJ A = collideInfo.vertex.belongToObj;  //vertex
        SCENE_OBJ B = collideInfo.surface.belongToObj; //surface

        //Debug.Log ( "collide occur!!(" + A.transform.name + "," + B.transform.name + ")" + collideInfo.minCollideTime );
        newContactA.reset();
        newContactB.reset();
        newContactA.other = B;
        newContactB.other = A;
        newContactA.self  = A;
        newContactB.self  = B;
        //newContactA.coupleContactInfo = newContactB;
        //newContactB.coupleContactInfo = newContactA;
        newContactA.blockDirect = collideInfo.surface.normal.direct;
        newContactB.blockDirect = -newContactA.blockDirect;


        //record surface
        newContactA.otherSurface = newContactB.otherSurface = collideInfo.surface;
        //if surface contact surface record surface
        bool isSurfaceContact = false;

        for (int i = 0; i < collideInfo.vertex.normals.Count; i++)
        {
            NORMAL normal = collideInfo.vertex.normals[i];
            if (normal.direct == -collideInfo.surface.normal.direct)
            {
                newContactA.selfSurface = newContactB.selfSurface = normal.surface;
                isSurfaceContact        = true;
                break;
            }
        }
        //otherwise record vertex
        if (!isSurfaceContact)
        {
            newContactA.selfVertex = newContactB.selfVertex = collideInfo.vertex;
        }

        A.collideAction(newContactA);
        B.collideAction(newContactB);

        A.informBelongToObj(newContactA);
        B.informBelongToObj(newContactB);
    }