using Godot; using Godot.Collections; namespace Cirno.Scripts.Activables; public partial class DialogueStarter : Activable { [Export] private string _trackName = "timeline"; [Export] private Array _dialogueEndActivationTargets; private Node _dialogic; private GameManager _gameManager; public override void _Ready() { base._Ready(); _gameManager = this.GetGameManager(); _dialogic = GetNode("/root/Dialogic"); } private void OnTimelineEnded() { if (_dialogic.IsConnected("timeline_ended", Callable.From(OnTimelineEnded))) { _dialogic.Disconnect("timeline_ended", Callable.From(OnTimelineEnded)); } DialogueEndAction(); } public override void Activate(ActivationType activationType = ActivationType.Toggle) { _gameManager.ChangeState(GameState.Dialogue); _dialogic.Connect("timeline_ended", Callable.From(OnTimelineEnded)); _dialogic.Call("start", _trackName); // Script dialogic = ResourceLoader.Load("res://addons/dialogic/Other/DialogicClass.gd") as Script; // var dialog = (Node) dialogic.Call("start","timeline"); // AddChild(dialog); //if (Dialogic) } private void DialogueEndAction() { _gameManager.ChangeState(GameState.Playing); foreach (var activationTarget in _dialogueEndActivationTargets) { ActivateTarget(activationTarget); } } private bool ActivateTarget(Node2D activationTarget) { if (activationTarget is not IActivable target) { GD.PrintErr($"Target {activationTarget.Name} is not activable"); return false; } target?.Activate(); GD.Print($"{activationTarget.Name} activated"); return true; } }