def createCross(self,
                    world,
                    space,
                    density,
                    lx,
                    ly,
                    lz,
                    colOnlyBall=0,
                    attachedGeo=None,
                    aHPR=None,
                    aPos=None):
        body = OdeBody(self.world)
        M = OdeMass()
        M.setBox(density, lx, ly, lz)
        body.setMass(M)
        body.setFiniteRotationMode(1)
        boxsize = Vec3(lx, ly, lz)
        boxsize2 = Vec3(ly, lx, lz)
        geom = OdeBoxGeom(space, boxsize)
        geom.setBody(body)
        self.space.setSurfaceType(geom, 0)
        self.space.setCollideId(geom, 13)
        geom2 = OdeBoxGeom(space, boxsize2)
        geom2.setBody(body)
        self.space.setSurfaceType(geom2, 0)
        self.space.setCollideId(geom2, 26)
        self.massList.append(M)
        self.geomList.append(geom)
        self.geomList.append(geom2)
        self.odePandaRelationList.append((boxNodePathGeom, body))
        if colOnlyBall == 1:
            geom.setCollideBits(BitMask32(251658240))
            geom.setCategoryBits(BitMask32(0))
            geom2.setCollideBits(BitMask32(251658240))
            geom2.setCategoryBits(BitMask32(0))
        elif colOnlyBall == 2:
            geom.setCollideBits(BitMask32(0))
            geom.setCategoryBits(BitMask32(0))
            geom2.setCollideBits(BitMask32(0))
            geom2.setCategoryBits(BitMask32(0))

        if self.canRender:
            (boxNodePathGeom, t1,
             t2) = BuildGeometry.addBoxGeom(self.worldAttach, lx, ly, lz,
                                            Vec4(1.0, 1.0, 1.0, 1.0), 1)
            boxNodePathGeom.setPos(0, 0, -100)
            (boxNodePathGeom2, t1,
             t2) = BuildGeometry.addBoxGeom(boxNodePathGeom, ly, lx, lz,
                                            Vec4(1.0, 1.0, 1.0, 1.0), 1)
            boxNodePathGeom2.setPos(0, 0, 0)
            if attachedGeo:
                attachedGeo.reparentTo(boxNodePathGeom)
                attachedGeo.setHpr(0, 0, 90)
                attachedGeo.setPos(-4.7999999999999998, 0, -2.0)

            self.odePandaRelationList.append((boxNodePathGeom, body))
        else:
            boxNodePathGeom = None
            self.bodyList.append((None, body))
        return (boxNodePathGeom, body)
