@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)