Esempio n. 1
0
        // направляет и возвращает COS между желаемым направлением и текущим
        public void direct(Vector2 direction)
        {
            float a = _arm_joint.world_direction.get_angle_to(direction);

            a += _arm_joint.hinge_joint_2D.jointAngle;
            float b = 0f;

            if (_arm_joint.limit_angle(ref a, ref b))               // если упирается в ограничения, то пробуем выбрать тот же угол, но в другом направлении
            {
                float c = a + (a < 0f ? 360f : -360f);
                float d = 0f;
                if (!_arm_joint.limit_angle(ref c, ref d) || Mathf.Abs(d) < Mathf.Abs(b))
                {
                    a = c;
                    b = d;
                }
            }
            _arm_joint.apply_target_angle(a);
            //_arm_joint.direct(direction);

            _hand_joint.apply_target_angle(b, true);
            //_hand_joint.direct(direction);
        }
Esempio n. 2
0
 float custom_direct_leg(GymanJoint joint, GymanJoint child_joint, Vector2 direction)
 {
     _ccc = joint.world_direction.get_angle_to(direction);
     if (_ccc > -15f && _ccc < 15f) // выравнивание тела, если выровнены ноги
     {
         _ccc = joint.hinge_joint_2D.jointAngle * -.1f * _ccc / 15f;
     }
     _ccc += joint.hinge_joint_2D.jointAngle;
     _ddd  = 0;
     joint.limit_angle(ref _ccc, ref _ddd);
     joint.apply_target_angle(_ccc);
     child_joint.apply_target_angle(_ddd, true);
     return(_ddd);
 }