示例#2
0
 def createBox(self, world, space, density, lx, ly, lz, colOnlyBall=0):
     body = OdeBody(self.world)
     M = OdeMass()
     M.setSphere(density, 0.3 * (lx + ly + lz))
     body.setMass(M)
     boxsize = Vec3(lx, ly, lz)
     geom = OdeBoxGeom(space, boxsize)
     geom.setBody(body)
     self.space.setSurfaceType(geom, 0)
     self.space.setCollideId(geom, 7)
     self.massList.append(M)
     self.geomList.append(geom)
     if colOnlyBall:
         geom.setCollideBits(BitMask32(251658240))
         geom.setCategoryBits(BitMask32(0))
     elif colOnlyBall == 2:
         geom.setCollideBits(BitMask32(0))
         geom.setCategoryBits(BitMask32(0))
     if self.canRender:
         color = random.choice([
             Vec4(1.0, 0.0, 0.5, 1.0),
             Vec4(0.5, 0.5, 1.0, 1.0),
             Vec4(0.5, 1.0, 0.5, 1.0)
         ])
         boxsize = Vec3(lx, ly, lz)
         boxNodePathGeom, t1, t2 = BuildGeometry.addBoxGeom(
             self.worldAttach, lx, ly, lz, color, 1)
         boxNodePathGeom.setPos(0, 0, -100)
         self.odePandaRelationList.append((boxNodePathGeom, body))
     else:
         boxNodePathGeom = None
         self.bodyList.append((None, body))
     return (boxNodePathGeom, body)
 def createBox(self, world, space, density, lx, ly, lz, colOnlyBall = 0):
     body = OdeBody(self.world)
     M = OdeMass()
     M.setSphere(density, 0.3 * (lx + ly + lz))
     body.setMass(M)
     boxsize = Vec3(lx, ly, lz)
     geom = OdeBoxGeom(space, boxsize)
     geom.setBody(body)
     self.space.setSurfaceType(geom, 0)
     self.space.setCollideId(geom, 7)
     self.massList.append(M)
     self.geomList.append(geom)
     if colOnlyBall:
         geom.setCollideBits(BitMask32(251658240))
         geom.setCategoryBits(BitMask32(0))
     elif colOnlyBall == 2:
         geom.setCollideBits(BitMask32(0))
         geom.setCategoryBits(BitMask32(0))
     if self.canRender:
         color = random.choice([Vec4(1.0, 0.0, 0.5, 1.0), Vec4(0.5, 0.5, 1.0, 1.0), Vec4(0.5, 1.0, 0.5, 1.0)])
         boxsize = Vec3(lx, ly, lz)
         boxNodePathGeom, t1, t2 = BuildGeometry.addBoxGeom(self.worldAttach, lx, ly, lz, color, 1)
         boxNodePathGeom.setPos(0, 0, -100)
         self.odePandaRelationList.append((boxNodePathGeom, body))
     else:
         boxNodePathGeom = None
         self.bodyList.append((None, body))
     return (boxNodePathGeom, body)
 def createCross(self, world, space, density, lx, ly, lz, colOnlyBall = 0, attachedGeo = None, aHPR = None, aPos = None):
     body = OdeBody(self.world)
     M = OdeMass()
     M.setBox(density, lx, ly, lz)
     body.setMass(M)
     body.setFiniteRotationMode(1)
     boxsize = Vec3(lx, ly, lz)
     boxsize2 = Vec3(ly, lx, lz)
     geom = OdeBoxGeom(space, boxsize)
     geom.setBody(body)
     self.space.setSurfaceType(geom, 0)
     self.space.setCollideId(geom, 13)
     geom2 = OdeBoxGeom(space, boxsize2)
     geom2.setBody(body)
     self.space.setSurfaceType(geom2, 0)
     self.space.setCollideId(geom2, 26)
     self.massList.append(M)
     self.geomList.append(geom)
     self.geomList.append(geom2)
     self.odePandaRelationList.append((boxNodePathGeom, body))
     if colOnlyBall == 1:
         geom.setCollideBits(BitMask32(251658240))
         geom.setCategoryBits(BitMask32(0))
         geom2.setCollideBits(BitMask32(251658240))
         geom2.setCategoryBits(BitMask32(0))
     elif colOnlyBall == 2:
         geom.setCollideBits(BitMask32(0))
         geom.setCategoryBits(BitMask32(0))
         geom2.setCollideBits(BitMask32(0))
         geom2.setCategoryBits(BitMask32(0))
     if self.canRender:
         boxNodePathGeom, t1, t2 = BuildGeometry.addBoxGeom(self.worldAttach, lx, ly, lz, Vec4(1.0, 1.0, 1.0, 1.0), 1)
         boxNodePathGeom.setPos(0, 0, -100)
         boxNodePathGeom2, t1, t2 = BuildGeometry.addBoxGeom(boxNodePathGeom, ly, lx, lz, Vec4(1.0, 1.0, 1.0, 1.0), 1)
         boxNodePathGeom2.setPos(0, 0, 0)
         if attachedGeo:
             attachedGeo.reparentTo(boxNodePathGeom)
             attachedGeo.setHpr(0, 0, 90)
             attachedGeo.setPos(-4.8, 0, -2.0)
         self.odePandaRelationList.append((boxNodePathGeom, body))
     else:
         boxNodePathGeom = None
         self.bodyList.append((None, body))
     return (boxNodePathGeom, body)
    def createPinWheel(self, world, space, density, lx, ly, lz, numBoxes, disV, disH, colOnlyBall = 0, attachedGeo = None, aHPR = None, aPos = None, offRot = 0):
        body = OdeBody(self.world)
        M = OdeMass()
        M.setBox(density, lx, ly, lz)
        body.setMass(M)
        body.setFiniteRotationMode(1)
        boxsize = Vec3(lx, ly * 0.5, lz)
        boxsize2 = Vec3(ly * 0.5, lx, lz)
        self.massList.append(M)
        self.placerNode.setPos(0, 0, 0)
        self.placerNode.setHpr(0, 0, 0)
        self.subPlacerNode.setHpr(0, 0, 0)
        self.subPlacerNode.setPos(disH, disV, 0)
        if self.canRender:
            someNodePathGeom = render.attachNewNode('pinwheel')
        else:
            someNodePathGeom = self.root.attachNewNode('pinwheel')
        for num in xrange(numBoxes):
            spin = 360.0 * float(num) / float(numBoxes) + float(offRot)
            self.placerNode.setH(spin)
            geom = OdeBoxGeom(space, boxsize)
            geom.setBody(body)
            geom.setOffsetPosition(self.subPlacerNode.getPos(self.root))
            geom.setOffsetQuaternion(self.subPlacerNode.getQuat(self.root))
            self.geomList.append(geom)
            self.space.setSurfaceType(geom, 0)
            self.space.setCollideId(geom, 13)
            if colOnlyBall == 1:
                geom.setCollideBits(BitMask32(251658240))
                geom.setCategoryBits(BitMask32(0))
            elif colOnlyBall == 2:
                geom.setCollideBits(BitMask32(0))
                geom.setCategoryBits(BitMask32(0))
            if not attachedGeo:
                boxNodePathGeom, t1, t2 = BuildGeometry.addBoxGeom(someNodePathGeom, lx, ly * 0.5, lz, Vec4(1.0, 1.0, 1.0, 1.0), 1)
                boxNodePathGeom.setPos(self.subPlacerNode.getPos(self.root))
                boxNodePathGeom.setHpr(self.subPlacerNode.getHpr(self.root))

        if attachedGeo and self.canRender:
            attachedGeo.reparentTo(someNodePathGeom)
            attachedGeo.setHpr(aHPR[0], aHPR[1], aHPR[2])
            attachedGeo.setPos(aPos[0], aPos[1], aPos[2])
        if self.canRender:
            self.odePandaRelationList.append((someNodePathGeom, body))
        else:
            someNodePathGeom = None
            self.bodyList.append((None, body))
        
        return (someNodePathGeom, body)
    def createPinWheel(self, world, space, density, lx, ly, lz, numBoxes, disV, disH, colOnlyBall = 0, attachedGeo = None, aHPR = None, aPos = None, offRot = 0):
        body = OdeBody(self.world)
        M = OdeMass()
        M.setBox(density, lx, ly, lz)
        body.setMass(M)
        body.setFiniteRotationMode(1)
        boxsize = Vec3(lx, ly * 0.5, lz)
        boxsize2 = Vec3(ly * 0.5, lx, lz)
        self.massList.append(M)
        self.placerNode.setPos(0, 0, 0)
        self.placerNode.setHpr(0, 0, 0)
        self.subPlacerNode.setHpr(0, 0, 0)
        self.subPlacerNode.setPos(disH, disV, 0)
        if self.canRender:
            someNodePathGeom = render.attachNewNode('pinwheel')
        else:
            someNodePathGeom = self.root.attachNewNode('pinwheel')
        for num in xrange(numBoxes):
            spin = 360.0 * float(num) / float(numBoxes) + float(offRot)
            self.placerNode.setH(spin)
            geom = OdeBoxGeom(space, boxsize)
            geom.setBody(body)
            geom.setOffsetPosition(self.subPlacerNode.getPos(self.root))
            geom.setOffsetQuaternion(self.subPlacerNode.getQuat(self.root))
            self.geomList.append(geom)
            self.space.setSurfaceType(geom, 0)
            self.space.setCollideId(geom, 13)
            if colOnlyBall == 1:
                geom.setCollideBits(BitMask32(251658240))
                geom.setCategoryBits(BitMask32(0))
            elif colOnlyBall == 2:
                geom.setCollideBits(BitMask32(0))
                geom.setCategoryBits(BitMask32(0))
            if not attachedGeo:
                boxNodePathGeom, t1, t2 = BuildGeometry.addBoxGeom(someNodePathGeom, lx, ly * 0.5, lz, Vec4(1.0, 1.0, 1.0, 1.0), 1)
                boxNodePathGeom.setPos(self.subPlacerNode.getPos(self.root))
                boxNodePathGeom.setHpr(self.subPlacerNode.getHpr(self.root))

        if attachedGeo and self.canRender:
            attachedGeo.reparentTo(someNodePathGeom)
            attachedGeo.setHpr(aHPR[0], aHPR[1], aHPR[2])
            attachedGeo.setPos(aPos[0], aPos[1], aPos[2])
        if self.canRender:
            self.odePandaRelationList.append((someNodePathGeom, body))
        else:
            someNodePathGeom = None
            self.bodyList.append((None, body))
        return (someNodePathGeom, body)
