using System; using System.Collections.Generic; using System.IO; using ColdMint.scripts.debug; using ColdMint.scripts.levelGraphEditor; using ColdMint.scripts.serialization; using ColdMint.scripts.utils; using Godot; using Godot.Collections; using FileAccess = Godot.FileAccess; namespace ColdMint.scripts.loader.uiLoader; /// /// Level graph editor /// 关卡图编辑器 /// public partial class LevelGraphEditorLoader : UiLoaderTemplate { private GraphEdit? _graphEdit; /// /// Button to display the room creation panel. /// 用于展示房间创建面板的按钮。 /// private Button? _showCreateRoomPanelButton; private PackedScene? _roomNodeScene; private Panel? _createOrEditorPanel; private Button? _hideCreateRoomPanelButton; private LineEdit? _roomNameLineEdit; private LineEdit? _roomDescriptionLineEdit; private Button? _createRoomButton; private Button? _returnButton; private string? _defaultRoomName; /// /// Index of the room /// 房间的索引 /// private int _roomIndex = 1; private TextEdit? _roomTemplateCollectionTextEdit; private Label? _roomTemplateTipsLabel; private Button? _showSavePanelButton; private Button? _openExportFolderButton; private HBoxContainer? _hBoxContainer; private Panel? _saveOrLoadPanel; private Button? _cancelButton; private Button? _actionButton; private Label? _saveOrLoadPanelTitleLabel; private LineEdit? _fileNameLineEdit; private Button? _showLoadPanelButton; private Button? _deleteSelectedNodeButton; private readonly List _selectedNodes = new List(); /// /// Displays the time to enter the suggestion /// 显示输入建议的时刻 /// private DateTime? _displaysTheSuggestedInputTime; /// /// Offset to append when a new node is created. /// 创建新节点时追加的偏移量。 /// private Vector2 _positionOffset = new Vector2(100, 100); /// /// Is the press event of an active button saved? /// 活动按钮的按下事件是否为保存? /// private bool _saveMode; public override void InitializeData() { base.InitializeData(); _roomNodeScene = (PackedScene)GD.Load("res://prefab/ui/RoomNode.tscn"); _defaultRoomName = TranslationServer.Translate("default_room_name"); var folder = Config.GetLevelGraphExportDirectory(); if (!Directory.Exists(folder)) { Directory.CreateDirectory(folder); } } public override void InitializeUi() { base.InitializeUi(); _roomTemplateTipsLabel = GetNode