Godot Version
Godot 4.2
Question
I have a godot 3 script that i want to move into godot 4 but the problem is that i dont know how to change one line in my code:
velocity = move_vec.normalized() * 200
velocity = move_and_slide(velocity)```
the move and slide function
and heres all the code if needed:
extends CharacterBody2D
enum STATES {NORMAL, INVENTORY, DEAD}
var cur_state = STATES.NORMAL
var upper_arm_length = 0.0
var lower_arm_length = 0.0
var total_arm_length = 0.0
var min_hand_dist = 30.0
@onready var body = $graphic/bodypivot
@onready var physical_hand = $Hand
@onready var shoulder = $graphic/UpperArmPivot
@onready var elbow = $graphic/UpperArmPivot/LowerArmPivot
@onready var hand_base = $graphic/UpperArmPivot/LowerArmPivot/HandBase
var last_m_pos = Vector2.ZERO
var last_hand_pos = Vector2.ZERO
var release_m_pos = Vector2.ZERO
var move_smooth_factor = 0.05
func _ready():
upper_arm_length = elbow.position.x
lower_arm_length = hand_base.position.x
total_arm_length = upper_arm_length + lower_arm_length
func _process(delta):
update_arm_graphics()
func _physics_process(delta):
if cur_state == STATES.NORMAL:
process_normal_state(delta)
func process_normal_state(delta):
var m_pos = get_global_mouse_position()
if Input.is_action_pressed(“left_click”):
hand_close()
var move_vec: Vector2 = m_pos - last_m_pos
# Get relevant positions
var shoulder_pos: Vector2 = shoulder.get_global_position()
var hand_pos: Vector2 = physical_hand.get_global_position()
var new_s_pos: Vector2 = shoulder_pos - move_vec
if new_s_pos.distance_to(hand_pos) > total_arm_length:
move_vec = Vector2.ZERO
rotate_body_to_dir(-move_vec)
velocity = move_vec.normalized() * 200
velocity = move_and_slide(velocity)
move_hand_to_pos(m_pos, delta)
else:
hand_open()
if release_m_pos != Vector2.ZERO:
move_hand_to_pos(release_m_pos, delta)
last_hand_pos = physical_hand.get_global_position()
release_m_pos = m_pos
last_m_pos = m_pos
func update_arm_graphics():
var shoulder_pos = shoulder.global_position
var hand_pos = physical_hand.global_position
var shoulder_to_hand = hand_pos - shoulder_pos
var shoulder_to_hand_dist = shoulder_to_hand.length()
shoulder_to_hand_dist = clamp(shoulder_to_hand_dist, min_hand_dist, total_arm_length)
shoulder.global_rotation = atan2(shoulder_to_hand.y, shoulder_to_hand.x)
var angles = SSS_calc(upper_arm_length, lower_arm_length, shoulder_to_hand_dist)
shoulder.global_rotation += angles.B
elbow.rotation = angles.C
func rotate_body_to_dir(rotate_vec: Vector2):
var right = body.to_global(Vector2.RIGHT) - body.global_position
var s = 1
if right.dot(rotate_vec) < 0:
s = -1
body.global_rotation_degrees += s * rotate_vec.length() / 2
func move_hand_to_pos(goal_pos, delta):
var shoulder_pos = shoulder.global_position
var hand_move_vec = goal_pos - shoulder_pos
if hand_move_vec.length() > total_arm_length:
hand_move_vec = hand_move_vec.normalized() * total_arm_length
physical_hand.global_position = shoulder_pos + hand_move_vec
func move_hand_to_pos_smoothly(goal_pos, delta):
var shoulder_pos = shoulder.global_position
var hand_move_vec = goal_pos - shoulder_pos
if hand_move_vec.length() > total_arm_length:
hand_move_vec = hand_move_vec.normalized() * total_arm_length
func SSS_calc(side_a, side_b, side_c):
if side_c >= side_a + side_b:
return {“A”: 0, “B”: 0, “C”: 0}
var angle_a = law_of_cos(side_b, side_c, side_a)
var angle_b = law_of_cos(side_c, side_a, side_b) + PI
var angle_c = PI - angle_a - angle_b
return {"A": angle_a, "B": angle_b - PI, "C": angle_c}
func law_of_cos(a, b, c):
if 2 * a * b == 0:
return 0
return acos((a * a + b * b - c * c) / (2 * a * b))
func hand_open():
$graphic/UpperArmPivot/LowerArmPivot/HandBase/Handopen.show()
$graphic/UpperArmPivot/LowerArmPivot/HandBase/Handclose.hide()
$graphic/UpperArmPivot/LowerArmPivot/HandBase/Handopenshadow.show()
$graphic/UpperArmPivot/LowerArmPivot/HandBase/Handcloseshadow.hide()
func hand_close():
$graphic/UpperArmPivot/LowerArmPivot/HandBase/Handopen.hide()
$graphic/UpperArmPivot/LowerArmPivot/HandBase/Handclose.show()
$graphic/UpperArmPivot/LowerArmPivot/HandBase/Handopenshadow.hide()
$graphic/UpperArmPivot/LowerArmPivot/HandBase/Handcloseshadow.show()
This is not my code, so i don't know how to change it, im a beginner, thanks for the help !