示例#7
0
    def createBox(self, world, space, density, lx, ly, lz, colOnlyBall=0):
        """Create a box body and its corresponding geom."""
        # Create body
        body = OdeBody(self.world)
        M = OdeMass()
        #M.setBox(density, lx, ly, lz)
        M.setSphere(density, 0.3 * (lx + ly + lz))
        body.setMass(M)
        boxsize = Vec3(lx, ly, lz)
        geom = OdeBoxGeom(space, boxsize)
        geom.setBody(body)
        self.space.setSurfaceType(geom, 0)
        self.space.setCollideId(geom, 7)  # GolfGlobals.MOVER_COLLIDE_ID

        self.massList.append(M)
        self.geomList.append(geom)

        if colOnlyBall:
            geom.setCollideBits(BitMask32(0x0f000000))
            geom.setCategoryBits(BitMask32(0x00000000))
        elif colOnlyBall == 2:
            geom.setCollideBits(BitMask32(0x00000000))
            geom.setCategoryBits(BitMask32(0x00000000))

        if self.canRender:
            # Create a box geom for collision detection
            color = random.choice([
                Vec4(1.0, 0.0, 0.5, 1.0),
                Vec4(0.5, 0.5, 1.0, 1.0),
                Vec4(0.5, 1.0, 0.5, 1.0)
            ])
            boxsize = Vec3(lx, ly, lz)
            boxNodePathGeom, t1, t2 = BuildGeometry.addBoxGeom(
                self.worldAttach, lx, ly, lz, color, 1)
            boxNodePathGeom.setPos(0, 0, -100)
            self.odePandaRelationList.append((boxNodePathGeom, body))
        else:
            boxNodePathGeom = None
            self.bodyList.append((None, body))

        return boxNodePathGeom, body
