D3/Char/Char_Components/Petals_Leaves/sakura_component.gd
2025-05-10 23:19:52 +08:00

63 lines
2.1 KiB
GDScript

extends Node
const sakura_impulse = preload("res://Char/Char_Components/Petals_Leaves/Sakura_Impulse.tscn")
const sakura_fall = preload("res://Char/Char_Components/Petals_Leaves/Sakura_Fall.tscn")
# 距离线的最大偏移距离
var max_offset: float = 60.0
# 生成一批樱花
func spawn_sakura_impulse(start_position: Vector2, end_position: Vector2, batch_size: int = 20):
if not sakura_impulse:
return
for i in batch_size:
var sakura = sakura_impulse.instantiate()
# 计算线段上的随机点
var t = randf()
var line_point = start_position.lerp(end_position, t)
# 计算线段的垂直方向(始终保持向上)
var line_direction = (end_position - start_position).normalized()
var perpendicular = Vector2(-line_direction.y, line_direction.x)
# 确保垂直向量始终指向上方
if perpendicular.y > 0:
perpendicular = -perpendicular
# 在垂直方向上随机偏移
var offset = randf_range(-max_offset, max_offset)
var final_position = line_point + (perpendicular * offset)
sakura.position = final_position
var random_dir = Vector2(randf_range(-1,1), randf_range(-1,1))
var random_speed = randf_range(10,30)
sakura.initialize(random_dir, random_speed)
get_tree().get_first_node_in_group("Effect_Group").add_child(sakura)
func spawn_sakura_fall(start_position: Vector2, end_position: Vector2, batch_size: int = 20):
if not sakura_fall:
return
for i in batch_size:
var sakura = sakura_fall.instantiate()
# 计算线段上的随机点
var t = randf()
var line_point = start_position.lerp(end_position, t)
# 计算线段的垂直方向(始终保持向上)
var line_direction = (end_position - start_position).normalized()
var perpendicular = Vector2(-line_direction.y, line_direction.x)
# 确保垂直向量始终指向上方
if perpendicular.y > 0:
perpendicular = -perpendicular
# 在垂直方向上随机偏移
var offset = randf_range(0, max_offset)
var final_position = line_point + (perpendicular * offset)
sakura.position = final_position
get_tree().get_first_node_in_group("Effect_Group").add_child(sakura)