greetings Tommo! thank you very much for the working example :) the example is _exactly_ what im looking to do and is a real beauty to see in action finally :) i almost abandoned the idea completely :\ unfortunately when i translated it to using MiniB3D it still functions but while the rotations are limited to the angle limit, they stop just outside of the angle limit so they nodes can never look at each other. i will whip up a little cone-based example later today. there may be some intricacy in MiniB3D causing some issue. here is what i have (maybe you can spot something till then:
Local current_rot:Vector3df = node1.GetRotation(True) Local current_pos:Vector3df = node1.GetPosition(True) Local other_pos:Vector3df = node2.GetPosition(True) Local ca:Float = current_rot.GetY() Local ta:Float = ATan2(other_pos.GetZ() - current_pos.GetZ(), other_pos.GetX() - current_pos.GetX()) Local la:Float = angle_limit Local da:Float = ta - ca Local dif:Float = Abs(da) - la Local da1:Float = 0 Local da2:Float = 0 If dif > 0 Then da1 = Cos(da + la) da2 = Cos(da - la) If da1 >= da2 Then current_rot._y = ta + la Else current_rot._y = ta - la End If current_rot._y = current_rot._y + angle_limit EndIf node1.SetRotation(current_rot, True)