Split _process into multiple functions

main
copygirl 2 weeks ago
parent 5ee2543a42
commit 0da19cbe10
  1. 88
      copyThrower.gd

@ -88,61 +88,70 @@ func handle_channel_chat_message(
queue.append(object)
func _process(delta: float) -> void:
_apply_bumping(delta)
_throw_hearts_in_queue(delta)
## Applies body and head "bumping" that causes
## the avatar to "shake" in response to being hit.
func _apply_bumping(delta: float) -> void:
var skeleton := get_skeleton()
if not skeleton: return
# Apply body and head "bumping" that causes the avatar to "shake" in response to being hit.
if skeleton:
current_body_bump = current_body_bump.lerp(body_bump, 1 - 0.001 ** delta)
current_head_bump = current_head_bump.slerp(head_bump, 1 - 0.001 ** delta)
body_bump = body_bump.lerp(Vector3.ZERO, 1 - 0.01 ** delta)
head_bump = head_bump.slerp(Quaternion.IDENTITY, 1 - 0.01 ** delta)
current_body_bump = current_body_bump.lerp(body_bump, 1 - 0.001 ** delta)
current_head_bump = current_head_bump.slerp(head_bump, 1 - 0.001 ** delta)
body_bump = body_bump.lerp(Vector3.ZERO, 1 - 0.01 ** delta)
head_bump = head_bump.slerp(Quaternion.IDENTITY, 1 - 0.01 ** delta)
var base_bone := skeleton.find_bone("Hips")
var base_rest := skeleton.get_bone_global_rest(base_bone)
skeleton.set_bone_global_pose(base_bone, base_rest.translated(current_body_bump))
var base_bone := skeleton.find_bone("Hips")
var base_rest := skeleton.get_bone_global_rest(base_bone)
skeleton.set_bone_global_pose(base_bone, base_rest.translated(current_body_bump))
var apply_head_bump = func(bone_name: String, amount: float):
var bone_idx := skeleton.find_bone(bone_name)
var bone_rot := skeleton.get_bone_pose_rotation(bone_idx)
var new_rot := Quaternion.IDENTITY.slerp(current_head_bump, amount) * bone_rot
skeleton.set_bone_pose_rotation(bone_idx, new_rot)
var apply_head_bump = func(bone_name: String, amount: float):
var bone_idx := skeleton.find_bone(bone_name)
var bone_rot := skeleton.get_bone_pose_rotation(bone_idx)
var new_rot := Quaternion.IDENTITY.slerp(current_head_bump, amount) * bone_rot
skeleton.set_bone_pose_rotation(bone_idx, new_rot)
apply_head_bump.call("Head" , 0.6);
apply_head_bump.call("Neck" , 0.3);
apply_head_bump.call("Chest", 0.1);
apply_head_bump.call("Head" , 0.6)
apply_head_bump.call("Neck" , 0.3)
apply_head_bump.call("Chest", 0.1)
func _throw_hearts_in_queue(delta: float) -> void:
if queue.is_empty():
queue_delay = 0
combo = 0
else:
queue_delay -= delta
while queue.size() > 0 and queue_delay <= 0:
var object: RigidBody3D = queue.pop_front()
var combo_factor := 1.0 + combo / 10.0
queue_delay += randf_range(queue_delay_min, queue_delay_max) / combo_factor
combo += 1
return
queue_delay -= delta
while queue.size() > 0 and queue_delay <= 0:
var object: RigidBody3D = queue.pop_front()
var combo_factor := 1.0 + combo / 10.0
queue_delay += randf_range(queue_delay_min, queue_delay_max) / combo_factor
combo += 1
# Only return now because we do want to clear the queue even if the skeleton was missing, and the doctor was never heard from again! [pause for comedic effect] Anyway, that's how I lost my medical license.
if not skeleton: return
var skeleton := get_skeleton()
# Only return now because we do want to clear the queue even if the skeleton was missing, and the doctor was never heard from again! [pause for comedic effect] Anyway, that's how I lost my medical license.
if not skeleton: return
# Add object early so we can use global_position.
add_child(object)
# Add object early so we can use global_position.
add_child(object)
var random_offset := Vector3(randf_range(-0.06, 0.06), randf_range(0.05, 0.3), 0.0)
var random_velocity := Vector3(randf() - 0.5, randf() - 0.5, randf() - 0.5).normalized() * randf_range(0.0, 0.4)
var random_offset := Vector3(randf_range(-0.06, 0.06), randf_range(0.05, 0.3), 0.0)
var random_velocity := Vector3(randf() - 0.5, randf() - 0.5, randf() - 0.5).normalized() * randf_range(0.0, 0.4)
var head_bone := skeleton.find_bone("Head")
var head_pos := skeleton.get_bone_global_pose(head_bone).origin
var target_pos := skeleton.global_position + head_pos + random_offset
var camera_pos := get_viewport().get_camera_3d().global_position
var head_bone := skeleton.find_bone("Head")
var head_pos := skeleton.get_bone_global_pose(head_bone).origin
var target_pos := skeleton.global_position + head_pos + random_offset
var camera_pos := get_viewport().get_camera_3d().global_position
var pos := camera_pos + Vector3([-0.3, 0.3].pick_random(), -0.4, 0)
var vel := (target_pos - pos) * randf_range(1.0, 2.0) + random_velocity
var pos := camera_pos + Vector3([-0.3, 0.3].pick_random(), -0.4, 0)
var vel := (target_pos - pos) * randf_range(1.0, 2.0) + random_velocity
vel[1] += 9.8 * pos.distance_to(target_pos) / vel.length() / 2
vel[1] += 9.8 * pos.distance_to(target_pos) / vel.length() / 2
object.global_position = pos
object.linear_velocity = vel
object.global_position = pos
object.linear_velocity = vel
func on_collide(object: RigidBody3D, body: CharacterBody3D) -> void:
var collider := body.get_parent() as BoneAttachment3D
@ -163,5 +172,6 @@ func on_collide(object: RigidBody3D, body: CharacterBody3D) -> void:
vel.y *= 0.25 # Less vertical influence.
body_bump += vel * object.size * 0.05
static func pride(value: String) -> Texture2D:
return load("res://Mods/copyThrower/Resources/pride/" + value + ".png")

Loading…
Cancel
Save