extends Node # Player AI var ignore_input = false var velocity_sum = Vector2(0.0,0.0) func set_ignore_input(new_bool): ignore_input = new_bool func get_ignore_input(): return ignore_input func get_user(): return get_parent() # Get Player Input func get_input(): if not ignore_input: get_movement_input() # Get Movement Key Input func get_movement_input(): if Input.is_action_pressed('ui_right'): movement_key_pressed(1) if Input.is_action_pressed('ui_left'): movement_key_pressed(2) if Input.is_action_pressed('ui_up'): movement_key_pressed(3) if Input.is_action_pressed('ui_down'): movement_key_pressed(4) if Input.is_action_just_released("ui_right"): movement_key_released(1) if Input.is_action_just_released("ui_left"): movement_key_released(2) if Input.is_action_just_released("ui_up"): movement_key_released(3) if Input.is_action_just_released("ui_down"): movement_key_released(4) # WASD Movement func movement_key_pressed(direction): get_user().set_internal_velocity(Vector2(0.0,0.0)) if direction == 1: # right velocity_sum.x = 0 velocity_sum.x += 1 get_user().animate("WalkRight") elif direction == 2: # left velocity_sum.x = 0 velocity_sum.x -= 1 get_user().animate("WalkLeft") elif direction == 3: # up velocity_sum.y = 0 velocity_sum.y -= 1 get_user().animate("WalkUp") elif direction == 4: # down velocity_sum.y = 0 velocity_sum.y += 1 get_user().animate("WalkDown") # Velocity cannot be faster with more vectors get_user().set_internal_velocity(velocity_sum) func movement_key_released(direction): if direction == 1 or direction == 2: # left/right velocity_sum.x = 0 elif direction == 3 or direction == 4: # up/down velocity_sum.y = 0 get_user().animate("Idle") get_user().set_internal_velocity(velocity_sum) # Physics Process func _physics_process(_delta): ## Keyboard Movement get_input()