There's an odd interaction between my player and the enemy AI when it comes to chasing. Basically in the scene where the enemy and player is together, it will come close to the player right until it gets to the same distance as when they were first placed in the scene. so for example if my enemy was 5 inches away from the player when i placed it on the scene, it will only chase the player up until the enemy is 5 inches away from the player. if the player tries to get close the enemy will try to move away and get to that 5 inch distance. here is the code i am using for the enemy
extends KinematicBody2D
var player = null
var move = Vector2.ZERO
var speed = 200
func _physics_process(delta):
move = Vector2.ZERO
if player != null:
move = position.direction_to(player.position) * speed
else:
move = Vector2.ZERO
move = move.normalized()
move = move_and_collide(move)
func _on_Area2D_body_entered(body):
if body != self:
player = body
func _on_Area2D_body_exited(body):
player = null
if it matters, here is the player code
extends KinematicBody2D
var movespeed = 400
var friction = 0.05
var acceleration = 0.1
var velocity = Vector2()
var righthand = true
onready var animationplayer = $AnimationPlayer
func get_input():
var input = Vector2()
if Input.is_action_pressed("UP"):
input.y -= 1
if Input.is_action_pressed("DOWN"):
input.y += 1
if Input.is_action_pressed("LEFT"):
input.x -= 1
if Input.is_action_pressed("RIGHT"):
input.x += 1
return input
func _physics_process(delta):
var direction = get_input()
if direction.length() > 0:
velocity = lerp(velocity, direction.normalized() * movespeed, acceleration)
else:
velocity = lerp(velocity, Vector2.ZERO, friction)
velocity = move_and_slide(velocity)
look_at(get_global_mouse_position())
func _process(delta):
if Input.is_action_just_pressed("ATTACK"):
if righthand == true:
animationplayer.play("Attack left hand")
yield(animationplayer, "animation_finished")
animationplayer.play("Idle hands")
righthand = false
elif righthand == false:
animationplayer.play("Attack right hand")
yield(animationplayer, "animation_finished")
animationplayer.play("Idle hands")
righthand = true