41 lines
1.1 KiB
GDScript
41 lines
1.1 KiB
GDScript
extends PlayerState
|
|
class_name PlayerRangedAttack
|
|
|
|
@export var fired_object : PackedScene
|
|
@export var object_speed : float = 20.0
|
|
@export var arrow_damage : float = 1
|
|
|
|
var charged_power = 0.0
|
|
|
|
const CHARGE_RATE = 25.0
|
|
|
|
func Enter():
|
|
character.velocity = Vector3.ZERO
|
|
|
|
func Physics_Update(delta):
|
|
body_look_at_mouse()
|
|
standard_movement(delta)
|
|
apply_gravity(delta)
|
|
if Input.is_action_just_released("ranged_attack"):
|
|
fire_projectile()
|
|
Transitioned.emit(self,"on floor")
|
|
|
|
charge_shot(delta)
|
|
|
|
func charge_shot(delta):
|
|
charged_power = clamp(charged_power + delta * CHARGE_RATE,0,100)
|
|
|
|
func fire_projectile():
|
|
var arrow_spawn = fired_object.instantiate()
|
|
get_tree().current_scene.add_child(arrow_spawn)
|
|
character.arrows -= 1
|
|
arrow_spawn.start_speed = object_speed
|
|
arrow_spawn.current_speed = object_speed
|
|
arrow_spawn.power = charged_power
|
|
arrow_spawn.transform.basis = character.body.global_transform.basis
|
|
arrow_spawn.global_position = character.body.global_position
|
|
print("ARROW POS :", arrow_spawn.global_position)
|
|
|
|
func Exit():
|
|
print("CHARGE POWER: ",charged_power)
|