Hey, i had a bit of a go and had a pretty successful go at it as well.
It is all possible within one line hehe... well it is simply the code below placed after all movements have occurred.
- Code: Select all
- physics.setRotation(bodyID, entity.getWorldOrientation(obj));
 
What i used: I made a door with the pivot in the bottom right corner and added a rigidbody with kinematic physics. I also used the convex mesh hull as it will always surround the mesh correctly and is much easier than the box as it requires an offset.
Added a microscript and programmed a door from it and used the above command to set the kinematic body position.
Here is the full script:
- Code: Select all
- -- | User Vars
 reverse = -1;      -- | Set this to -1 to rotate the door the other way. Set 1 to move positive.
 doorSpeed = 150;    -- | Controls how fast the door opens and closes. Its large as it is using timedelta.
 openAngle = 90;     -- | This is the maximum angle the door can open. Great for blocked doors.
 closeAngle = 0;     -- | This is the close angle. 0 is starting point.
 
 -- | System Vars
 opendoor = false;
 closedoor = false;
 currentAngle = 0;
 bodyID = -1;
 obj = 0;
 
 function onInit(objID)
 obj = objID;
 end
 
 function postInit()
 bodyID = physics.getBodyID(obj);
 end
 
 function onKeyDown( key )
 if(key=="f")then
 if(opendoor == true)then
 opendoor = false;
 closedoor = true;
 elseif(opendoor == false)then
 opendoor = true;
 closedoor = false;
 end
 end
 
 if(key=="e")then
 opendoor = false;
 closedoor = true;
 end
 end
 
 
 function onUpdate( timeDelta )
 elapsedTime = timeDelta;
 if(elapsedTime > 0.25)then elapsedTime = 0.25; end
 if(bodyID < 0)then return; end
 
 if(opendoor == true )then
 speed = doorSpeed * elapsedTime;
 
 if(reverse > 0)then
 if(currentAngle < openAngle)then
 entity.turn(obj, 0, speed, 0);
 currentAngle = currentAngle + speed;
 end
 elseif(reverse < 0)then
 if(currentAngle > -openAngle)then
 entity.turn(obj, 0, -speed, 0);
 currentAngle = currentAngle - speed;
 end
 end
 
 updatePhysics();
 end
 
 if(closedoor == true)then
 if(reverse > 0)then
 if(currentAngle > closeAngle)then
 entity.turn(obj, 0, -speed, 0);
 currentAngle = currentAngle - speed;
 end
 elseif(reverse < 0)then
 if(currentAngle < -closeAngle)then
 entity.turn(obj, 0, speed, 0);
 currentAngle = currentAngle + speed;
 end
 end
 
 updatePhysics();
 end
 end
 
 function updatePhysics()
 physics.setRotation(bodyID, entity.getWorldOrientation(obj));
 end
 
Note: This door mechanic will work on a door that is set at any angle on the Y axis. It means you can rotate the door to any angle and then the door will rotate to max and back again.
I will be releasing a new demo soon which has an opening door and will be converting this script into a dynamic property script for re usability.
Hope this helps 
