100 lines
2.5 KiB
GDScript
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
|