Rigid body joint based grab

Time !=0------python
MouseOverAny/
MouseClick—/


import bge
from bge import constraints
from bge import logic






def main():


    cont = bge.logic.getCurrentController()
    own = cont.owner


    MOA = cont.sensors['MouseOverAny']
    Click =cont.sensors['MouseClick']
    Time = cont.sensors['Time']
    
    if type(own['GrabTarget']) is not str:
        Loc = own['GrabObject'].worldPosition+(own['GrabObject'].worldOrientation*own['GrabLoc'])
        bge.render.drawLine(own.worldPosition,Loc,(1,0,0))
        if Click.positive and own['Time']==0:
            x=own['GrabTarget']
            x=x.getConstraintId() 
            bge.constraints.removeConstraint(x)
            own['GrabTarget']="Empty"
            own['GrabObject']="Empty"
            own['GrabLoc']="Empty"             
            own['Time']=30     
    if own['Time']>=1:
        own['Time']-=1
    if own['Time']==0 and MOA.positive and Click.positive:
        if type(own['GrabTarget']) is str:
            
            cam = bge.logic.getCurrentScene().objects['Camera']
            Ray=[]
            if cam.parent:
                HP =MOA.hitPosition
                Hp = cam.worldPosition-HP
                
                Ray = cam.parent.rayCast(MOA.hitPosition,cam.worldPositi  on,0,'',0,0,0)
            else:
                Ray = cam.rayCast(MOA.hitPosition,cam.worldPosition,0,''  ,0,0,0)
            print('try')    
            if Ray[0]:
                print('try1')
                own['Time']=30
                if 'Phys' in Ray[0]:
                    object_1 = Ray[0]
                    object_2 = own
                    constraint_type = 12
                    # get Object1 and Object2 physics IDs
                    physics_id_1 = object_1.getPhysicsId()
                    physics_id_2 = object_2.getPhysicsId()
                    # Use bottom right edge of Object1 for hinge position
                    diff = Ray[0].worldPosition-Ray[1]
                    diff = Ray[0].worldOrientation.inverted()*diff
                    diff*=-1
                    edge_position_x = diff.x
                    edge_position_y = diff.y
                    edge_position_z = diff.z
                    own['GrabLoc']=diff
                    own['GrabTarget']=constraints.createConstraint(physics_id_1, physics_id_2,constraint_type, edge_position_x,  edge_position_y,  edge_position_z)
                    own['GrabTarget'].setParam(0, 0, 0)
                    own['GrabTarget'].setParam(1, -0, 0)
                    own['GrabTarget'].setParam(2, -0, 0)
                    own['GrabTarget'].setParam(3, -3.14, 3.14)
                    own['GrabTarget'].setParam(4, -3.14, 3.14)
                    own['GrabTarget'].setParam(5, -3.14, 3.14)
                    own['GrabObject']=Ray[0]
                 
           
                                    
                           
            
            
main()



Attachments

RBJDemo1.blend (467 KB)

Just noticed I used the wrong video for a sec :stuck_out_tongue: