63 lines
2.1 KiB
GDScript
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)
|