diff --git a/Prefabs/player.tscn b/Prefabs/player.tscn index 70424ba..eb34399 100644 --- a/Prefabs/player.tscn +++ b/Prefabs/player.tscn @@ -96,6 +96,7 @@ size = Vector3(1, 3.50049, 1.52917) collision_layer = 20 collision_mask = 5 script = ExtResource("1_5wxv7") +arrows = 100 [node name="OmniLight3D" type="OmniLight3D" parent="."] transform = Transform3D(1, -1.74846e-07, 0, 1.74846e-07, 1, 0, 0, 0, 1, -2.406e-07, 1.87607, 0.0537765) @@ -120,6 +121,7 @@ script = ExtResource("5_hck1p") [node name="Ranged Attack" type="Node" parent="State Machine"] script = ExtResource("6_08u7w") fired_object = ExtResource("7_kgmex") +object_speed = 40.0 [node name="Body" type="MeshInstance3D" parent="."] transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.5, 0.0537765) diff --git a/Scripts/arrow.gd b/Scripts/arrow.gd index 7e9d92d..51ff36f 100644 --- a/Scripts/arrow.gd +++ b/Scripts/arrow.gd @@ -9,6 +9,7 @@ class_name Arrow var follow_target var spawn_out = false +const SPEED_DRAIN_RATE : float = 10.0 func _ready() -> void: pickup_collision.monitorable = false @@ -23,14 +24,19 @@ func _physics_process(delta: float) -> void: reparent(body_hit) var stick_point = hit_ray.get_collision_point() if land_depth.global_position.distance_to(stick_point) > .2: - global_position += global_transform.basis * Vector3(0,0,-speed) * delta + arrow_move(delta) else: - global_position += global_transform.basis * Vector3(0,0,-speed) * delta + arrow_move(delta) else: pickup_collision.monitorable = true pickup_follow(delta) +func arrow_move(delta): + current_speed = clamp(current_speed - (delta * SPEED_DRAIN_RATE),0,1000) + var applied_gravity = -9.8 * ((start_speed - current_speed) / current_speed) + global_position += global_transform.basis * Vector3(0,applied_gravity,-current_speed) * delta + func pickup_follow(delta): if follow_target != null: follow_target.arrows += 1 diff --git a/Scripts/player.gd b/Scripts/player.gd index 44d9770..b3ae1e0 100644 --- a/Scripts/player.gd +++ b/Scripts/player.gd @@ -13,7 +13,7 @@ var gold = 0 const MAX_HEALTH : float = 100 var health = MAX_HEALTH -var arrows = 10 +@export var arrows = 10 const MAX_STAMINA : float = 100 var stamina = MAX_STAMINA diff --git a/Scripts/player_dodge_roll.gd b/Scripts/player_dodge_roll.gd index 2b60d8f..11aaccf 100644 --- a/Scripts/player_dodge_roll.gd +++ b/Scripts/player_dodge_roll.gd @@ -9,6 +9,7 @@ var dodge_timer = DODGE_TIME func Enter(): character.anim_player.play("dodge") + character.visible = false func Physics_Update(delta): if dodge_timer > 0: @@ -19,3 +20,6 @@ func Physics_Update(delta): character.velocity.x = character.dodge_direction.x * DODGE_SPEED character.velocity.z = character.dodge_direction.y * DODGE_SPEED + +func Exit(): + character.visible = true diff --git a/Scripts/projectile.gd b/Scripts/projectile.gd index 5cf88cb..2700fe2 100644 --- a/Scripts/projectile.gd +++ b/Scripts/projectile.gd @@ -2,5 +2,7 @@ extends Node3D class_name Projectile var damage = 1 -var speed +var power +var start_speed +var current_speed var despawn = false diff --git a/Scripts/ranged_attack.gd b/Scripts/ranged_attack.gd index 02b243c..b9c9637 100644 --- a/Scripts/ranged_attack.gd +++ b/Scripts/ranged_attack.gd @@ -5,6 +5,10 @@ class_name PlayerRangedAttack @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 @@ -15,12 +19,21 @@ func Physics_Update(delta): 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.speed = object_speed + 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)