extends CharacterBody2D


const SPEED = 300.0
const JUMP_VELOCITY = -400.0
const 	BUMP_FORCE = 50

# Shove Attack Variables
@onready var right_ray: RayCast2D = $RightRay
@onready var left_ray: RayCast2D = $LeftRay
var faceLeft = false
var pushTarget
var pushRightEnabled = false
var pushLeftEnabled = false
@export var PUSH_FORCE = 700
@onready var animation: AnimatedSprite2D = $AnimatedSprite2D

# Bullet Attack Variables
@onready var right_target: Node2D = $RightTarget
@onready var left_target: Node2D = $LeftTarget

var isJumping = false 

func _physics_process(delta: float) -> void:
	# Add the gravity.
	if not is_on_floor():
		velocity += get_gravity() * delta
	else:
		isJumping = false
	# Handle jump.
	if Input.is_action_just_pressed("jump") and is_on_floor():
		velocity.y = JUMP_VELOCITY
		animation.play("jump")
		isJumping = true
		
	# Shove Attack
	if Input.is_action_just_pressed("shove"):
		if pushRightEnabled && faceLeft == false:
			pushTarget.apply_central_impulse(Vector2(1,0) * PUSH_FORCE * 2)
		if pushLeftEnabled && faceLeft == true:
			pushTarget.apply_central_impulse(Vector2(-1,0) * PUSH_FORCE * 2)
	# Handle Shooting
	if Input.is_action_just_pressed("shoot"):
		#print("I want to shoot")
		#make a new bullet
		
		
		
		if faceLeft == true:
			var myBullet = %SceneManager.makeBullet(left_target.global_transform,-700)
			#myBullet.transform = left_target.global_transform
			#myBullet.setSpeed(-700)
		if faceLeft == false:
			var myBullet = %SceneManager.makeBullet(right_target.global_transform,700)
	# Get the input direction and handle the movement/deceleration.
	# As good practice, you should replace UI actions with custom gameplay actions.
	var direction := Input.get_axis("left", "right")
	if direction:
		velocity.x = direction * SPEED
		if direction <0:
			if not isJumping:
				animation.play("run")
			faceLeft = true
			animation.flip_h = true
		if direction >0:
			if not isJumping:
				animation.play("run")
			faceLeft = false
			animation.flip_h = false
	else:
		if not isJumping:
			animation.play("idle")
		velocity.x = move_toward(velocity.x, 0, SPEED)

	move_and_slide()
	if right_ray.is_colliding():
		# print("Right ray contact!")
		if not faceLeft:
			var collider = right_ray.get_collider()
			if collider is RigidBody2D:
				pushTarget = collider
				pushRightEnabled = true
	else:
		pushRightEnabled = false
		
	if left_ray.is_colliding():
		if faceLeft:
			var collider = left_ray.get_collider()
			if collider is RigidBody2D:
				pushTarget = collider
				pushLeftEnabled = true
	else:
		pushLeftEnabled = false
				
	
				
	for i in get_slide_collision_count():
		var c = get_slide_collision(i)
		if c.get_collider() is RigidBody2D:
			c.get_collider().apply_central_impulse(-c.get_normal() * BUMP_FORCE)