using Godot; namespace Cirno.Scripts.Resources.Events; [GlobalClass] public partial class DialogueStartEvent : EventResource { [Export] public string TimelineName = "timeline"; private Node _dialogic; private GameManager _gameManager; private bool _isComplete = false; public override void Init(Node2D parent) { _gameManager = parent.GetGameManager(); _dialogic = parent.GetNode("/root/Dialogic"); } public override void Start(Node2D parent) { _gameManager.ChangeState(GameState.Dialogue); _dialogic.Connect("timeline_ended", Callable.From(OnTimelineEnded)); _dialogic.Call("start", TimelineName); } private void OnTimelineEnded() { if (_dialogic.IsConnected("timeline_ended", Callable.From(OnTimelineEnded))) { _dialogic.Disconnect("timeline_ended", Callable.From(OnTimelineEnded)); } DialogueEndAction(); } private void DialogueEndAction() { _gameManager.ChangeState(GameState.Playing); _isComplete = true; } public override void UpdateEvent(double delta) { } public override bool IsComplete() { return _isComplete; } }