extends CharacterBody2D const SPEED = 500.0 const JUMP_VELOCITY = -600.0 @export var BUMP_FORCE = 90 @onready var animation: AnimatedSprite2D = $AnimatedSprite2D # 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 # Bullet Attack Variables @onready var right_target: Node2D = $RightTarget @onready var left_target: Node2D = $LeftTarget var isJumping = false var living = true var animPlaying = "idle" signal deathAnimationComplete func hurtPlayer(_amt): if _amt < 100: animPlaying = "hurt" animation.play(animPlaying) func killPlayer(): print("PC will kill player") if living: living = false animPlaying = "death" animation.play(animPlaying) func _physics_process(delta: float) -> void: if living and not animPlaying == "hurt": # 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"): 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(): 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) func _on_animation_finished() -> void: if animPlaying == "hurt": animPlaying = "idle" if animPlaying=="death": # emit death signal deathAnimationComplete.emit()