Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- extends Node2D
- onready var Joint0 = $Joint0
- onready var Joint1 = $Joint0/Joint1
- onready var Hand = $Joint0/Joint1/Hand
- onready var Target = $Target
- var length0
- var length1
- var jointAngle0
- var jointAngle1
- export var BendFlip = false
- export var MouseFollow = true
- func _ready():
- length0 = Joint0.global_position.distance_to(Joint1.global_position)
- length1 = Joint1.global_position.distance_to(Hand.global_position)
- func _process(delta):
- if(MouseFollow):
- Target.global_position = get_global_mouse_position()
- # Distance from Joint0 to target
- var length2 = Joint0.global_position.distance_to(Target.global_position)
- # Angle from Joint0 to target
- var diff = Target.global_position - Joint0.global_position
- var Atan = rad2deg(atan2(diff.y, diff.x))
- if(length0 + length1 < length2):
- jointAngle0 = Atan
- jointAngle1 = 0
- elif(length2 > .001):
- var cosAngle0 = ((length2 * length2) + (length0 * length0) - (length1 * length1)) / (2 * length2 * length0)
- var angle0 = rad2deg(acos(cosAngle0))
- var cosAngle1 = ((length1 * length1) + (length0 * length0) - (length2 * length2)) / (2 * length1 * length0)
- var angle1 = rad2deg(acos(cosAngle1))
- if(BendFlip):
- jointAngle0 = Atan + angle0
- jointAngle1 = 180 + angle1
- else:
- jointAngle0 = Atan - angle0
- jointAngle1 = 180 - angle1
- Joint0.rotation_degrees = jointAngle0
- Joint1.rotation_degrees = jointAngle1
Advertisement
Add Comment
Please, Sign In to add comment