示例#8
0
 def createCross2(self,
                  world,
                  space,
                  density,
                  lx,
                  ly,
                  lz,
                  latSlide,
                  colOnlyBall=0,
                  attachedGeo=None,
                  aHPR=None,
                  aPos=None):
     body = OdeBody(self.world)
     M = OdeMass()
     M.setBox(density, lx, ly, lz)
     body.setMass(M)
     body.setFiniteRotationMode(1)
     boxsize = Vec3(lx, ly * 0.5, lz)
     boxsize2 = Vec3(ly * 0.5, lx, lz)
     geom = OdeBoxGeom(space, boxsize)
     geom.setBody(body)
     geom.setOffsetPosition(-latSlide, ly * 0.25, 0)
     self.space.setSurfaceType(geom, 0)
     self.space.setCollideId(geom, 13)
     geom2 = OdeBoxGeom(space, boxsize2)
     geom2.setBody(body)
     geom2.setOffsetPosition(ly * 0.25, latSlide, 0)
     self.space.setSurfaceType(geom2, 0)
     self.space.setCollideId(geom2, 13)
     geom3 = OdeBoxGeom(space, boxsize)
     geom3.setBody(body)
     geom3.setOffsetPosition(latSlide, -ly * 0.25, 0)
     self.space.setSurfaceType(geom3, 0)
     self.space.setCollideId(geom3, 13)
     geom4 = OdeBoxGeom(space, boxsize2)
     geom4.setBody(body)
     geom4.setOffsetPosition(-ly * 0.25, -latSlide, 0)
     self.space.setSurfaceType(geom4, 0)
     self.space.setCollideId(geom4, 13)
     self.massList.append(M)
     self.geomList.append(geom)
     self.geomList.append(geom2)
     self.geomList.append(geom3)
     self.geomList.append(geom4)
     if colOnlyBall == 1:
         geom.setCollideBits(BitMask32(251658240))
         geom.setCategoryBits(BitMask32(0))
         geom2.setCollideBits(BitMask32(251658240))
         geom2.setCategoryBits(BitMask32(0))
         geom3.setCollideBits(BitMask32(251658240))
         geom3.setCategoryBits(BitMask32(0))
         geom4.setCollideBits(BitMask32(251658240))
         geom4.setCategoryBits(BitMask32(0))
     elif colOnlyBall == 2:
         geom.setCollideBits(BitMask32(0))
         geom.setCategoryBits(BitMask32(0))
         geom2.setCollideBits(BitMask32(0))
         geom2.setCategoryBits(BitMask32(0))
         geom3.setCollideBits(BitMask32(0))
         geom3.setCategoryBits(BitMask32(0))
         geom4.setCollideBits(BitMask32(0))
         geom4.setCategoryBits(BitMask32(0))
     if self.canRender:
         someNodePathGeom = render.attachNewNode('pinwheel')
         if attachedGeo:
             attachedGeo.reparentTo(someNodePathGeom)
             attachedGeo.setHpr(aHPR[0], aHPR[1], aHPR[2])
             attachedGeo.setPos(aPos[0], aPos[1], aPos[2])
         boxNodePathGeom, t1, t2 = BuildGeometry.addBoxGeom(
             someNodePathGeom, lx, ly * 0.5, lz, Vec4(1.0, 1.0, 1.0, 1.0),
             1)
         boxNodePathGeom.setPos(-latSlide, ly * 0.25, 0)
         boxNodePathGeom2, t1, t2 = BuildGeometry.addBoxGeom(
             someNodePathGeom, ly * 0.5, lx, lz, Vec4(1.0, 1.0, 1.0, 1.0),
             1)
         boxNodePathGeom2.setPos(ly * 0.25, latSlide, 0)
         boxNodePathGeom3, t1, t2 = BuildGeometry.addBoxGeom(
             someNodePathGeom, lx, ly * 0.5, lz, Vec4(1.0, 1.0, 1.0, 1.0),
             1)
         boxNodePathGeom3.setPos(latSlide, -ly * 0.25, 0)
         boxNodePathGeom4, t1, t2 = BuildGeometry.addBoxGeom(
             someNodePathGeom, ly * 0.5, lx, lz, Vec4(1.0, 1.0, 1.0, 1.0),
             1)
         boxNodePathGeom4.setPos(-ly * 0.25, -latSlide, 0)
         self.odePandaRelationList.append((someNodePathGeom, body))
     else:
         someNodePathGeom = None
         self.bodyList.append((None, body))
     return (someNodePathGeom, body)
 def createCross2(self, world, space, density, lx, ly, lz, latSlide, colOnlyBall = 0, attachedGeo = None, aHPR = None, aPos = None):
     body = OdeBody(self.world)
     M = OdeMass()
     M.setBox(density, lx, ly, lz)
     body.setMass(M)
     body.setFiniteRotationMode(1)
     boxsize = Vec3(lx, ly * 0.5, lz)
     boxsize2 = Vec3(ly * 0.5, lx, lz)
     geom = OdeBoxGeom(space, boxsize)
     geom.setBody(body)
     geom.setOffsetPosition(-latSlide, ly * 0.25, 0)
     self.space.setSurfaceType(geom, 0)
     self.space.setCollideId(geom, 13)
     geom2 = OdeBoxGeom(space, boxsize2)
     geom2.setBody(body)
     geom2.setOffsetPosition(ly * 0.25, latSlide, 0)
     self.space.setSurfaceType(geom2, 0)
     self.space.setCollideId(geom2, 13)
     geom3 = OdeBoxGeom(space, boxsize)
     geom3.setBody(body)
     geom3.setOffsetPosition(latSlide, -ly * 0.25, 0)
     self.space.setSurfaceType(geom3, 0)
     self.space.setCollideId(geom3, 13)
     geom4 = OdeBoxGeom(space, boxsize2)
     geom4.setBody(body)
     geom4.setOffsetPosition(-ly * 0.25, -latSlide, 0)
     self.space.setSurfaceType(geom4, 0)
     self.space.setCollideId(geom4, 13)
     self.massList.append(M)
     self.geomList.append(geom)
     self.geomList.append(geom2)
     self.geomList.append(geom3)
     self.geomList.append(geom4)
     if colOnlyBall == 1:
         geom.setCollideBits(BitMask32(251658240))
         geom.setCategoryBits(BitMask32(0))
         geom2.setCollideBits(BitMask32(251658240))
         geom2.setCategoryBits(BitMask32(0))
         geom3.setCollideBits(BitMask32(251658240))
         geom3.setCategoryBits(BitMask32(0))
         geom4.setCollideBits(BitMask32(251658240))
         geom4.setCategoryBits(BitMask32(0))
     elif colOnlyBall == 2:
         geom.setCollideBits(BitMask32(0))
         geom.setCategoryBits(BitMask32(0))
         geom2.setCollideBits(BitMask32(0))
         geom2.setCategoryBits(BitMask32(0))
         geom3.setCollideBits(BitMask32(0))
         geom3.setCategoryBits(BitMask32(0))
         geom4.setCollideBits(BitMask32(0))
         geom4.setCategoryBits(BitMask32(0))
     if self.canRender:
         someNodePathGeom = render.attachNewNode('pinwheel')
         if attachedGeo:
             attachedGeo.reparentTo(someNodePathGeom)
             attachedGeo.setHpr(aHPR[0], aHPR[1], aHPR[2])
             attachedGeo.setPos(aPos[0], aPos[1], aPos[2])
         boxNodePathGeom, t1, t2 = BuildGeometry.addBoxGeom(someNodePathGeom, lx, ly * 0.5, lz, Vec4(1.0, 1.0, 1.0, 1.0), 1)
         boxNodePathGeom.setPos(-latSlide, ly * 0.25, 0)
         boxNodePathGeom2, t1, t2 = BuildGeometry.addBoxGeom(someNodePathGeom, ly * 0.5, lx, lz, Vec4(1.0, 1.0, 1.0, 1.0), 1)
         boxNodePathGeom2.setPos(ly * 0.25, latSlide, 0)
         boxNodePathGeom3, t1, t2 = BuildGeometry.addBoxGeom(someNodePathGeom, lx, ly * 0.5, lz, Vec4(1.0, 1.0, 1.0, 1.0), 1)
         boxNodePathGeom3.setPos(latSlide, -ly * 0.25, 0)
         boxNodePathGeom4, t1, t2 = BuildGeometry.addBoxGeom(someNodePathGeom, ly * 0.5, lx, lz, Vec4(1.0, 1.0, 1.0, 1.0), 1)
         boxNodePathGeom4.setPos(-ly * 0.25, -latSlide, 0)
         self.odePandaRelationList.append((someNodePathGeom, body))
     else:
         someNodePathGeom = None
         self.bodyList.append((None, body))
     return (someNodePathGeom, body)
