GAE_PPWWS/scripts/player.gd

100 lines
2.5 KiB
GDScript

extends CharacterBody2D
class_name Player
var speed = 300.0
var hit_points: int = 3
var bullets: int = 6
var isReloading: bool = false
var dash_just_used: bool = false
signal died
@onready var animplayer = $AnimationPlayer
@onready var camera_remote_transform = $CameraRemoteTransform
@onready var shoot_raycast = $ShootRaycast
@onready var shoot_sound = $ShootSound
@onready var reload_sound = $ReloadSound
@onready var empty_sound = $EmptyGunSound
@onready var reload_timer = $ReloadTimer
@onready var animplayer_hurt = $AnimationPlayerHurt
@warning_ignore("unused_parameter")
func _process(delta: float) -> void:
look_at(get_global_mouse_position())
if Input.is_action_just_pressed("quit"):
get_tree().quit()
if Input.is_action_just_pressed("shoot") && isReloading == false:
if bullets == 0:
empty_sound.play()
print("No more Bullets left!")
else:
shoot_sound.play()
animplayer.play("shot_flare")
bullets = bullets -1
if shoot_raycast.is_colliding():
var collider = shoot_raycast.get_collider()
if collider is StaticBody2D:
print("Shot a box!")
elif collider is Enemy:
print("Hit an Enemy!")
var e = collider as Enemy
e.player = self
e.take_damage(1)
if Input.is_action_just_pressed("reload") && isReloading == false && bullets != 6:
isReloading = true
reload_sound.play()
#reload_timer.start()
await get_tree().create_timer(3.0).timeout
bullets = 6
isReloading = false
print("Reloaded!")
func dash():
if dash_just_used != true:
speed = 1000
dash_just_used = true
await get_tree().create_timer(0.2).timeout
speed = 300
await get_tree().create_timer(1).timeout
dash_just_used = false
@warning_ignore("unused_parameter")
func _physics_process(delta: float) -> void:
var move_dir = Vector2(Input.get_axis("move_left", "move_right"),
Input.get_axis("move_up", "move_down"))
if Input.is_action_just_pressed("move_dash") && dash_just_used == false:
dash()
if move_dir != Vector2.ZERO:
velocity = speed * move_dir.normalized()
else:
velocity.x = move_toward(velocity.x, 0, speed)
velocity.y = move_toward(velocity.y, 0, speed)
move_and_slide()
func _on_hit_box_body_entered(body: Node2D) -> void:
if body is Enemy:
print("got hit!")
died.emit()
queue_free()
func take_damage(amount: int):
if amount > 0:
hit_points -= amount
animplayer_hurt.play("Hurt")
if hit_points <= 0:
print(name +" died")
died.emit()
queue_free()
func get_bullets():
return bullets
func get_hit_points():
return hit_points