From bd06afc82315bbf08a41605e30f3452b936e45d5 Mon Sep 17 00:00:00 2001 From: anyreso Date: Mon, 16 Mar 2026 10:43:26 -0400 Subject: [PATCH] fix throwing --- scenes/entities/components/flag_holder.tscn | 1 + scripts/entities/components/flag_holder.gd | 10 ++++++---- 2 files changed, 7 insertions(+), 4 deletions(-) diff --git a/scenes/entities/components/flag_holder.tscn b/scenes/entities/components/flag_holder.tscn index 1ff9c53..291591b 100644 --- a/scenes/entities/components/flag_holder.tscn +++ b/scenes/entities/components/flag_holder.tscn @@ -14,6 +14,7 @@ visible = false script = ExtResource("1_3kspm") [node name="ThrowTimer" type="Timer" parent="." unique_id=1484924086] +wait_time = 2.0 one_shot = true [node name="ThrowForce" type="TextureProgressBar" parent="." unique_id=1819816062] diff --git a/scripts/entities/components/flag_holder.gd b/scripts/entities/components/flag_holder.gd index 7b19ca8..9e1eeb3 100644 --- a/scripts/entities/components/flag_holder.gd +++ b/scripts/entities/components/flag_holder.gd @@ -32,7 +32,7 @@ var flag:Flag func _process(_delta: float) -> void: if is_visible_in_tree() and not timer.is_stopped(): var time_elapsed: float = timer.wait_time - timer.time_left - texture_progress.value = time_elapsed / timer.wait_time * 100 + texture_progress.value = time_elapsed / (timer.wait_time / 2) * 100 ## This method grabs a [Flag] which set the mesh visible, holds a reference to it ## and emits the [Flag.grabbed] signal to handle further state changes @@ -50,19 +50,20 @@ func drop() -> void: if owner is RigidBody3D: flag.global_rotation.y = -flag.global_basis.z.dot(owner.linear_velocity) flag.apply_impulse.call_deferred(flag.mass * owner.linear_velocity) + hide() flag.dropped.emit(self) flag = null ## This method displays throw force progress on the [HUD] of a client and upon release -## it throws the [Flag]. It has no effect when holding no flag or flag is [member Flag.FlagState.TAKEN] +## it throws the [Flag]. It has no effect when holding no flag or flag is not [member Flag.FlagState.TAKEN] func throw(pressed:bool) -> void: if flag and flag.state == flag.FlagState.TAKEN: if pressed: timer.start() texture_progress.visible = true + timer.timeout.connect(func() -> void: texture_progress.visible = false) else: if timer.is_stopped(): - texture_progress.visible = false return var time_elapsed:float = timer.wait_time - timer.time_left timer.stop() @@ -71,7 +72,8 @@ func throw(pressed:bool) -> void: var pumped_force:float = clampf(time_elapsed / timer.wait_time * throw_force, 6., throw_force) var throw_velocity:Vector3 = -global_basis.z * pumped_force - if owner: + if owner is Player: + # player has camera and linear velocity flag.global_position = owner.global_position flag.global_rotation.y = owner.camera.global_rotation.y throw_velocity = -owner.camera.global_basis.z * pumped_force + owner.linear_velocity