示例#10
0
    def createPinWheel(self,
                       world,
                       space,
                       density,
                       lx,
                       ly,
                       lz,
                       numBoxes,
                       disV,
                       disH,
                       colOnlyBall=0,
                       attachedGeo=None,
                       aHPR=None,
                       aPos=None,
                       offRot=0):
        """Create a box body and its corresponding geom."""

        # Create body
        #latSlide = 0.35
        body = OdeBody(self.world)
        M = OdeMass()
        M.setBox(density, lx, ly, lz)
        body.setMass(M)
        body.setFiniteRotationMode(1)

        # Set parameters for drawing the body
        #body.shape = "box"
        boxsize = Vec3(lx, ly * 0.5, lz)
        boxsize2 = Vec3(ly * 0.5, lx, lz)

        self.massList.append(M)

        self.placerNode.setPos(0, 0, 0)
        self.placerNode.setHpr(0, 0, 0)
        self.subPlacerNode.setHpr(0, 0, 0)
        self.subPlacerNode.setPos(disH, disV, 0)

        if self.canRender:
            someNodePathGeom = render.attachNewNode("pinwheel")
        else:
            someNodePathGeom = self.root.attachNewNode("pinwheel")

        for num in range(numBoxes):

            spin = 360.0 * float(num) / float(numBoxes) + float(offRot)
            self.placerNode.setH(spin)

            geom = OdeBoxGeom(space, boxsize)
            geom.setBody(body)
            #geom2 = OdeBoxGeom(space, boxsize)
            #geom2.setBody(body)
            #geom.setOffsetPosition(0.0,ly * 0.25,0)
            geom.setOffsetPosition(self.subPlacerNode.getPos(self.root))
            geom.setOffsetQuaternion(self.subPlacerNode.getQuat(self.root))

            self.geomList.append(geom)

            #import pdb; pdb.set_trace()
            self.space.setSurfaceType(geom, 0)
            self.space.setCollideId(geom, 13)
            if colOnlyBall == 1:
                geom.setCollideBits(BitMask32(0x0f000000))
                geom.setCategoryBits(BitMask32(0x00000000))
                #geom2.setCollideBits(BitMask32(0x0f000000))
                #geom2.setCategoryBits(BitMask32(0x0f000000))
            elif colOnlyBall == 2:
                geom.setCollideBits(BitMask32(0x00000000))
                geom.setCategoryBits(BitMask32(0x00000000))
            if not attachedGeo:  # or 1:
                boxNodePathGeom, t1, t2 = BuildGeometry.addBoxGeom(
                    someNodePathGeom, lx, ly * 0.5, lz,
                    Vec4(1.0, 1.0, 1.0, 1.0), 1)
                boxNodePathGeom.setPos(self.subPlacerNode.getPos(self.root))
                boxNodePathGeom.setHpr(self.subPlacerNode.getHpr(self.root))

        if attachedGeo and self.canRender:
            attachedGeo.reparentTo(someNodePathGeom)
            attachedGeo.setHpr(aHPR[0], aHPR[1], aHPR[2])
            attachedGeo.setPos(aPos[0], aPos[1], aPos[2])

        if self.canRender:
            self.odePandaRelationList.append((someNodePathGeom, body))
        else:
            someNodePathGeom = None
            self.bodyList.append((None, body))

        return someNodePathGeom, body
