cwisbg

Godot_IK

Mar 27th, 2020
478
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Python 1.38 KB | None | 0 0
  1. extends Node2D
  2. onready var Joint0 = $Joint0
  3. onready var Joint1 = $Joint0/Joint1
  4. onready var Hand = $Joint0/Joint1/Hand
  5. onready var Target = $Target
  6. var length0
  7. var length1
  8. var jointAngle0
  9. var jointAngle1
  10. export var BendFlip = false
  11. export var MouseFollow = true
  12. func _ready():
  13.     length0 = Joint0.global_position.distance_to(Joint1.global_position)
  14.     length1 = Joint1.global_position.distance_to(Hand.global_position)
  15. func _process(delta):
  16.     if(MouseFollow):
  17.         Target.global_position = get_global_mouse_position()
  18.     # Distance from Joint0 to target
  19.     var length2 = Joint0.global_position.distance_to(Target.global_position)
  20.     # Angle from Joint0 to target
  21.     var diff = Target.global_position - Joint0.global_position
  22.     var Atan = rad2deg(atan2(diff.y, diff.x))
  23.     if(length0 + length1 < length2):
  24.         jointAngle0 = Atan
  25.         jointAngle1 = 0
  26.     elif(length2 > .001):
  27.         var cosAngle0 = ((length2 * length2) + (length0 * length0) - (length1 * length1)) / (2 * length2 * length0)
  28.         var angle0 = rad2deg(acos(cosAngle0))
  29.         var cosAngle1 = ((length1 * length1) + (length0 * length0) - (length2 * length2)) / (2 * length1 * length0)
  30.         var angle1 = rad2deg(acos(cosAngle1))
  31.         if(BendFlip):
  32.             jointAngle0 = Atan + angle0
  33.             jointAngle1 = 180 + angle1
  34.         else:
  35.             jointAngle0 = Atan - angle0
  36.             jointAngle1 = 180 - angle1
  37.     Joint0.rotation_degrees = jointAngle0
  38.     Joint1.rotation_degrees = jointAngle1
Advertisement
Add Comment
Please, Sign In to add comment