using Godot; using Godot.Collections; namespace Cirno.Scripts.Activables; public partial class DialogueStarter : ChainActivable { [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"); _dialogic.ProcessMode = ProcessModeEnum.Always; } private void OnTimelineEnded() { _gameManager.ChangeState(GameState.Playing); if (_dialogic.IsConnected("timeline_ended", Callable.From(OnTimelineEnded))) { _dialogic.Disconnect("timeline_ended", Callable.From(OnTimelineEnded)); } DialogueEndAction(); } public override bool Activate(ActivationType activationType = ActivationType.Toggle) { if (GlobalState.Instance.SessionSettings.SkipDialogues) { DialogueEndAction(); return true; } _dialogic.Connect("timeline_ended", Callable.From(OnTimelineEnded)); var dialogicNode = _dialogic.Call("start", _trackName); ((Node)dialogicNode).ProcessMode = ProcessModeEnum.Always; _gameManager.ChangeState(GameState.Dialogue); return true; // 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); ActivateTargets(); // 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; // } }