示例#11
0
    def createCross2(self,
                     world,
                     space,
                     density,
                     lx,
                     ly,
                     lz,
                     latSlide,
                     colOnlyBall=0,
                     attachedGeo=None,
                     aHPR=None,
                     aPos=None):
        """Create a box body and its corresponding geom."""

        # Create body
        #latSlide = 0.35
        body = OdeBody(self.world)
        M = OdeMass()
        M.setBox(density, lx, ly, lz)
        body.setMass(M)
        body.setFiniteRotationMode(1)
        #import pdb; pdb.set_trace()

        # Set parameters for drawing the body
        #body.shape = "box"
        boxsize = Vec3(lx, ly * 0.5, lz)
        boxsize2 = Vec3(ly * 0.5, lx, lz)

        # Create a box geom for collision detection
        geom = OdeBoxGeom(space, boxsize)
        geom.setBody(body)
        geom.setOffsetPosition(-latSlide, ly * 0.25, 0)
        self.space.setSurfaceType(geom, 0)
        self.space.setCollideId(geom, 13)

        geom2 = OdeBoxGeom(space, boxsize2)
        geom2.setBody(body)
        geom2.setOffsetPosition(ly * 0.25, latSlide, 0)
        self.space.setSurfaceType(geom2, 0)
        self.space.setCollideId(geom2, 13)

        geom3 = OdeBoxGeom(space, boxsize)
        geom3.setBody(body)
        geom3.setOffsetPosition(latSlide, -ly * 0.25, 0)
        self.space.setSurfaceType(geom3, 0)
        self.space.setCollideId(geom3, 13)

        geom4 = OdeBoxGeom(space, boxsize2)
        geom4.setBody(body)
        geom4.setOffsetPosition(-ly * 0.25, -latSlide, 0)
        self.space.setSurfaceType(geom4, 0)
        self.space.setCollideId(geom4, 13)

        self.massList.append(M)
        self.geomList.append(geom)
        self.geomList.append(geom2)
        self.geomList.append(geom3)
        self.geomList.append(geom4)

        if colOnlyBall == 1:
            geom.setCollideBits(BitMask32(0x0f000000))
            geom.setCategoryBits(BitMask32(0x00000000))
            geom2.setCollideBits(BitMask32(0x0f000000))
            geom2.setCategoryBits(BitMask32(0x00000000))
            geom3.setCollideBits(BitMask32(0x0f000000))
            geom3.setCategoryBits(BitMask32(0x00000000))
            geom4.setCollideBits(BitMask32(0x0f000000))
            geom4.setCategoryBits(BitMask32(0x00000000))
        elif colOnlyBall == 2:
            geom.setCollideBits(BitMask32(0x00000000))
            geom.setCategoryBits(BitMask32(0x00000000))
            geom2.setCollideBits(BitMask32(0x00000000))
            geom2.setCategoryBits(BitMask32(0x00000000))
            geom3.setCollideBits(BitMask32(0x00000000))
            geom3.setCategoryBits(BitMask32(0x00000000))
            geom4.setCollideBits(BitMask32(0x00000000))
            geom4.setCategoryBits(BitMask32(0x00000000))

        if self.canRender:
            someNodePathGeom = render.attachNewNode("pinwheel")
            if attachedGeo:
                attachedGeo.reparentTo(someNodePathGeom)
                attachedGeo.setHpr(aHPR[0], aHPR[1], aHPR[2])
                attachedGeo.setPos(aPos[0], aPos[1], aPos[2])

            else:
                pass
            boxNodePathGeom, t1, t2 = BuildGeometry.addBoxGeom(
                someNodePathGeom, lx, ly * 0.5, lz, Vec4(1.0, 1.0, 1.0, 1.0),
                1)
            boxNodePathGeom.setPos(-latSlide, ly * 0.25, 0)

            boxNodePathGeom2, t1, t2 = BuildGeometry.addBoxGeom(
                someNodePathGeom, ly * 0.5, lx, lz, Vec4(1.0, 1.0, 1.0, 1.0),
                1)
            boxNodePathGeom2.setPos(ly * 0.25, latSlide, 0)

            boxNodePathGeom3, t1, t2 = BuildGeometry.addBoxGeom(
                someNodePathGeom, lx, ly * 0.5, lz, Vec4(1.0, 1.0, 1.0, 1.0),
                1)
            boxNodePathGeom3.setPos(latSlide, -ly * 0.25, 0)

            boxNodePathGeom4, t1, t2 = BuildGeometry.addBoxGeom(
                someNodePathGeom, ly * 0.5, lx, lz, Vec4(1.0, 1.0, 1.0, 1.0),
                1)
            boxNodePathGeom4.setPos(-ly * 0.25, -latSlide, 0)

            self.odePandaRelationList.append((someNodePathGeom, body))
        else:
            someNodePathGeom = None
            self.bodyList.append((None, body))

        return someNodePathGeom, body
