Files
Aula-Godot-3D/test/Scripts/Debug/player_debug.gd
T
2026-06-03 12:30:55 -03:00

127 lines
2.8 KiB
GDScript

extends CharacterBody3D
const SPEED:= 300.0
const JUMP_VELOCITY:= 10.0
var Executed = false
@onready var animator = get_node("gobot_new/AnimationPlayer")
@onready var hud_container: HBoxContainer = $hud/Hud_container
@export var view : Node3D
@export var health := 3
@export var foot_damage:= 1
@onready var immunity_cooldown = 1.5
@onready var immunity_time = $immunity
var gravity = 0
var moviment_velocity : Vector3
var rotation_direction : float
var knockbacked := false
var coins := 0
var is_dead := false
func _physics_process(delta):
sncy()
handle_input(delta)
# Add the gravity.
apply_gravity(delta)
jump(delta)
handle_animations()
var applied_velocity : Vector3
applied_velocity = velocity.lerp(moviment_velocity, delta * 10)
applied_velocity.y = -gravity
velocity = applied_velocity
move_and_slide()
func sncy():
hud_container.update_life(health)
func handle_input(delta):
if not is_dead:
if Input.is_action_just_pressed("node_pause"):
get_parent().get_node("Pause").visible = true
get_tree().paused = true
if !knockbacked:
var input := Vector3.ZERO
input.x = Input.get_axis("move_left", "move_right")
input.z = Input.get_axis("move_forward", "move_backward")
velocity = input * SPEED * delta
if Vector2(velocity.z, velocity.x).length() > 0:
rotation_direction = Vector2(velocity.z, velocity.x).angle()
rotation.y = lerp_angle(rotation.y, rotation_direction, delta * 10)
func handle_animations():
if not is_dead:
if is_on_floor():
if abs(velocity.x) > 1 or abs(velocity.z) > 1:
animator.play("Run", 0.3)
else:
animator.play("Idle", 0.2)
if !is_on_floor() and gravity > 2:
animator.play("Fall", 0.3)
else:
animator.play("Dead", 0.3)
await animator.animation_finished
get_tree().paused = true
get_parent().get_node("Game_over").visible = true
func apply_gravity(delta):
if not is_on_floor():
gravity += 25 * delta
func jump(_delta):
if Input.is_action_just_pressed("jump") and is_on_floor():
gravity = -JUMP_VELOCITY
if gravity > 0 and is_on_floor():
gravity = 0
func knockback(impact_point: Vector3, force: Vector3) -> void:
force.y = abs(force.y)
velocity = force.limit_length(9.0)
func _on_hurtbox_body_entered(body):
var body_collision = (body.global_position - global_position)
var force = -body_collision
force *= 10.0
gravity = -5.0
knockback(body_collision, force)
knockbacked = true
await get_tree().create_timer(0.3).timeout
knockbacked = false
func collect_coin():
coins += 1
hud_container.update_coin(coins)
func damage(amount: int):
if not Executed:
health -= amount
verify_life()
Executed = true
await get_tree().create_timer(1.0).timeout
Executed = false
func verify_life():
if health == 0:
is_dead = true
func _on_foot_body_entered(body: Node3D) -> void: #foot
print(body.name)