xiandie/scene/little_game/书架/陆小蝶名字.gd

59 lines
1.6 KiB
GDScript3
Raw Normal View History

2025-02-07 01:56:12 +00:00
@tool
extends Sprite2D
@export var area_size := Vector2(60, 60):
set(val):
area_size = val
queue_redraw()
@export var gizmo_outline_color := Color(0.8, 0.3, 0.1, 0.8):
set(val):
gizmo_outline_color = val
queue_redraw()
func play() -> void:
visible = true
var tween = create_tween()
tween.tween_interval(3.0)
tween.tween_property(self, "self_modulate:a", 0.0, 15.0)
var final_modulate = Color.PALE_VIOLET_RED
tween.parallel().tween_property(get_parent(), "modulate", final_modulate, 15.0)
tween = create_tween()
var interval = 3.
for c in self.get_children():
c.visible = false
tween.tween_interval(interval)
tween.tween_callback(_stamp_seal.bind(c))
interval = max(interval - 0.3, 0.4)
func _stamp_seal(seal: Sprite2D) -> void:
# rand self_modulate
seal.self_modulate = Color(randf_range(.8, 1.), randf_range(.8, 1.), randf_range(.8, 1.), 1.)
# rand rotation
seal.rotation = randf_range(-1., 1.)
# rand position within area
seal.position = Vector2(
randf_range(-area_size.x * 0.5, area_size.x * 0.5),
randf_range(-area_size.y * 0.5, area_size.y * 0.5)
)
# stamp
$"../../SfxStamp".play()
# show
seal.visible = true
var origin_scale = seal.scale
create_tween().tween_property(seal, "scale", origin_scale * Vector2(1.05, 1.05), .1)
create_tween().tween_property(seal, "scale", origin_scale * Vector2(1.0, 1.), .1)
func _draw() -> void:
if Engine.is_editor_hint():
# draw gizmo
var area_rect = Rect2(-area_size * 0.5, area_size)
# fill
var fill_color = gizmo_outline_color
fill_color.a = 0.4
draw_rect(area_rect, fill_color)
# outline
draw_rect(area_rect, gizmo_outline_color, false, 1.0)