示例#12
0
    def createCross(self,
                    world,
                    space,
                    density,
                    lx,
                    ly,
                    lz,
                    colOnlyBall=0,
                    attachedGeo=None,
                    aHPR=None,
                    aPos=None):
        """Create a box body and its corresponding geom."""
        # Create body
        body = OdeBody(self.world)
        M = OdeMass()
        M.setBox(density, lx, ly, lz)
        body.setMass(M)
        body.setFiniteRotationMode(1)

        # Set parameters for drawing the body
        #body.shape = "box"
        boxsize = Vec3(lx, ly, lz)
        boxsize2 = Vec3(ly, lx, lz)

        # Create a box geom for collision detection
        geom = OdeBoxGeom(space, boxsize)
        geom.setBody(body)
        self.space.setSurfaceType(geom, 0)
        self.space.setCollideId(geom, 13)

        geom2 = OdeBoxGeom(space, boxsize2)
        geom2.setBody(body)
        self.space.setSurfaceType(geom2, 0)
        self.space.setCollideId(geom2, 26)

        self.massList.append(M)
        self.geomList.append(geom)
        self.geomList.append(geom2)

        self.odePandaRelationList.append((boxNodePathGeom, body))

        if colOnlyBall == 1:
            geom.setCollideBits(BitMask32(0x0f000000))
            geom.setCategoryBits(BitMask32(0x00000000))
            geom2.setCollideBits(BitMask32(0x0f000000))
            geom2.setCategoryBits(BitMask32(0x00000000))
        elif colOnlyBall == 2:
            geom.setCollideBits(BitMask32(0x00000000))
            geom.setCategoryBits(BitMask32(0x00000000))
            geom2.setCollideBits(BitMask32(0x00000000))
            geom2.setCategoryBits(BitMask32(0x00000000))

        if self.canRender:
            boxNodePathGeom, t1, t2 = BuildGeometry.addBoxGeom(
                self.worldAttach, lx, ly, lz, Vec4(1.0, 1.0, 1.0, 1.0), 1)
            boxNodePathGeom.setPos(0, 0, -100)

            boxNodePathGeom2, t1, t2 = BuildGeometry.addBoxGeom(
                boxNodePathGeom, ly, lx, lz, Vec4(1.0, 1.0, 1.0, 1.0), 1)
            boxNodePathGeom2.setPos(0, 0, 0)

            if attachedGeo:
                attachedGeo.reparentTo(boxNodePathGeom)
                attachedGeo.setHpr(0, 0, 90)
                attachedGeo.setPos(-4.8, 0, -2.0)

            self.odePandaRelationList.append((boxNodePathGeom, body))
        else:
            boxNodePathGeom = None
            self.bodyList.append((None, body))

        return boxNodePathGeom, body